| # Copyright (C) 2004-2022 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 |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with GCC; see the file COPYING3. If not see |
| # <http://www.gnu.org/licenses/>. |
| |
| # This file was contributed by John David Anglin (dave.anglin@nrc-cnrc.gc.ca) |
| |
| set orig_environment_saved 0 |
| set orig_ld_library_path_saved 0 |
| set orig_ld_run_path_saved 0 |
| set orig_shlib_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 { } |
| ####################################### |
| |
| proc set_ld_library_path_env_vars { } { |
| global ld_library_path |
| global orig_environment_saved |
| global orig_ld_library_path_saved |
| global orig_ld_run_path_saved |
| global orig_shlib_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_library_path_32 |
| global orig_ld_library_path_64 |
| global orig_dyld_library_path |
| global orig_path |
| global orig_gcc_exec_prefix |
| global env |
| |
| # 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 } { |
| set orig_environment_saved 1 |
| |
| # Save the original environment. |
| if [info exists env(LD_LIBRARY_PATH)] { |
| set orig_ld_library_path "$env(LD_LIBRARY_PATH)" |
| set orig_ld_library_path_saved 1 |
| } |
| if [info exists env(LD_RUN_PATH)] { |
| set orig_ld_run_path "$env(LD_RUN_PATH)" |
| set orig_ld_run_path_saved 1 |
| } |
| if [info exists env(SHLIB_PATH)] { |
| set orig_shlib_path "$env(SHLIB_PATH)" |
| set orig_shlib_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 |
| } |
| if [info exists env(LD_LIBRARY_PATH_64)] { |
| set orig_ld_library_path_64 "$env(LD_LIBRARY_PATH_64)" |
| set orig_ld_library_path_64_saved 1 |
| } |
| if [info exists env(DYLD_LIBRARY_PATH)] { |
| set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)" |
| set orig_dyld_library_path_saved 1 |
| } |
| if [info exists env(PATH)] { |
| set orig_path "$env(PATH)" |
| set orig_path_saved 1 |
| } |
| } |
| |
| # We need to set ld library path in the environment. Currently, |
| # unix.exp doesn't set the environment correctly for all systems. |
| # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a |
| # program. We also need the environment set for compilations, etc. |
| # |
| # 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 |
| # SHLIB_PATH and LD_LIBRARY_PATH when unix_load sets these variables. |
| if { $orig_ld_library_path_saved } { |
| setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" |
| } else { |
| setenv LD_LIBRARY_PATH "$ld_library_path" |
| } |
| if { $orig_ld_run_path_saved } { |
| setenv LD_RUN_PATH "$ld_library_path:$orig_ld_run_path" |
| } else { |
| setenv LD_RUN_PATH "$ld_library_path" |
| } |
| # The default shared library dynamic path search for 64-bit |
| # HP-UX executables searches LD_LIBRARY_PATH before SHLIB_PATH. |
| # LD_LIBRARY_PATH isn't used for 32-bit executables. Thus, we |
| # set LD_LIBRARY_PATH and SHLIB_PATH as if they were independent. |
| if { $orig_shlib_path_saved } { |
| setenv SHLIB_PATH "$ld_library_path:$orig_shlib_path" |
| } else { |
| setenv SHLIB_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 } { |
| setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path" |
| } else { |
| setenv LD_LIBRARY_PATH_32 "$ld_library_path" |
| } |
| if { $orig_ld_library_path_64_saved } { |
| setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path_64" |
| } elseif { $orig_ld_library_path_saved } { |
| setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path" |
| } else { |
| setenv LD_LIBRARY_PATH_64 "$ld_library_path" |
| } |
| if { $orig_dyld_library_path_saved } { |
| setenv DYLD_LIBRARY_PATH "$ld_library_path:$orig_dyld_library_path" |
| } else { |
| setenv DYLD_LIBRARY_PATH "$ld_library_path" |
| } |
| if { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } { |
| if { $orig_path_saved } { |
| setenv PATH "$ld_library_path:$orig_path" |
| } else { |
| setenv 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 |
| } |
| } |
| |
| ####################################### |
| # proc restore_ld_library_path_env_vars { } |
| ####################################### |
| |
| proc restore_ld_library_path_env_vars { } { |
| global orig_environment_saved |
| global orig_ld_library_path_saved |
| global orig_ld_run_path_saved |
| global orig_shlib_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_ld_library_path |
| global orig_ld_run_path |
| global orig_shlib_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 |
| } |
| |
| if { $orig_ld_library_path_saved } { |
| setenv LD_LIBRARY_PATH "$orig_ld_library_path" |
| } elseif [info exists env(LD_LIBRARY_PATH)] { |
| unsetenv LD_LIBRARY_PATH |
| } |
| if { $orig_ld_run_path_saved } { |
| setenv LD_RUN_PATH "$orig_ld_run_path" |
| } elseif [info exists env(LD_RUN_PATH)] { |
| unsetenv LD_RUN_PATH |
| } |
| if { $orig_shlib_path_saved } { |
| setenv SHLIB_PATH "$orig_shlib_path" |
| } elseif [info exists env(SHLIB_PATH)] { |
| unsetenv SHLIB_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)] { |
| unsetenv LD_LIBRARY_PATH_32 |
| } |
| if { $orig_ld_library_path_64_saved } { |
| setenv LD_LIBRARY_PATH_64 "$orig_ld_library_path_64" |
| } elseif [info exists env(LD_LIBRARY_PATH_64)] { |
| unsetenv LD_LIBRARY_PATH_64 |
| } |
| if { $orig_dyld_library_path_saved } { |
| setenv DYLD_LIBRARY_PATH "$orig_dyld_library_path" |
| } elseif [info exists env(DYLD_LIBRARY_PATH)] { |
| unsetenv DYLD_LIBRARY_PATH |
| } |
| if { $orig_path_saved } { |
| setenv PATH "$orig_path" |
| } elseif [info exists env(PATH)] { |
| unsetenv PATH |
| } |
| } |
| |
| ####################################### |
| # proc get_shlib_extension { } |
| ####################################### |
| |
| proc get_shlib_extension { } { |
| global shlib_ext |
| |
| if { [istarget *-*-darwin*] } { |
| set shlib_ext "dylib" |
| } elseif { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } { |
| set shlib_ext "dll" |
| } elseif { [istarget hppa*-*-hpux*] } { |
| set shlib_ext "sl" |
| } else { |
| set shlib_ext "so" |
| } |
| return $shlib_ext |
| } |
| |