#! /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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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
