#! /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
