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 if test "$#" != "0"; then
12 echo " Calls automake, autoconf, autoheader, autopoint and other auto* to generate"
13 echo " m4 macros and prepare Makefiles."
18 ### Get a sane environment, just in case
29 ## Check for various tools
34 ACLOCAL_ARGS="-I m4 ${ACLOCAL_ARGS}"
36 # Check for contrib directory
37 if test -d extras/contrib/bin; then
38 export PATH="`pwd`/extras/contrib/bin:$PATH"
39 if test -d extras/contrib/share/aclocal; then
40 ACLOCAL_ARGS="${ACLOCAL_ARGS} -I extras/contrib/share/aclocal"
42 if test ".`uname -s`" = ".Darwin"; then
43 export LD_LIBRARY_PATH=./extras/contrib/lib:$LD_LIBRARY_PATH
44 export DYLD_LIBRARY_PATH=./extras/contrib/lib:$DYLD_LIBRARY_PATH
45 elif test ".`uname -s`" = ".BeOS"; then
46 export LIBRARY_PATH=./extras/contrib/lib:$LIBRARY_PATH
47 export BELIBRARIES=./extras/contrib/lib:$BELIBRARIES
49 elif test ".`uname -s`" = ".Darwin"; then
50 # Make sure contrib has been built
51 if test ! -e ./extras/contrib/config.mak; then
54 echo "ERR: Contribs haven't been built"
55 echo "ERR: Please run:"
57 echo "ERR: 'cd extras/contrib && ./bootstrap && make && cd ../..'"
59 echo "ERR: Make sure fink has been disabled too."
67 rm -f m4/autoconf260.m4
68 case "$(autoconf --version|head -n 1)" in
70 echo "Hey, your autoconf is quite old. Update it." >&2
75 echo "Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP."
76 cp -f extras/m4/autoconf260.m4 m4/
82 for v in "-1.10" "110" "-1.9" "19"; do
83 if automake${v} --version >/dev/null 2>&1; then
85 amvers="`echo ${v} | sed -e 's/^-//'`"
90 if test "${amvers}" = "no" && automake --version > /dev/null 2>&1; then
91 amvers="`automake --version | sed -e '1s/[^0-9]*//' -e q`"
96 no|1.[012345678]|1.[0123456].*|1[0123456]|1.[0123456]-*)
98 echo "$0: you need automake version 1.9 or later"
105 if glibtoolize --version >/dev/null 2>&1; then
106 libtoolize="glibtoolize"
107 elif libtoolize --version >/dev/null 2>&1; then
108 libtoolize="libtoolize"
111 if test "$libtoolize" = "no"; then
113 echo "$0: you need libtool"
118 if gettextize --version >/dev/null 2>&1; then
119 # Autopoint is available from 0.11.3, but we need 0.11.5
120 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
121 '>=' 0.11.5 >/dev/null 2>&1; then
122 # We have gettext, and a recent version! Everything is cool.
126 # User's gettext is too old. try to continue anyway.
131 echo "you need gettextize (package gettext-devel or gettext)"
135 # Check for pkg-config
136 if pkg-config --version >/dev/null 2>&1; then
137 # We have pkg-config, everything is cool.
143 aclocal=aclocal${amsuff}
144 automake=automake${amsuff}
146 autoheader=autoheader
149 ## Generate the modules makefile, by parsing modules/**/Modules.am
153 echo "generating modules/**/Makefile.am and m4/private.m4"
155 # Prepare m4/private.m4
156 rm -f m4/private.m4 && cat > m4/private.m4 << EOF
157 dnl Private VLC macros - generated by bootstrap
161 if [ "${PKGCONFIG}" = "no" ]; then cat >> m4/private.m4 << EOF
162 dnl User does not have pkg-config, so assume package was not found
163 AC_DEFUN([PKG_CHECK_MODULES],[ifelse([\$4], , :, [\$4])])
168 if [ "${GETTEXT}" != "yes" ]; then cat >> m4/private.m4 << EOF
169 dnl User does not have gettext, so this is a no-op
170 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
175 rm -f m4/private.m4-tmp1 && cat > m4/private.m4-tmp1 << EOF
176 dnl The required AM_CONDITIONAL calls
177 dnl XXX: too many conditionals make the build very slow, disabled them
178 AC_DEFUN([VLC_CONDITIONALS], [
180 rm -f m4/private.m4-tmp2 && cat > m4/private.m4-tmp2 << EOF
181 dnl The required AC_SUBST calls
182 AC_DEFUN([VLC_SUBSTS], [
184 rm -f m4/private.m4-tmp3 && cat > m4/private.m4-tmp3 << EOF
185 dnl The required AC_OUTPUT calls
186 dnl XXX: this feature is only supported starting from automake-1.7
187 AC_DEFUN([VLC_MAKEFILES], [AC_OUTPUT([
189 rm -f m4/private.m4-tmp4 && cat > m4/private.m4-tmp4 << EOF
190 dnl Helper macro for vlc-config generation
191 AC_DEFUN([VLC_CONFIG_HELPER], [
192 cat >> vlc-config.in << BLAH
197 rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF
198 # Autogenerated by bootstrap - DO NOT EDIT
200 SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`
203 for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac`
206 modf="modules/${dir}/Modules.am"
207 makf="modules/${dir}/Makefile.am"
208 basedir="`echo "${dir}" | cut -f1 -d/`"
209 # automake will not recurse for make dist if we don't define SUBDIRS = .
210 subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`"
211 mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`"
216 extra_libs="${extra_libs} lib${mod}_plugin.a lib${mod}.a"
217 extra_ltlibs="${extra_ltlibs} lib${mod}_plugin.la"
219 rm -f "${makf}" && cat > "${makf}" << EOF
221 # ${makf} automatically generated from ${modf} by bootstrap
222 # DO NOT EDIT - edit Modules.am or \$(top_srcdir)/bootstrap instead
230 EXTRA_DIST = Modules.am
234 SUFFIXES = _plugin\$(LIBEXT) _plugin.a
236 libvlcdir = \$(libdir)/vlc/\$(basedir)
238 EXTRA_LIBRARIES = ${extra_libs}
239 EXTRA_LTLIBRARIES = ${extra_ltlibs}
243 LTLIBVLC = \$(top_builddir)/src/libvlc.la
246 LIBVLC = -L\$(top_builddir)/src -lvlc
253 \$(top_builddir)/compile
255 # Find out which modules were enabled and tell make to build them
258 @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
259 z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin.la;; esac; done; \\
260 \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
263 @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
264 z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin\$(LIBEXT);; esac; done; \\
265 z=\$\$(\$(VLC_CONFIG) --list builtin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}.a;; esac; done; \\
266 \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
270 # Build a plugin with the adequate linker and linker's flags
271 _plugin.a_plugin\$(LIBEXT):
272 @mod="\$*" ; mod=\$\${mod#lib} ; \
273 ldfl="\`\$(VLC_CONFIG) --libs plugin \$\$mod\` \$(LIBADD) -u \$(SYMPREF)\$(VLC_ENTRY)" ; \
274 case \`\$(VLC_CONFIG) --linkage \$\$mod\` in \\
275 c++) ld="\$(CXXLINK)" ;; \
276 objc) ld="\$(OBJCLINK)" ;; \
277 c|*) ld="\$(LINK)" ;; \
279 echo \$\$ld \$< \$\$ldfl ; \
281 #ifneq (,\$(findstring cygwin,\$(host)))
282 # mv -f "\$@.exe" "\$@"
284 @if test -f "\$@.exe"; then mv -f "\$@.exe" "\$@"; fi
287 \$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/bootstrap
288 cd \$(top_srcdir) && \$(SHELL) ./bootstrap
295 -rm -f *.a *\$(LIBEXT)
298 clean-local: \$(clean_modules)
300 ### automake creates libvlcdir after running install-*-local
301 ### so we have to create it ourselves first
302 install-exec-local: all-modules
304 @if test -z "\$(libvlc_LTLIBRARIES)"; then \
305 z=\$\$(\$(VLC_CONFIG) --list plugin); \
306 m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
308 \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" install-libvlcLTLIBRARIES || exit \$\$? ; \
311 mkdir -p -- "\$(DESTDIR)\$(libvlcdir)"
312 @z=\$\$(\$(VLC_CONFIG) --list plugin); \
313 for mod in \$(mods); do \
315 in *\ \$\${mod}\ *) \
316 echo \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" ; \
317 \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" || exit \$\$?; \
325 @if test -z "\$(libvlc_LTLIBRARIES)"; then \
326 z=\$\$(\$(VLC_CONFIG) --list plugin); \
327 m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \
329 \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" uninstall-libvlcLTLIBRARIES || exit \$\$?; \
332 @z=\$\$(\$(VLC_CONFIG) --list plugin); \
333 for mod in \$(mods); do \
335 in *\ \$\${mod}\ *) \
336 echo rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" ; \
337 rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" || true; \
346 if grep '^nodist_SOURCES_'${mod}'' < "${modf}" >/dev/null 2>&1; then
349 cat >> m4/private.m4-tmp4 << EOF
350 ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
352 # Generation of modules/**/Makefile.am
353 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
354 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
355 # S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
356 # the resulting file size.
357 # - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
358 # work properly with any automake version I tested.
359 cat >> "${makf}" << EOF
363 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
364 clean_modules += clean-${mod}
366 -test -z "\$(nodist_SOURCES_${mod})" || rm -f \$(nodist_SOURCES_${mod})
370 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
371 BUILT_SOURCES += \$(B${mod})
374 cat >> "${makf}" << EOF
375 lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
376 lib${mod}_plugin_la_SOURCES = \$(SOURCES_${mod})
378 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
379 nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
380 nodist_lib${mod}_plugin_la_SOURCES = \$(nodist_SOURCES_${mod})
383 cat >> "${makf}" << EOF
384 lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
385 lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
386 lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
387 lib${mod}_plugin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
388 lib${mod}_plugin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
389 lib${mod}_plugin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
390 lib${mod}_plugin_la_LDFLAGS = \`\$(VLC_CONFIG) --libs plugin ${mod}\` \\
391 -rpath '\$(libvlcdir)' -avoid-version -module -shrext \$(LIBEXT) \\
392 -export-symbol-regex ^\$(VLC_ENTRY)\$\$ -no-undefined
393 lib${mod}_plugin_la_LIBADD = \$(LTLIBVLC)
395 lib${mod}_a_SOURCES = \$(SOURCES_${mod})
397 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
398 nodist_lib${mod}_a_SOURCES = \$(nodist_SOURCES_${mod})
401 cat >> "${makf}" << EOF
402 lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\`
403 lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\`
404 lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\`
410 cat >> m4/private.m4-tmp1 << EOF
413 cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
414 cat >> m4/private.m4-tmp2 << EOF
417 cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
418 cat >> m4/private.m4-tmp3 << EOF
421 cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
422 cat >> m4/private.m4-tmp4 << EOF
426 cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
431 ### classic bootstrap stuff
435 # remove autotools cruft
436 rm -f aclocal.m4 configure config.log config.h config.h.in
437 rm -Rf autom4te*.cache
438 # remove old autotools extra cruft
439 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
440 # remove new autotools extra cruft
443 # remove libtool cruft
444 rm -f ltmain.sh libtool ltconfig
445 # remove gettext cruft
449 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
451 # Automake complains if these are not present
452 rm -f vlc-config.in && printf "" > vlc-config.in
453 if [ "$GETTEXT" != "yes" ]; then
454 test -d intl || mkdir intl
455 printf "" > intl/Makefile.am
456 printf "" > ABOUT-NLS
459 # Libtoolize directory
460 ${libtoolize} --copy --force
461 if test -f "ltmain.sh"; then
462 echo "$0: working around a minor libtool issue"
463 mv ltmain.sh autotools/
466 # patch for DLL link for libtool on cygwin (remove when fixed)
467 if test ".`uname -s|sed -n '/^CYGWIN/p'`" != "."; then
468 patch -s -p0 << 'EOF'
469 --- autotools/ltmain.orig 2006-12-05 15:15:42.064607000 +0000
470 +++ autotools/ltmain.sh 2006-12-05 15:16:24.705777800 +0000
471 @@ -4360,7 +4360,7 @@
475 - *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
476 + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,;s,.dll.exe$,.dll,'` ;;
478 if test -n "$vinfo"; then
479 $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
485 ${aclocal} ${ACLOCAL_ARGS}
488 ${automake} --add-missing --copy -Wall
491 ## files which need to be regenerated
493 rm -f vlc-config.in vlc-config
494 rm -f src/misc/modules_builtin.h
500 ## Tell the user about gettext, pkg-config and sed
502 if [ "${GETTEXT}" = "old" ]; then
505 ==========================================================
506 NOTE: you have an old version of gettext installed on your
507 system. The vlc build will work, but if your system does not
508 have libintl you will not have internationalization support.
509 We suggest upgrading to gettext 0.11.5 or later.
513 if [ "$PKGCONFIG" = "no" ]; then
516 ==============================================================
517 NOTE: you do not have the "pkg-config" utility on your system;
518 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be