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