]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
Unfortunately, the autoconf implementation of AC_LIBOBJ and
authorGary V. Vaughan <gary@gnu.org>
Thu, 31 Jan 2008 16:17:06 +0000 (16:17 +0000)
committerGary V. Vaughan <gary@gnu.org>
Thu, 31 Jan 2008 16:17:06 +0000 (16:17 +0000)
friends requires all libobjs to be in the same directory, as
declared by AC_CONFIG_LIBOBJ_DIR.  That might prevent using
either recursive or nonrecursive libltdl if the parent project
has libobjs of its own, except that this patch tracks libltdl's
libobjs in another namespace:

* libltdl/m4/ltdl.m4 (_LT_LIBOBJ, _LT_LIBSOURCES): Versions of
AC_LIBOBJ and AC_LIBSOURCES that save missing sources in a
ltdl_LIBOBJS automake macro, instead of the global LIBOBJS
automake macro.  Content of the macros inspired by code from
gnulib-tool.
(_LTDL_MODE_DISPATCH): Initialise lt_libobj_prefix in
nonrecursive mode.
(LTDL_INIT): Push and pop the new definitions around potential
sites that call AC_LIBOBJ.  Also, using lt_libobj_prefix,
initialise ltdl_LIBOBJS and ltdl_LTLIBOBJS.
* libtoolize.m4sh (func_fixup_Makefile): Substitute ltdl_LIBOBJS
and ltdl_LTLIBOBJS for LIBOBJS and LTLIBOBJS during copying
either Makefile.am or Makefile.inc, depending on ltdl_mode.
Reported by Eric Blake <ebb9@byu.net>

ChangeLog
libltdl/m4/ltdl.m4
libtoolize.m4sh

index de9dbbce2a947636bd30e013d70f93dbd0f17cef..1b387fba1ca5ada835669cc3d7eb6d0a251a4069 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2008-02-01  Gary V. Vaughan  <gary@gnu.org>
+
+       Unfortunately, the autoconf implementation of AC_LIBOBJ and
+       friends requires all libobjs to be in the same directory, as
+       declared by AC_CONFIG_LIBOBJ_DIR.  That might prevent using
+       either recursive or nonrecursive libltdl if the parent project
+       has libobjs of its own, except that this patch tracks libltdl's
+       libobjs in another namespace:
+
+       * libltdl/m4/ltdl.m4 (_LT_LIBOBJ, _LT_LIBSOURCES): Versions of
+       AC_LIBOBJ and AC_LIBSOURCES that save missing sources in a
+       ltdl_LIBOBJS automake macro, instead of the global LIBOBJS
+       automake macro.  Content of the macros inspired by code from
+       gnulib-tool.
+       (_LTDL_MODE_DISPATCH): Initialise lt_libobj_prefix in
+       nonrecursive mode.
+       (LTDL_INIT): Push and pop the new definitions around potential
+       sites that call AC_LIBOBJ.  Also, using lt_libobj_prefix,
+       initialise ltdl_LIBOBJS and ltdl_LTLIBOBJS.
+       * libtoolize.m4sh (func_fixup_Makefile): Substitute ltdl_LIBOBJS
+       and ltdl_LTLIBOBJS for LIBOBJS and LTLIBOBJS during copying
+       either Makefile.am or Makefile.inc, depending on ltdl_mode.
+       Reported by Eric Blake <ebb9@byu.net>
+
 2008-01-30  Gary V. Vaughan  <gary@gnu.org>
 
        There are 5 distinct batches of files that libtoolize might
