#!/bin/sh
# install-reloc - install a program including a relocating wrapper
# Copyright (C) 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Usage:
#   install-reloc library_path_var library_path_value prefix compile_command srcdir config_h_dir 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
#   - 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
  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
    install_prog=$8 # maybe not including the "-c" option
    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 install_command... destprog" 1>&2
    exit 1
  fi
fi

# Get destprog, last argument.
destprog=
for arg
do
  destprog=$arg
done

# 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" "$srcdir"/relocwrapper.c "$srcdir"/progname.c "$srcdir"/progreloc.c "$srcdir"/xreadlink.c "$srcdir"/readlink.c "$srcdir"/canonicalize.c "$srcdir"/relocatable.c "$srcdir"/setenv.c "$srcdir"/strerror.c -o $destprog.wrapper || exit $?

# Rename $destprog.wrapper -> $destprog -> $destprog.bin.
ln -f $destprog $destprog.bin || exit 1
mv $destprog.wrapper $destprog || exit 1

exit 0
