branch: development
commit f49da6ca2a77234719f34597ea583f29c0cf10d4
Author: Mitch <mitch.capper+gn...@gmail.com>
AuthorDate: Mon Dec 2 22:47:48 2024 +0200

    libtool: Fix MSVC cl.exe .exp extension collision
    
    MSVC's compiler uses the .exp entension for their own export format,
    which causes a build failure when a subsequent build is run. The
    MSVC compiler, cl.exe, errors for an invalid file format. This is fixed
    by using a similar extension name to avoid the naming collision.
    
    Reported: https://savannah.gnu.org/support/?111157
    
    * build-aux/ltmain.in: Replace .exp extension with .expsym.
    * m4/libtool.m4: Replace .exp extension with .expsym.
---
 build-aux/ltmain.in | 10 ++++----
 m4/libtool.m4       | 68 ++++++++++++++++++++++++++---------------------------
 2 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
index af014430..425de05a 100644
--- a/build-aux/ltmain.in
+++ b/build-aux/ltmain.in
@@ -2925,7 +2925,7 @@ extern \"C\" {
 
          # Prepare the list of exported symbols
          if test -z "$export_symbols"; then
-           export_symbols=$output_objdir/$outputname.exp
+           export_symbols=$output_objdir/$outputname.expsym
            $opt_dry_run || {
              $RM $export_symbols
              eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< 
"$nlist" > "$export_symbols"'
@@ -2938,8 +2938,8 @@ extern \"C\" {
            }
          else
            $opt_dry_run || {
-             eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' 
< "$export_symbols" > "$output_objdir/$outputname.exp"'
-             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > 
"$nlist"T'
+             eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' 
< "$export_symbols" > "$output_objdir/$outputname.expsym"'
+             eval '$GREP -f "$output_objdir/$outputname.expsym" < "$nlist" > 
"$nlist"T'
              eval '$MV "$nlist"T "$nlist"'
              case $host in
                *cygwin* | *mingw* | *windows* | *cegcc* )
@@ -7915,7 +7915,7 @@ func_mode_link ()
        if test -z "$export_symbols"; then
          if test yes = "$always_export_symbols" || test -n 
"$export_symbols_regex"; then
            func_verbose "generating symbol list for '$libname.la'"
-           export_symbols=$output_objdir/$libname.exp
+           export_symbols=$output_objdir/$libname.expsym
            $opt_dry_run || $RM $export_symbols
            cmds=$export_symbols_cmds
            save_ifs=$IFS; IFS='~'
@@ -8181,7 +8181,7 @@ func_mode_link ()
 
            ${skipped_export-false} && {
              func_verbose "generating symbol list for '$libname.la'"
-             export_symbols=$output_objdir/$libname.exp
+             export_symbols=$output_objdir/$libname.expsym
              $opt_dry_run || $RM $export_symbols
              libobjs=$output
              # Append the command to create the export file.
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 336dc88a..f009a5db 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1680,9 +1680,9 @@ AC_CACHE_CHECK([$1], [$2],
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.expsym
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 
then
+     if test ! -s conftest.er2 || diff conftest.expsym conftest.er2 
>/dev/null; then
        $2=yes
      fi
    fi
@@ -1720,9 +1720,9 @@ AC_CACHE_CHECK([$1], [$2],
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.expsym
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
+       if diff conftest.expsym conftest.er2 >/dev/null; then
          $2=yes
        fi
      else
@@ -2163,9 +2163,9 @@ AC_CACHE_CHECK([if $compiler supports -c -o 
file.$ac_objext],
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.expsym
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 
>/dev/null; then
+     if test ! -s out/conftest.er2 || diff out/conftest.expsym 
out/conftest.er2 >/dev/null; then
        _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
      fi
    fi
@@ -4470,7 +4470,7 @@ m4_if([$1], [CXX], [
          # AIX 5 now supports IA64 processor
          _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        else
-         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso 
-bI:/lib/syscalls.expsym'
        fi
        ;;
       chorus*)
@@ -4819,7 +4819,7 @@ m4_if([$1], [CXX], [
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       else
-       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.expsym'
       fi
       ;;
 
@@ -5783,14 +5783,14 @@ _LT_EOF
        _LT_TAGVAR(archive_cmds, $1)='$CC -Fe$output_objdir/$soname $libobjs 
$compiler_flags $deplibs 
-Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
        _LT_TAGVAR(archive_expsym_cmds, $1)='if 
_LT_DLL_DEF_P([$export_symbols]); then
             cp "$export_symbols" "$output_objdir/$soname.def";
-            echo "$tool_output_objdir$soname.def" > 
"$output_objdir/$soname.exp";
+            echo "$tool_output_objdir$soname.def" > 
"$output_objdir/$soname.expsym";
           else
-            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > 
$output_objdir/$soname.exp;
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > 
$output_objdir/$soname.expsym;
           fi~
           if test -z "$linker_flags"; then
-             $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.exp" 
-Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
+             $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.expsym" 
-Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
           else
-             $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.exp" 
-Wl,$linker_flags-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
+             $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.expsym" 
-Wl,$linker_flags-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
           fi~
           linknames='
        # The linker will not automatically build a static lib if we build a 
DLL.
@@ -6102,8 +6102,8 @@ _LT_EOF
       else
        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs 
$deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && 
func_echo_all "-set_version $verstring"` -update_registry 
$output_objdir/so_locations -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do 
printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" 
"-hidden">> $lib.exp~
-          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp 
$compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && 
$ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations 
-o $lib~$RM $lib.exp'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do 
printf "%s %s\\n" -exported_symbol "\$i" >> $lib.expsym; done; printf "%s\\n" 
"-hidden">> $lib.expsym~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.expsym 
$compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && 
$ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations 
-o $lib~$RM $lib.expsym'
 
        # Both c and cxx compiler support -rpath directly
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -6120,21 +6120,21 @@ _LT_EOF
       if test yes = "$GCC"; then
        wlarc='$wl'
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text 
$wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat 
$export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> 
$lib.exp~
-          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h 
$wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.expsym~cat 
$export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.expsym~echo "local: *; };" >> 
$lib.expsym~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.expsym $wl-h 
$wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.expsym'
       else
        case `$CC -V 2>&1` in
        *"Compilers 5.0"*)
          wlarc=''
          _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname 
-o $lib $libobjs $deplibs $linker_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat 
$export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> 
$lib.exp~
-            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib 
$libobjs $deplibs $linker_flags~$RM $lib.exp'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.expsym~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.expsym~echo 
"local: *; };" >> $lib.expsym~
+            $LD -G$allow_undefined_flag -M $lib.expsym -h $soname -o $lib 
$libobjs $deplibs $linker_flags~$RM $lib.expsym'
          ;;
        *)
          wlarc='$wl'
          _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname 
-o $lib $libobjs $deplibs $compiler_flags'
-         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat 
$export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> 
$lib.exp~
-            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib 
$libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.expsym~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.expsym~echo 
"local: *; };" >> $lib.expsym~
+            $CC -G$allow_undefined_flag -M $lib.expsym -h $soname -o $lib 
$libobjs $deplibs $compiler_flags~$RM $lib.expsym'
          ;;
        esac
       fi
@@ -6869,14 +6869,14 @@ if test yes != "$_lt_caught_CXX_error"; then
          _LT_TAGVAR(archive_cmds, $1)='$CC -Fe$output_objdir/$soname $libobjs 
$compiler_flags $deplibs 
-Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
          _LT_TAGVAR(archive_expsym_cmds, $1)='if 
_LT_DLL_DEF_P([$export_symbols]); then
               cp "$export_symbols" "$output_objdir/$soname.def";
-              echo "$tool_output_objdir$soname.def" > 
"$output_objdir/$soname.exp";
+              echo "$tool_output_objdir$soname.def" > 
"$output_objdir/$soname.expsym";
             else
-              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > 
$output_objdir/$soname.exp;
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > 
$output_objdir/$soname.expsym;
             fi~
             if test -z "$linker_flags"; then
-               $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.exp" 
-Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
+               $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.expsym" 
-Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
             else
-               $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.exp" 
-Wl,$linker_flags-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
+               $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags 
$deplibs "@$tool_output_objdir$soname.expsym" 
-Wl,$linker_flags-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib";
             fi~
             linknames='
          # The linker will not automatically build a static lib if we build a 
DLL.
@@ -7395,10 +7395,10 @@ if test yes != "$_lt_caught_CXX_error"; then
              *)
                _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
                _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag 
$predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym 
-soname $soname `test -n "$verstring" && func_echo_all "-set_version 
$verstring"` -update_registry $output_objdir/so_locations -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat 
$export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-                  echo "-hidden">> $lib.exp~
-                  $CC -shared$allow_undefined_flag $predep_objects $libobjs 
$deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input 
$wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` 
-update_registry $output_objdir/so_locations -o $lib~
-                  $RM $lib.exp'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat 
$export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.expsym; 
done~
+                  echo "-hidden">> $lib.expsym~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs 
$deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input 
$wl$lib.expsym  `test -n "$verstring" && $ECHO "-set_version $verstring"` 
-update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.expsym'
                _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
                ;;
            esac
@@ -7477,8 +7477,8 @@ if test yes != "$_lt_caught_CXX_error"; then
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
            _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
            _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname 
-o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: 
*; };" >> $lib.exp~
-              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib 
$predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.expsym~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.expsym~echo 
"local: *; };" >> $lib.expsym~
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.expsym -h$soname -o 
$lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM 
$lib.expsym'
 
            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -7514,8 +7514,8 @@ if test yes != "$_lt_caught_CXX_error"; then
              _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
              if $CC --version | $GREP -v '^2\.7' > /dev/null; then
                _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $stdlibflag 
$predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h 
$wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: 
*; };" >> $lib.exp~
-                  $CC -shared $pic_flag $stdlibflag $wl-M $wl$lib.exp $wl-h 
$wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects 
$compiler_flags~$RM $lib.exp'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.expsym~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.expsym~echo 
"local: *; };" >> $lib.expsym~
+                  $CC -shared $pic_flag $stdlibflag $wl-M $wl$lib.expsym $wl-h 
$wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects 
$compiler_flags~$RM $lib.expsym'
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when
@@ -7525,8 +7525,8 @@ if test yes != "$_lt_caught_CXX_error"; then
                # g++ 2.7 appears to require '-G' NOT '-shared' on this
                # platform.
                _LT_TAGVAR(archive_cmds, $1)='$CC -G $stdlibflag 
$predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h 
$wl$soname -o $lib'
-               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: 
*; };" >> $lib.exp~
-                  $CC -G $stdlibflag $wl-M $wl$lib.exp $wl-h $wl$soname -o 
$lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM 
$lib.exp'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > 
$lib.expsym~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.expsym~echo 
"local: *; };" >> $lib.expsym~
+                  $CC -G $stdlibflag $wl-M $wl$lib.expsym $wl-h $wl$soname -o 
$lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM 
$lib.expsym'
 
                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used when

Reply via email to