diff mbox

[testsuite] Fix loading wrong DLLs on Windows, merge duplicate target-libpath.exp

Message ID a3681d01-4d48-1bab-c76f-ee7aa4790e20@pobox.com
State New
Headers show

Commit Message

Daniel Santos April 5, 2017, 9:45 p.m. UTC
On 04/05/2017 12:35 PM, Mike Stump wrote:
>> libffi/ChangeLog:
>> 2017-04-03  Daniel Santos <daniel.santos@pobox.com>
>>
>> 	PR testsuite/79867
>> 	* testsuite/lib/target-libpath.exp: Remove.
>> 	* testsuite/Makefile.in: Remove target-libpath.exp.
>> 	* testsuite/Makefile.am: Regenerated.
> I don't think the libffi project wants to remove that file.  There is little point being different from them in this regard.  The dup should not hurt.

Hmm.  There have been many changes to target-libpath.exp under 
gcc/testsuite/lib since libffi copied it.  I have attached a diff of 
them.  I'm not proposing removing target-libpath.exp from libffi 
upstream, but from the gcc tree.  I'm having trouble seeing how having 
two different copies evolving independently can be a good thing.

Daniel
diff mbox

Patch

--- target-libpath.exp	2017-04-05 16:39:38.939768810 -0500
+++ gcc/testsuite/lib/target-libpath.exp	2017-04-05 16:39:49.350768260 -0500
@@ -1,4 +1,4 @@ 
-# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2004-2017 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -20,12 +20,28 @@ 
 set orig_ld_library_path_saved 0
 set orig_ld_run_path_saved 0
 set orig_shlib_path_saved 0
-set orig_ld_libraryn32_path_saved 0
-set orig_ld_library64_path_saved 0
 set orig_ld_library_path_32_saved 0
 set orig_ld_library_path_64_saved 0
 set orig_dyld_library_path_saved 0
 set orig_path_saved 0
+set orig_gcc_exec_prefix_saved 0
+set orig_gcc_exec_prefix_checked 0
+
+
+#######################################
+# proc set_gcc_exec_prefix_env_var { }
+#######################################
+
+proc set_gcc_exec_prefix_env_var { } {
+  global TEST_GCC_EXEC_PREFIX
+  global env
+
+  # Set GCC_EXEC_PREFIX for the compiler under test to pick up files not in
+  # the build tree from a specified location (normally the install tree).
+  if [info exists TEST_GCC_EXEC_PREFIX] {
+    setenv GCC_EXEC_PREFIX "$TEST_GCC_EXEC_PREFIX"
+  }
+}
 
 #######################################
 # proc set_ld_library_path_env_vars { }
@@ -37,36 +53,39 @@ 
   global orig_ld_library_path_saved
   global orig_ld_run_path_saved
   global orig_shlib_path_saved
-  global orig_ld_libraryn32_path_saved
-  global orig_ld_library64_path_saved
   global orig_ld_library_path_32_saved
   global orig_ld_library_path_64_saved
   global orig_dyld_library_path_saved
   global orig_path_saved
+  global orig_gcc_exec_prefix_saved
+  global orig_gcc_exec_prefix_checked
   global orig_ld_library_path
   global orig_ld_run_path
   global orig_shlib_path
-  global orig_ld_libraryn32_path
-  global orig_ld_library64_path
   global orig_ld_library_path_32
   global orig_ld_library_path_64
   global orig_dyld_library_path
   global orig_path
-  global GCC_EXEC_PREFIX
+  global orig_gcc_exec_prefix
+  global env
 
-  # Set the relocated compiler prefix, but only if the user hasn't specified one.
-  if { [info exists GCC_EXEC_PREFIX] && ![info exists env(GCC_EXEC_PREFIX)] } {
-    setenv GCC_EXEC_PREFIX "$GCC_EXEC_PREFIX"
+  # Save the original GCC_EXEC_PREFIX.
+  if { $orig_gcc_exec_prefix_checked == 0 } {
+    if [info exists env(GCC_EXEC_PREFIX)] {
+      set orig_gcc_exec_prefix "$env(GCC_EXEC_PREFIX)"
+      set orig_gcc_exec_prefix_saved 1
+    }
+    set orig_gcc_exec_prefix_checked 1
   }
 
+  set_gcc_exec_prefix_env_var
+
   # Setting the ld library path causes trouble when testing cross-compilers.
   if { [is_remote target] } {
     return
   }
 
   if { $orig_environment_saved == 0 } {
-    global env
-
     set orig_environment_saved 1
 
     # Save the original environment.
@@ -82,14 +101,6 @@ 
       set orig_shlib_path "$env(SHLIB_PATH)"
       set orig_shlib_path_saved 1
     }
-    if [info exists env(LD_LIBRARYN32_PATH)] {
-      set orig_ld_libraryn32_path "$env(LD_LIBRARYN32_PATH)"
-      set orig_ld_libraryn32_path_saved 1
-    }
-    if [info exists env(LD_LIBRARY64_PATH)] {
-      set orig_ld_library64_path "$env(LD_LIBRARY64_PATH)"
-      set orig_ld_library64_path_saved 1
-    }
     if [info exists env(LD_LIBRARY_PATH_32)] {
       set orig_ld_library_path_32 "$env(LD_LIBRARY_PATH_32)"
       set orig_ld_library_path_32_saved 1
@@ -113,12 +124,11 @@ 
   # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a
   # program.  We also need the environment set for compilations, etc.
   #
-  # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but
-  # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH
-  # (for the 64-bit ABI).  The same applies to Darwin (DYLD_LIBRARY_PATH),
-  # Solaris 32 bit (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64),
-  # and HP-UX (SHLIB_PATH).  In some cases, the variables are independent
-  # of LD_LIBRARY_PATH, and in other cases LD_LIBRARY_PATH is used if the
+  # On Darwin, we have to set variables akin to LD_LIBRARY_PATH, but called
+  # DYLD_LIBRARY_PATH.  The same applies to Solaris 32 bit
+  # (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64), and HP-UX
+  # (SHLIB_PATH).  In some cases, the variables are independent of
+  # LD_LIBRARY_PATH, and in other cases LD_LIBRARY_PATH is used if the
   # variable is not defined.
   #
   # Doing this is somewhat of a hack as ld_library_path gets repeated in
@@ -142,20 +152,6 @@ 
   } else {
     setenv SHLIB_PATH "$ld_library_path"
   }
-  if { $orig_ld_libraryn32_path_saved } {
-    setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_libraryn32_path"
-  } elseif { $orig_ld_library_path_saved } {
-    setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_library_path"
-  } else {
-    setenv LD_LIBRARYN32_PATH "$ld_library_path"
-  }
-  if { $orig_ld_library64_path_saved } {
-    setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library64_path"
-  } elseif { $orig_ld_library_path_saved } {
-    setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library_path"
-  } else {
-    setenv LD_LIBRARY64_PATH "$ld_library_path"
-  }
   if { $orig_ld_library_path_32_saved } {
     setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path_32"
   } elseif { $orig_ld_library_path_saved } {
@@ -183,7 +179,28 @@ 
     }
   }
 
