X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bootstrap;h=de22f0cfa294d38f04500e641109db39277bad21;hb=416de47b7f3632a02ed35e4aa1ae0daf8aaf7aec;hp=34b31c69ea483479aafdaff529ec69e2d9a1d927;hpb=e3401d578754e7fd0dd49ba18b95b527420f1630;p=vlc diff --git a/bootstrap b/bootstrap index 34b31c69ea..de22f0cfa2 100755 --- a/bootstrap +++ b/bootstrap @@ -1,136 +1,424 @@ #! /bin/sh -## bootstrap.sh file for vlc, the VideoLAN Client -## $Id: bootstrap,v 1.4 2002/08/26 20:49:49 sam Exp $ +## bootstrap file for the VLC media player +## $Id: bootstrap,v 1.61 2003/07/02 14:08:56 sam Exp $ ## -## Authors: Samuel Hocevar +## Authors: Sam Hocevar -### -### get a sane environment -### -export LANG=C +if test "$#" != "0"; then + echo "Usage: $0" + echo " Calls automake, autoconf, autoheader, autopoint and other auto* to generate" + echo " m4 macros and prepare Makefiles." + exit 1 +fi ### -### argument check +### Get a sane environment, just in case ### -do_po=no -while test $# -gt 0; do - case "$1" in - --update-po) - do_po=yes - ;; - *) - echo "unknown option $1" - ;; - esac - shift +LANG=C +export LANG +CYGWIN=binmode +export CYGWIN + +## +## Naively assume our system doesn't suck. Unfortunately it seldom doesn't. +## +AUTOMAKESUCKS=no +INSTALLSUCKS=no + +## +## Check that our tools don't suck +## + +## +## Generate the modules makefile, by parsing modules/**/Modules.am +## + +printf "generating modules/**/Makefile.am and m4/private.m4" + +# Prepare m4/private.m4 +rm -f m4/private.m4 && cat > m4/private.m4 << EOF +dnl Private VLC macros - generated by bootstrap + +EOF +rm -f m4/private.m4-tmp1 && cat > m4/private.m4-tmp1 << EOF +dnl The required AM_CONDITIONAL calls +dnl XXX: too many conditionals make the build very slow, disabled them +AC_DEFUN([AX_VLC_CONDITIONALS], [ +EOF +rm -f m4/private.m4-tmp2 && cat > m4/private.m4-tmp2 << EOF +dnl The required AC_SUBST calls +AC_DEFUN([AX_VLC_SUBSTS], [ +EOF +rm -f m4/private.m4-tmp3 && cat > m4/private.m4-tmp3 << EOF +dnl The required AC_OUTPUT calls +dnl XXX: this feature is only supported starting from automake-1.7 +AC_DEFUN([AX_VLC_MAKEFILES], [AC_OUTPUT([ +EOF +rm -f m4/private.m4-tmp4 && cat > m4/private.m4-tmp4 << EOF +dnl Helper macro for vlc-config generation +AC_DEFUN([AX_VLC_CONFIG_HELPER], [ + cat >> vlc-config.in << BLAH +EOF + +modules="" +count=0 + +rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF +# Autogenerated by bootstrap - DO NOT EDIT +EXTRA_DIST = LIST +SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs` +#DIST_SUBDIRS = \$(SUBDIRS) +EOF + +for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac` +do + printf "." + mf="modules/${dir}/Modules.am" + basedir="`echo ${dir} | cut -f1 -d/`" + # automake will not recurse for make dist if we don't define SUBDIRS = . + subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`" + #parent=`echo ${dir} | sed -e 's@[^/]*@..@g'` + #echo " modules/${dir}/Makefile" >> m4/private.m4-tmp3 + rm -f modules/${dir}/Makefile.am && cat > modules/${dir}/Makefile.am << EOF + +# Autogenerated by bootstrap - DO NOT EDIT - edit Modules.am instead + +NULL = +libvlc_LIBRARIES = +noinst_LIBRARIES = +noinst_HEADERS = +EXTRA_DIST = Modules.am +BUILT_SOURCES = +SUBDIRS = ${subdirs} +#DIST_SUBDIRS = \$(SUBDIRS) +libvlcdir = \$(libdir)/vlc/${basedir} +include Modules.am + +clean: + rm -f *.a *.so *.dll *.sl *.dylib + +EOF + for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf}` + do + count="`expr ${count} + 1`" + if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then + PRIVATE='#'; else + PRIVATE=''; fi + if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then + NODIST=''; else + NODIST='#'; fi +# cat >> m4/private.m4-tmp1 << EOF +#dnl AM_CONDITIONAL(${mod}_p, test x\$${mod}_p = xyes) +#dnl AM_CONDITIONAL(${mod}_b, test x\$${mod}_b = xyes) +#EOF + cat >> m4/private.m4-tmp4 << EOF + ${mod}) list="\\\${list} ${dir}/lib${mod}" ;; +EOF +# Generation of modules/**/Makefile.am +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_, +# S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce +# the resulting file size. +# - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to +# work properly with any automake version I tested. + cat >> modules/${dir}/Makefile.am << EOF +# The ${mod} plugin + +all: all-${mod} + +all-${mod}: +if BUILD_MOZILLA + if \$(VLC_CONFIG) --target plugin | grep "${dir}/lib${mod}_plugin" >/dev/null 2>&1 ; then \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}_plugin\$(LIBEXT); fi; \\ + if \$(VLC_CONFIG) --target builtin | grep "${dir}/lib${mod}\\.a" >/dev/null 2>&1 ; then \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}.a; fi; \\ + if \$(VLC_CONFIG) --target builtin pic | grep "${dir}/lib${mod}_pic\\.a" >/dev/null 2>&1 ; then \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}_pic.a; fi +else + if \$(VLC_CONFIG) --target plugin | grep "${dir}/lib${mod}_plugin" >/dev/null 2>&1 ; then \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}_plugin\$(LIBEXT); fi; \\ + if \$(VLC_CONFIG) --target builtin | grep "${dir}/lib${mod}\\.a" >/dev/null 2>&1 ; then \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}.a; fi +endif + +if UNTRUE +L${count}p = lib${mod}_plugin.a +D${count}p = lib${mod}_plugin\$(LIBEXT) +L${count}b = lib${mod}.a +L${count}pic = lib${mod}_pic.a +EOF + if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF +B${count}p = \$(nodist_SOURCES_${mod}) +B${count}b = \$(nodist_SOURCES_${mod}) +EOF + fi + cat >> modules/${dir}/Makefile.am << EOF +endif + +EOF + if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF +${PRIVATE}BUILT_SOURCES += \$(B${count}p) \$(B${count}b) +EOF + fi + cat >> modules/${dir}/Makefile.am << EOF +${PRIVATE}lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod}) +EOF + if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF +${PRIVATE}nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod}) +EOF + fi + cat >> modules/${dir}/Makefile.am << EOF +lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\` +lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\` +lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\` + +lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod}) +EOF + if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF +nodist_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod}) +EOF + fi + cat >> modules/${dir}/Makefile.am << EOF +lib${mod}_pic_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\` +lib${mod}_pic_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\` +lib${mod}_pic_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\` + +lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod}) +EOF + if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF +nodist_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod}) +EOF + fi + cat >> modules/${dir}/Makefile.am << EOF +lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\` +lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\` +lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\` + +libvlc_LIBRARIES += \$(L${count}b) \$(L${count}pic) +lib${mod}_DATA = \$(D${count}p) + +lib${mod}dir = \$(libdir)/vlc/${topdir} +${PRIVATE}noinst_LIBRARIES += \$(L${count}p) +${PRIVATE}lib${mod}_plugin\$(LIBEXT): \$(lib${mod}_plugin_a_OBJECTS) +${PRIVATE} case \`\$(VLC_CONFIG) --linkage ${mod}\` in \\ +${PRIVATE} c++) \$(CXXLINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\ +${PRIVATE} objc) \$(OBJCLINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\ +${PRIVATE} c|*) \$(LINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\ +${PRIVATE} esac + + +EOF + done done +cat >> m4/private.m4-tmp1 << EOF + AM_CONDITIONAL(UNTRUE, false) +]) +EOF +cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1 +cat >> m4/private.m4-tmp2 << EOF +]) +EOF +cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2 +cat >> m4/private.m4-tmp3 << EOF +])]) +EOF +cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3 +cat >> m4/private.m4-tmp4 << EOF +BLAH +]) +EOF +cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4 + +echo "done." + ### -### classic stuff +### classic bootstrap stuff ### set -x -rm -f aclocal.m4 configure config.guess config.log config.sub ltmain.sh libtool ltconfig missing mkinstalldirs depcomp install-sh -if expr `gettextize --version | head -1 | sed 's/[^0-9]*//'` \ - '>' 0.11.3 >/dev/null 2>&1 -then - autopoint --force +# remove autotools cruft +rm -f aclocal.m4 configure configure.ac.in config.log Modules.am +# remove old autotools extra cruft +rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh +# remove new autotools extra cruft +(cd autotools && rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh) +# remove libtool cruft +rm -f ltmain.sh libtool ltconfig +# remove gettext cruft +rm -f m4/oldgettext.m4 ABOUT-NLS +rm -Rf intl + +# Check for gettext +if gettextize --version >/dev/null 2>&1; then +# Autopoint is available from 0.11.3, but we need 0.11.5 +if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \ + '>=' 0.11.5 >/dev/null 2>&1; then + # We have gettext, and a recent version! Everything is cool. + autopoint || exit 1 + GETTEXT=yes else - # What?! User is not using a recent version of gettext? We'll have to - # cheat a bit, then. - rm -f po/ChangeLog~ - aclocaldir=`gettextize --copy --force | grep '^from the' | cut -f3 -d' '` - # Yuck! - test -f po/ChangeLog~ && mv po/ChangeLog~ po/ChangeLog - mkdir -p m4 - # Yuck! - for file in codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 \ - lcmessage.m4 progtest.m4 - do cp ${aclocaldir}/${file} m4/ - done - # Yuck! - echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' >> m4/gettext.m4 + # User's gettext is too old. try to continue anyway. + echo > ABOUT-NLS + mkdir -p intl + echo > intl/Makefile.am + cat >> m4/private.m4 << EOF +dnl User's gettext is too old, so this is a no-op +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) + +EOF + GETTEXT=old +fi;else + # we don't have gettext. grmbl. try to continue anyway. + echo > ABOUT-NLS + mkdir -p intl + echo > intl/Makefile.am + cat >> m4/private.m4 << EOF +dnl User does not have gettext, so this is a no-op +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) + +EOF + GETTEXT=no +fi + +# Check for pkg-config +if pkg-config --version >/dev/null 2>&1; then + # We have pkg-config, everything is cool. + PKGCONFIG=yes +else + # Not present, use a workaround. + cat >> m4/private.m4 << EOF +dnl User does not have pkg-config, so this is a no-op +AC_DEFUN([PKG_CHECK_MODULES], []) + +EOF + PKGCONFIG=no fi -aclocal -I m4 -automake --foreign --add-missing --copy -autoconf -autoheader +# Check for automake +amvers="none" +if automake-1.7 --version >/dev/null 2>&1; then + amvers="-1.7" + # If we also have 1.6, use it instead because it is faster + if automake-1.6 --version >/dev/null 2>&1; then + if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" ">" "1.6.1" > /dev/null 2>&1 + then amvers="-1.6" + fi + fi +elif automake-1.6 --version >/dev/null 2>&1; then + amvers="-1.6" + if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1 + then AUTOMAKESUCKS=yes + fi +elif automake-1.5 --version >/dev/null 2>&1; then + INSTALLSUCKS=yes + amvers="-1.5" +elif automake --version > /dev/null 2>&1; then + amvers="" + case "`automake --version | sed -e '1s/[^0-9]*//' -e q`" in + 0|0.*|1|1.[01234]|1.[01234][-.]*) + amvers="none" ;; + 1.5|1.5.*) + INSTALLSUCKS=yes ;; + 1.6|1.6.0|1.6.1) + AUTOMAKESUCKS=yes ;; + esac +fi -# nuahahahahaha !! overwriting Makefile.in with what *I* want! -cp Makefile.old Makefile.in +if test "${amvers}" = "none"; then + set +x + echo "you need automake version 1.5 or later" + exit 1 +fi + +# Automake complains if this is not present +rm -f vlc-config.in && printf "" > vlc-config.in + +# Do the rest +aclocal${amvers} -I m4 || exit 1 +autoheader || exit 1 + +automake${amvers} --add-missing --copy + +autoconf || exit 1 ## -## headers which need to be regenerated because of the VLC_EXPORT macro +## files which need to be regenerated ## -file=src/misc/modules_plugin.h -rm -f $file -sed 's#.*\$[I][d]:.*# * Automatically generated from '$file'.in by bootstrap.sh#' < $file.in > $file -echo '#define STORE_SYMBOLS( p_symbols ) \' >> $file -cat include/*.h | grep '^ *VLC_EXPORT.*;' | \ - sed 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/ (p_symbols)->\2_inner = \2; \\/' >> $file -echo '' >> $file - -file=include/vlc_symbols.h -rm -f $file && touch $file -echo '/* DO NOT EDIT THIS FILE ! It was generated by bootstrap.sh */' >> $file -echo '' >> $file -echo 'struct module_symbols_t' >> $file -echo '{' >> $file -cat include/*.h | grep '^ *VLC_EXPORT.*;' | \ - sed 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/ \1 (* \2_inner) \3;/' | sort >> $file -echo '};' >> $file -echo '' >> $file -echo '#ifdef __PLUGIN__' >> $file -cat include/*.h | grep '^ *VLC_EXPORT.*;' | \ - sed 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/# define \2 p_symbols->\2_inner/' | sort >> $file -echo '#endif /* __PLUGIN__ */' >> $file -echo '' >> $file +rm -f vlc-config.in vlc-config +rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h +rm -f include/vlc_symbols.h +rm -f mozilla/vlcintf.h +## +## Shut up +## +set +x ## -## Glade sometimes sucks +## Tell the user about gettext, pkg-config and sed ## -for file in gnome_interface.c gtk_interface.c -do -if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null -then - rm -f /tmp/$$.$file.bak - cat > /tmp/$$.$file.bak << EOF -/* This file was created automatically by glade and fixed by bootstrap.sh */ - -#include -EOF - tail +8 modules/gui/gtk/$file \ - | sed 's#_("-:--:--")#"-:--:--"#' \ - | sed 's#_("---")#"---"#' \ - | sed 's#_("--")#"--"#' \ - | sed 's#_("/dev/dvd")#"/dev/dvd"#' \ - | sed 's#_(\("./."\))#\1#' \ - >> /tmp/$$.$file.bak - mv -f /tmp/$$.$file.bak modules/gui/gtk/$file -fi -done +case "${GETTEXT}" in + yes) + ;; + no) + cat << EOF -file=gtk_support.h -if grep "DO NOT EDIT THIS FILE" modules/gui/gtk/$file 2>&1 > /dev/null -then - rm -f /tmp/$$.$file.bak - sed 's/DO NOT EDIT THIS FILE.*/This file was created automatically by glade and fixed by bootstrap.sh/ ; s/#if.*ENABLE_NLS.*/#if defined( ENABLE_NLS ) \&\& defined ( HAVE_GETTEXT )/' < modules/gui/gtk/$file > /tmp/$$.$file.bak - mv -f /tmp/$$.$file.bak modules/gui/gtk/$file -fi +=========================================================== +IMPORTANT NOTE: you do not have gettext installed on your +system. The vlc build will work, but you will not have +internationalization support. We suggest installing gettext. +EOF + ;; + old) + cat << EOF + +========================================================== +NOTE: you have an old version of gettext installed on your +system. The vlc build will work, but if your system does not +have libintl you will not have internationalization support. +We suggest upgrading to gettext 0.11.5 or later. +EOF + ;; +esac +case "$PKGCONFIG" in + yes) + ;; + no) + cat << EOF -## -## Update the potfiles because no one ever does it -## -if test "$do_po" = "no" -then - echo "not updating potfiles. use --update-po to force doing it." -else - cd po - make update-po 2>&1 | grep '^[^:]*:$' | cut -f1 -d: | tr '\n' ' ' | sed 's/ $//' - cd .. -fi +============================================================== +NOTE: you do not have the "pkg-config" utility on your system; +detection of the Gtk-2.0 and GNOME 2.0 libraries will not be +reliable. +EOF + ;; +esac + +case "$AUTOMAKESUCKS" in + no) + ;; + yes) + cat << EOF + +============================================================= +IMPORTANT NOTE: your version of automake has a bug which will +prevent proper plugin compilation. Either compile VLC with +the --disable-plugins flag, or use a version of automake newer +than 1.6.1 (1.6.2 is OK, and so are the 1.5 series). +EOF + ;; +esac + +case "$INSTALLSUCKS" in + no) + ;; + yes) + cat << EOF + +============================================================= +IMPORTANT NOTE: your version of automake has a bug which will +prevent proper installation. Do not use "make install" with this +version of automake, or use a version of automake newer than 1.5 +(such as 1.6 or 1.7). +EOF + ;; +esac