3 ## bootstrap file for the VLC media player
5 ## Copyright (C) 2005-2006 the VideoLAN team
7 ## Authors: Sam Hocevar <sam@zoy.org>
8 ## RĂ©mi Denis-Courmont <rem # videolan # org>
10 ## Muahaha! no annoying dollar I dee dollar that causes rebuild at commit
12 if test "$#" != "0"; then
14 echo " Calls automake, autoconf, autoheader, autopoint and other auto* to generate"
15 echo " m4 macros and prepare Makefiles."
20 ### Get a sane environment, just in case
31 ## Check for various tools
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"
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
55 if automake-1.9 --version >/dev/null 2>&1; then
57 elif automake-1.8 --version >/dev/null 2>&1; then
59 elif automake-1.7 --version >/dev/null 2>&1; then
61 elif automake-1.6 --version >/dev/null 2>&1; then
63 if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1; then
66 elif automake-1.5 --version >/dev/null 2>&1; then
69 elif automake --version > /dev/null 2>&1; then
71 case "`automake --version | sed -e '1s/[^0-9]*//' -e q`" in
72 0|0.*|1|1.[01234]|1.[01234][-.]*)
83 if test "${amvers}" = "none"; then
85 echo "$0: you need automake version 1.5 or later"
91 if glibtoolize --version >/dev/null 2>&1; then
92 libtoolize="glibtoolize"
93 elif libtoolize --version >/dev/null 2>&1; then
94 libtoolize="libtoolize"
97 if test "$libtoolize" = "no"; then
99 echo "$0: you need libtool"
104 if gettextize --version >/dev/null 2>&1; then
105 # Autopoint is available from 0.11.3, but we need 0.11.5
106 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
107 '>=' 0.11.5 >/dev/null 2>&1; then
108 # We have gettext, and a recent version! Everything is cool.
112 # User's gettext is too old. try to continue anyway.
117 echo "you need gettextize (package gettext-devel or gettext)"
121 # Check for pkg-config
122 if pkg-config --version >/dev/null 2>&1; then
123 # We have pkg-config, everything is cool.
129 aclocal=aclocal${amvers}
130 automake=automake${amvers}
132 autoheader=autoheader
135 ## Generate the modules makefile, by parsing modules/**/Modules.am
139 echo "generating modules/**/Makefile.am and m4/private.m4"
141 # Prepare m4/private.m4
142 rm -f m4/private.m4 && cat > m4/private.m4 << EOF
143 dnl Private VLC macros - generated by bootstrap
147 if [ "${PKGCONFIG}" = "no" ]; then cat >> m4/private.m4 << EOF
148 dnl User does not have pkg-config, so assume package was not found
149 AC_DEFUN([PKG_CHECK_MODULES],[ifelse([\$4], , :, [\$4])])
154 if [ "${GETTEXT}" != "yes" ]; then cat >> m4/private.m4 << EOF
155 dnl User does not have gettext, so this is a no-op
156 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
161 rm -f m4/private.m4-tmp1 && cat > m4/private.m4-tmp1 << EOF
162 dnl The required AM_CONDITIONAL calls
163 dnl XXX: too many conditionals make the build very slow, disabled them
164 AC_DEFUN([VLC_CONDITIONALS], [
166 rm -f m4/private.m4-tmp2 && cat > m4/private.m4-tmp2 << EOF
167 dnl The required AC_SUBST calls
168 AC_DEFUN([VLC_SUBSTS], [
170 rm -f m4/private.m4-tmp3 && cat > m4/private.m4-tmp3 << EOF
171 dnl The required AC_OUTPUT calls
172 dnl XXX: this feature is only supported starting from automake-1.7
173 AC_DEFUN([VLC_MAKEFILES], [AC_OUTPUT([
175 rm -f m4/private.m4-tmp4 && cat > m4/private.m4-tmp4 << EOF
176 dnl Helper macro for vlc-config generation
177 AC_DEFUN([VLC_CONFIG_HELPER], [
178 cat >> vlc-config.in << BLAH
183 rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF
184 # Autogenerated by bootstrap - DO NOT EDIT
186 SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`
189 for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac`
192 modf="modules/${dir}/Modules.am"
193 makf="modules/${dir}/Makefile.am"
194 basedir="`echo "${dir}" | cut -f1 -d/`"
195 # automake will not recurse for make dist if we don't define SUBDIRS = .
196 subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`"
197 mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`"
202 extra_libs="${extra_libs} lib${mod}_plugin.a lib${mod}.a lib${mod}_pic.a"
203 extra_ltlibs="${extra_ltlibs} lib${mod}_plugin.la lib${mod}_builtin.la"
205 rm -f "${makf}" && cat > "${makf}" << EOF
207 # ${makf} automatically generated from ${modf} by bootstrap
208 # DO NOT EDIT - edit Modules.am or \$(top_srcdir)/bootstrap instead
216 EXTRA_DIST = Modules.am
220 SUFFIXES = _plugin\$(LIBEXT) _plugin.a
222 libvlcdir = \$(libdir)/vlc/\$(basedir)
224 EXTRA_LIBRARIES = ${extra_libs}
225 EXTRA_LTLIBRARIES = ${extra_ltlibs}
229 LTLIBVLC = \$(top_builddir)/src/libvlc.la
232 LIBVLC = \$(top_builddir)/src/libvlc\$(LIBEXT)
238 # Find out which modules were enabled and tell make to build them
241 @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
242 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; \\
243 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; \\
244 \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
247 @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
248 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; \\
249 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; \\
250 if test "\$(pic)" = "pic"; then z=\$\$(\$(VLC_CONFIG) --list builtin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_pic.a;; esac; done; fi; \\
251 \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
255 # Build a plugin with the adequate linker and linker's flags
256 _plugin.a_plugin\$(LIBEXT):
257 @mod="\$*" ; mod=\$\${mod#lib} ; \
258 ldfl="\`\$(VLC_CONFIG) --libs plugin \$\$mod\` \$(LIBADD) -u \$(SYMPREF)\$(VLC_ENTRY)" ; \
259 case \`\$(VLC_CONFIG) --linkage \$\$mod\` in \\
260 c++) ld="\$(CXXLINK)" ;; \
261 objc) ld="\$(OBJCLINK)" ;; \
262 c|*) ld="\$(LINK)" ;; \
264 echo \$\$ld \$< \$\$ldfl ; \
266 #ifneq (,\$(findstring cygwin,\$(host)))
267 # mv -f "\$@.exe" "\$@"
269 @if test -f "\$@.exe"; then mv -f "\$@.exe" "\$@"; fi
272 \$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/bootstrap
273 cd \$(top_srcdir) && \$(SHELL) ./bootstrap
280 -rm -f *.a *\$(LIBEXT)
283 clean-local: \$(clean_modules)
285 ### automake creates libvlcdir after running install-*-local
286 ### so we have to create it ourselves first
287 install-exec-local: all-modules
289 @if test -z "\$(libvlc_LTLIBRARIES)"; then \
290 z=\$\$(\$(VLC_CONFIG) --list plugin); \
291 m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
293 \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" install-libvlcLTLIBRARIES || exit \$\$? ; \
296 mkdir -p -- "\$(DESTDIR)\$(libvlcdir)"
297 @z=\$\$(\$(VLC_CONFIG) --list plugin); \
298 for mod in \$(mods); do \
300 in *\ \$\${mod}\ *) \
301 echo \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" ; \
302 \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" || exit \$\$?; \
306 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
307 for mod in \$(mods); do \
309 in *\ \$\${mod}\ *) \
310 echo \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" ; \
311 \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" || exit \$\$?; \
316 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
317 for mod in \$(mods); do \
319 in *\ \$\${mod}\ *) \
320 echo \$(INSTALL_DATA) "lib\$\${mod}_pic.a" "\$(DESTDIR)\$(libdir)/vlc/" ; \
321 \$(INSTALL_DATA) "lib\$\${mod}_pic.a" "\$(DESTDIR)\$(libdir)/vlc/" || exit \$\$?; \
330 @if test -z "\$(libvlc_LTLIBRARIES)"; then \
331 z=\$\$(\$(VLC_CONFIG) --list plugin); \
332 m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
334 \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" uninstall-libvlcLTLIBRARIES || exit \$\$?; \
337 @z=\$\$(\$(VLC_CONFIG) --list plugin); \
338 for mod in \$(mods); do \
340 in *\ \$\${mod}\ *) \
341 echo rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" ; \
342 rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" || true; \
346 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
347 for mod in \$(mods); do \
349 in *\ \$\${mod}\ *) \
350 echo rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" ; \
351 rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" || true; \
356 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
357 for mod in \$(mods); do \
359 in *\ \$\${mod}\ *) \
360 echo rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}_pic.a" ; \
361 rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}_pic.a" || true; \
371 if grep '^nodist_SOURCES_'${mod}'' < "${modf}" >/dev/null 2>&1; then
374 cat >> m4/private.m4-tmp4 << EOF
375 ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
377 # Generation of modules/**/Makefile.am
378 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
379 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
380 # S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
381 # the resulting file size.
382 # - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
383 # work properly with any automake version I tested.
384 cat >> "${makf}" << EOF
388 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
389 clean_modules += clean-${mod}
391 -test -z "\$(nodist_SOURCES_${mod})" || rm -f \$(nodist_SOURCES_${mod})
395 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
396 BUILT_SOURCES += \$(B${mod})
399 cat >> "${makf}" << EOF
400 lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
401 lib${mod}_plugin_la_SOURCES = \$(SOURCES_${mod})
403 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
404 nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
405 nodist_lib${mod}_plugin_la_SOURCES = \$(nodist_SOURCES_${mod})
408 cat >> "${makf}" << EOF
409 lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
410 lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
411 lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
412 lib${mod}_plugin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
413 lib${mod}_plugin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
414 lib${mod}_plugin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
415 lib${mod}_plugin_la_LDFLAGS = \`\$(VLC_CONFIG) --libs plugin ${mod}\` \\
416 -rpath '\$(libvlcdir)' -module -shrext \$(LIBEXT)
417 lib${mod}_plugin_la_LIBADD = \$(LTLIBVLC)
419 lib${mod}_pic_a_SOURCES = \$(SOURCES_${mod})
421 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
422 nodist_lib${mod}_pic_a_SOURCES = \$(nodist_SOURCES_${mod})
425 cat >> "${makf}" << EOF
426 lib${mod}_pic_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\`
427 lib${mod}_pic_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\`
428 lib${mod}_pic_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\`
430 lib${mod}_a_SOURCES = \$(SOURCES_${mod})
431 lib${mod}_builtin_la_SOURCES = \$(SOURCES_${mod})
433 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
434 nodist_lib${mod}_a_SOURCES = \$(nodist_SOURCES_${mod})
435 nodist_lib${mod}_builtin_la_SOURCES = \$(nodist_SOURCES_${mod})
438 cat >> "${makf}" << EOF
439 lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
440 lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
441 lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`
442 lib${mod}_builtin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
443 lib${mod}_builtin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
444 lib${mod}_builtin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`
450 cat >> m4/private.m4-tmp1 << EOF
453 cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
454 cat >> m4/private.m4-tmp2 << EOF
457 cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
458 cat >> m4/private.m4-tmp3 << EOF
461 cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
462 cat >> m4/private.m4-tmp4 << EOF
466 cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
471 ### classic bootstrap stuff
475 # remove autotools cruft
476 rm -f aclocal.m4 configure config.log config.h config.h.in
477 rm -Rf autom4te*.cache
478 # remove old autotools extra cruft
479 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
480 # remove new autotools extra cruft
483 # remove libtool cruft
484 rm -f ltmain.sh libtool ltconfig
485 # remove gettext cruft
488 # remove old vlc cruft
489 rm -f m4/oldgettext.m4 stamp-pic configure.ac.in Modules.am
490 # remove new vlc cruft
491 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
493 # Automake complains if these are not present
494 rm -f vlc-config.in && printf "" > vlc-config.in
495 if [ "$GETTEXT" != "yes" ]; then
496 test -d intl || mkdir intl
497 printf "" > intl/Makefile.am
498 printf "" > ABOUT-NLS
501 # Libtoolize directory
502 ${libtoolize} --copy --force
503 if test -f "ltmain.sh"; then
504 echo "$0: working around a minor libtool issue"
505 mv ltmain.sh autotools/
510 ${aclocal} ${ACLOCAL_ARGS}
513 ${automake} --add-missing --copy
516 ## files which need to be regenerated
518 rm -f vlc-config.in vlc-config
519 rm -f src/misc/modules_builtin.h
520 rm -f mozilla/vlcintf.h
526 ## Tell the user about gettext, pkg-config and sed
528 if [ "${GETTEXT}" = "old" ]; then
531 ==========================================================
532 NOTE: you have an old version of gettext installed on your
533 system. The vlc build will work, but if your system does not
534 have libintl you will not have internationalization support.
535 We suggest upgrading to gettext 0.11.5 or later.
539 if [ "$PKGCONFIG" = "no" ]; then
542 ==============================================================
543 NOTE: you do not have the "pkg-config" utility on your system;
544 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
549 if [ "$AUTOMAKESUCKS" = "yes" ]; then
552 =============================================================
553 IMPORTANT NOTE: your version of automake has a bug which will
554 prevent proper plugin compilation. Either compile VLC with
555 the --disable-plugins flag, or use a version of automake newer
556 than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
560 if [ "$INSTALLSUCKS" = "yes" ]; then
563 =============================================================
564 IMPORTANT NOTE: your version of automake has a bug which will
565 prevent proper installation. Do not use "make install" with this
566 version of automake, or use a version of automake newer than 1.5
567 (such as 1.6 or 1.7).