* genscripts.sh (LIB_PATH): Don't exclude libdir or tooldir when
authorAlan Modra <amodra@gmail.com>
Tue, 24 Sep 2013 05:59:55 +0000 (05:59 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 24 Sep 2013 05:59:55 +0000 (05:59 +0000)
sysrooted.  Also, don't always add tooldir when non-sysrooted.
Instead add both when native and tooldir also when TOOL_DIR is
defined.  Always prepend '=' to paths when sysrooted.  Always
put paths with LIBPATH_SUFFIX first in search order.

ld/ChangeLog
ld/genscripts.sh

index e5be815dd61248068748ecc4186a5bedc69de9c4..6dfce36f8fddea0c5533ba4354a6cc53c3c994bc 100644 (file)
@@ -1,3 +1,11 @@
+2013-09-24  Alan Modra  <amodra@gmail.com>
+
+       * genscripts.sh (LIB_PATH): Don't exclude libdir or tooldir when
+       sysrooted.  Also, don't always add tooldir when non-sysrooted.
+       Instead add both when native and tooldir also when TOOL_DIR is
+       defined.  Always prepend '=' to paths when sysrooted.  Always
+       put paths with LIBPATH_SUFFIX first in search order.
+
 2013-09-20  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * Makefile.am (enios2elf.c): Change tdir_nios2 to tdir_nios2elf.
index 61981bdd81ccd26572645ea238169c84a617ac6d..a4da92d2d0c62d3a4a8bc54ca8daa2d290c32bcb 100755 (executable)
@@ -95,13 +95,6 @@ EMULATION_NAME=$3
 TOOL_LIB=$4
 CUSTOMIZER_SCRIPT=$5
 
-# Can't use ${TOOL_LIB:-$target_alias} here due to an Ultrix shell bug.
-if [ "x${TOOL_LIB}" = "x" ] ; then
-  tool_lib=${exec_prefix}/${target_alias}/lib
-else
-  tool_lib=${exec_prefix}/${TOOL_LIB}/lib
-fi
-
 if [ "x${CUSTOMIZER_SCRIPT}" = "x" ] ; then
   CUSTOMIZER_SCRIPT=${EMULATION_NAME}
 fi
@@ -150,97 +143,87 @@ fi
 # If the emulparams file set LIBPATH_SUFFIX, prepend an extra copy of
 # the library path with the suffix applied.
 
-if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
-  LIB_PATH2=
+# Paths with LIBPATH_SUFFIX
+lib_path1=
+# Paths without LIBPATH_SUFFIX
+lib_path2=
+if [ "${LIB_PATH}" != ":" ] ; then
+  lib_path2=${LIB_PATH}
+fi
 
-  libs=${NATIVE_LIB_DIRS}
-  if [ "x${use_sysroot}" != "xyes" ] ; then
-    case " ${libs} " in
-      *" ${libdir} "*) ;;
-      *) libs="${libdir} ${libs}" ;;
-    esac
-    case " ${libs} " in
-      *" ${tool_lib} "*) ;;
-      *) libs="${tool_lib} ${libs}" ;;
-    esac
+# Add args to lib_path1 and lib_path2, discarding any duplicates
+append_to_lib_path()
+{
+  if [ $# != 0 ]; then
+    for lib in "$@"; do
+      # The "=" is harmless if we aren't using a sysroot, but also needless.
+      if [ "x${use_sysroot}" = "xyes" ] ; then
+       lib="=${lib}"
+      fi
+      if test -n "${LIBPATH_SUFFIX}"; then
+       case "${lib}" in
+         *${LIBPATH_SUFFIX})
+           case :${lib_path1}: in
+             *:${lib}:*) ;;
+             ::) lib_path1=${lib} ;;
+             *) lib_path1=${lib_path1}:${lib} ;;
+           esac ;;
+         *)
+           case :${lib_path1}: in
+             *:${lib}${LIBPATH_SUFFIX}:*) ;;
+             ::) lib_path1=${lib}${LIBPATH_SUFFIX} ;;
+             *) lib_path1=${lib_path1}:${lib}${LIBPATH_SUFFIX} ;;
+           esac ;;
+       esac
+      fi
+      case :${lib_path1}:${lib_path2}: in
+       *:${lib}:*) ;;
+       *::) lib_path2=${lib} ;;
+       *) lib_path2=${lib_path2}:${lib} ;;
+      esac
+    done
   fi
+}
 
-  for lib in ${libs}; do
-    # The "=" is harmless if we aren't using a sysroot, but also needless.
-    if [ "x${use_sysroot}" = "xyes" ] ; then
-      lib="=${lib}"
+# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib when native
+# except when LIBPATH=":".
+if [ "${LIB_PATH}" != ":" ] ; then
+  libs=
+  if [ "x${TOOL_LIB}" = "x" ] ; then
+    if [ "x${NATIVE}" = "xyes" ] ; then
+      libs="${exec_prefix}/${target_alias}/lib"
     fi
