3 ## bootstrap file for the VLC media player
6 ## Copyright (C) 2005 the VideoLAN team
8 ## Initial author: Sam Hocevar <sam@zoy.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
36 # Check for contrib directory
37 if test -d extras/contrib/bin; then
38 export PATH=./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
53 if automake-1.9 --version >/dev/null 2>&1; then
55 elif automake-1.8 --version >/dev/null 2>&1; then
57 elif automake-1.7 --version >/dev/null 2>&1; then
59 elif automake-1.6 --version >/dev/null 2>&1; then
61 if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1; then
64 elif automake-1.5 --version >/dev/null 2>&1; then
67 elif automake --version > /dev/null 2>&1; then
69 case "`automake --version | sed -e '1s/[^0-9]*//' -e q`" in
70 0|0.*|1|1.[01234]|1.[01234][-.]*)
81 if test "${amvers}" = "none"; then
83 echo "you need automake version 1.5 or later"
88 if gettextize --version >/dev/null 2>&1; then
89 # Autopoint is available from 0.11.3, but we need 0.11.5
90 if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
91 '>=' 0.11.5 >/dev/null 2>&1; then
92 # We have gettext, and a recent version! Everything is cool.
96 # User's gettext is too old. try to continue anyway.
101 echo "you need gettextize (package gettext-devel or gettext)"
105 # Check for pkg-config
106 if pkg-config --version >/dev/null 2>&1; then
107 # We have pkg-config, everything is cool.
113 aclocal=aclocal${amvers}
114 automake=automake${amvers}
116 autoheader=autoheader
119 ## Generate the modules makefile, by parsing modules/**/Modules.am
123 echo "generating modules/**/Makefile.am and m4/private.m4"
125 # Prepare m4/private.m4
126 rm -f m4/private.m4 && cat > m4/private.m4 << EOF
127 dnl Private VLC macros - generated by bootstrap
131 if [ "${PKGCONFIG}" = "no" ]; then cat >> m4/private.m4 << EOF
132 dnl User does not have pkg-config, so assume package was not found
133 AC_DEFUN([PKG_CHECK_MODULES],[ifelse([\$4], , :, [\$4])])
138 if [ "${GETTEXT}" != "yes" ]; then cat >> m4/private.m4 << EOF
139 dnl User does not have gettext, so this is a no-op
140 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
145 rm -f m4/private.m4-tmp1 && cat > m4/private.m4-tmp1 << EOF
146 dnl The required AM_CONDITIONAL calls
147 dnl XXX: too many conditionals make the build very slow, disabled them
148 AC_DEFUN([VLC_CONDITIONALS], [
150 rm -f m4/private.m4-tmp2 && cat > m4/private.m4-tmp2 << EOF
151 dnl The required AC_SUBST calls
152 AC_DEFUN([VLC_SUBSTS], [
154 rm -f m4/private.m4-tmp3 && cat > m4/private.m4-tmp3 << EOF
155 dnl The required AC_OUTPUT calls
156 dnl XXX: this feature is only supported starting from automake-1.7
157 AC_DEFUN([VLC_MAKEFILES], [AC_OUTPUT([
159 rm -f m4/private.m4-tmp4 && cat > m4/private.m4-tmp4 << EOF
160 dnl Helper macro for vlc-config generation
161 AC_DEFUN([VLC_CONFIG_HELPER], [
162 cat >> vlc-config.in << BLAH
167 rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF
168 # Autogenerated by bootstrap - DO NOT EDIT
170 SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`
173 for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac`
176 modf="modules/${dir}/Modules.am"
177 makf="modules/${dir}/Makefile.am"
178 basedir="`echo "${dir}" | cut -f1 -d/`"
179 # automake will not recurse for make dist if we don't define SUBDIRS = .
180 subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`"
181 mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`"
185 extra_libs="${extra_libs} lib${mod}_plugin.a"
186 extra_libs="${extra_libs} lib${mod}.a lib${mod}_pic.a"
188 rm -f "${makf}" && cat > "${makf}" << EOF
190 # ${makf} automatically generated from ${modf} by bootstrap
191 # DO NOT EDIT - edit Modules.am or \$(top_srcdir)/bootstrap instead
200 EXTRA_DIST = Modules.am
203 SUFFIXES = _plugin\$(LIBEXT) _plugin.a
205 libvlcdir = \$(libdir)/vlc/\$(basedir)
207 EXTRA_LIBRARIES = ${extra_libs}
211 LIBVLC = \$(top_builddir)/src/libvlc\$(LIBEXT)
225 # Find out which modules were enabled and tell make to build them
227 @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\
228 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; \\
229 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; \\
230 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; \\
231 \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\
234 # Build a plugin with the adequate linker and linker's flags
235 _plugin.a_plugin\$(LIBEXT):
236 @mod="\$*" ; mod=\$\${mod#lib} ; \
237 ldfl="\`\$(VLC_CONFIG) --libs plugin \$\$mod\` \$(LIBADD) -u \$(SYMPREF)\$(VLC_ENTRY)" ; \
238 case \`\$(VLC_CONFIG) --linkage \$\$mod\` in \\
239 c++) ld="\$(CXXLINK)" ;; \
240 objc) ld="\$(OBJCLINK)" ;; \
241 c|*) ld="\$(LINK)" ;; \
243 echo \$\$ld \$< \$\$ldfl ; \
247 \$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/bootstrap
248 cd \$(top_srcdir) && \$(SHELL) ./bootstrap
252 -rm -f *.a *\$(LIBEXT)
254 ### automake creates libvlcdir after running install-*-local
255 ### so we have to create it ourselves first
256 install-exec-local: all-modules
257 mkdir -p -- "\$(DESTDIR)\$(libvlcdir)"
258 @z=\$\$(\$(VLC_CONFIG) --list plugin); \
259 for mod in \$(mods); do \
261 in *\ \$\${mod}\ *) \
262 echo \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" ; \
263 \$(INSTALL_PROGRAM) "lib\$\${mod}_plugin\$(LIBEXT)" "\$(DESTDIR)\$(libvlcdir)/" || exit \$\$?; \
267 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
268 for mod in \$(mods); do \
270 in *\ \$\${mod}\ *) \
271 echo \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" ; \
272 \$(INSTALL_DATA) "lib\$\${mod}.a" "\$(DESTDIR)\$(libdir)/vlc/" || exit \$\$?; \
277 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
278 for mod in \$(mods); do \
280 in *\ \$\${mod}\ *) \
281 echo \$(INSTALL_DATA) "lib\$\${mod}_pic.a" "\$(DESTDIR)\$(libdir)/vlc/" ; \
282 \$(INSTALL_DATA) "lib\$\${mod}_pic.a" "\$(DESTDIR)\$(libdir)/vlc/" || exit \$\$?; \
289 @z=\$\$(\$(VLC_CONFIG) --list plugin); \
290 for mod in \$(mods); do \
292 in *\ \$\${mod}\ *) \
293 echo rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" ; \
294 rm -f "\$(DESTDIR)\$(libvlcdir)/lib\$\${mod}_plugin\$(LIBEXT)" || true; \
298 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
299 for mod in \$(mods); do \
301 in *\ \$\${mod}\ *) \
302 echo rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" ; \
303 rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}.a" || true; \
308 @z=\$\$(\$(VLC_CONFIG) --list builtin); \
309 for mod in \$(mods); do \
311 in *\ \$\${mod}\ *) \
312 echo rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}_pic.a" ; \
313 rm -f "\$(DESTDIR)\$(libdir)/vlc/lib\$\${mod}_pic.a" || true; \
322 if grep '^nodist_SOURCES_'${mod}'' < "${modf}" >/dev/null 2>&1; then
325 cat >> m4/private.m4-tmp4 << EOF
326 ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
328 # Generation of modules/**/Makefile.am
329 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
330 # - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
331 # S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
332 # the resulting file size.
333 # - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
334 # work properly with any automake version I tested.
335 cat >> "${makf}" << EOF
339 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
340 clean-local: clean-${mod}
342 -test -z "\$(nodist_SOURCES_${mod})" || rm -f \$(nodist_SOURCES_${mod})
346 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
347 BUILT_SOURCES += \$(B${mod})
350 cat >> "${makf}" << EOF
351 lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
353 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
354 nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
357 cat >> "${makf}" << EOF
358 lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
359 lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
360 lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`
362 lib${mod}_pic_a_SOURCES = \$(SOURCES_${mod})
364 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
365 nodist_lib${mod}_pic_a_SOURCES = \$(nodist_SOURCES_${mod})
368 cat >> "${makf}" << EOF
369 lib${mod}_pic_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\`
370 lib${mod}_pic_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\`
371 lib${mod}_pic_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\`
373 lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
375 if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF
376 nodist_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
379 cat >> "${makf}" << EOF
380 lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
381 lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
382 lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`
388 cat >> m4/private.m4-tmp1 << EOF
391 cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
392 cat >> m4/private.m4-tmp2 << EOF
395 cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
396 cat >> m4/private.m4-tmp3 << EOF
399 cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
400 cat >> m4/private.m4-tmp4 << EOF
404 cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
409 ### classic bootstrap stuff
413 # remove autotools cruft
414 rm -f aclocal.m4 configure config.log config.h config.h.in
415 rm -Rf autom4te*.cache
416 # remove old autotools extra cruft
417 rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
418 # remove new autotools extra cruft
421 # remove libtool cruft
422 rm -f ltmain.sh libtool ltconfig
423 # remove gettext cruft
426 # remove old vlc cruft
427 rm -f m4/oldgettext.m4 stamp-pic configure.ac.in Modules.am
428 # remove new vlc cruft
429 rm -f stamp-builtin stamp-h* mozilla/stamp-pic
431 # Automake complains if these are not present
432 rm -f vlc-config.in && printf "" > vlc-config.in
433 if [ "$GETTEXT" != "yes" ]; then
434 test -d intl || mkdir intl
435 printf "" > intl/Makefile.am
436 printf "" > ABOUT-NLS
441 ${aclocal} ${ACLOCAL_ARGS}
444 ${automake} --add-missing --copy
447 ## files which need to be regenerated
449 rm -f vlc-config.in vlc-config
450 rm -f src/misc/modules_builtin.h
451 rm -f mozilla/vlcintf.h
457 ## Tell the user about gettext, pkg-config and sed
459 if [ "${GETTEXT}" = "old" ]; then
462 ==========================================================
463 NOTE: you have an old version of gettext installed on your
464 system. The vlc build will work, but if your system does not
465 have libintl you will not have internationalization support.
466 We suggest upgrading to gettext 0.11.5 or later.
470 if [ "$PKGCONFIG" = "no" ]; then
473 ==============================================================
474 NOTE: you do not have the "pkg-config" utility on your system;
475 detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
480 if [ "$AUTOMAKESUCKS" = "yes" ]; then
483 =============================================================
484 IMPORTANT NOTE: your version of automake has a bug which will
485 prevent proper plugin compilation. Either compile VLC with
486 the --disable-plugins flag, or use a version of automake newer
487 than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
491 if [ "$INSTALLSUCKS" = "yes" ]; then
494 =============================================================
495 IMPORTANT NOTE: your version of automake has a bug which will
496 prevent proper installation. Do not use "make install" with this
497 version of automake, or use a version of automake newer than 1.5
498 (such as 1.6 or 1.7).