libtool-patches
[Top][All Lists]
Advanced

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

Re: [PATCH] [cygwin|mingw] fix dlpreopen with --disable-static (take 7)


From: Ralf Wildenhues
Subject: Re: [PATCH] [cygwin|mingw] fix dlpreopen with --disable-static (take 7)
Date: Sat, 26 Jun 2010 20:51:34 +0200
User-agent: Mutt/1.5.20 (2010-04-22)

Hi Charles,

* Charles Wilson wrote on Fri, Jun 25, 2010 at 04:57:15AM CEST:
[...]
> Without this patch, when --disable-static on PE/COFF platforms,
> dlpreopen symbols are extracted incorrectly (because libtool uses
> the same algorithm for extracting symbols from import libs as
> from static libs; when both are present, the static lib is used
> to determine the symbol names even when linking dynamically --
> which is another mistake).

> However, with this patch, helldl.exeS.c has:
> 
> /* External symbol declarations for the compiler. */
> extern int foo();
> extern int hello();
> extern char nothing;

IOW, all the spurious declarations are gone?  That'd be cool.

> Which is exactly what we want.  Along the way to developing
> this patch, a number of other mis-features and errors were
> discovered and fixed -- mostly as a result of issues pointed
> out by reviewers on this list. These are the reasons for the
> somewhat large scope of this patch.  For all the background,
> see the following threads:

> (*) Note that you only need to determine the dll name for an import
> lib using dlltool --identify or the fallback, IF and ONLY IF you are
> linking to a library WITHOUT a corresponding .la file.  If you DO have
> a .la file for the library you're linking to, then the "save the .la
> file using a magic shell variable" approach is used.

OK.  Here's my take on this: if you fix all nits I noted inline below,
post the updated and tested patch (you decide what testing is needed),
then you are OK to commit after 72 hours of waiting.  FWIW, I'm likely
not available most of next week; if we find issues later, then I guess
they'll just have to be fixed afterwards.

I'll note though that this patch makes me cringe: it introduces more
system-specific code in ltmain that is just bloat on other systems,
rather than in libtool.m4 where it belongs.  It has the potential to
regress non-cygwin non-mingw w32 systems, and since we effectively have
no cegcc maintainer that is a problem for cegcc (dunno if for us).
The patch doesn't introduce a new test, so I assume it either fixes a
current testsuite failure in either the default setup or in the
  ./configure --disable-static

setup of Libtool.  If not, or if only the latter, then a testsuite
addition in a followup patch would be nice.

Does this patch have any relation to Pierre Ossman's "Preloading without
.la" patch?  http://thread.gmane.org/gmane.comp.gnu.libtool.general/7071
His copyright papers are through now, so we can look at that patch.

> --- a/libltdl/config/general.m4sh
> +++ b/libltdl/config/general.m4sh
> @@ -559,4 +559,21 @@ func_show_eval_locale ()
>        fi
>      fi
>  }
> +
> +# func_tr_sh
> +# Turn $1 into a string suitable for a shell variable name.
> +# Result is stored in $func_tr_sh_result.  All characters
> +# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
> +# if $1 begins with a digit, a '_' is prepended as well.
> +func_tr_sh ()
> +{
> +  case "$1" in

No double-quotes needed here.

> +  [0-9]* | *[!a-zA-Z0-9_]*)
> +    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; 
> s/[^a-zA-Z0-9_]/_/g'`
> +    ;;
> +  * )
> +    func_tr_sh_result=$1
> +    ;;
> +  esac
> +}
>  ]])

> --- a/libltdl/config/ltmain.m4sh
> +++ b/libltdl/config/ltmain.m4sh
> @@ -2012,10 +2012,49 @@ extern \"C\" {
>         func_verbose "extracting global C symbols from \`$dlprefile'"
>         func_basename "$dlprefile"
>         name="$func_basename_result"
> -       $opt_dry_run || {
> -         eval '$ECHO ": $name " >> "$nlist"'
> -         eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
> -       }
> +          case $host in
> +         *cygwin* | *mingw* | *cegcc* )
> +           # if an import library, we need to obtain dlname
> +           if func_win32_import_lib_p "$dlprefile"; then
> +             func_tr_sh "$dlprefile"
> +             eval "curr_lafile=\$libfile_$func_tr_sh_result"
> +             dlprefile_dlbasename=""
> +             if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
> +               # Use subshell, to avoid clobbering current variable values
> +               dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
> +               if test -n "$dlprefile_dlname" ; then
> +                 func_basename "$dlprefile_dlname"
> +                 dlprefile_dlbasename="$func_basename_result"
> +               else
> +                 # no lafile. user explicitly requested -dlpreopen <import 
> library>.
> +                 eval '$sharedlib_from_linklib "$dlprefile"'

