From 6aa5b046329c07819c4f96a3b889a7155c357deb Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Thu, 23 Feb 2006 19:41:36 +0000 Subject: [PATCH] _Experimental_ *optional* libtool support (--enable-libtool) Should work fine (ie. better than --enable-shared-libvlc) on Linux, should work on Mac OS X (except for packaging), while shared libvlc doesn't. Won't work on Win32 with the current Win32 contrib. Stick to static libvlc or use --enable-shared-libvlc for now. --- Makefile.am | 21 +++++---- bootstrap | 78 +++++++++++++++++++++++++++++---- configure.ac | 35 +++++++++++---- modules/video_filter/Modules.am | 2 +- src/Makefile.am | 38 ++++++++++++---- 5 files changed, 140 insertions(+), 34 deletions(-) diff --git a/Makefile.am b/Makefile.am index 78fc12d4b4..b4808335a3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -221,27 +221,32 @@ if HAVE_WINCE vlc_WORKAROUNDLDFLAGS = $(LIB_libvlc) endif -vlc_CFLAGS = `$(VLC_CONFIG) --cflags vlc` -vlc_LDFLAGS = $(LDFLAGS_libvlc) $(vlc_WORKAROUNDLDFLAGS) $(INCLUDED_LIBINTL) -vlc_LDADD = $(DATA_win32_rc) - # We use DEPENDENCIES_vlc instead of vlc_DEPENDENCIES because of an # old automake-1.5 bug (automake/279). DEPENDENCIES_vlc = $(LIB_libvlc) $(DATA_win32_rc) +vlc_CFLAGS = `$(VLC_CONFIG) --cflags vlc` +if USE_LIBTOOL +vlc_LDFLAGS = `$(VLC_CONFIG) --libs vlc` +LIB_libvlc = src/libvlc.la +LIBVLC = $(LIB_libvlc) +else if BUILD_SHARED -vlc_LDFLAGS += `$(VLC_CONFIG) --libs vlc` -Wl,-rpath $(libdir) -L$(top_builddir)/src -lvlc +vlc_LDFLAGS = `$(VLC_CONFIG) --libs vlc` -Wl,-rpath $(libdir) -L$(top_builddir)/src -lvlc if HAVE_WIN32 LIB_libvlc = src/libvlc.dll.a else LIB_libvlc = src/libvlc$(LIBEXT) endif +LIBVLC = else -vlc_LDFLAGS += `$(VLC_CONFIG) --libs vlc builtin` -vlc_LDADD += $(LIB_libvlc) +vlc_LDFLAGS = $(vlc_WORKAROUNDLFDLAGS) `$(VLC_CONFIG) --libs vlc builtin` LIB_libvlc = src/libvlc.a +LIBVLC = $(LIB_libvlc) DEPENDENCIES_vlc += stamp-builtin endif +endif +vlc_LDADD = $(DATA_win32_rc) $(LIBVLC) $(INCLUDED_LIBINTL) vlc$(EXEEXT): $(vlc_OBJECTS) $(DEPENDENCIES_vlc) @rm -f vlc$(EXEEXT) @@ -280,7 +285,7 @@ vlc-bundle: vlc find $(top_builddir)/vlc-bundle -type f -exec mimeset -f "{}" \; endif -# Install the symlinks and shared libvlc +# Install the symlinks install-exec-local: for i in "" $(ALIASES) ; do if test -n "$$i" ; then \ rm -f "$(DESTDIR)$(bindir)/$$i" && \ diff --git a/bootstrap b/bootstrap index d109472eda..01702d8261 100755 --- a/bootstrap +++ b/bootstrap @@ -3,7 +3,7 @@ ## bootstrap file for the VLC media player ## $Id$ ## -## Copyright (C) 2005 the VideoLAN team +## Copyright (C) 2005-2006 the VideoLAN team ## ## Initial author: Sam Hocevar @@ -80,7 +80,21 @@ fi if test "${amvers}" = "none"; then set +x - echo "you need automake version 1.5 or later" + echo "$0: you need automake version 1.5 or later" + exit 1 +fi + +# Check for libtool +libtoolize="no" +if glibtoolize --version >/dev/null 2>&1; then + libtoolize="glibtoolize" +elif libtoolize --version >/dev/null 2>&1; then + libtoolize="libtoolize" +fi + +if test "$libtoolize" = "no"; then + set +x + echo "$0: you need libtool" exit 1 fi @@ -180,10 +194,11 @@ do subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`" mods="`sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < "${modf}" | xargs`" extra_libs="" + extra_ltlibs="" for mod in $mods do - extra_libs="${extra_libs} lib${mod}_plugin.a" - extra_libs="${extra_libs} lib${mod}.a lib${mod}_pic.a" + extra_libs="${extra_libs} lib${mod}_plugin.a lib${mod}.a lib${mod}_pic.a" + extra_ltlibs="${extra_ltlibs} lib${mod}_plugin.la lib${mod}.la" done rm -f "${makf}" && cat > "${makf}" << EOF @@ -194,9 +209,7 @@ basedir = ${basedir} mods = ${mods} NULL = -libvlc_LIBRARIES = -noinst_LIBRARIES = -noinst_HEADERS = +libvlc_LTLIBRARIES = EXTRA_DIST = Modules.am BUILT_SOURCES = SUBDIRS = ${subdirs} @@ -205,8 +218,12 @@ SUFFIXES = _plugin\$(LIBEXT) _plugin.a libvlcdir = \$(libdir)/vlc/\$(basedir) EXTRA_LIBRARIES = ${extra_libs} +EXTRA_LTLIBRARIES = ${extra_ltlibs} + include Modules.am +LTLIBVLC = \$(top_builddir)/src/libvlc.la + if BUILD_SHARED LIBVLC = \$(top_builddir)/src/libvlc\$(LIBEXT) if HAVE_WIN32 @@ -224,12 +241,20 @@ all: all-modules # Find out which modules were enabled and tell make to build them all-modules: +if USE_LIBTOOL + @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\ + 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; \\ + if test "\$(builtin)" != "no"; then z=\$\$(\$(VLC_CONFIG) --list builtin); for mod in \$(mods); do case "\$\$z " in *\ \$\${mod}\ *) echo lib\$\${mod}.la;; esac; done; fi; \\ + \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\ + test -z "\$\$fail" +else @set fnord \$\$MAKEFLAGS; amf=\$\$2; targets=\`\\ 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; \\ 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; \\ 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; \\ \`; case "\$\$targets" in *lib*) \$(MAKE) \$(AM_MAKEFLAGS) \$\$targets || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; ;; esac; \\ test -z "\$\$fail" +endif # Build a plugin with the adequate linker and linker's flags _plugin.a_plugin\$(LIBEXT): @@ -254,6 +279,13 @@ mostlyclean-local: ### automake creates libvlcdir after running install-*-local ### so we have to create it ourselves first install-exec-local: all-modules +if USE_LIBTOOL + @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\` ; \ + \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" install ; \ + fi +else mkdir -p -- "\$(DESTDIR)\$(libvlcdir)" @z=\$\$(\$(VLC_CONFIG) --list plugin); \ for mod in \$(mods); do \ @@ -284,8 +316,16 @@ if BUILD_MOZILLA esac; \ done endif +endif uninstall-local: +if USE_LIBTOOL + @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\` ; \ + \$(MAKE) \$(AM_MAKEFLAGS) libvlc_LTLIBRARIES="\$\$m" uninstall ; \ + fi +else @z=\$\$(\$(VLC_CONFIG) --list plugin); \ for mod in \$(mods); do \ case "\$\$z " \ @@ -315,6 +355,7 @@ if BUILD_MOZILLA esac; \ done endif +endif EOF for mod in $mods @@ -349,15 +390,23 @@ EOF fi cat >> "${makf}" << EOF lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod}) +lib${mod}_plugin_la_SOURCES = \$(SOURCES_${mod}) EOF if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod}) +nodist_lib${mod}_plugin_la_SOURCES = \$(nodist_SOURCES_${mod}) EOF fi cat >> "${makf}" << 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}_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}\` \\ + -rpath '\$(libvlcdir)' -module -shrext \$(LIBEXT) +lib${mod}_plugin_la_LIBADD = \$(LTLIBVLC) lib${mod}_pic_a_SOURCES = \$(SOURCES_${mod}) EOF @@ -370,16 +419,22 @@ 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}) +lib${mod}_a_SOURCES = \$(SOURCES_${mod}) +lib${mod}_la_SOURCES = \$(SOURCES_${mod}) EOF if [ "${NODIST}" != "#" ]; then cat >> "${makf}" << EOF nodist_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod}) +nodist_lib${mod}_la_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod}) EOF fi cat >> "${makf}" << 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}\` +lib${mod}_la_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\` +lib${mod}_la_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\` +lib${mod}_la_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\` +lib${mod}_la_LDFLAGS = \`\$(VLC_CONFIG) --libs ${mod}\` -static EOF done @@ -436,6 +491,13 @@ if [ "$GETTEXT" != "yes" ]; then printf "" > ABOUT-NLS fi +# Libtoolize directory +${libtoolize} --copy --force +if test -f "ltmain.sh"; then + echo "$0: working around a minor libtool issue" + mv ltmain.sh autotools/ +fi + # Do the rest ${autopoint} -f ${aclocal} ${ACLOCAL_ARGS} diff --git a/configure.ac b/configure.ac index 202bfbd98e..05bff92582 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,4 @@ dnl Autoconf settings for vlc -dnl $Id$ AC_INIT(vlc,0.8.5-svn) VERSION_MAJOR="0" @@ -74,9 +73,15 @@ AC_CHECK_TOOL(STRIP, strip, :) AC_CHECK_TOOL(AR, ar, :) AC_CHECK_TOOL(LD, ld, :) -dnl Sam, if you think I didn't see that... --Meuuh -dnl AM_PROG_LIBTOOL -AC_PROG_INSTALL +AC_DISABLE_STATIC +AC_LIBTOOL_DLOPEN +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL + +AC_ARG_ENABLE(libtool, + [ --enable-libtool use libtool (default disabled, EXPERIMENTAL)], + [],[enable_libtool="no"]) +AM_CONDITIONAL(USE_LIBTOOL, [test "${enable_libtool}" != "no"]) dnl Check for compiler properties AC_C_CONST @@ -290,7 +295,11 @@ AM_GNU_GETTEXT if test "${nls_cv_force_use_gnu_gettext}" = "yes"; then AC_DEFINE(HAVE_INCLUDED_GETTEXT, 1, Define if we use the local libintl) INCLUDES="${INCLUDES} -I\$(top_builddir)/intl" - INCLUDED_LIBINTL="${LIBINTL}" + AS_IF([test "${enable_libtool}" != "no"], [ + INCLUDED_LIBINTL="${LTLIBINTL}" + ],[ + INCLUDED_LIBINTL="${LIBINTL}" + ]) else VLC_ADD_LDFLAGS([vlc],[${LIBINTL}]) INCLUDED_LIBINTL= @@ -306,7 +315,11 @@ AS_IF([test "$am_cv_func_iconv" != "yes"], [AC_MSG_ERROR([libiconv is needed for VLC to work properly])]) fi VLC_ADD_CFLAGS([vlc],[${INCICONV}]) -VLC_ADD_LDFLAGS([vlc],[${LIBICONV}]) +AS_IF([test "${enable_libtool}" != "no"], [ + VLC_ADD_LDFLAGS([vlc],[${LIBICONV}]) +],[ + VLC_ADD_LDFLAGS([vlc],[${LTLIBICONV}]) +]) dnl Check for the need to include the mingwex lib for mingw32 if test "${SYS}" = "mingw32" @@ -365,6 +378,7 @@ VLC_LIBRARY_SUFFIX VLC_SYMBOL_PREFIX AC_SUBST(SYMPREF) +AS_IF([test "${enable_libtool}" = "no"], [ case "${SYS}" in mingw32|cygwin) VLC_ADD_CFLAGS([pic plugin mozilla activex],[${CFLAGS_mingw32_special}]) @@ -380,6 +394,7 @@ case "${SYS}" in VLC_ADD_LDFLAGS([plugin mozilla],[-fpic -fPIC]) ;; esac +]) dnl The -DSYS_FOO flag CPPFLAGS_save="${CPPFLAGS_save} -DSYS_`echo ${SYS} | sed -e 's/-.*//' | tr 'abcdefghijklmnopqrstuvwxyz.' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`"; CPPFLAGS="${CPPFLAGS_save}" @@ -945,10 +960,10 @@ AC_CACHE_CHECK([if \$CC accepts -mdynamic-no-pic], [ac_cv_c_dynamic_no_pic], [CFLAGS="${CFLAGS_save} -mdynamic-no-pic" AC_TRY_COMPILE([],,ac_cv_c_dynamic_no_pic=yes, ac_cv_c_dynamic_no_pic=no)]) -if test "${ac_cv_c_dynamic_no_pic}" != "no"; then +AS_IF([test "${enable_libtool}" = "no" && test "${ac_cv_c_dynamic_no_pic}" != "no"], [ VLC_ADD_CFLAGS([builtin],[-mdynamic-no-pic]) VLC_ADD_CFLAGS([libvlc],[-mdynamic-no-pic]) -fi +]) dnl Check for Darwin plugin linking flags AC_CACHE_CHECK([if \$CC accepts -bundle -undefined error], @@ -1374,7 +1389,9 @@ dnl build_pic=no AC_ARG_ENABLE(shared-libvlc, [ --enable-shared-libvlc shared libvlc (default disabled EXPERIMENTAL)]) - +AS_IF([test "${enable_libtool}" != "no" && test "${enable_shared_libvlc}"], [ + AC_MSG_ERROR([--enable-shared-libvlc and --enable-libtool are mutually exclusive]) +]) dnl dnl Stream output diff --git a/modules/video_filter/Modules.am b/modules/video_filter/Modules.am index 8dd60ae4f0..964455c39e 100644 --- a/modules/video_filter/Modules.am +++ b/modules/video_filter/Modules.am @@ -18,4 +18,4 @@ SOURCES_motiondetect = motiondetect.c SOURCES_rv32 = rv32.c SOURCES_osdmenu = osdmenu.c SOURCES_magnify = magnify.c -noinst_HEADERS += filter_common.h +noinst_HEADERS = filter_common.h diff --git a/src/Makefile.am b/src/Makefile.am index a18e6841ee..e28227f159 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,7 +10,7 @@ EXTRA_DIST = extras/COPYING misc/modules_builtin.h.in BUILT_SOURCES = $(DISTCLEANFILES) $(CLEANFILES) DISTCLEANFILES = stamp-api CLEANFILES = misc/modules_builtin.h misc/version.c -MOSTLYCLEANFILES = $(DATA_noinst_libvlc) +MOSTLYCLEANFILES = $(DATA_noinst_libvlc) stamp-builtins TOOLBOX = srcdir=$(top_srcdir) builddir=$(top_builddir) $(top_srcdir)/toolbox @@ -119,10 +119,19 @@ misc/version.c: FORCE # shared object, which will make builtins fairly redumdant. Until then, we # need this workaround. +stamp-builtins: +if USE_LIBTOOL + @for c in `$(VLC_CONFIG) --libs builtin`; do \ + case $$c in \ + ../modules/*.a) echo $$c ;; \ + esac ; \ + done | \ + sed -e 's/^\(.*\)\/\([^\/]*\)\.a$$/cd \1 \&\& $(MAKE) \2/g' | \ + while read cmd; do echo $$cmd$$ext; eval "($$cmd$$ext)" || exit $$? ; done + sed -e 's/^\(.*\)\/\([^\/]*\)\.a$$/cd \1 \&\& $(MAKE) \2.la/g' | \ + while read cmd; do echo $$cmd; eval "($$cmd)" || exit $$? ; done +endif if BUILD_SHARED -do_builtins = builtins - -builtins: @if test "$(pic)" = "pic"; then ext="_pic.a"; else ext=".a"; fi ; \ for c in `$(VLC_CONFIG) --libs builtin`; do \ case $$c in \ @@ -131,9 +140,8 @@ builtins: done | \ sed -e 's/^\(.*\)\/\([^\/]*\)\.a$$/cd \1 \&\& $(MAKE) \2/g' | \ while read cmd; do echo $$cmd$$ext; eval "($$cmd$$ext)" || exit $$? ; done - -.PHONY: builtins endif + touch $@ ############################################################################### # Building libvlc @@ -164,6 +172,15 @@ libvlc_pic_a_CFLAGS = `$(VLC_CONFIG) --cflags vlc pic` libvlc_pic_a_CXXFLAGS = `$(VLC_CONFIG) --cxxflags vlc pic` libvlc_pic_a_OBJCFLAGS = `$(VLC_CONFIG) --objcflags vlc pic` +libvlc_la_SOURCES = $(SOURCES_libvlc) +libvlc_la_CFLAGS = `$(VLC_CONFIG) --cflags vlc` +libvlc_la_CXXFLAGS = `$(VLC_CONFIG) --cxxflags vlc` +libvlc_la_OBJCFLAGS = `$(VLC_CONFIG) --objcflags vlc` +libvlc_la_LDFLAGS = `$(VLC_CONFIG) --libs vlc builtin|sed -e 's/\.a /.la /g'` \ + -avoid-version -no-undefined +libvlc_la_DEPENDENCIES = stamp-builtins + + if HAVE_BEOS OPT_SOURCES_libvlc_beos = $(SOURCES_libvlc_beos) endif @@ -184,6 +201,9 @@ OPT_SOURCES_libvlc_getopt = $(SOURCES_libvlc_getopt) endif # Build libvlc as a shared library +if USE_LIBTOOL +lib_LTLIBRARIES = libvlc.la +endif if BUILD_SHARED DATA_noinst_libvlc = libvlc$(LIBEXT) if HAVE_WIN32 @@ -194,7 +214,7 @@ OBJECTS_libvlc_so = $(libvlc_pic_a_OBJECTS) endif endif -libvlc$(LIBEXT): $(OBJECTS_libvlc_so) $(do_builtins) +libvlc$(LIBEXT): $(OBJECTS_libvlc_so) stamp-builtins @ldfl="`$(VLC_CONFIG) --libs plugin vlc builtin $(pic)` $(INCLUDED_LIBINTL)" ; \ case `$(VLC_CONFIG) --linkage vlc builtin` in \ c++) ld="$(CXXLINK)" ;; \ @@ -339,13 +359,15 @@ SOURCES_libvlc = \ $(OPT_SOURCES_libvlc_getopt) \ $(NULL) -# Install the symlinks and shared libvlc +if !USE_LIBTOOL +# Install shared libvlc install-exec-local: test -z "$(DATA_noinst_libvlc)" || $(INSTALL_PROGRAM) "$(DATA_noinst_libvlc)" "$(DESTDIR)$(libdir)" # the opposite of install-{data,exec}-local uninstall-local: test -z "$(DATA_noinst_libvlc)" || rm -f "$(DESTDIR)$(libdir)/$(DATA_noinst_libvlc)" +endif ############################################################################### # Stamp rules -- 2.39.2