From: Rémi Denis-Courmont Date: Sat, 1 Sep 2007 16:58:35 +0000 (+0000) Subject: Separate Makefile generation from bootstrap X-Git-Tag: 0.9.0-test0~5952 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=38e86905008a66813faaba66ec8acc5d173b67c8;p=vlc Separate Makefile generation from bootstrap so that we can update individual Makefile.am files. --- diff --git a/bootstrap b/bootstrap index a19662e631..04b7da4713 100755 --- a/bootstrap +++ b/bootstrap @@ -182,148 +182,12 @@ modules="" rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF # Autogenerated by bootstrap - DO NOT EDIT EXTRA_DIST = LIST +dist_noinst_SCRIPTS = genmf SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs` -EOF - -for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac` -do - printf "." - modf="modules/${dir}/Modules.am" - makf="modules/${dir}/Makefile.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`" - mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`" - extra_ltlibs="" - for mod in $mods - do - extra_ltlibs="${extra_ltlibs} lib${mod}_plugin.la" - done - rm -f "${makf}" && cat > "${makf}" << EOF - -# ${makf} automatically generated from ${modf} by bootstrap -# DO NOT EDIT - edit Modules.am or \$(top_srcdir)/bootstrap instead - -basedir = ${basedir} -mods = ${mods} - -NULL = -libvlc_LTLIBRARIES = -EXTRA_DIST = Modules.am -BUILT_SOURCES = -CLEANFILES = -SUBDIRS = ${subdirs} -SUFFIXES = _plugin\$(LIBEXT) _plugin.la - -libvlcdir = \$(libdir)/vlc/\$(basedir) - -EXTRA_LTLIBRARIES = ${extra_ltlibs} - -include Modules.am - -if HAVE_PLUGINS -LTLIBVLC = -L\$(top_builddir)/src -lvlc - -AM_LDFLAGS = -rpath '\$(libvlcdir)' -avoid-version \\ - -module -no-undefined -shrext \$(LIBEXT) -if HAVE_COMPILER_EXPORT -AM_LDFLAGS += -export-dynamic -else -AM_LDFLAGS += -export-symbol-regex ^\$(VLC_ENTRY)\$\$ -endif -AM_LIBADD = \$(LTLIBVLC) -endif - -all: all-modules - -nice: - \$(top_builddir)/compile - -# Find out which modules were enabled and tell make to build them -all-modules: - @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\ - z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin.la;; esac; done; \\ - \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\ - test -z "\$\$fail" - -# Build a plugin with the adequate linker and linker's flags -_plugin.la_plugin\$(LIBEXT): - @mod="\$*" ; mod=\$\${mod#lib} ; \ - ldfl="\`\$(VLC_CONFIG) --libs plugin \$\$mod\` \$(LIBVLC) -u \$(SYMPREF)\$(VLC_ENTRY)" ; \ - case \`\$(VLC_CONFIG) --linkage \$\$mod\` in \\ - c++) ld="\$(CXXLINK)" ;; \ - objc) ld="\$(OBJCLINK)" ;; \ - c|*) ld="\$(LINK)" ;; \ - esac ; \ - echo \$\$ld \$< \$\$ldfl ; \ - \$\$ld \$< \$\$ldfl - -if MAINTAINER_MODE -\$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/bootstrap - cd \$(top_srcdir) && \$(SHELL) ./bootstrap -endif - -mostlyclean-local: - -rm -f -- *.la - -### automake creates libvlcdir after running install-*-local -### so we have to create it ourselves first -install-exec-local: all-modules - @if test -z "\$(libvlc_LTLIBRARIES)"; then \ - z=\$\$(\$(VLC_CONFIG) --list plugin); \ - m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \ - test -z "\$\$m" || \ - \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" install-libvlcLTLIBRARIES || exit \$\$? ; \ - fi - -uninstall-local: - @if test -z "\$(libvlc_LTLIBRARIES)"; then \ - z=\$\$(\$(VLC_CONFIG) --list plugin); \ - m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \ - test -z "\$\$m" || \ - \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" uninstall-libvlcLTLIBRARIES || exit \$\$?; \ - fi - -EOF - for mod in $mods - do - if grep '^nodist_SOURCES_'${mod}'' < "${modf}" >/dev/null 2>&1; then - NODIST=''; else - NODIST='#'; fi - cat >> m4/private.m4 << 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 >> "${makf}" << EOF -# The ${mod} plugin EOF - cat >> "${makf}" << EOF -lib${mod}_plugin_la_SOURCES = \$(SOURCES_${mod}) -EOF - if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF -nodist_lib${mod}_plugin_la_SOURCES = \$(nodist_SOURCES_${mod}) -CLEANFILES += \$(nodist_SOURCES_${mod}) -BUILT_SOURCES += \$(B${mod}) -EOF - fi - cat >> "${makf}" << EOF -lib${mod}_plugin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\` -lib${mod}_plugin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\` -lib${mod}_plugin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\` -lib${mod}_plugin_la_LDFLAGS = \`\$(VLC_CONFIG) --libs plugin ${mod}\` \$(AM_LDFLAGS) -lib${mod}_plugin_la_LIBADD = \$(AM_LIBADD) -EOF - done -done -printf "\n" +modules/genmf `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac` cat >> m4/private.m4 << EOF BLAH diff --git a/modules/genmf b/modules/genmf new file mode 100755 index 0000000000..c4a6624c2c --- /dev/null +++ b/modules/genmf @@ -0,0 +1,151 @@ +#! /bin/sh + +## genmf file for the VLC media player +## +## Copyright (C) 2005-2007 the VideoLAN team +## +## Authors: Sam Hocevar +## Rémi Denis-Courmont + +cd $(dirname "$0")/.. || exit 1 + +while test "$1" +do + printf "." + dir="$1" + modf="modules/${dir}/Modules.am" + makf="modules/${dir}/Makefile.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`" + mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`" + extra_ltlibs="" + for mod in $mods + do + extra_ltlibs="${extra_ltlibs} lib${mod}_plugin.la" + done + rm -f "${makf}" && cat > "${makf}" << EOF +# ${makf} automatically generated from ${modf} by bootstrap +# DO NOT EDIT - edit Modules.am or \$(top_srcdir)/bootstrap instead + +basedir = ${basedir} +mods = ${mods} + +NULL = +libvlc_LTLIBRARIES = +EXTRA_DIST = Modules.am +BUILT_SOURCES = +CLEANFILES = +SUBDIRS = ${subdirs} +SUFFIXES = _plugin\$(LIBEXT) _plugin.la + +libvlcdir = \$(libdir)/vlc/\$(basedir) + +EXTRA_LTLIBRARIES = ${extra_ltlibs} + +include Modules.am + +if HAVE_PLUGINS +LTLIBVLC = -L\$(top_builddir)/src -lvlc + +AM_LDFLAGS = -rpath '\$(libvlcdir)' -avoid-version \\ + -module -no-undefined -shrext \$(LIBEXT) +if HAVE_COMPILER_EXPORT +AM_LDFLAGS += -export-dynamic +else +AM_LDFLAGS += -export-symbol-regex ^\$(VLC_ENTRY)\$\$ +endif +AM_LIBADD = \$(LTLIBVLC) +endif + +all: all-modules + +nice: + \$(top_builddir)/compile + +# Find out which modules were enabled and tell make to build them +all-modules: + @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\ + z=\$\$(\$(VLC_CONFIG) --list plugin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}_plugin.la;; esac; done; \\ + \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\ + test -z "\$\$fail" + +# Build a plugin with the adequate linker and linker's flags +_plugin.la_plugin\$(LIBEXT): + @mod="\$*" ; mod=\$\${mod#lib} ; \ + ldfl="\`\$(VLC_CONFIG) --libs plugin \$\$mod\` \$(LIBVLC) -u \$(SYMPREF)\$(VLC_ENTRY)" ; \ + case \`\$(VLC_CONFIG) --linkage \$\$mod\` in \\ + c++) ld="\$(CXXLINK)" ;; \ + objc) ld="\$(OBJCLINK)" ;; \ + c|*) ld="\$(LINK)" ;; \ + esac ; \ + echo \$\$ld \$< \$\$ldfl ; \ + \$\$ld \$< \$\$ldfl + +if MAINTAINER_MODE +\$(srcdir)/Makefile.am: \$(srcdir)/Modules.am \$(top_srcdir)/modules/genmf + cd \$(top_srcdir) && \$(SHELL) modules/genmf ${dir} +endif + +mostlyclean-local: + -rm -f -- *.la + +### automake creates libvlcdir after running install-*-local +### so we have to create it ourselves first +install-exec-local: all-modules + @if test -z "\$(libvlc_LTLIBRARIES)"; then \ + z=\$\$(\$(VLC_CONFIG) --list plugin); \ + m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \ + test -z "\$\$m" || \ + \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" install-libvlcLTLIBRARIES || exit \$\$? ; \ + fi + +uninstall-local: + @if test -z "\$(libvlc_LTLIBRARIES)"; then \ + z=\$\$(\$(VLC_CONFIG) --list plugin); \ + m=\`for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo -n " lib\$\${mod}_plugin.la" ;; esac; done\` ; \ + test -z "\$\$m" || \ + \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" uninstall-libvlcLTLIBRARIES || exit \$\$?; \ + fi + +EOF + for mod in $mods + do + if grep '^nodist_SOURCES_'${mod}'' < "${modf}" >/dev/null 2>&1; then + NODIST=''; else + NODIST='#'; fi + cat >> m4/private.m4 << 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 >> "${makf}" << EOF +# The ${mod} plugin + +EOF + cat >> "${makf}" << EOF +lib${mod}_plugin_la_SOURCES = \$(SOURCES_${mod}) +EOF + if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF +nodist_lib${mod}_plugin_la_SOURCES = \$(nodist_SOURCES_${mod}) +CLEANFILES += \$(nodist_SOURCES_${mod}) +BUILT_SOURCES += \$(B${mod}) +EOF + fi + cat >> "${makf}" << EOF +lib${mod}_plugin_la_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\` +lib${mod}_plugin_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\` +lib${mod}_plugin_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\` +lib${mod}_plugin_la_LDFLAGS = \`\$(VLC_CONFIG) --libs plugin ${mod}\` \$(AM_LDFLAGS) +lib${mod}_plugin_la_LIBADD = \$(AM_LIBADD) +EOF + done + + shift +done +printf "\n"