redundant eval: remove eval and single quotes.

> +                 dlprefile_dlbasename=$sharedlib_from_linklib_result
> +               fi
> +             fi
> +             $opt_dry_run || {
> +               if test -n "$dlprefile_dlbasename" ; then
> +                 eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'

Likewise.

> +               else
> +                 func_warning "Could not compute DLL name from $name"
> +                 eval '$ECHO ": $name " >> "$nlist"'

Likewise.

> +               fi
> +               eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe |
> +                 $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> 
> '$nlist'"

This can probably have the outer double quotes removed, eval moved to
$global_symbol_pipe, and quotes around $nlist removed.  Actually, don't
change this, because it might be the eval isn't needed at all; I will
check this and change all uses in libtool then.

> +             }
> +           else # not an import lib
> +             $opt_dry_run || {
> +               eval '$ECHO ": $name " >> "$nlist"'

Likewise eval and single quotes redundant.

> +               eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> 
> '$nlist'"
> +             }
> +           fi
> +         ;;
> +         *)
> +           $opt_dry_run || {
> +             eval '$ECHO ": $name " >> "$nlist"'

Likewise.

> +             eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> 
> '$nlist'"
> +           }
> +         ;;
> +          esac
>       done
>  
>       $opt_dry_run || {
> @@ -2220,6 +2259,129 @@ func_win32_libid ()
>    $ECHO "$win32_libid_type"
>  }
>  
> +# func_cygming_dll_for_implib ARG
> +#
> +# Platform-specific function to extract the
> +# name of the DLL associated with the specified
> +# import library ARG.
> +# Invoked by eval'ing the libtool variable
> +#    $sharedlib_from_linklib_cmd
> +# Result is available in the variable
> +#    $sharedlib_from_linklib_result
> +func_cygming_dll_for_implib ()
> +{
> +  $opt_debug
> +  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
> +}
> +
> +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
> +#
> +# The is the core of a fallback implementation of a
> +# platform-specific function to extract the name of the
> +# DLL associated with the specified import library LIBNAME.
> +#
> +# SECTION_NAME is either .idata$6 or .idata$7, depending
> +# on the platform and compiler that created the implib.
> +#
> +# Echos the name of the DLL associated with the
> +# specified import library.

You'd save a fork if this function stores its result in a variable.
I'd just use sharedlib_from_linklib_result for that.

> +func_cygming_dll_for_implib_fallback_core ()
> +{
> +  $opt_debug
> +  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
> +    sed '/^Contents of section '"$1"':/{

Can $1 contain slash, dollar, ^, characters?

> +      # Place marker at beginning of archive member dllname section
> +      s/.*/====MARK====/
> +      p
> +      d
> +    }
> +    # These lines can sometimes be longer than 43 characters, but
> +    # are always uninteresting
> +    /:[ \t]*file format pe[i]\{,1\}-i386$/d

What about x86-64, cegcc?  Look at func_win32_libid.
\t is not portable sed, please use literal TAB then space.

> +    /^In archive [^:]*:/d
> +    # Ensure marker is printed
> +    /^====MARK====/p
> +    # Remove all lines with less than 43 characters
> +    /^.\{43\}/!d
> +    # From remoaining lines, remove first 43 characters

typo remaining

> +    s/^.\{43\}//' |
> +    sed -n '
> +      # Join marker and all lines until next marker into a single line
> +      /^====MARK====/ b para
> +      H
> +      $ b para
> +      b
> +      :para
> +      x
> +      s/\n//g
> +      # Remove the marker
> +      s/^====MARK====//
> +      # Remove trailing dots and whitespace
> +      s/[\. \t]*$//
> +      # Print
> +      /./p
> +      ' |
> +    # we now have a list, one entry per line, of the stringified
> +    # contents of the appropriate section of all members of the
> +    # archive which possess that section. Heuristic: eliminate
> +    # all those which have a first or second character that is
> +    # a '.' (that is, objdump's representation of an unprintable
> +    # character.) This should work for all archives with less than
> +    # 0x302f exports -- but will fail for DLLs whose name actually
> +    # begins with a literal '.' or a single character followed by
> +    # a '.'.
> +    #
> +    # Of those that remain, print the first one.
> +    sed -e '/^\./d' -e '/^.\./d' | sed -n -e '1p'

Can't you join the last three sed scripts?  Replace the last commmand /./p
of the third-to-last script with
  /^\./d
  /^.\./d
  p
  q

and be done with it.  Right?

