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