]> git.sesse.net Git - vlc/blob - bootstrap
* ./bootstrap: automake 1.7 is OK to bootstrap vlc.
[vlc] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for vlc, the VideoLAN Client
4 ##  $Id: bootstrap,v 1.23 2002/11/04 18:27:30 sam Exp $
5 ##
6 ##  Authors: Samuel Hocevar <sam@zoy.org>
7
8 ###
9 ###  get a sane environment
10 ###
11 LANG=C
12 export LANG
13
14 ###
15 ###  argument check
16 ###
17 do_po=no
18 while test $# -gt 0; do
19   case "$1" in
20     --update-po)
21       do_po=yes
22       ;;
23     *)
24       echo "unknown option $1"
25       ;;
26   esac
27   shift
28 done
29
30 ##
31 ## Check that our tools don't suck
32 ##
33 SEDSUCKS=no
34 if test ! 20000 -eq `perl -e 'printf "%s\n","a"x20000' | sed -e 's/.//' 2>/dev/null | wc -c`
35 then
36   SEDSUCKS=yes
37 fi
38
39 PERLSUCKS=no
40 AUTOMAKESUCKS=no
41
42 ##
43 ## Generate the modules makefile, by parsing modules/**/Modules.am
44 ##
45
46 printf "generating Modules.am and configure.ac"
47
48 echo > Modules.am
49 echo > configure.ac
50
51 ALL_FLAGS="`sed -n -e '/^[^=A-Z]*[A-Z]*FLAGS_[^=]*=/s/[^=A-Z]*\([A-Z]*FLAGS_[^=]*=\).*/\1/p' < configure.ac.in | sort | uniq`"
52
53 cat >> configure.ac << EOF
54 dnl ################################################################
55 dnl # Do not edit this file, it was generated from configure.ac.in #
56 dnl ################################################################
57
58 EOF
59 sed -n -e '/dnl do not touch this line/q;p' < configure.ac.in >> configure.ac
60
61 modules=""
62 for mf in `sed -ne 's@[^a-z]*\([^ ]*\)am.*@modules/\1am@p' < modules/Makefile.am`
63 do
64   printf "."
65   dir=`echo ${mf} | sed -e 's@\(.*\)/.*@\1@'`
66   topdir=`echo ${dir} | cut -f2 -d/`
67   sym=`echo ${dir} | sed -e 'y@/@_@'`
68   cat >> Modules.am << EOF
69 # Directory ${dir}
70
71 include ${dir}/Modules.am
72
73 EOF
74   sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf} | while read mod
75   do
76     LINKER="LINK"
77     if echo "$ALL_FLAGS" | grep '^CPPFLAGS_'${mod}'=$' >/dev/null 2>&1; then
78         echo "AC_SUBST(CPPFLAGS_${mod})" >> configure.ac; fi
79     if echo "$ALL_FLAGS" | grep '^CFLAGS_'${mod}'=$' >/dev/null 2>&1; then
80         echo "AC_SUBST(CFLAGS_${mod})" >> configure.ac; fi
81     if echo "$ALL_FLAGS" | grep '^CXXFLAGS_'${mod}'=$' >/dev/null 2>&1; then
82         LINKER="CXXLINK"
83         echo "AC_SUBST(CXXFLAGS_${mod})" >> configure.ac; fi
84     if echo "$ALL_FLAGS" | grep '^OBJCFLAGS_'${mod}'=$' >/dev/null 2>&1; then
85         LINKER="OBJCLINK"
86         echo "AC_SUBST(OBJCFLAGS_${mod})" >> configure.ac; fi
87     if echo "$ALL_FLAGS" | grep '^LDFLAGS_'${mod}'=$' >/dev/null 2>&1; then
88         echo "AC_SUBST(LDFLAGS_${mod})" >> configure.ac; fi
89     if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then
90         PRIVATE='#'; else
91         PRIVATE=''; fi
92     if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then
93         NODIST=''; else
94         NODIST='#'; fi
95     cat >> configure.ac << EOF
96 AM_CONDITIONAL(${mod}_plugin, test x\$${mod}_plugin = xyes)
97 AM_CONDITIONAL(${mod}_builtin, test x\$${mod}_builtin = xyes)
98 EOF
99 # Generation of Modules.am
100 # ~~~~~~~~~~~~~~~~~~~~~~~~
101 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
102 #   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
103 #   the resulting file size.
104 # - *_CFLAGS, *_CXXFLAGS etc. include *_CPPFLAGS because per-object CPPFLAGS
105 #   does not seem to work properly with any automake version I tested.
106     cat >> Modules.am << EOF
107 # The ${mod} plugin
108
109 if ${mod}_plugin
110 if UNTRUE
111 L_${mod}_p = ${dir}/lib${mod}_plugin.a
112 endif
113 D_${mod}_p = ${dir}/lib${mod}_plugin\$(LIBEXT)
114 ${NODIST}B_${mod}_p = \$(nodist_SOURCES_${mod})
115 endif
116 if ${mod}_builtin
117 L_${mod}_b = ${dir}/lib${mod}.a
118 F_${mod}_b = \$(LDFLAGS_${mod})
119 if BUILD_MOZILLA
120 L_${mod}_pic = ${dir}/lib${mod}_pic.a
121 endif
122 ${NODIST}B_${mod}_b = \$(nodist_SOURCES_${mod})
123 endif
124
125 L_builtin += \$(L_${mod}_b)
126 L_builtin_pic += \$(L_${mod}_pic)
127 LDFLAGS_builtin += \$(F_${mod}_b)
128 ${PRIVATE}BUILT_SOURCES += \$(B_${mod}_p) \$(B_${mod}_b)
129 PLUGIN_FILES += \$(D_${mod}_p)
130
131 ${PRIVATE}${sym}_lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
132 ${NODIST}${PRIVATE}nodist_${sym}_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
133 ${sym}_lib${mod}_plugin_a_CPPFLAGS = \$(CPPFLAGS_plugin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
134 ${sym}_lib${mod}_plugin_a_CFLAGS = \$(CFLAGS_plugin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
135 ${sym}_lib${mod}_plugin_a_CXXFLAGS = \$(CXXFLAGS_plugin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
136 ${sym}_lib${mod}_plugin_a_OBJCFLAGS = \$(OBJCFLAGS_plugin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_plugin_a_CPPFLAGS)
137
138 ${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
139 ${NODIST}nodist_${sym}_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
140 ${sym}_lib${mod}_pic_a_CPPFLAGS = \$(CPPFLAGS_builtin_pic) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
141 ${sym}_lib${mod}_pic_a_CFLAGS = \$(CFLAGS_builtin_pic) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
142 ${sym}_lib${mod}_pic_a_CXXFLAGS = \$(CXXFLAGS_builtin_pic) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
143 ${sym}_lib${mod}_pic_a_OBJCFLAGS = \$(OBJCFLAGS_builtin_pic) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_pic_a_CPPFLAGS)
144
145 ${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
146 ${NODIST}nodist_${sym}_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
147 ${sym}_lib${mod}_a_CPPFLAGS = \$(CPPFLAGS_builtin) \$(CPPFLAGS_${mod}) -DMODULE_NAME=${mod} -DMODULE_NAME_IS_${mod}
148 ${sym}_lib${mod}_a_CFLAGS = \$(CFLAGS_builtin) \$(CFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
149 ${sym}_lib${mod}_a_CXXFLAGS = \$(CXXFLAGS_builtin) \$(CXXFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
150 ${sym}_lib${mod}_a_OBJCFLAGS = \$(OBJCFLAGS_builtin) \$(OBJCFLAGS_${mod}) \$(${sym}_lib${mod}_a_CPPFLAGS)
151
152 libvlc_LIBRARIES += \$(L_${mod}_b) \$(L_${mod}_pic)
153 lib${mod}_DATA = \$(D_${mod}_p)
154
155 lib${mod}dir = \$(libdir)/vlc/${topdir}
156 ${PRIVATE}noinst_LIBRARIES += \$(L_${mod}_p)
157 ${PRIVATE}${dir}/lib${mod}_plugin\$(LIBEXT): \$(${sym}_lib${mod}_plugin_a_OBJECTS)
158 ${PRIVATE}      \$(${LINKER}) \$^ -shared \$(LDFLAGS_plugins) \$(LDFLAGS_${mod})
159
160
161 EOF
162   done
163 done
164
165 echo "AM_CONDITIONAL(UNTRUE, false)" >> configure.ac
166 sed -n -e '/dnl do not touch this line/,//p' < configure.ac.in >> configure.ac
167
168 echo "done."
169
170 ###
171 ###  classic bootstrap stuff
172 ###
173 set -x
174 rm -f aclocal.m4 m4/oldgettext.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh
175 rm -Rf intl
176
177 # Check for gettext
178 if gettextize --version >/dev/null 2>&1
179 then
180 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
181         '>' 0.11.2 >/dev/null 2>&1
182 then
183   # We have gettext, and a recent version! Everything is cool.
184   autopoint || exit 1
185   GETTEXT=yes
186 else
187   # User's gettext is too old. try to continue anyway.
188   mkdir -p intl
189   echo > intl/Makefile.am
190   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
191   GETTEXT=old
192 fi;else
193   # we don't have gettext. grmbl. try to continue anyway.
194   mkdir -p intl
195   echo > intl/Makefile.am
196   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
197   GETTEXT=no
198 fi
199
200 # Check for automake
201 amvers="none"
202 if automake-1.7 --version >/dev/null 2>&1
203 then
204   amvers="-1.7"
205 else
206   if automake-1.6 --version >/dev/null 2>&1
207   then
208     amvers="-1.6"
209     if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
210     then AUTOMAKESUCKS=yes
211     fi
212   else
213     if automake-1.5 --version >/dev/null 2>&1
214     then
215       amvers="-1.5"
216     else
217       if automake --version > /dev/null 2>&1
218       then
219         amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
220         case $amvers in
221         1.6|1.6.0|1.6.1)
222           AUTOMAKESUCKS=yes ;;
223         esac
224
225         if expr "$amvers" "<" "1.5" > /dev/null 2>&1
226         then amvers="none"
227         else amvers=""
228         fi
229       fi
230     fi
231   fi
232 fi
233
234 if test x$amvers = xnone
235 then
236   set +x
237   echo "you need automake version 1.5 or later"
238   exit 1
239 fi
240
241 # Do the rest
242 aclocal${amvers} -I m4 || exit 1
243 autoheader || exit 1
244
245 automake${amvers} --foreign --add-missing --copy || PERLSUCKS=yes
246
247 case "$PERLSUCKS" in
248   no)
249   ;;
250   yes)
251     set +x
252     echo ""
253     echo "==========================================================="
254     echo "IMPORTANT NOTE: automake failed. On certain systems this is"
255     echo "because of insufficient stack size. Please set the stack"
256     echo "size to something bigger or unlimited (\`unlimit stacksize')"
257     echo "and try again."
258     exit 1
259   ;;
260 esac
261
262 # Wrap automake's long lines, because the Solaris sed doesn't support lines
263 # longer than 3999 characters, and ./configure calls sed. We use Perl instead
264 # of sed for obvious reasons :)
265 perl -ne 'if(/^.{500}/) {s/(.{200}[^ ]* )/$1\\\n\t/g} print $_' < Makefile.in > Makefile.in.tmp && mv Makefile.in.tmp Makefile.in
266
267 autoconf || exit 1
268
269 ##
270 ##  headers which need to be regenerated
271 ##
272 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
273 rm -f include/vlc_symbols.h
274 rm -f mozilla/vlcintf.h
275
276 ##
277 ##  Shut up
278 ##
279 set +x
280
281 ##
282 ##  Glade sometimes sucks
283 ##
284 echo "workarounds for annoying glade features"
285 for file in gnome_interface.c gtk_interface.c
286 do
287 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
288 then
289     rm -f /tmp/$$.$file.bak
290     cat > /tmp/$$.$file.bak << EOF
291 /* This file was created automatically by glade and fixed by bootstrap */
292
293 #include <vlc/vlc.h>
294 EOF
295     sed -e 1,7d \
296         -e 's#_("-:--:--")#"-:--:--"#' \
297         -e 's#_("---")#"---"#' \
298         -e 's#_("--")#"--"#' \
299         -e 's#_("/dev/dvd")#"/dev/dvd"#' \
300         -e 's#_(\("./."\))#\1#' \
301         < modules/gui/gtk/$file >> /tmp/$$.$file.bak
302     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
303 fi
304 done
305
306 file=gtk_support.h
307 if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null
308 then
309     rm -f /tmp/$$.$file.bak
310     sed -e 's/DO NOT EDIT THIS FILE.*/This file was created automatically by glade and fixed by bootstrap/ ; s/#if.*ENABLE_NLS.*/#if defined( ENABLE_NLS ) \&\& defined ( HAVE_GETTEXT )/' < modules/gui/gtk/$file > /tmp/$$.$file.bak
311     mv -f /tmp/$$.$file.bak modules/gui/gtk/$file
312 fi
313
314 ##
315 ##  Update the potfiles because no one ever does it
316 ##
317 if test "$do_po" = "no"
318 then
319   echo "not updating potfiles. use --update-po to force doing it."
320 else
321   cd po
322   make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//'
323   cd ..
324 fi
325
326 ##
327 ##  Tell the user about gettext and sed
328 ##
329 case "$GETTEXT" in
330   yes)
331   ;;
332   no)
333     echo ""
334     echo "==========================================================="
335     echo "IMPORTANT NOTE: you do not have gettext installed on your"
336     echo "system. The vlc build will work, but you will not have"
337     echo "internationalization support. We suggest installing gettext."
338   ;;
339   old)
340     echo ""
341     echo "=========================================================="
342     echo "NOTE: you have an old version of gettext installed on your"
343     echo "system. We suggest upgrading to gettext 0.11.3 or later."
344   ;;
345 esac
346
347 case "$AUTOMAKESUCKS" in
348   no)
349   ;;
350   yes)
351     echo ""
352     echo "============================================================="
353     echo "IMPORTANT NOTE: your version of automake has a bug which will"
354     echo "prevent proper plugin compilation. Either compile VLC with"
355     echo "the --disable-plugins flag, or use a version of automake newer"
356     echo "than 1.6.1 (1.6.2 is OK, and so are the 1.5 series)."
357   ;;
358 esac
359
360 case "$SEDSUCKS" in
361   no)
362   ;;
363   yes)
364     echo ""
365     echo "============================================================="
366     echo "IMPORTANT NOTE: the version of 'sed' on your system is unable"
367     echo "to handle long lines. bootstrap will try its best to generate"
368     echo "a correct Makefile, but you should expect problems. We highly"
369     echo "recommend installing GNU sed."
370   ;;
371 esac
372