#!/bin/sh
# install-reloc - install a program including a relocating wrapper
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
# Written by Bruno Haible <bruno@clisp.org>, 2003.
#
# 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# 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.

# Usage:
#   install-reloc library_path_var library_path_value prefix compile_command srcdir config_h_dir exeext 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
#   - 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
#   - destprog is the destination program name
# install-reloc renames destprog to destprog.bin and installs a relocating
# wrapper in the place of destprog.

progname=$0

if test $# -eq 2; then
  # Get arguments from environment variables.
  library_path_var=$RELOC_LIBRARY_PATH_VAR
  library_path_value=$RELOC_LIBRARY_PATH_VALUE
  prefix=$RELOC_PREFIX
  compile_command=$RELOC_COMPILE_COMMAND
  srcdir=$RELOC_SRCDIR
  builddir=$RELOC_BUILDDIR
  config_h_dir=$RELOC_CONFIG_H_DIR
  exeext=$RELOC_EXEEXT
  install_prog=$RELOC_INSTALL_PROG # including the "-c" option
else
  if test $# -ge 9; 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
    shift
    shift
    shift
    shift
    shift
    shift
    shift
    shift
    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
    exit 1
  fi
fi

# Get destprog, last argument.
destprog=
for arg
do
  destprog=$arg
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"`
fi

# Outputs a command and runs it.
func_verbose ()
{
  echo "$@"
  "$@"
}

# Run install_command.
func_verbose $install_prog "$@" || exit $?

# If the platform doesn't support LD_LIBRARY_PATH or similar, we cannot build
# a wrapper.
test -n "$library_path_var" || exit 0

libdirs=
save_IFS="$IFS"; IFS=":"
for dir in $library_path_value; do
  IFS="$save_IFS"
  if test -n "$dir"; then
    case "$libdirs" in
      *"\"$dir\""*) ;; # remove duplicate
      *) libdirs="$libdirs\"$dir\"," ;;
    esac
  fi
done
IFS="$save_IFS"
# If there are no library directories to add at runtime, we don't need a
# wrapper.
test -n "$libdirs" || exit 0

# Compile wrapper.
installdir=`echo "$destprog" | sed -e 's,/[^/]*$,,'`
func_verbose $compile_command -I"$builddir" -I"$srcdir" -I"$config_h_dir" -DHAVE_CONFIG_H -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.c "$srcdir"/allocsa.c "$srcdir"/relocatable.c "$srcdir"/setenv.c "$srcdir"/strerror.c -o "$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"; } \
  || exit 1
mv "$destprog.wrapper$exeext" "$destprog$exeext" || exit 1

exit 0
