X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=build-aux%2Finstall-reloc;h=b5223a90962a3548e17cdf6893c677268d477e52;hb=fb0f15d4d3057fd142dcd3d6d86b26ba719a88c2;hp=4c2c332b5780b1ed5a123bccb811a1f07919319b;hpb=0c1478d961040909a8d9754b666db4b310357b80;p=gnulib.git diff --git a/build-aux/install-reloc b/build-aux/install-reloc index 4c2c332b5..b5223a909 100755 --- a/build-aux/install-reloc +++ b/build-aux/install-reloc @@ -1,12 +1,12 @@ #!/bin/sh # install-reloc - install a program including a relocating wrapper -# Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005-2007, 2009-2010 Free Software Foundation, Inc. # Written by Bruno Haible , 2003. # -# This program is free software; you can redistribute it and/or modify +# 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 2, or (at your option) -# any later version. +# 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 @@ -14,23 +14,30 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . # Usage: -# install-reloc library_path_var library_path_value prefix compile_command srcdir config_h_dir exeext install_command... destprog +# install-reloc library_path_var library_path_value prefix destdir \ +# compile_command srcdir builddir config_h_dir exeext \ +# strip_command \ +# install_command... destprog # where # - library_path_var is the platform dependent runtime library path variable # - library_path_value is a colon separated list of directories that contain # the libraries at installation time (use this instead of -rpath) # - prefix is the base directory at installation time +# - destdir is a string that is prepended to all file names at installation +# time; it is already prepended to destprog but not to library_path_value +# and prefix # - compile_command is a C compiler compilation and linking command # - srcdir is the directory where to find relocwrapper.c and its dependencies # - builddir is the directory where to find built dependencies (namely, # alloca.h and stdbool.h) # - config_h_dir is the directory where to find config.h # - exeext is platform dependent suffix of executables -# - install-command is the install command line, excluding the final destprog +# - strip_command is the command for stripping executables, or : if no +# stripping is desired +# - install_command is the install command line, excluding the final destprog # - destprog is the destination program name # install-reloc renames destprog to destprog.bin and installs a relocating # wrapper in the place of destprog. @@ -42,35 +49,44 @@ if test $# -eq 2; then library_path_var=$RELOC_LIBRARY_PATH_VAR library_path_value=$RELOC_LIBRARY_PATH_VALUE prefix=$RELOC_PREFIX + destdir=$RELOC_DESTDIR compile_command=$RELOC_COMPILE_COMMAND srcdir=$RELOC_SRCDIR builddir=$RELOC_BUILDDIR config_h_dir=$RELOC_CONFIG_H_DIR exeext=$RELOC_EXEEXT + strip_prog=$RELOC_STRIP_PROG install_prog=$RELOC_INSTALL_PROG # including the "-c" option else - if test $# -ge 9; then + if test $# -ge 11; then # Get fixed position arguments. library_path_var=$1 library_path_value=$2 prefix=$3 - compile_command=$4 - srcdir=$5 - builddir=$6 - config_h_dir=$7 - exeext=$8 - install_prog=$9 # maybe not including the "-c" option + destdir=$4 shift shift shift shift + compile_command=$1 + srcdir=$2 + builddir=$3 + config_h_dir=$4 + exeext=$5 shift shift shift shift shift + strip_prog=$1 + shift + install_prog=$1 # maybe not including the "-c" option + shift else - echo "Usage: $0 library_path_var library_path_value prefix compile_command srcdir builddir config_h_dir exeext install_command... destprog" 1>&2 + echo "Usage: $0 library_path_var library_path_value prefix destdir" \ + "compile_command srcdir builddir config_h_dir exeext" \ + "strip_command" \ + "install_command... destprog" 1>&2 exit 1 fi fi @@ -83,8 +99,9 @@ do done # Remove trailing $exeext, if present. if test -n "$exeext"; then - sedexpr='s|'`echo "$exeext" | sed -e 's,\.,\\\.,g'`'$||' - destprog=`echo "$destprog" | sed -e "$sedexpr"` + sed_quote='s,\.,\\.,g' + sed_remove_exeext='s|'`echo "$exeext" | sed -e "$sed_quote"`'$||' + destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"` fi # Outputs a command and runs it. @@ -97,6 +114,9 @@ func_verbose () # Run install_command. func_verbose $install_prog "$@" || exit $? +# Run strip_command. +test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog$exeext" || exit $? + # If the platform doesn't support LD_LIBRARY_PATH or similar, we cannot build # a wrapper. test -n "$library_path_var" || exit 0 @@ -117,13 +137,59 @@ IFS="$save_IFS" # wrapper. test -n "$libdirs" || exit 0 -# Compile wrapper. +# Determine installdir from destprog, removing a leading destdir if present. installdir=`echo "$destprog" | sed -e 's,/[^/]*$,,'` -func_verbose $compile_command -I"$builddir" -I"$srcdir" -I"$config_h_dir" -DHAVE_CONFIG_H -DIN_RELOCWRAPPER -DNO_XMALLOC -D"INSTALLPREFIX=\"$prefix\"" -D"INSTALLDIR=\"$installdir\"" -D"LIBPATHVAR=\"$library_path_var\"" -D"LIBDIRS=$libdirs" -D"EXEEXT=\"$exeext\"" "$srcdir"/relocwrapper.c "$srcdir"/progname.c "$srcdir"/progreloc.c "$srcdir"/xreadlink.c "$srcdir"/readlink.c "$srcdir"/canonicalize-lgpl.c "$srcdir"/allocsa.c "$srcdir"/relocatable.c "$srcdir"/setenv.c "$srcdir"/strerror.c "$srcdir"/c-ctype.c -o "$destprog.wrapper$exeext" || exit $? +if test -n "$destdir"; then + sed_quote='s,\([|.\*^$[]\),\\\1,g' + sed_remove_destdir='s|^'`echo "$destdir" | sed -e "$sed_quote"`'||' + installdir=`echo "$installdir" | sed -e "$sed_remove_destdir"` +fi + +# Compile wrapper. +func_verbose $compile_command \ + -I"$builddir" -I"$srcdir" -I"$config_h_dir" \ + -DHAVE_CONFIG_H -DIN_RELOCWRAPPER -DNO_XMALLOC \ + -D"INSTALLPREFIX=\"$prefix\"" -D"INSTALLDIR=\"$installdir\"" \ + -D"LIBPATHVAR=\"$library_path_var\"" -D"LIBDIRS=$libdirs" \ + -D"EXEEXT=\"$exeext\"" \ + "$srcdir"/relocwrapper.c \ + "$srcdir"/progname.c \ + "$srcdir"/progreloc.c \ + "$srcdir"/areadlink.c \ + "$srcdir"/readlink.c \ + "$srcdir"/canonicalize-lgpl.c \ + "$srcdir"/malloca.c \ + "$srcdir"/relocatable.c \ + "$srcdir"/setenv.c \ + "$srcdir"/strerror.c \ + "$srcdir"/c-ctype.c \ + -o "$destprog.wrapper$exeext" +rc=$? +# Clean up object files left over in the current directory by the native C +# compilers on Solaris, HP-UX, OSF/1, IRIX. +rm -f relocwrapper.o \ + progname.o \ + progreloc.o \ + xreadlink.o \ + areadlink.o \ + canonicalize-lgpl.o \ + malloca.o \ + relocatable.o \ + setenv.o \ + strerror.o \ + c-ctype.o +test $rc = 0 || exit $? +# Clean up debugging information left over by the native C compiler on MacOS X. +rm -rf "$destprog.wrapper$exeext.dSYM" +test $rc = 0 || exit $? + +# Strip wrapper. +test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog.wrapper$exeext" || exit $? # Rename $destprog.wrapper -> $destprog -> $destprog.bin. ln -f "$destprog$exeext" "$destprog.bin$exeext" \ - || { rm -f "$destprog.bin$exeext" && cp -p "$destprog$exeext" "$destprog.bin$exeext"; } \ + || { rm -f "$destprog.bin$exeext" \ + && cp -p "$destprog$exeext" "$destprog.bin$exeext"; } \ || exit 1 mv "$destprog.wrapper$exeext" "$destprog$exeext" || exit 1