index 452f2c7095962c7097d7b750a6d6ccb551f4f7f7..3e4fc1593468358a80fcc7add3778d8e9149f8a4 100644 (file)
@@ -198,7 +198,7 @@ m4_if(_LTDL_DIR, [],
     [m4_case(m4_default(_LTDL_MODE, [subproject]),
          [subproject], [AC_CONFIG_SUBDIRS(_LTDL_DIR)
                          _LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"])],
-         [nonrecursive], [_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"])],
+         [nonrecursive], [_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"; lt_libobj_prefix="$lt_ltdl_dir/"])],
          [recursive], [],
        [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])dnl
 dnl Be careful not to expand twice:
@@ -206,6 +206,32 @@ m4_define([$0], [])
 ])# _LTDL_MODE_DISPATCH
 
 
+# _LT_LIBOBJ(MODULE_NAME)
+# -----------------------
+# Like AC_LIBOBJ, except that MODULE_NAME goes into _LT_LIBOBJS instead
+# of into LIBOBJS.
+AC_DEFUN([_LT_LIBOBJ], [
+  m4_pattern_allow([^_LT_LIBOBJS$])
+  AS_LITERAL_IF([$1], [_LT_LIBSOURCES([$1.c])])dnl
+  _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext"
+])# _LT_LIBOBJS
+
+
+# _LT_LIBSOURCES(MODULE_NAMES)
+# ----------------------------
+# Like AC_LIBSOURCES, except the directory where the libltdl source files
+# are expected is distinct from the user LIBOBJ directory.
+AC_DEFUN([_LT_LIBSOURCES], [
+  m4_foreach([_LTNAME], [$1], [
+    m4_syscmd([test -r "$lt_libobj_prefix]_LTNAME[" ||
+               test -z "$lt_libobj_prefix" ||
+               test ! -d "$lt_libobj_prefix"])dnl
+    m4_if(m4_sysval, [0], [],
+      [AC_FATAL([missing $lt_libobj_prefix/]_LTNAME)])
+  ])
+])# _LT_LIBSOURCES
+
+
 # LTDL_INIT([OPTIONS])
 # --------------------
 # Clients of libltdl can use this macro to allow the installer to
@@ -217,6 +243,12 @@ AC_DEFUN([LTDL_INIT],
 [dnl Parse OPTIONS
 _LT_SET_OPTIONS([$0], [$1])
 
+dnl We need to keep our own list of libobjs separate from our parent project,
+dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while
+dnl we look for our own LIBOBJs. Definitions in ltdl-libobj.m4.
+m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ]))
+m4_pushdef([AC_LIBSOURCES], m4_defn([_LT_LIBSOURCES]))
+
 dnl If not otherwise defined, default to the 1.5.x compatible subproject mode:
 m4_if(_LTDL_MODE, [],
         [m4_define([_LTDL_MODE], m4_default([$2], [subproject]))
@@ -309,6 +341,25 @@ AC_MSG_RESULT([$LIBLTDL])
 
 _LTDL_SETUP
 
+dnl restore autoconf definition.
+m4_popdef([AC_LIBOBJ])
+m4_popdef([AC_LIBSOURCES])
+
+AC_CONFIG_COMMANDS_PRE([
+    _ltdl_libobjs=
+    _ltdl_ltlibobjs=
+    if test -n "$_LT_LIBOBJS"; then
+      # Remove the extension.
+      _lt_sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do
+        _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext"
+        _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo"
+      done
+    fi
+    AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs])
+    AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs])
+])
+
 # Only expand once:
 m4_define([LTDL_INIT])
 ])# LTDL_INIT
index de3760e008b45ff849eb3a891bb616fe86d68d52..210fa5476d71a3c30b073268947af6d30a3ccf78 100644 (file)
@@ -320,6 +320,7 @@ func_copy_some_files ()
     IFS="$my_save_IFS"
 }
 
+
 # func_fixup_Makefile srcfile srcdir destdir
 func_fixup_Makefile ()
 {
@@ -328,6 +329,8 @@ func_fixup_Makefile ()
     my_srcdir="$2"
     my_destdir="$3"
     my_fixup_non_subpackage_script="\
+      s,(LIBOBJS),(ltdl_LIBOBJS),g
+      s,(LTLIBOBJS),(ltdl_LTLIBOBJS),g
       s,libltdl/configure.ac,,
       s,libltdl/configure,,
       s,libltdl/aclocal.m4,,
@@ -1004,7 +1007,7 @@ func_install_pkgmacro_files ()
 {
     $opt_debug
 
-    # argz.m4, libtool.m4 and ltdl.m4 are handled specially below:
+    # argz.m4, libtool.m4 and ltdl.m4 are handled specially:
     func_massage_aclocal_DATA 'argz.m4|libtool.m4|ltdl.m4'
 
   # 1. Parent has separate macrodir to subproject ltdl: