libtool-patches
[Top][All Lists]
Advanced

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

Re: [PATCH] msvc: eliminate spaces in the library search path.


From: Peter Rosin
Subject: Re: [PATCH] msvc: eliminate spaces in the library search path.
Date: Tue, 21 Sep 2010 21:40:19 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100802 Thunderbird/3.1.2

Den 2010-09-21 20:08 skrev Charles Wilson:
> On 9/21/2010 1:33 PM, Ralf Wildenhues wrote:
>> Hi Peter,
>>
>> * Peter Rosin wrote on Tue, Sep 21, 2010 at 09:37:16AM CEST:
>>> I know it's late for the release, but I'd like to squeeze this one in
>>> too, if at all possible. After all, it doesn't affect anything but MSVC.
>>
>> I have questions:
>>
>> What does Charles have to say to this?
> 
> Well, in principle -- so long as this code is activated only when $CC is
> MSVC -- the patch as revised is fine with me.

Hmm, since we were given the authority to approve w32-only patches, and
this is one of those, I think I'll make use of that and just push as below
(including the nits Ralf had).

Thanks for the speedy reviews!

Gary, I'm done with that in.  Thanks for putting up with the late changes!

Cheers,
Peter


>From 09142eaeda3b3055653afc302fe871740d65d5c7 Mon Sep 17 00:00:00 2001
From: Peter Rosin <address@hidden>
Date: Tue, 21 Sep 2010 20:31:37 +0200
Subject: [PATCH] msvc: eliminate spaces in the library search path.

* libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER) [mingw, cygwin]
<cl*, sys_lib_search_path_spec>: The LIB path variable telling
where MSVC looks for libraries is likely to contain directory
names with spaces.  Convert those directory names to the short
8.3 DOS form (i.e. without spaces) when storing them in
sys_lib_search_path_spec, as that is a space separated variable.

Signed-off-by: Peter Rosin <address@hidden>
---
 ChangeLog             |   10 ++++++++++
 libltdl/m4/libtool.m4 |   47 ++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 48 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f3dee40..e011a9e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-09-21  Peter Rosin  <address@hidden>
+
+       msvc: eliminate spaces in the library search path.
+       * libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER) [mingw, cygwin]
+       <cl*, sys_lib_search_path_spec>: The LIB path variable telling
+       where MSVC looks for libraries is likely to contain directory
+       names with spaces.  Convert those directory names to the short
+       8.3 DOS form (i.e. without spaces) when storing them in
+       sys_lib_search_path_spec, as that is a space separated variable.
+
 2010-09-21  Ralf Wildenhues  <address@hidden>
 
        Revert to per-language libpath computation on AIX.
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index 2aee398..a048b1f 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -2321,15 +2321,44 @@ m4_if([$1], [],[
     libname_spec='$name'
     soname_spec='${libname}`echo ${release} | $SED -e 
's/[[.]]/-/g'`${versuffix}${shared_ext}'
     library_names_spec='${libname}.dll.lib'
-    sys_lib_search_path_spec="$LIB"
-    if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; 
then
-      # It is most probably a Windows format PATH.
-      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 
's/;/ /g'`
-    else
-      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 
"s/$PATH_SEPARATOR/ /g"`
-    fi
-    # FIXME: find the short name or the path components, as spaces are
-    # common. (e.g. "Program Files" -> "PROGRA~1")
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do 
@echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 
's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos 
"$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix 
"$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; 
then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 
's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 
"s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
       dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo 
\$dlname'\''`~
-- 
1.7.1



reply via email to

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