From 3dfd1f265b2c78be937e2761bc50e81888b41151 Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Mon, 24 Jan 2005 13:28:47 +0000 Subject: [PATCH] * m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Define Bourne and XSI variants of new function func_stripname for stripping literal prefixes and suffixes. * config/ltmain.m4sh (all over): Use func_stripname. --- ChangeLog | 5 +++ config/ltmain.m4sh | 85 +++++++++++++++++++++++++++++++--------------- m4/libtool.m4 | 27 +++++++++++++++ 3 files changed, 89 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index d037dbd2..2b55b881 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2005-01-24 Ralf Wildenhues + * m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Define Bourne and XSI + variants of new function func_stripname for stripping literal + prefixes and suffixes. + * config/ltmain.m4sh (all over): Use func_stripname. + * tests/defs.m4sh: Extract $build from $LIBTOOL. (func_configure): Pass --host if $host != $build. (func_exec): Try executing cross-compiled binaries (e.g. i686 -> i386), diff --git a/config/ltmain.m4sh b/config/ltmain.m4sh index 975d07cb..b6f1cb2f 100644 --- a/config/ltmain.m4sh +++ b/config/ltmain.m4sh @@ -1138,7 +1138,8 @@ func_mode_compile () ;; # replaced later. I would guess that would be a bug. -Wc,*) - args=`$ECHO "X$arg" | $Xsed -e "s/^-Wc,//"` + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do @@ -1147,7 +1148,8 @@ func_mode_compile () lastarg="$lastarg $func_quote_for_eval_result" done IFS="$save_ifs" - lastarg=`$ECHO "X$lastarg" | $Xsed -e "s/^ //"` + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result # Add the arguments to base_compile. base_compile="$base_compile $lastarg" @@ -1771,7 +1773,8 @@ func_mode_install () fi # Strip any trailing slash from the destination. - dest=`$ECHO "X$dest" | $Xsed -e 's%/$%%'` + func_stripname '' '/' "$dest" + dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes @@ -1989,7 +1992,8 @@ func_mode_install () case $file in *.exe) if test ! -f "$file"; then - file=`$ECHO "X$file"| $Xsed -e 's,.exe$,,'` + func_stripname '' '.exe' "$file" + file=$func_stripname_result stripped_ext=".exe" fi ;; @@ -1998,7 +2002,8 @@ func_mode_install () # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) - wrapper=`$ECHO "X$file" | $Xsed -e 's,.exe$,,'` + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result ;; *) wrapper=$file @@ -2101,7 +2106,8 @@ func_mode_install () destfile=$destfile.exe ;; *:*.exe) - destfile=`$ECHO "X$destfile" | $Xsed -e 's,.exe$,,'` + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result ;; esac ;; @@ -2590,7 +2596,8 @@ func_mode_link () ;; -L*) - dir=`$ECHO "X$arg" | $Xsed -e 's/^-L//'` + func_stripname '-L' '' "$arg" + dir=$func_stripname_result # We need an absolute path. case $dir in [[\\/]]* | [[A-Za-z]]:[[\\/]]*) ;; @@ -2728,7 +2735,8 @@ func_mode_link () ;; -R*) - dir=`$ECHO "X$arg" | $Xsed -e 's/^-R//'` + func_stripname '-R' '' "$arg" + dir=$func_stripname_result # We need an absolute path. case $dir in [[\\/]]* | [[A-Za-z]]:[[\\/]]*) ;; @@ -2784,7 +2792,8 @@ func_mode_link () ;; -Wc,*) - args=`$ECHO "X$arg" | $Xsed -e 's/^-Wc,//'` + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do @@ -2794,11 +2803,13 @@ func_mode_link () compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" - arg=`$ECHO "X$arg" | $Xsed -e "s/^ //"` + func_stripname ' ' '' "$arg" + arg=$func_stripname_result ;; -Wl,*) - args=`$ECHO "X$arg" | $Xsed -e 's/^-Wl,//'` + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do @@ -2809,7 +2820,8 @@ func_mode_link () linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" - arg=`$ECHO "X$arg" | $Xsed -e "s/^ //"` + func_stripname ' ' '' "$arg" + arg=$func_stripname_result ;; -Xcompiler) @@ -3158,7 +3170,8 @@ func_mode_link () func_warning "\`-l' is ignored for archives/objects" continue fi - name=`$ECHO "X$deplib" | $Xsed -e 's/^-l//'` + func_stripname '-l' '' "$deplib" + name=$func_stripname_result for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library @@ -3241,7 +3254,8 @@ func_mode_link () deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$ECHO "X$deplib" | $Xsed -e 's/^-L//'` + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then @@ -3254,7 +3268,8 @@ func_mode_link () compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi - newlib_search_path="$newlib_search_path "`$ECHO "X$deplib" | $Xsed -e 's/^-L//'` + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" @@ -3264,7 +3279,8 @@ func_mode_link () ;; # -L -R*) if test "$pass" = link; then - dir=`$ECHO "X$deplib" | $Xsed -e 's/^-R//'` + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; @@ -3499,7 +3515,8 @@ func_mode_link () notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes - name=`$ECHO "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then @@ -3549,7 +3566,9 @@ func_mode_link () tmp_libs= for deplib in $dependency_libs; do case $deplib in - -L*) newlib_search_path="$newlib_search_path "`$ECHO "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then @@ -3701,7 +3720,8 @@ func_mode_link () soroot="$soname" func_basename "$soroot" soname="$func_basename_result" - newlib=libimp-`$ECHO "X$soname" | $Xsed -e 's/^lib//;s/\.dll$//'`.a + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : @@ -3933,7 +3953,8 @@ func_mode_link () temp_deplibs= for libdir in $dependency_libs; do case $libdir in - -R*) temp_xrpath=`$ECHO "X$libdir" | $Xsed -e 's/^-R//'` + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; @@ -4158,7 +4179,8 @@ func_mode_link () # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) - name=`$ECHO "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; @@ -4168,11 +4190,13 @@ func_mode_link () if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required - name=`$ECHO "X$outputname" | $Xsed -e 's/\.la$//'` + func_stripname '' '.la' "$outputname" + name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else - libname=`$ECHO "X$outputname" | $Xsed -e 's/\.la$//'` + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result fi ;; esac @@ -5371,7 +5395,8 @@ EOF prog) case $host in - *cygwin*) output=`$ECHO "X$output" | $Xsed -e 's,.exe$,,;s,$,.exe,'` ;; + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" @@ -5656,13 +5681,15 @@ EOF # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in - *.exe) output=`$ECHO "X$output" | $Xsed -e 's,.exe$,,'` ;; + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe - outputname=`$ECHO "X$outputname" | $Xsed -e 's,.exe$,,'` ;; + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in @@ -6623,8 +6650,10 @@ func_mode_uninstall () noexename=$name case $file in *.exe) - file=`$ECHO "X$file" | $Xsed -e 's,.exe$,,'` - noexename=`$ECHO "X$name" | $Xsed -e 's,.exe$,,'` + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" diff --git a/m4/libtool.m4 b/m4/libtool.m4 index b1b7aacf..8fbef9e4 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -6060,6 +6060,17 @@ func_basename () { func_basename_result="${1##*/}" } + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + func_stripname_result=${3#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} _LT_EOF ;; *) # Bourne compatible functions. @@ -6083,6 +6094,22 @@ func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} _LT_EOF esac ])