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