strtoumax: fix typo in previous commit.
[gnulib.git] / build-aux / install-reloc
index 91d79ac..7edc541 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 # install-reloc - install a program including a relocating wrapper
-# Copyright (C) 2003, 2005-2007 Free Software Foundation, Inc.
+# Copyright (C) 2003-2013 Free Software Foundation, Inc.
 # Written by Bruno Haible <bruno@clisp.org>, 2003.
 #
 # This program is free software: you can redistribute it and/or modify
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Usage:
-#   install-reloc library_path_var library_path_value prefix \
-#                 compile_command srcdir config_h_dir exeext \
+#   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.
@@ -43,36 +49,43 @@ 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" \
+    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
@@ -86,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.
@@ -100,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
@@ -120,8 +137,15 @@ 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,/[^/]*$,,'`
+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 \
@@ -132,6 +156,8 @@ func_verbose $compile_command \
              "$srcdir"/progname.c \
              "$srcdir"/progreloc.c \
              "$srcdir"/areadlink.c \
+             "$srcdir"/careadlinkat.c \
+             "$srcdir"/allocator.c \
              "$srcdir"/readlink.c \
              "$srcdir"/canonicalize-lgpl.c \
              "$srcdir"/malloca.c \
@@ -146,8 +172,10 @@ rc=$?
 rm -f relocwrapper.o \
       progname.o \
       progreloc.o \
-      xreadlink.o \
       areadlink.o \
+      careadlinkat.o \
+      allocator.o \
+      readlink.o \
       canonicalize-lgpl.o \
       malloca.o \
       relocatable.o \
@@ -155,6 +183,12 @@ rm -f relocwrapper.o \
       strerror.o \
       c-ctype.o
 test $rc = 0 || exit $?
+# Clean up debugging information left over by the native C compiler on Mac OS 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" \