_Experimental_ *optional* libtool support (--enable-libtool)
authorRémi Denis-Courmont <rem@videolan.org>
Thu, 23 Feb 2006 19:41:36 +0000 (19:41 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Thu, 23 Feb 2006 19:41:36 +0000 (19:41 +0000)
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
bootstrap
configure.ac
modules/video_filter/Modules.am
src/Makefile.am

index 78fc12d..b480833 100644 (file)
@@ -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" && \
index d109472..01702d8 100755 (executable)
--- 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 <sam@zoy.org>
 
@@ -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}
index 202bfbd..05bff92 100644 (file)
@@ -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
index 8dd60ae..964455c 100644 (file)
@@ -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
index a18e684..e28227f 100644 (file)
@@ -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