-  verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path"
+  verbose -log "LD_LIBRARY_PATH=[getenv LD_LIBRARY_PATH]"
+  verbose -log "LD_RUN_PATH=[getenv LD_RUN_PATH]"
+  verbose -log "SHLIB_PATH=[getenv SHLIB_PATH]"
+  verbose -log "LD_LIBRARY_PATH_32=[getenv LD_LIBRARY_PATH_32]"
+  verbose -log "LD_LIBRARY_PATH_64=[getenv LD_LIBRARY_PATH_64]"
+  verbose -log "DYLD_LIBRARY_PATH=[getenv DYLD_LIBRARY_PATH]"
+}
+
+#######################################
+# proc restore_gcc_exec_prefix_env_var { }
+#######################################
+
+proc restore_gcc_exec_prefix_env_var { } {
+  global orig_gcc_exec_prefix_saved
+  global orig_gcc_exec_prefix
+  global env
+
+  if { $orig_gcc_exec_prefix_saved } {
+    setenv GCC_EXEC_PREFIX "$orig_gcc_exec_prefix"
+  } elseif [info exists env(GCC_EXEC_PREFIX)] {
+    unsetenv GCC_EXEC_PREFIX
+  }
 }
 
 #######################################
@@ -195,8 +212,6 @@ 
   global orig_ld_library_path_saved
   global orig_ld_run_path_saved
   global orig_shlib_path_saved
-  global orig_ld_libraryn32_path_saved
-  global orig_ld_library64_path_saved
   global orig_ld_library_path_32_saved
   global orig_ld_library_path_64_saved
   global orig_dyld_library_path_saved
@@ -204,12 +219,13 @@ 
   global orig_ld_library_path
   global orig_ld_run_path
   global orig_shlib_path
-  global orig_ld_libraryn32_path
-  global orig_ld_library64_path
   global orig_ld_library_path_32
   global orig_ld_library_path_64
   global orig_dyld_library_path
   global orig_path
+  global env
+
+  restore_gcc_exec_prefix_env_var
 
   if { $orig_environment_saved == 0 } {
     return
@@ -230,16 +246,6 @@ 
   } elseif [info exists env(SHLIB_PATH)] {
     unsetenv SHLIB_PATH
   }
-  if { $orig_ld_libraryn32_path_saved } {
-    setenv LD_LIBRARYN32_PATH "$orig_ld_libraryn32_path"
-  } elseif [info exists env(LD_LIBRARYN32_PATH)] {
-    unsetenv LD_LIBRARYN32_PATH
-  }
-  if { $orig_ld_library64_path_saved } {
-    setenv LD_LIBRARY64_PATH "$orig_ld_library64_path"
-  } elseif [info exists env(LD_LIBRARY64_PATH)] {
-    unsetenv LD_LIBRARY64_PATH
-  }
   if { $orig_ld_library_path_32_saved } {
     setenv LD_LIBRARY_PATH_32 "$orig_ld_library_path_32"
   } elseif [info exists env(LD_LIBRARY_PATH_32)] {
@@ -269,11 +275,11 @@ 
 proc get_shlib_extension { } {
     global shlib_ext
 
-    if { [ istarget *-*-darwin* ] } {
+    if { [istarget *-*-darwin*] } {
 	set shlib_ext "dylib"
-    } elseif { [ istarget *-*-cygwin* ] || [ istarget *-*-mingw* ] } {
+    } elseif { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } {
 	set shlib_ext "dll"
-    } elseif { [ istarget hppa*-*-hpux* ] } {
+    } elseif { [istarget hppa*-*-hpux*] } {
 	set shlib_ext "sl"
     } else {
 	set shlib_ext "so"