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