libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 350-gary-maintain-private-libobj-namespace


From: Gary V. Vaughan
Subject: Re: 350-gary-maintain-private-libobj-namespace
Date: Tue, 29 Jan 2008 15:44:51 +0800

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 if
you 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: address@hidden
  ( '/           Read my blog: http://blog.azazil.net
  / )=         ...and my book: http://sources.redhat.com/autobook
`(_~)_



  from  Gary V. Vaughan  <address@hidden>

        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 <address@hidden>

  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:


Attachment: PGP.sig
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]