On 29 Jan 2008, at 06:45, Ralf Wildenhues wrote:
Hi Gary,
Hallo Ralf! Thanks for your comments.
I haven't reviewed your last two pending patches yet (but I'm not telling you to wait for me).
Every little helps, even if you don't have time for a thorough review...
What caught my eyes though at a glance was this: * Gary V. Vaughan wrote on Mon, Jan 28, 2008 at 07:38:01PM CET:+++ b/libltdl/m4/ltdl-libobj.m4[...]+ +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is separated from the user LIBOBJ directory. +AC_DEFUN([_LT_LIBSOURCES], [ + m4_foreach([_LTNAME], [$1], [ + m4_syscmd([test -r libltdl/]_LTNAME[ || test ! -d libltdl/])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([missing libltdl/]_LTNAME)]) + ]) +])[...]+++ b/libtoolize.m4sh[...]+# func_fixup_ltdl_libobj srcdir destdir +func_fixup_ltdl_libobj () +{ + $opt_debug + my_filename=ltdl-libobj.m4 + my_srcdir="$1" + my_destdir="$2" + my_fixup_script="s,libltdl/,$ltdldir/,g" + + $RM "$my_destdir/$my_filename" 2>/dev/null + if $opt_dry_run; then :; + else + $SED "$my_fixup_script" \ + < "$my_srcdir/$my_filename" > "$my_destdir/$my_filename" || + func_fatal_error "cannot create $my_destdir/$my_filename" + fi +}Changing a m4 file seems very brittle to me. These files like to get installed into /usr/share/aclocal, where aclocal can find them even ifyou don't want to (and thus if you forget to -I ltdl/m4, you're screwed).Isn't the real name of the libltdl subdirectory name known at autoconf time anyway? (This is an honest, not a rhetorical question; I haven't checked.)
I had thought that it was only available at autoconf time, and since the ltdl mode is selected at configure time and affects things too went with the solution I posted earlier. Evidently, lack of caffeine was clouding my brain, and the solution is *much* easier now that I've noticed ltdl mode is selected at libtoolize time, and of course everything we need to know at configure time is available easily. Now that there is no need to keep a separate ltdl-libobjs.m4 file for the substitution stage, a much simplified version of the patch follows below, and is what I'll be committing in 60 hours or fewer :-)
Probably a good idea to test the libtoolize changes using a ksh.
Done. No problems. Cheers, Gary -- ())_. Email me: [EMAIL PROTECTED] ( '/ Read my blog: http://blog.azazil.net / )= ...and my book: http://sources.redhat.com/autobook `(_~)_ from Gary V. Vaughan <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> Index: b/libltdl/m4/ltdl.m4 =================================================================== --- a/libltdl/m4/ltdl.m4 +++ b/libltdl/m4/ltdl.m4 @@ -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. + sed_drop_objext='s/\.o$//;s/\.obj$//'+ for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; 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: b/libtoolize.m4sh =================================================================== --- a/libtoolize.m4sh +++ b/libtoolize.m4sh @@ -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:
PGP.sig
Description: This is a digitally signed message part