From 638a0ff275fcc277f5d10f03e25f4ee0898cef1a Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 26 Dec 2007 16:26:26 +0100 Subject: [PATCH] Make --enable-relocatable work with DESTDIR. --- ChangeLog | 9 +++++++++ build-aux/install-reloc | 38 ++++++++++++++++++++++++++------------ m4/relocatable.m4 | 4 ++-- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index d66c4e63d..500e13a53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2007-12-24 Bruno Haible + 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 Левашев Иван . + +2007-12-24 Bruno Haible + Fix link error due to xalloc_die(). * lib/progreloc.c: When NO_XMALLOC is defined, use areadlink instead of xreadlink. diff --git a/build-aux/install-reloc b/build-aux/install-reloc index 91d79ac87..03e1f3f09 100755 --- a/build-aux/install-reloc +++ b/build-aux/install-reloc @@ -17,7 +17,7 @@ # along with this program. If not, see . # 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 @@ 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 @@ -50,17 +54,17 @@ if test $# -eq 2; then 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 @@ else 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 @@ 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. @@ -120,8 +127,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 \ diff --git a/m4/relocatable.m4 b/m4/relocatable.m4 index 27f5724a5..2907707a5 100644 --- a/m4/relocatable.m4 +++ b/m4/relocatable.m4 @@ -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 @@ AC_DEFUN([gl_RELOCATABLE_BODY], 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" ;; -- 2.11.0