> +}
> +
> +# func_cygming_gnu_implib_p ARG
> +# This predicate returns with zero status (TRUE) if
> +# ARG is a GNU/binutils-style import library. Returns
> +# with nonzero status (FALSE) otherwise.
> +func_cygming_gnu_implib_p ()
> +{
> +  $opt_debug
> +  func_cygming_gnu_implib_tmp=`eval "\$NM \$1 | \$global_symbol_pipe | 
> \$EGREP ' (_head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname)\\\$'"`

What is the eval for here?  If it is needed, it should probably be
before the assignment, a la
  eval "func_cygming_gnu_implib_tmp=..."

or, if just for the symbol pipe, then just inside there, but the
backslash before $global_symbol_pipe really makes no sense to me.

> +  test -n "$func_cygming_gnu_implib_tmp"
> +}
> +
> +# func_cygming_ms_implib_p ARG
> +# This predicate returns with zero status (TRUE) if
> +# ARG is an MS-style import library. Returns
> +# with nonzero status (FALSE) otherwise.
> +func_cygming_ms_implib_p ()
> +{
> +  $opt_debug
> +  func_cygming_ms_implib_tmp=`eval "\$NM \$1 | \$global_symbol_pipe | grep 
> '_NULL_IMPORT_DESCRIPTOR'"`

Likewise.

> +  test -n "$func_cygming_ms_implib_tmp"
> +}
> +
> +# func_cygming_dll_for_implib_fallback ARG
> +# Platform-specific function to extract the
> +# name of the DLL associated with the specified
> +# import library ARG.
> +#
> +# This fallback implementation is for use when $DLLTOOL
> +# does not support the --identify-strict option.
> +# Invoked by eval'ing the libtool variable
> +#    $sharedlib_from_linklib_cmd
> +# Result is available in the variable
> +#    $sharedlib_from_linklib_result
> +func_cygming_dll_for_implib_fallback ()
> +{
> +  $opt_debug
> +  if func_cygming_gnu_implib_p "$1" ; then
> +    # binutils import library
> +    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core 
> '.idata$7' "$1"`
> +  elif func_cygming_ms_implib_p "$1" ; then
> +    # ms-generated import library
> +    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core 
> '.idata$6' "$1"`
> +  else
> +    # unknown
> +    sharedlib_from_linklib_result=""
> +  fi
> +}
>  
>  
>  # func_extract_an_archive dir oldlib
> @@ -5167,20 +5329,46 @@ func_mode_link ()
>         if test -z "$libdir" && test "$linkmode" = prog; then
>           func_fatal_error "only libraries may -dlpreopen a convenience 
> library: \`$lib'"
>         fi
> -       # Prefer using a static library (so that no silly _DYNAMIC symbols
> -       # are required to link).
> -       if test -n "$old_library"; then
> -         newdlprefiles="$newdlprefiles $dir/$old_library"
> -         # Keep a list of preopened convenience libraries to check
> -         # that they are being used correctly in the link pass.
> -         test -z "$libdir" && \
> -             dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
> -       # Otherwise, use the dlname, so that lt_dlopen finds it.
> -       elif test -n "$dlname"; then
> -         newdlprefiles="$newdlprefiles $dir/$dlname"
> -       else
> -         newdlprefiles="$newdlprefiles $dir/$linklib"
> -       fi
> +       case "$host" in
> +         # special handling for platforms with PE-DLLs.
> +         *cygwin* | *mingw* | *cegcc* )
> +           # Linker will automatically link against shared library if both
> +           # static and shared are present.  Therefore, ensure we extract
> +           # symbols from the import library if a shared library is present
> +           # (otherwise, the dlopen module name will be incorrect).  We do
> +           # this by putting the import library name into $newdlprefiles.
> +           # We recover the dlopen module name by 'saving' the la file
> +           # name in a special purpose variable, and (later) extracting the
> +           # dlname from the la file.
> +           if test -n "$dlname"; then
> +             func_tr_sh "$dir/$linklib"
> +             eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
> +             newdlprefiles="$newdlprefiles $dir/$linklib"
> +           else
> +             newdlprefiles="$newdlprefiles $dir/$old_library"
> +             # Keep a list of preopened convenience libraries to check
> +             # that they are being used correctly in the link pass.
> +             test -z "$libdir" && \
> +               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
> +           fi
> +         ;;
> +         * )
> +           # Prefer using a static library (so that no silly _DYNAMIC symbols
> +           # are required to link).
> +           if test -n "$old_library"; then
> +             newdlprefiles="$newdlprefiles $dir/$old_library"
> +             # Keep a list of preopened convenience libraries to check
> +             # that they are being used correctly in the link pass.
> +             test -z "$libdir" && \
> +               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
> +           # Otherwise, use the dlname, so that lt_dlopen finds it.
> +           elif test -n "$dlname"; then
> +             newdlprefiles="$newdlprefiles $dir/$dlname"
> +           else
> +             newdlprefiles="$newdlprefiles $dir/$linklib"
> +           fi
> +         ;;
> +       esac
>       fi # $pass = dlpreopen
>  
>       if test -z "$libdir"; then
> diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
> index b93dd0c..3c09203 100644
> --- a/libltdl/m4/libtool.m4
> +++ b/libltdl/m4/libtool.m4
> @@ -170,6 +170,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
>  m4_require([_LT_CHECK_SHELL_FEATURES])dnl
>  m4_require([_LT_CMD_RELOAD])dnl
>  m4_require([_LT_CHECK_MAGIC_METHOD])dnl
> +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
>  m4_require([_LT_CMD_OLD_ARCHIVE])dnl
>  m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
>  
> @@ -3292,6 +3293,45 @@ dnl aclocal-1.4 backwards compatibility:
>  dnl AC_DEFUN([AM_PROG_NM], [])
>  dnl AC_DEFUN([AC_PROG_NM], [])
>  
> +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
> +# ----------------------
> +# how to determine the name of the shared library
> +# associated with a specific link library.
> +#  -- PORTME fill in with the dynamic library characteristics
> +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
> +[m4_require([_LT_DECL_EGREP])
> +m4_require([_LT_DECL_OBJDUMP])
> +m4_require([_LT_DECL_DLLTOOL])
> +AC_CACHE_CHECK([how to associate runtime and link libraries],
> +lt_cv_sharedlib_from_linklib_cmd,
> +[lt_cv_sharedlib_from_linklib_cmd='unknown'
> +
> +case $host_os in
> +cygwin* | mingw* | pw32* | cegcc*)
> +  # two different shell functions defined in ltmain.sh
> +  # decide which to use based on capabilities of $DLLTOOL
> +  case `$DLLTOOL --help 2>&1` in
> +  *--identify-strict*)
> +    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
> +    ;;
> +  *)
> +    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
> +    ;;
> +  esac
> +  ;;
> +*)
> +  # fallback: assume linklib IS sharedlib
> +  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
> +  ;;
> +esac
> +])
> +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
> +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
> +
> +_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
> +    [Command to associate shared and link libraries])
> +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
> +
>  
>  # LT_LIB_M
>  # --------
> @@ -3418,8 +3458,8 @@ esac
>  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int 
> \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
>  
>  # Transform an extracted symbol line into symbol name and symbol address
> -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  
> {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  
> {\"\2\", (void *) \&\2},/p'"
> +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ 
> ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ 
> ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
> -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ 
> ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ 
> ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ 
> ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
> +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ 
> ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) 
> \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) 
> \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
>  
>  # Handle CRLF in mingw tool chain
>  opt_cr=
> @@ -4237,6 +4277,7 @@ m4_require([_LT_TAG_COMPILER])dnl
>  AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared 
> libraries])
>  m4_if([$1], [CXX], [
>    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | 
> $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
> +  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
>    case $host_os in
>    aix[[4-9]]*)
>      # If we're using GNU nm, then we don't want the "-C" option.
> @@ -4253,13 +4294,13 @@ m4_if([$1], [CXX], [
>      _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
>    ;;
>    cygwin* | mingw* | cegcc*)
> -    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | 
> $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 
> DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ 
> ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
> +    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | 
> $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 
> DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ 
> ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
> +    _LT_TAGVAR(exclude_expsyms, 
> $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
>    ;;
>    *)
>      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | 
> $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
>    ;;
>    esac
> -  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
>  ], [
>    runpath_var=
>    _LT_TAGVAR(allow_undefined_flag, $1)=
> @@ -4427,7 +4468,8 @@ _LT_EOF
>        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
>        _LT_TAGVAR(always_export_symbols, $1)=no
>        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
> -      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | 
> $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 
> DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > 
> $export_symbols'
> +      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | 
> $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 
> DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ 
> ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
> +      _LT_TAGVAR(exclude_expsyms, 
> $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
>  
>        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
>          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs 
> $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base 
> -Xlinker --out-implib -Xlinker $lib'
> @@ -7121,6 +7163,16 @@ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
>  AC_SUBST([OBJDUMP])
>  ])
>  
> +# _LT_DECL_DLLTOOL
> +# --------------

Please align underline with title.

> +# If we don't have a new enough Autoconf to choose the best dlltool
> +# available, choose the one first in the user's PATH.

What does this comment mean?  Copy and pasto garbage?

I'll note that _LT_DECL_DLLTOOL and _LT_DECL_OBJDUMP duplicate code from
the win32-dll option setting in ltoptions.m4.  That is wrong.  I'll let
it go through now because the problem isn't new.

> +m4_defun([_LT_DECL_DLLTOOL],
> +[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
> +test -z "$DLLTOOL" && DLLTOOL=dlltool
> +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
> +AC_SUBST([DLLTOOL])
> +])
>  
>  # _LT_DECL_SED
>  # ------------

Thanks,
Ralf



reply via email to

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