From 0f70b6b5041b7455a72da513e4d36630f8bacbf1 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 24 Sep 2013 05:59:55 +0000 Subject: [PATCH] * 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. --- ld/ChangeLog | 8 +++ ld/genscripts.sh | 157 +++++++++++++++++++++-------------------------- 2 files changed, 78 insertions(+), 87 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index e5be815dd61..6dfce36f8fd 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2013-09-24 Alan Modra + + * 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 * Makefile.am (enios2elf.c): Change tdir_nios2 to tdir_nios2elf. diff --git a/ld/genscripts.sh b/ld/genscripts.sh index 61981bdd81c..a4da92d2d0c 100755 --- a/ld/genscripts.sh +++ b/ld/genscripts.sh @@ -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. -- 2.30.2