#! /bin/sh
# Output a system dependent linker command for putting a relocatable library
# search path into an executable.
#
#   Copyright 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 of the License, 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.
#
#   As a special exception to the GNU General Public License, if you
#   distribute this file as part of a program that contains a
#   configuration script generated by Autoconf, you may include it under
#   the same distribution terms that you use for the rest of that program.
#
# The first argument passed to this file is the canonical host specification,
#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variable LD should be set by the caller.
#
# The second argument is a colon separated list of directories that contain
# the libraries at installation time.
#
# The third argument is the directory into which the executable is going to be
# installed.

host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`

library_path_value=$2

installdir=$3

# Verify that installdir is absolute.
case "$installdir" in
  /*) ;;
  *)
    echo "installdir is not absolute: $installdir" 1>&2
    exit 1
    ;;
esac

case "$host_os" in
  linux*) # Supported since Linux 2.1 and glibc 2.1.
    rpath=
    save_IFS="$IFS"; IFS=":"
    for dir in $library_path_value; do
      IFS="$save_IFS"
      case "$dir" in
        /*)
          # Make dir relative to installdir. (Works only if dir is absolute.)
          idir="$installdir"
          while true; do
            dfirst=`echo "$dir" | sed -n -e 's,^//*\([^/]*\).*$,/\1,p'`
            ifirst=`echo "$idir" | sed -n -e 's,^//*\([^/]*\).*$,/\1,p'`
            if test -z "$dfirst" || test -z "$ifirst"; then
              break
            fi
            if test "$dfirst" != "$ifirst"; then
              break
            fi
            dir=`echo "$dir" | sed -e 's,^//*[^/]*,,'`
            idir=`echo "$idir" | sed -e 's,^//*[^/]*,,'`
          done
          dir="\$ORIGIN"`echo "$idir" | sed -e 's,//*[^/]*,/..,g'`"$dir"
          # Add dir to rpath.
          rpath="${rpath}${rpath:+ }$dir"
          ;;
        *)
          if test -n "$dir"; then
            echo "libdir is not absolute: $dir" 1>&2
          fi
          ;;
      esac
    done
    IFS="$save_IFS"
    # Output it.
    if test -n "$rpath"; then
      echo "-Wl,-rpath,$rpath"
    fi
    ;;
  *)
    echo "relocation via rpath not supported on this system: $host" 1>&2
    exit 1
    ;;
esac

exit 0