-    addsuffix=
-    case "${LIBPATH_SUFFIX}:${lib}" in
-      :*) ;;
-      *:*${LIBPATH_SUFFIX}) ;;
-      *) addsuffix=yes ;;
+  else
+    # For multilib'ed targets, ensure both ${target_alias}/lib${LIBPATH_SUFFIX}
+    # and ${TOOL_LIB}/lib${LIBPATH_SUFFIX} are in the default search path,
+    # because 64bit libraries may be in both places, depending on
+    # cross-development setup method (e.g.: /usr/s390x-linux/lib64
+    # vs. /usr/s390-linux/lib64)
+    case "${NATIVE}:${LIBPATH_SUFFIX}:${TOOL_LIB}" in
+      :* | *::* | *:*:*${LIBPATH_SUFFIX}) ;;
+      *) libs="${exec_prefix}/${target_alias}/lib${LIBPATH_SUFFIX}" ;;
     esac
-    if test -n "$addsuffix"; then
-      case :${LIB_PATH}: in
-       *:${lib}${LIBPATH_SUFFIX}:*) ;;
-       ::) LIB_PATH=${lib}${LIBPATH_SUFFIX} ;;
-       *) LIB_PATH=${LIB_PATH}:${lib}${LIBPATH_SUFFIX} ;;
-      esac
-      case :${LIB_PATH}:${LIB_PATH2}: in
-       *:${lib}:*) ;;
-       *::) LIB_PATH2=${lib} ;;
-       *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
-      esac
-    else
-      case :${LIB_PATH2}: in
-       *:${lib}:*) ;;
-       ::) LIB_PATH2=${lib} ;;
-       *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
-      esac
-    fi
-  done
-
-  case :${LIB_PATH}:${LIB_PATH2}: in
-    *:: | ::*) LIB_PATH=${LIB_PATH}${LIB_PATH2} ;;
-    *) LIB_PATH=${LIB_PATH}:${LIB_PATH2} ;;
-  esac
-
-  # For multilib'ed targets, ensure both ${target_alias}/lib${LIBPATH_SUFFIX}
-  # and ${TOOL_LIB}/lib${LIBPATH_SUFFIX} are in the default search path, because
-  # 64bit libraries may be in both places, depending on cross-development
-  # setup method (e.g.: /usr/s390x-linux/lib64 vs /usr/s390-linux/lib64)
-  case "${LIBPATH_SUFFIX}:${tool_lib}" in
-    :*) ;;
-    *:*${LIBPATH_SUFFIX}) ;;
-    *)
-      paths="${exec_prefix}/${target_alias}/lib${LIBPATH_SUFFIX}"
-      if [ x"${TOOL_LIB}" != x ]; then
-        paths="${paths} ${exec_prefix}/${TOOL_LIB}/lib${LIBPATH_SUFFIX}"
-      fi
-      for path in $paths; do
-        case :${LIB_PATH}: in
-          ::: | *:${path}:*) ;;
-          *) LIB_PATH=${path}:${LIB_PATH} ;;
-        esac
-      done
-    ;;
-  esac
+    libs="${exec_prefix}/${TOOL_LIB}/lib ${libs}"
+  fi
+  append_to_lib_path ${libs}
 fi
 
-# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib, except for
-# sysrooted configurations and when LIBPATH=":".
-if [ "x${use_sysroot}" != "xyes" ] ; then
-  case :${LIB_PATH}: in
-  ::: | *:${tool_lib}:*) ;;
-  ::) LIB_PATH=${tool_lib} ;;
-  *) LIB_PATH=${tool_lib}:${LIB_PATH} ;;
-  esac
-  # For multilib targets, search both $tool_lib dirs
-  if [ "x${LIBPATH_SUFFIX}" != "x" ] ; then
-    case :${LIB_PATH}: in
-      ::: | *:${tool_lib}${LIBPATH_SUFFIX}:*) ;;
-      ::) LIB_PATH=${tool_lib}${LIBPATH_SUFFIX} ;;
-      *) LIB_PATH=${tool_lib}${LIBPATH_SUFFIX}:${LIB_PATH} ;;
+if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
+  libs=${NATIVE_LIB_DIRS}
+  if [ "x${NATIVE}" = "xyes" ] ; then
+    case " ${libs} " in
+      *" ${libdir} "*) ;;
+      *) libs="${libdir} ${libs}" ;;
     esac
   fi
+  append_to_lib_path ${libs}
 fi
 
+case :${lib_path1}:${lib_path2}: in
+  *:: | ::*) LIB_PATH=${lib_path1}${lib_path2} ;;
+  *) LIB_PATH=${lib_path1}:${lib_path2} ;;
+esac
+
 LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
 
 # We need it for testsuite.