xref: /freebsd/contrib/ncurses/misc/shlib (revision 4a1a95108dd76c4259fe6c37c4471f7969b17983)
10e3d5408SPeter Wemm#!/bin/sh
20e3d5408SPeter Wemm##############################################################################
34a1a9510SRong-En Fan# Copyright (c) 1998-2003,2005 Free Software Foundation, Inc.                #
40e3d5408SPeter Wemm#                                                                            #
50e3d5408SPeter Wemm# Permission is hereby granted, free of charge, to any person obtaining a    #
60e3d5408SPeter Wemm# copy of this software and associated documentation files (the "Software"), #
70e3d5408SPeter Wemm# to deal in the Software without restriction, including without limitation  #
80e3d5408SPeter Wemm# the rights to use, copy, modify, merge, publish, distribute, distribute    #
90e3d5408SPeter Wemm# with modifications, sublicense, and/or sell copies of the Software, and to #
100e3d5408SPeter Wemm# permit persons to whom the Software is furnished to do so, subject to the  #
110e3d5408SPeter Wemm# following conditions:                                                      #
120e3d5408SPeter Wemm#                                                                            #
130e3d5408SPeter Wemm# The above copyright notice and this permission notice shall be included in #
140e3d5408SPeter Wemm# all copies or substantial portions of the Software.                        #
150e3d5408SPeter Wemm#                                                                            #
160e3d5408SPeter Wemm# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
170e3d5408SPeter Wemm# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
180e3d5408SPeter Wemm# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
190e3d5408SPeter Wemm# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
200e3d5408SPeter Wemm# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
210e3d5408SPeter Wemm# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
220e3d5408SPeter Wemm# DEALINGS IN THE SOFTWARE.                                                  #
230e3d5408SPeter Wemm#                                                                            #
240e3d5408SPeter Wemm# Except as contained in this notice, the name(s) of the above copyright     #
250e3d5408SPeter Wemm# holders shall not be used in advertising or otherwise to promote the sale, #
260e3d5408SPeter Wemm# use or other dealings in this Software without prior written               #
270e3d5408SPeter Wemm# authorization.                                                             #
280e3d5408SPeter Wemm##############################################################################
290e3d5408SPeter Wemm#
300e3d5408SPeter Wemm# Author: Thomas E. Dickey <dickey@clark.net> 1996
310e3d5408SPeter Wemm#
324a1a9510SRong-En Fan# $Id: shlib,v 1.10 2005/06/25 22:41:17 tom Exp $
330e3d5408SPeter Wemm# Use this script as a wrapper when running executables linked to shared
340e3d5408SPeter Wemm# libraries on systems that use the $LD_LIBRARY_PATH variable and don't embed
350e3d5408SPeter Wemm# the soname's path within the linked executable (such as IRIX), e.g,
360e3d5408SPeter Wemm#
370e3d5408SPeter Wemm#	shlib knight
380e3d5408SPeter Wemm#
390e3d5408SPeter Wemm# Setting LD_LIBRARY_PATH, overrides/supplements the loader's normal search
400e3d5408SPeter Wemm# path, and works on most systems.  The drawback is that then the environment
410e3d5408SPeter Wemm# variable has to be set to run the programs within this directory tree.
420e3d5408SPeter Wemm#
430e3d5408SPeter Wemm# For Linux (and other systems using the GNU loader), we can use the rpath
440e3d5408SPeter Wemm# directive, which embeds the pathname of the library within the executable.
450e3d5408SPeter Wemm# Using the Linux loader's rpath directive introduces a constraint, since
460e3d5408SPeter Wemm# it's embedded into the binary, and means that the binary cannot be moved
470e3d5408SPeter Wemm# around (though it'll work if the $exec_prefix convention that puts the bin
480e3d5408SPeter Wemm# and lib directories under the same parent is followed).
490e3d5408SPeter Wemm#
500e3d5408SPeter Wemm# Using the actual soname (e.g., ../lib/libncurses.so) alone, is a more
510e3d5408SPeter Wemm# flexible solution; you can link without having to set the environment
520e3d5408SPeter Wemm# variable, and on some systems (IRIX) you can even run the resulting binaries
530e3d5408SPeter Wemm# without setting LD_LIBRARY_PATH.
540e3d5408SPeter Wemm#
550e3d5408SPeter Wemm# Using a conventional link, with -L and -l options on Linux results in a
560e3d5408SPeter Wemm# statically linked executable, which we don't want at all.
570e3d5408SPeter Wemm#
5815589c42SPeter Wemm# Special cases:
5915589c42SPeter Wemm#
6015589c42SPeter Wemm#	BeOS R4.5 uses $LIBRARY_PATH rather than $LD_LIBRARY_PATH.
614a1a9510SRong-En Fan#	Cygwin uses $PATH
624a1a9510SRong-En Fan#	Mac OS X uses $DYLD_LIBRARY_PATH
634a1a9510SRong-En Fan#
644a1a9510SRong-En Fan# Other cases not handled by this script:
654a1a9510SRong-En Fan#
664a1a9510SRong-En Fan#	AIX uses $LIBPATH
674a1a9510SRong-En Fan#	IRIX64 may use $LD_LIBRARY64_PATH or $LD_LIBRARYN32_PATH
684a1a9510SRong-En Fan#	Solaris may use $LD_LIBRARY_PATH_64
694a1a9510SRong-En Fan#
704a1a9510SRong-En FanCDPATH=
710e3d5408SPeter Wemm#
720e3d5408SPeter Wemm# Make sure that we use the PATH that was set in run_tic.sh
734a1a9510SRong-En Fanif test -n "$SHLIB_PATH" ; then
744a1a9510SRong-En Fan	PATH=$SHLIB_PATH
750e3d5408SPeter Wemm	export PATH
760e3d5408SPeter Wemmfi
770e3d5408SPeter Wemm
784a1a9510SRong-En Fan# Find the lib-directory for this build tree
790e3d5408SPeter Wemmq=""
804a1a9510SRong-En Fanfor p in lib ../lib ../../lib ../../../lib
810e3d5408SPeter Wemmdo
820e3d5408SPeter Wemm	if test -d $p; then
834a1a9510SRong-En Fan		q=`cd $p; pwd`
844a1a9510SRong-En Fan	elif test -f configure && test ! -d ../$p ; then
854a1a9510SRong-En Fan		break
860e3d5408SPeter Wemm	fi
870e3d5408SPeter Wemmdone
884a1a9510SRong-En Fan
894a1a9510SRong-En Fan# Set the environment variable.
900e3d5408SPeter Wemmif test -n "$q" ; then
914a1a9510SRong-En Fan	system=
924a1a9510SRong-En Fan	if test -n "$SHLIB_HOST" ; then
934a1a9510SRong-En Fan		system="$SHLIB_HOST"
944a1a9510SRong-En Fan	elif test -n "$PATHEXT" ; then
954a1a9510SRong-En Fan		system=cygwin
9615589c42SPeter Wemm	elif test -n "$LIBRARY_PATH" ; then
974a1a9510SRong-En Fan		system=beos
984a1a9510SRong-En Fan	elif test -n "$DYLD_LIBRARY_PATH" ; then
994a1a9510SRong-En Fan		system=darwin
1004a1a9510SRong-En Fan	elif test -n "$LD_LIBRARY_PATH"; then
1014a1a9510SRong-En Fan		system=unix
1020e3d5408SPeter Wemm	else
1034a1a9510SRong-En Fan		for r in $q/*.*
1044a1a9510SRong-En Fan		do
1054a1a9510SRong-En Fan			if test -f "$r"
1064a1a9510SRong-En Fan			then
1074a1a9510SRong-En Fan				case $r in
1084a1a9510SRong-En Fan				*.dll)
1094a1a9510SRong-En Fan					system=cygwin
1104a1a9510SRong-En Fan					;;
1114a1a9510SRong-En Fan				*.dylib)
1124a1a9510SRong-En Fan					system=darwin
1134a1a9510SRong-En Fan					;;
1144a1a9510SRong-En Fan				esac
1150e3d5408SPeter Wemm			fi
1164a1a9510SRong-En Fan			test -n "$system" && break
1174a1a9510SRong-En Fan		done
1180e3d5408SPeter Wemm	fi
1194a1a9510SRong-En Fan
1204a1a9510SRong-En Fan	case .$system in
1214a1a9510SRong-En Fan	.cygwin*)
1224a1a9510SRong-En Fan		variable=PATH
1234a1a9510SRong-En Fan		;;
1244a1a9510SRong-En Fan	.beos*)
1254a1a9510SRong-En Fan		variable=LIBRARY_PATH
1264a1a9510SRong-En Fan		;;
1274a1a9510SRong-En Fan	.darwin*)
1284a1a9510SRong-En Fan		variable=DYLD_LIBRARY_PATH
1294a1a9510SRong-En Fan		;;
1304a1a9510SRong-En Fan	*)
1314a1a9510SRong-En Fan		variable=LD_LIBRARY_PATH
1324a1a9510SRong-En Fan		;;
1334a1a9510SRong-En Fan	esac
1344a1a9510SRong-En Fan
1354a1a9510SRong-En Fan	eval 'test -z "$'$variable'" && '$variable'=":"'
1364a1a9510SRong-En Fan	eval $variable'="$q:$'$variable'"'
1374a1a9510SRong-En Fan	eval 'export '$variable
1384a1a9510SRong-En Fanfi
1394a1a9510SRong-En Fan
1400e3d5408SPeter Wemmeval "$*"
141