64a6f9926e76d4645896baf6e1eeb661751d4320
[vlc.git] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for the VLC media player
4 ##  $Id: bootstrap,v 1.44 2003/03/12 04:16:02 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 rm -f aclocal.m4 m4/oldgettext.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh ABOUT-NLS
177 rm -Rf intl
178
179 # Check for gettext
180 if gettextize --version >/dev/null 2>&1
181 then
182 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
183         '>' 0.11.2 >/dev/null 2>&1
184 then
185   # We have gettext, and a recent version! Everything is cool.
186   autopoint || exit 1
187   GETTEXT=yes
188 else
189   # User's gettext is too old. try to continue anyway.
190   echo > ABOUT-NLS
191   mkdir -p intl
192   echo > intl/Makefile.am
193   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
194   GETTEXT=old
195 fi;else
196   # we don't have gettext. grmbl. try to continue anyway.
197   echo > ABOUT-NLS
198   mkdir -p intl
199   echo > intl/Makefile.am
200   echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' > m4/oldgettext.m4
201   GETTEXT=no
202 fi
203
204 # Check for automake
205 amvers="none"
206 if automake-1.7 --version >/dev/null 2>&1
207 then
208   amvers="-1.7"
209 else
210   if automake-1.6 --version >/dev/null 2>&1
211   then
212     amvers="-1.6"
213     if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
214     then AUTOMAKESUCKS=yes
215     fi
216   else
217     if automake-1.5 --version >/dev/null 2>&1
218     then
219       INSTALLSUCKS=yes
220       amvers="-1.5"
221     else
222       if automake --version > /dev/null 2>&1
223       then
224         amvers=`automake --version | sed -e '1s/[^0-9]*//' -e q`
225         case $amvers in
226         1.6|1.6.0|1.6.1)
227           AUTOMAKESUCKS=yes ;;
228         1.5|1.5.*)
229           INSTALLSUCKS=yes ;;
230         esac
231
232         if expr "$amvers" "<" "1.5" > /dev/null 2>&1
233         then amvers="none"
234         else amvers=""
235         fi
236       fi
237     fi
238   fi
239 fi
240
241 if test x$amvers = xnone
242 then
243   set +x
244   echo "you need automake version 1.5 or later"
245   exit 1
246 fi
247
248 # Do the rest
249 aclocal${amvers} -I m4 || exit 1
250 autoheader || exit 1
251
252 automake${amvers} --add-missing --copy || PERLSUCKS=yes
253
254 case "$PERLSUCKS" in
255   no)
256   ;;
257   yes)
258     set +x
259     cat << EOF
260
261 =======================================================================
262 IMPORTANT NOTE: automake failed, please check the error messages. If it
263 actually segfaulted, it might be because of insufficient stack size; set
264 the stack size to something bigger or unlimited (\`unlimit stacksize')
265 and try again.
266 EOF
267     exit 1
268   ;;
269 esac
270
271 # Wrap automake's long lines, because the Solaris sed doesn't support lines
272 # longer than 3999 characters, and ./configure calls sed. We use Perl instead
273 # of sed for obvious reasons :)
274 perl -ne 'if(/^.{500}/) {s/(.{200}[^ ]* )/$1\\\n\t/g} print $_' < Makefile.in > Makefile.in.tmp && mv Makefile.in.tmp Makefile.in
275
276 autoconf || exit 1
277
278 ##
279 ##  headers which need to be regenerated
280 ##
281 rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
282 rm -f include/vlc_symbols.h
283 rm -f mozilla/vlcintf.h
284
285 ##
286 ##  Shut up
287 ##
288 set +x
289
290 ##
291 ##  Tell the user about gettext and sed
292 ##
293 case "$GETTEXT" in
294   yes)
295   ;;
296   no)
297     cat << EOF
298
299 ===========================================================
300 IMPORTANT NOTE: you do not have gettext installed on your
301 system. The vlc build will work, but you will not have
302 internationalization support. We suggest installing gettext.
303 EOF
304   ;;
305   old)
306     cat << EOF
307
308 ==========================================================
309 NOTE: you have an old version of gettext installed on your
310 system. The vlc build will work, but if your system does not
311 have libintl you will not have internationalization support.
312 We suggest upgrading to gettext 0.11.3 or later.
313 EOF
314   ;;
315 esac
316
317 case "$AUTOMAKESUCKS" in
318   no)
319   ;;
320   yes)
321     cat << EOF
322
323 =============================================================
324 IMPORTANT NOTE: your version of automake has a bug which will
325 prevent proper plugin compilation. Either compile VLC with
326 the --disable-plugins flag, or use a version of automake newer
327 than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
328 EOF
329   ;;
330 esac
331
332 case "$INSTALLSUCKS" in
333   no)
334   ;;
335   yes)
336     cat << EOF
337
338 =============================================================
339 IMPORTANT NOTE: your version of automake has a bug which will
340 prevent proper installation. Do not use "make install" with this
341 version of automake, or use a version of automake newer than 1.5
342 (such as 1.6 or 1.7).
343 EOF
344   ;;
345 esac
346
347 case "$SEDSUCKS" in
348   no)
349   ;;
350   yes)
351     cat << EOF
352
353 =============================================================
354 IMPORTANT NOTE: the version of 'sed' on your system is unable
355 to handle long lines. bootstrap will try its best to generate
356 a correct Makefile, but you should expect problems. We highly
357 recommend installing GNU sed.
358 EOF
359   ;;
360 esac
361