1 # Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. 2 3 # This program is free software; you can redistribute it and/or modify 4 # it under the terms of the GNU General Public License as published by 5 # the Free Software Foundation; either version 3 of the License, or 6 # (at your option) any later version. 7 # 8 # This program is distributed in the hope that it will be useful, 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 # GNU General Public License for more details. 12 # 13 # You should have received a copy of the GNU General Public License 14 # along with GCC; see the file COPYING3. If not see 15 # <http://www.gnu.org/licenses/>. 16 17 # This file was contributed by John David Anglin (dave.anglin (at) nrc-cnrc.gc.ca) 18 19 set orig_environment_saved 0 20 set orig_ld_library_path_saved 0 21 set orig_ld_run_path_saved 0 22 set orig_shlib_path_saved 0 23 set orig_ld_libraryn32_path_saved 0 24 set orig_ld_library64_path_saved 0 25 set orig_ld_library_path_32_saved 0 26 set orig_ld_library_path_64_saved 0 27 set orig_dyld_library_path_saved 0 28 29 30 ####################################### 31 # proc set_ld_library_path_env_vars { } 32 ####################################### 33 34 proc set_ld_library_path_env_vars { } { 35 global ld_library_path 36 global orig_environment_saved 37 global orig_ld_library_path_saved 38 global orig_ld_run_path_saved 39 global orig_shlib_path_saved 40 global orig_ld_libraryn32_path_saved 41 global orig_ld_library64_path_saved 42 global orig_ld_library_path_32_saved 43 global orig_ld_library_path_64_saved 44 global orig_dyld_library_path_saved 45 global orig_ld_library_path 46 global orig_ld_run_path 47 global orig_shlib_path 48 global orig_ld_libraryn32_path 49 global orig_ld_library64_path 50 global orig_ld_library_path_32 51 global orig_ld_library_path_64 52 global orig_dyld_library_path 53 global GCC_EXEC_PREFIX 54 55 # Set the relocated compiler prefix, but only if the user hasn't specified one. 56 if { [info exists GCC_EXEC_PREFIX] && ![info exists env(GCC_EXEC_PREFIX)] } { 57 setenv GCC_EXEC_PREFIX "$GCC_EXEC_PREFIX" 58 } 59 60 # Setting the ld library path causes trouble when testing cross-compilers. 61 if { [is_remote target] } { 62 return 63 } 64 65 if { $orig_environment_saved == 0 } { 66 global env 67 68 set orig_environment_saved 1 69 70 # Save the original environment. 71 if [info exists env(LD_LIBRARY_PATH)] { 72 set orig_ld_library_path "$env(LD_LIBRARY_PATH)" 73 set orig_ld_library_path_saved 1 74 } 75 if [info exists env(LD_RUN_PATH)] { 76 set orig_ld_run_path "$env(LD_RUN_PATH)" 77 set orig_ld_run_path_saved 1 78 } 79 if [info exists env(SHLIB_PATH)] { 80 set orig_shlib_path "$env(SHLIB_PATH)" 81 set orig_shlib_path_saved 1 82 } 83 if [info exists env(LD_LIBRARYN32_PATH)] { 84 set orig_ld_libraryn32_path "$env(LD_LIBRARYN32_PATH)" 85 set orig_ld_libraryn32_path_saved 1 86 } 87 if [info exists env(LD_LIBRARY64_PATH)] { 88 set orig_ld_library64_path "$env(LD_LIBRARY64_PATH)" 89 set orig_ld_library64_path_saved 1 90 } 91 if [info exists env(LD_LIBRARY_PATH_32)] { 92 set orig_ld_library_path_32 "$env(LD_LIBRARY_PATH_32)" 93 set orig_ld_library_path_32_saved 1 94 } 95 if [info exists env(LD_LIBRARY_PATH_64)] { 96 set orig_ld_library_path_64 "$env(LD_LIBRARY_PATH_64)" 97 set orig_ld_library_path_64_saved 1 98 } 99 if [info exists env(DYLD_LIBRARY_PATH)] { 100 set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)" 101 set orig_dyld_library_path_saved 1 102 } 103 } 104 105 # We need to set ld library path in the environment. Currently, 106 # unix.exp doesn't set the environment correctly for all systems. 107 # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a 108 # program. We also need the environment set for compilations, etc. 109 # 110 # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but 111 # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH 112 # (for the 64-bit ABI). The same applies to Darwin (DYLD_LIBRARY_PATH), 113 # Solaris 32 bit (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64), 114 # and HP-UX (SHLIB_PATH). In some cases, the variables are independent 115 # of LD_LIBRARY_PATH, and in other cases LD_LIBRARY_PATH is used if the 116 # variable is not defined. 117 # 118 # Doing this is somewhat of a hack as ld_library_path gets repeated in 119 # SHLIB_PATH and LD_LIBRARY_PATH when unix_load sets these variables. 120 if { $orig_ld_library_path_saved } { 121 setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" 122 } else { 123 setenv LD_LIBRARY_PATH "$ld_library_path" 124 } 125 if { $orig_ld_run_path_saved } { 126 setenv LD_RUN_PATH "$ld_library_path:$orig_ld_run_path" 127 } else { 128 setenv LD_RUN_PATH "$ld_library_path" 129 } 130 # The default shared library dynamic path search for 64-bit 131 # HP-UX executables searches LD_LIBRARY_PATH before SHLIB_PATH. 132 # LD_LIBRARY_PATH isn't used for 32-bit executables. Thus, we 133 # set LD_LIBRARY_PATH and SHLIB_PATH as if they were independent. 134 if { $orig_shlib_path_saved } { 135 setenv SHLIB_PATH "$ld_library_path:$orig_shlib_path" 136 } else { 137 setenv SHLIB_PATH "$ld_library_path" 138 } 139 if { $orig_ld_libraryn32_path_saved } { 140 setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_libraryn32_path" 141 } elseif { $orig_ld_library_path_saved } { 142 setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_library_path" 143 } else { 144 setenv LD_LIBRARYN32_PATH "$ld_library_path" 145 } 146 if { $orig_ld_library64_path_saved } { 147 setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library64_path" 148 } elseif { $orig_ld_library_path_saved } { 149 setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library_path" 150 } else { 151 setenv LD_LIBRARY64_PATH "$ld_library_path" 152 } 153 if { $orig_ld_library_path_32_saved } { 154 setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path_32" 155 } elseif { $orig_ld_library_path_saved } { 156 setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path" 157 } else { 158 setenv LD_LIBRARY_PATH_32 "$ld_library_path" 159 } 160 if { $orig_ld_library_path_64_saved } { 161 setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path_64" 162 } elseif { $orig_ld_library_path_saved } { 163 setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path" 164 } else { 165 setenv LD_LIBRARY_PATH_64 "$ld_library_path" 166 } 167 if { $orig_dyld_library_path_saved } { 168 setenv DYLD_LIBRARY_PATH "$ld_library_path:$orig_dyld_library_path" 169 } else { 170 setenv DYLD_LIBRARY_PATH "$ld_library_path" 171 } 172 173 verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path" 174 } 175 176 ####################################### 177 # proc restore_ld_library_path_env_vars { } 178 ####################################### 179 180 proc restore_ld_library_path_env_vars { } { 181 global orig_environment_saved 182 global orig_ld_library_path_saved 183 global orig_ld_run_path_saved 184 global orig_shlib_path_saved 185 global orig_ld_libraryn32_path_saved 186 global orig_ld_library64_path_saved 187 global orig_ld_library_path_32_saved 188 global orig_ld_library_path_64_saved 189 global orig_dyld_library_path_saved 190 global orig_ld_library_path 191 global orig_ld_run_path 192 global orig_shlib_path 193 global orig_ld_libraryn32_path 194 global orig_ld_library64_path 195 global orig_ld_library_path_32 196 global orig_ld_library_path_64 197 global orig_dyld_library_path 198 199 if { $orig_environment_saved == 0 } { 200 return 201 } 202 203 if { $orig_ld_library_path_saved } { 204 setenv LD_LIBRARY_PATH "$orig_ld_library_path" 205 } elseif [info exists env(LD_LIBRARY_PATH)] { 206 unsetenv LD_LIBRARY_PATH 207 } 208 if { $orig_ld_run_path_saved } { 209 setenv LD_RUN_PATH "$orig_ld_run_path" 210 } elseif [info exists env(LD_RUN_PATH)] { 211 unsetenv LD_RUN_PATH 212 } 213 if { $orig_shlib_path_saved } { 214 setenv SHLIB_PATH "$orig_shlib_path" 215 } elseif [info exists env(SHLIB_PATH)] { 216 unsetenv SHLIB_PATH 217 } 218 if { $orig_ld_libraryn32_path_saved } { 219 setenv LD_LIBRARYN32_PATH "$orig_ld_libraryn32_path" 220 } elseif [info exists env(LD_LIBRARYN32_PATH)] { 221 unsetenv LD_LIBRARYN32_PATH 222 } 223 if { $orig_ld_library64_path_saved } { 224 setenv LD_LIBRARY64_PATH "$orig_ld_library64_path" 225 } elseif [info exists env(LD_LIBRARY64_PATH)] { 226 unsetenv LD_LIBRARY64_PATH 227 } 228 if { $orig_ld_library_path_32_saved } { 229 setenv LD_LIBRARY_PATH_32 "$orig_ld_library_path_32" 230 } elseif [info exists env(LD_LIBRARY_PATH_32)] { 231 unsetenv LD_LIBRARY_PATH_32 232 } 233 if { $orig_ld_library_path_64_saved } { 234 setenv LD_LIBRARY_PATH_64 "$orig_ld_library_path_64" 235 } elseif [info exists env(LD_LIBRARY_PATH_64)] { 236 unsetenv LD_LIBRARY_PATH_64 237 } 238 if { $orig_dyld_library_path_saved } { 239 setenv DYLD_LIBRARY_PATH "$orig_dyld_library_path" 240 } elseif [info exists env(DYLD_LIBRARY_PATH)] { 241 unsetenv DYLD_LIBRARY_PATH 242 } 243 } 244 245 ####################################### 246 # proc get_shlib_extension { } 247 ####################################### 248 249 proc get_shlib_extension { } { 250 global shlib_ext 251 252 if { [ istarget *-*-darwin* ] } { 253 set shlib_ext "dylib" 254 } elseif { [ istarget *-*-cygwin* ] || [ istarget *-*-mingw* ] } { 255 set shlib_ext "dll" 256 } elseif { [ istarget hppa*-*-hpux* ] } { 257 set shlib_ext "sl" 258 } else { 259 set shlib_ext "so" 260 } 261 return $shlib_ext 262 } 263 264