changeset 29239:0cc36cd5f024

Make --enable-relocatable work with DESTDIR.
author Bruno Haible <bruno@clisp.org>
date Wed, 26 Dec 2007 16:26:26 +0100
parents 28bab0152c5b
children c6d69881c6c6
files ChangeLog build-aux/install-reloc m4/relocatable.m4
diffstat 3 files changed, 37 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Dec 26 16:25:28 2007 +0100
+++ b/ChangeLog	Wed Dec 26 16:26:26 2007 +0100
@@ -1,3 +1,12 @@
+2007-12-24  Bruno Haible  <bruno@clisp.org>
+
+	Make --enable-relocatable work with DESTDIR.
+	* build-aux/install-reloc: Accept another argument 'destdir'. Use it
+	to compute installdir from destprog.
+	* m4/relocatable.m4 (gl_RELOCATABLE_BODY): In INSTALL_PROGRAM_ENV,
+	also set the RELOC_DESTDIR variable.
+	Reported by Левашев Иван <octagram@bluebottle.com>.
+
 2007-12-24  Bruno Haible  <bruno@clisp.org>
 
 	Fix link error due to xalloc_die().
--- a/build-aux/install-reloc	Wed Dec 26 16:25:28 2007 +0100
+++ b/build-aux/install-reloc	Wed Dec 26 16:26:26 2007 +0100
@@ -17,7 +17,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Usage:
-#   install-reloc library_path_var library_path_value prefix \
+#   install-reloc library_path_var library_path_value prefix destdir \
 #                 compile_command srcdir config_h_dir exeext \
 #                 install_command... destprog
 # where
@@ -25,6 +25,9 @@
 #   - 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,
@@ -43,6 +46,7 @@
   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
@@ -50,17 +54,17 @@
   exeext=$RELOC_EXEEXT
   install_prog=$RELOC_INSTALL_PROG # including the "-c" option
 else
-  if test $# -ge 9; then
+  if test $# -ge 10; 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
+    compile_command=$5
+    srcdir=$6
+    builddir=$7
+    config_h_dir=$8
+    exeext=$9
     shift
     shift
     shift
@@ -70,8 +74,10 @@
     shift
     shift
     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" \
          "install_command... destprog" 1>&2
     exit 1
@@ -86,8 +92,9 @@
 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.
@@ -120,8 +127,15 @@
 # wrapper.
 test -n "$libdirs" || exit 0
 
+# 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.
-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 \
--- a/m4/relocatable.m4	Wed Dec 26 16:25:28 2007 +0100
+++ b/m4/relocatable.m4	Wed Dec 26 16:26:26 2007 +0100
@@ -1,4 +1,4 @@
-# relocatable.m4 serial 11
+# relocatable.m4 serial 12
 dnl Copyright (C) 2003, 2005-2007 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -62,7 +62,7 @@
         dnl consisting of more than one word - libtool doesn't support this.
         dnl So we abuse the INSTALL_PROGRAM_ENV hook, originally meant for the
         dnl 'install-strip' target.
-        INSTALL_PROGRAM_ENV="RELOC_LIBRARY_PATH_VAR=\"$shlibpath_var\" RELOC_LIBRARY_PATH_VALUE=\"\$(RELOCATABLE_LIBRARY_PATH)\" RELOC_PREFIX=\"\$(prefix)\" RELOC_COMPILE_COMMAND=\"\$(CC) \$(CPPFLAGS) \$(CFLAGS) \$(LDFLAGS)\" RELOC_SRCDIR=\"\$(RELOCATABLE_SRC_DIR)\" RELOC_BUILDDIR=\"\$(RELOCATABLE_BUILD_DIR)\" RELOC_CONFIG_H_DIR=\"\$(RELOCATABLE_CONFIG_H_DIR)\" RELOC_EXEEXT=\"\$(EXEEXT)\" RELOC_INSTALL_PROG=\"$INSTALL_PROGRAM\""
+        INSTALL_PROGRAM_ENV="RELOC_LIBRARY_PATH_VAR=\"$shlibpath_var\" RELOC_LIBRARY_PATH_VALUE=\"\$(RELOCATABLE_LIBRARY_PATH)\" RELOC_PREFIX=\"\$(prefix)\" RELOC_DESTDIR=\"\$(DESTDIR)\" RELOC_COMPILE_COMMAND=\"\$(CC) \$(CPPFLAGS) \$(CFLAGS) \$(LDFLAGS)\" RELOC_SRCDIR=\"\$(RELOCATABLE_SRC_DIR)\" RELOC_BUILDDIR=\"\$(RELOCATABLE_BUILD_DIR)\" RELOC_CONFIG_H_DIR=\"\$(RELOCATABLE_CONFIG_H_DIR)\" RELOC_EXEEXT=\"\$(EXEEXT)\" RELOC_INSTALL_PROG=\"$INSTALL_PROGRAM\""
         AC_SUBST([INSTALL_PROGRAM_ENV])
         case "$ac_aux_dir" in
           /*) INSTALL_PROGRAM="$ac_aux_dir/install-reloc" ;;