]> git.sesse.net Git - vlc/blob - bootstrap
bb92ee09983c54d30426f4b6335e1e2e0362bbe1
[vlc] / bootstrap
1 #! /bin/sh
2
3 ##  bootstrap file for the VLC media player
4 ##
5 ## Copyright (C) 2005-2006 the VideoLAN team
6 ##
7 ##  Authors: Sam Hocevar <sam@zoy.org>
8 ##           RĂ©mi Denis-Courmont <rem # videolan # org>
9 ##
10 ## Muahaha! no annoying dollar I dee dollar that causes rebuild at commit
11
12 if test "$#" != "0"; then
13   echo "Usage: $0"
14   echo "  Calls automake, autoconf, autoheader, autopoint and other auto* to generate"
15   echo "  m4 macros and prepare Makefiles."
16   exit 1
17 fi
18
19 ###
20 ###  Get a sane environment, just in case
21 ###
22 LANG=C
23 export LANG
24 CYGWIN=binmode
25 export CYGWIN
26
27 set -e
28 set -x
29
30 ##
31 ## Check for various tools
32 ##
33 AUTOMAKESUCKS=no
34 INSTALLSUCKS=no
35
36 ACLOCAL_ARGS="-I m4"
37
38 # Check for contrib directory
39 if test -d extras/contrib/bin; then
40   export PATH=./extras/contrib/bin:$PATH
41   if test -d extras/contrib/share/aclocal; then
42     ACLOCAL_ARGS="${ACLOCAL_ARGS} -I extras/contrib/share/aclocal"
43   fi
44   if test ".`uname -s`" = ".Darwin"; then
45     export LD_LIBRARY_PATH=./extras/contrib/lib:$LD_LIBRARY_PATH
46     export DYLD_LIBRARY_PATH=./extras/contrib/lib:$DYLD_LIBRARY_PATH
47   elif test ".`uname -s`" = ".BeOS"; then
48     export LIBRARY_PATH=./extras/contrib/lib:$LIBRARY_PATH
49     export BELIBRARIES=./extras/contrib/lib:$BELIBRARIES
50   fi
51 fi
52
53 # Check for automake
54 amvers="no"
55 for v in "-1.9" "19" "-1.8" "18" "-1.7" "17" "-1.6" "16" "-1.5" "15"; do
56   if automake${v} --version >/dev/null 2>&1; then
57     amsuff="${v}"
58     amvers="${v}"
59     break
60   fi
61 done
62
63 if test "${amvers}" = "no" && automake --version > /dev/null 2>&1; then
64   amvers="`automake --version | sed -e '1s/[^0-9]*//' -e q`"
65   amsuff=""
66 fi
67
68 case "${amvers}" in
69   -1.6|16|1.6|1.6.0*|1.6.1*)
70     AUTOMAKESUCKS=yes
71     ;;
72   -1.5|15|1.5|1.5.*)
73     INSTALLSUCKS=yes
74     ;;
75   no|1.[01234]|1.[01234].*|1[01234])
76     set +x
77     echo "$0: you need automake version 1.5 or later"
78     exit 1
79     ;;
80 esac
81
82 # Check for libtool
83 libtoolize="no"
84 if glibtoolize --version >/dev/null 2>&1; then
85   libtoolize="glibtoolize"
86 elif libtoolize --version >/dev/null 2>&1; then
87   libtoolize="libtoolize"
88 fi
89
90 if test "$libtoolize" = "no"; then
91   set +x
92   echo "$0: you need libtool"
93   exit 1
94 fi
95
96 # Check for gettext
97 if gettextize --version >/dev/null 2>&1; then
98 # Autopoint is available from 0.11.3, but we need 0.11.5
99 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
100         '>=' 0.11.5 >/dev/null 2>&1; then
101   # We have gettext, and a recent version! Everything is cool.
102   autopoint=autopoint
103   GETTEXT=yes
104 else
105   # User's gettext is too old. try to continue anyway.
106   autopoint=:
107   GETTEXT=old
108 fi;else
109   set +x
110   echo "you need gettextize (package gettext-devel or gettext)"
111   exit 1
112 fi
113
114 # Check for pkg-config
115 if pkg-config --version >/dev/null 2>&1; then
116   # We have pkg-config, everything is cool.
117   PKGCONFIG=yes
118 else
119   PKGCONFIG=no
120 fi
121
122 aclocal=aclocal${amvers}
123 automake=automake${amvers}
124 autoconf=autoconf
125 autoheader=autoheader
126
127 ##
128 ## Generate the modules makefile, by parsing modules/**/Modules.am
129 ##
130
131 set +x
132 echo "generating modules/**/Makefile.am and m4/private.m4"
133
134 # Prepare m4/private.m4
135 rm -f m4/private.m4 && cat > m4/private.m4 << EOF
136 dnl  Private VLC macros - generated by bootstrap
137
138 EOF
139
140 if [ "${PKGCONFIG}" = "no" ]; then cat >> m4/private.m4 << EOF
141 dnl  User does not have pkg-config, so assume package was not found
142 AC_DEFUN([PKG_CHECK_MODULES],[ifelse([\$4], , :, [\$4])])
143
144 EOF
145 fi
146
147 if [ "${GETTEXT}" != "yes" ]; then cat >> m4/private.m4 << EOF
148 dnl  User does not have gettext, so this is a no-op
149 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
150
151 EOF
152 fi
153
154 rm -f m4/private.m4-tmp1 && cat > m4/private.m4-tmp1 << EOF
155 dnl  The required AM_CONDITIONAL calls
156 dnl  XXX: too many conditionals make the build very slow, disabled them
157 AC_DEFUN([VLC_CONDITIONALS], [
158 EOF
159 rm -f m4/private.m4-tmp2 && cat > m4/private.m4-tmp2 << EOF
160 dnl  The required AC_SUBST calls
161 AC_DEFUN([VLC_SUBSTS], [
162 EOF
163 rm -f m4/private.m4-tmp3 && cat > m4/private.m4-tmp3 << EOF
164 dnl  The required AC_OUTPUT calls
165 dnl  XXX: this feature is only supported starting from automake-1.7
166 AC_DEFUN([VLC_MAKEFILES], [AC_OUTPUT([
167 EOF
168 rm -f m4/private.m4-tmp4 && cat > m4/private.m4-tmp4 << EOF
169 dnl  Helper macro for vlc-config generation
170 AC_DEFUN([VLC_CONFIG_HELPER], [
171   cat >> vlc-config.in << BLAH
172 EOF
173
174 modules=""
175
176 rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF
177 # Autogenerated by bootstrap - DO NOT EDIT
178 EXTRA_DIST = LIST
179 SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`
180 EOF
181
182 for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac`
183 do
184   printf "."
185   modf="modules/${dir}/Modules.am"
186   makf="modules/${dir}/Makefile.am"
187   basedir="`echo "${dir}" | cut -f1 -d/`"
188   # automake will not recurse for make dist if we don't define SUBDIRS = .
189   subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`"
190   mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`"
191   extra_libs=""
192   extra_ltlibs=""
193   for mod in $mods
194   do
195     extra_libs="${extra_libs} lib${mod}_plugin.a lib${mod}.a"
196     extra_ltlibs="${extra_ltlibs} lib${mod}_plugin.la lib${mod}_builtin.la"
197   done
198   rm -f "${makf}" && cat > "${makf}" << EOF
199
200 # ${makf} automatically generated from ${modf} by bootstrap
201 # DO NOT EDIT - edit Modules.am or \$(top_srcdir)/bootstrap instead
202
203 basedir = ${basedir}
204 mods = ${mods}
205
206 NULL =
207 libvlc_LTLIBRARIES =
208 noinst_LTLIBRARIES =
209 EXTRA_DIST = Modules.am
210 BUILT_SOURCES =
211 clean_modules =
212 SUBDIRS = ${subdirs}
213 SUFFIXES = _plugin\$(LIBEXT) _plugin.a
214
215 libvlcdir = \$(libdir)/vlc/\$(basedir)
216
217 EXTRA_LIBRARIES = ${extra_libs}
218 EXTRA_LTLIBRARIES = ${extra_ltlibs}
219
220 include Modules.am
221
222 LTLIBVLC = \$(top_builddir)/src/libvlc.la
223
224 if BUILD_SHARED
225 LIBVLC = \$(top_builddir)/src/libvlc\$(LIBEXT)
226 LIBADD = \$(LIBVLC)
227 endif
228
229 all: all-modules
230
231 # Find out which modules were enabled and tell make to build them
232 all-modules:
233 if USE_LIBTOOL
234         @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
235         if test "\$(plugin)" != "no"; then z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin.la;; esac; done; fi; \\
236         if test "\$(builtin)" != "no"; then z=\$\$(\$(VLC_CONFIG) --list builtin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_builtin.la;; esac; done; fi; \\
237         \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
238         test -z "\$\$fail"
239 else
240         @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
241         if test "\$(plugin)" != "no"; then z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin\$(LIBEXT);; esac; done; fi; \\
242         if test "\$(builtin)" != "no"; then z=\$\$(\$(VLC_CONFIG) --list builtin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}.a;; esac; done; fi; \\
243         \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
244         test -z "\$\$fail"
245 endif
246
247 # Build a plugin with the adequate linker and linker's flags
248 _plugin.a_plugin\$(LIBEXT):
249         @mod="\$*" ; mod=\$\${mod#lib} ; \
250         ldfl="\`\$(VLC_CONFIG) --libs plugin \$\$mod\` \$(LIBADD) -u \$(SYMPREF)\$(VLC_ENTRY)" ; \
251         case \`\$(VLC_CONFIG) --linkage \$\$mod\` in \\
252           c++)  ld="\$(CXXLINK)" ;; \
253           objc) ld="\$(OBJCLINK)" ;; \
254           c|*)  ld="\$(LINK)" ;; \
255         esac ; \
256         echo \$\$ld \$< \$\$ldfl ; \
257         \$\$ld \$< \$\$ldfl
258 #ifneq (,\$(findstring cygwin,\$(host)))
259 #       mv -f "\$@.exe" "\$@"
260 #endif
261         @if test -f "\$@.exe"; then mv -f "\$@.exe" "\$@"; fi
262
263 if MAINTAINER_MODE
264 \$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/bootstrap
265         cd \$(top_srcdir) && \$(SHELL) ./bootstrap
266 endif
267
268 mostlyclean-local:
269 if USE_LIBTOOL
270         -rm -f *.la
271 else
272         -rm -f *.a *\$(LIBEXT)
273 endif
274
275 clean-local: \$(clean_modules)
276
277 ### automake creates libvlcdir after running install-*-local
278 ### so we have to create it ourselves first
279 install-exec-local: all-modules
280 if USE_LIBTOOL
281         @if test -z "\$(libvlc_LTLIBRARIES)"; then \
282           z=\$\$(\$(VLC_CONFIG) --list plugin); \
283           m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
284           test -z "\$\$m" || \
285             \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" install-libvlcLTLIBRARIES || exit \$\$? ; \
286         fi
287 else
288         mkdir -p -- "\$(DESTDIR)\$(libvlcdir)"
289         @z=\$\$(\$(VLC_CONFIG) --list plugin); \
290         for mod in \$(mods); do \
291           case "\$\$z " \
292             in *\ \$\${mod}\ *) \
293               echo \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" ; \
294               \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" || exit \$\$?; \
295               ;; \
296           esac; \
297         done
298         @z=\$\$(\$(VLC_CONFIG) --list builtin); \
299         for mod in \$(mods); do \
300           case "\$\$z " \
301             in *\ \$\${mod}\ *) \
302               echo \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" ; \
303               \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" || exit \$\$?; \
304               ;; \
305           esac; \
306         done
307 endif
308
309 uninstall-local:
310 if USE_LIBTOOL
311         @if test -z "\$(libvlc_LTLIBRARIES)"; then \
312           z=\$\$(\$(VLC_CONFIG) --list plugin); \
313           m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
314           test -z "\$\$m" || \
315             \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" uninstall-libvlcLTLIBRARIES || exit \$\$?; \
316         fi
317 else
318         @z=\$\$(\$(VLC_CONFIG) --list plugin); \
319         for mod in \$(mods); do \
320           case "\$\$z " \
321             in *\ \$\${mod}\ *) \
322               echo rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" ; \
323               rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" || true; \
324               ;; \
325           esac; \
326         done
327         @z=\$\$(\$(VLC_CONFIG) --list builtin); \
328         for mod in \$(mods); do \
329           case "\$\$z " \
330             in *\ \$\${mod}\ *) \
331               echo rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" ; \
332               rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" || true; \
333               ;; \
334           esac; \
335         done
336 endif
337
338 EOF
339   for mod in $mods
340   do
341     if grep '^nodist_SOURCES_'${mod}'' < "${modf}" >/dev/null 2>&1; then
342         NODIST=''; else
343         NODIST='#'; fi
344     cat >> m4/private.m4-tmp4 << EOF
345     ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
346 EOF
347 # Generation of modules/**/Makefile.am
348 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
349 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
350 #   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
351 #   the resulting file size.
352 # - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
353 #   work properly with any automake version I tested.
354     cat >> "${makf}" << EOF
355 # The ${mod} plugin
356
357 EOF
358     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
359 clean_modules += clean-${mod}
360 clean-${mod}:
361         -test -z "\$(nodist_SOURCES_${mod})" || rm -f \$(nodist_SOURCES_${mod})
362
363 EOF
364     fi
365     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
366 BUILT_SOURCES += \$(B${mod})
367 EOF
368     fi
369     cat >> "${makf}" << EOF
370 lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
371 lib${mod}_plugin_la_SOURCES = \$(SOURCES_${mod})
372 EOF
373     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
374 nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
375 nodist_lib${mod}_plugin_la_SOURCES = \$(nodist_SOURCES_${mod})
376 EOF
377     fi
378     cat >> "${makf}" << EOF
379 lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
380 lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
381 lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
382 lib${mod}_plugin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
383 lib${mod}_plugin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
384 lib${mod}_plugin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
385 lib${mod}_plugin_la_LDFLAGS = \`\$(VLC_CONFIG) --libs plugin ${mod}\` \\
386         -rpath '\$(libvlcdir)' -module -shrext \$(LIBEXT)
387 lib${mod}_plugin_la_LIBADD = \$(LTLIBVLC)
388
389 lib${mod}_a_SOURCES = \$(SOURCES_${mod})
390 lib${mod}_builtin_la_SOURCES = \$(SOURCES_${mod})
391 EOF
392     if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
393 nodist_lib${mod}_a_SOURCES = \$(nodist_SOURCES_${mod})
394 nodist_lib${mod}_builtin_la_SOURCES = \$(nodist_SOURCES_${mod})
395 EOF
396     fi
397     cat >> "${makf}" << EOF
398 lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin \$(pic) ${mod}\`
399 lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin \$(pic) ${mod}\`
400 lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin \$(pic) ${mod}\`
401 lib${mod}_builtin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
402 lib${mod}_builtin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
403 lib${mod}_builtin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`
404
405 EOF
406   done
407 done
408
409 cat >> m4/private.m4-tmp1 << EOF
410 ])
411 EOF
412 cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
413 cat >> m4/private.m4-tmp2 << EOF
414 ])
415 EOF
416 cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
417 cat >> m4/private.m4-tmp3 << EOF
418 ])])
419 EOF
420 cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
421 cat >> m4/private.m4-tmp4 << EOF
422 BLAH
423 ])
424 EOF
425 cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
426
427 echo " done."
428
429 ###
430 ###  classic bootstrap stuff
431 ###
432 set -x
433
434 # remove autotools cruft
435 rm -f aclocal.m4 configure config.log config.h config.h.in
436 rm -Rf autom4te*.cache
437 # remove old autotools extra cruft
438 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
439 # remove new autotools extra cruft
440 rm -Rf autotools
441 mkdir autotools
442 # remove libtool cruft
443 rm -f ltmain.sh libtool ltconfig
444 # remove gettext cruft
445 rm -f ABOUT-NLS
446 rm -Rf intl
447 # remove vlc cruft
448 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
449
450 # Automake complains if these are not present
451 rm -f vlc-config.in && printf "" > vlc-config.in
452 if [ "$GETTEXT" != "yes" ]; then
453   test -d intl || mkdir intl
454   printf "" > intl/Makefile.am
455   printf "" > ABOUT-NLS
456 fi
457
458 # Libtoolize directory
459 ${libtoolize} --copy --force
460 if test -f "ltmain.sh"; then
461   echo "$0: working around a minor libtool issue"
462   mv ltmain.sh autotools/
463 fi
464
465 # Do the rest
466 ${autopoint} -f
467 ${aclocal} ${ACLOCAL_ARGS}
468 ${autoconf}
469 ${autoheader}
470 ${automake} --add-missing --copy
471
472 ##
473 ##  files which need to be regenerated
474 ##
475 rm -f vlc-config.in vlc-config
476 rm -f src/misc/modules_builtin.h
477 rm -f mozilla/vlcintf.h
478
479 # Shut up
480 set +x
481
482 ##
483 ##  Tell the user about gettext, pkg-config and sed
484 ##
485 if [ "${GETTEXT}" = "old" ]; then
486   cat << EOF
487
488 ==========================================================
489 NOTE: you have an old version of gettext installed on your
490 system. The vlc build will work, but if your system does not
491 have libintl you will not have internationalization support.
492 We suggest upgrading to gettext 0.11.5 or later.
493 EOF
494 fi
495
496 if [ "$PKGCONFIG" = "no" ]; then
497   cat << EOF
498
499 ==============================================================
500 NOTE: you do not have the "pkg-config" utility on your system;
501 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
502 reliable.
503 EOF
504 fi
505
506 if [ "$AUTOMAKESUCKS" = "yes" ]; then
507   cat << EOF
508
509 =============================================================
510 IMPORTANT NOTE: your version of automake has a bug which will
511 prevent proper plugin compilation. Either compile VLC with
512 the --disable-plugins flag, or use a version of automake newer
513 than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
514 EOF
515 fi
516
517 if [ "$INSTALLSUCKS" = "yes" ]; then
518   cat << EOF
519
520 =============================================================
521 IMPORTANT NOTE: your version of automake has a bug which will
522 prevent proper installation. Do not use "make install" with this
523 version of automake, or use a version of automake newer than 1.5
524 (such as 1.6 or 1.7).
525 EOF
526 fi
527