#! /bin/sh
#
# shobj-conf -- output a series of variable assignments to be substituted
#		into a Makefile by configure which specify system-dependent
#		information for creating shared objects that may be loaded
#		into bash with `enable -f'
#
# usage: shobj-conf [-C compiler] -c host_cpu -o host_os -v host_vendor
#
# Chet Ramey
# chet@po.cwru.edu

#
# defaults
#
SHOBJ_STATUS=supported
SHLIB_STATUS=supported

SHOBJ_CC=cc
SHOBJ_CFLAGS=
SHOBJ_LD=
SHOBJ_LDFLAGS=
SHOBJ_XLDFLAGS=
SHOBJ_LIBS=

SHLIB_XLDFLAGS=
SHLIB_LIBS=
SHLIB_LIBSUFF='so'

SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)'

PROGNAME=`basename $0`
USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor"

while [ $# -gt 0 ]; do
	case "$1" in
	-C)	shift; SHOBJ_CC="$1"; shift ;;
	-c)	shift; host_cpu="$1"; shift ;;
	-o)	shift; host_os="$1"; shift ;;
	-v)	shift; host_vendor="$1"; shift ;;
	*)	echo "$USAGE" >&2 ; exit 2;;
	esac
done

case "${host_os}-${SHOBJ_CC}" in
sunos4*-gcc*)
	SHOBJ_CFLAGS=-fpic
	SHOBJ_LD=/usr/bin/ld
	SHOBJ_LDFLAGS='-assert pure-text'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
	;;

sunos4*)
	SHOBJ_CFLAGS=-pic
	SHOBJ_LD=/usr/bin/ld
	SHOBJ_LDFLAGS='-assert pure-text'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
	;;

sunos5*-gcc*|solaris2*-gcc*)
	SHOBJ_CFLAGS=-fpic
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared -Wl,-i'

	SHLIB_XLDFLAGS='-R $(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

sunos5*|solaris2*)
	SHOBJ_CFLAGS='-K pic'
	SHOBJ_LD=/usr/ccs/bin/ld
	SHOBJ_LDFLAGS='-G -dy -z text -i -h $@'

	SHLIB_XLDFLAGS='-R $(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

freebsd2* | netbsd* | openbsd*)
	SHOBJ_CFLAGS=-fpic
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS='-x -Bshareable'

	SHLIB_XLDFLAGS='-R$(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
	;;

freebsd3*)
	SHOBJ_CFLAGS=-fpic
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared'

	SHLIB_XLDFLAGS='-R$(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
	;;

linux*)
	SHOBJ_CFLAGS=-fPIC
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'

	SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
	;;

bsdi2*)
	SHOBJ_CC=shlicc2
	SHOBJ_CFLAGS=
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS=-r
	SHOBJ_LIBS=-lc_s.2.1.0

	# BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in
	# the ass -- they require changing {/usr/lib,etc}/shlib.map on
	# each system, and the library creation process is byzantine
	SHLIB_STATUS=unsupported
	;;

bsdi3*)
	SHOBJ_CC=shlicc2
	SHOBJ_CFLAGS=
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS=-r
	SHOBJ_LIBS=-lc_s.3.0.0

	# BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in
	# the ass -- they require changing {/usr/lib,etc}/shlib.map on
	# each system, and the library creation process is byzantine
	SHLIB_STATUS=unsupported
	;;

bsdi4*)
	# BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked
	# shared libraries.  gcc 2.x is the standard compiler, and the
	# `normal' gcc options should work as they do in Linux.

	SHOBJ_CFLAGS=-fPIC
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
	;;

osf*)
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"'

	SHLIB_XLDFLAGS='-rpath $(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

aix4.[2-9]*-gcc*)		# lightly tested by jik@cisco.com
	SHOBJ_CFLAGS=-fpic
	SHOBJ_LD='ld'
	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
	SHOBJ_XLDFLAGS='-G'

	SHLIB_XLDFLAGS='-bM:SRE'
	SHLIB_LIBS='-lcurses -lc'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

aix4.[2-9]*)
	SHOBJ_CFLAGS=-K
	SHOBJ_LD='ld'
	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
	SHOBJ_XLDFLAGS='-G'

	SHLIB_XLDFLAGS='-bM:SRE'
	SHLIB_LIBS='-lcurses -lc'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

#
# THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface
#
irix[56]*-gcc*)
	SHOBJ_CFLAGS='-fpic'
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'

	SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

irix[56]*)
	SHOBJ_CFLAGS='-K PIC'
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@'

	SHLIB_XLDFLAGS='-rpath $(libdir)'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

hpux9*-gcc*)
	# must use gcc; the bundled cc cannot compile PIC code
	SHOBJ_CFLAGS='-fpic'
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'

	SHLIB_XLDFLAGS='-Wl,+b,$(libdir)'
	SHLIB_LIBSUFF='sl'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

hpux9*)
	SHOBJ_STATUS=unsupported
	SHLIB_STATUS=unsupported
	;;

hpux10*-gcc*)
	# must use gcc; the bundled cc cannot compile PIC code
	SHOBJ_CFLAGS='-fpic'
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'

	SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
	SHLIB_LIBSUFF='sl'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

hpux10*)
	SHOBJ_STATUS=unsupported
	SHLIB_STATUS=unsupported
	;;

hpux11*-gcc*)
	# must use gcc; the bundled cc cannot compile PIC code
	SHOBJ_CFLAGS='-fpic'
	SHOBJ_LD='${CC}'
#	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@'
	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s -Wl,+h,$@'

	SHLIB_XLDFLAGS='-Wl,+b,$(libdir)'
	SHLIB_LIBSUFF='sl'
	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

hpux11*)
	SHOBJ_STATUS=unsupported
	SHLIB_STATUS=unsupported
	;;

sysv4*-gcc*)
	SHOBJ_CFLAGS=-shared
	SHOBJ_LDFLAGS='-shared -h $@'
	SHOBJ_LD='${CC}'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

sysv4*)
	SHOBJ_CFLAGS='-K PIC'
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS='-dy -z text -G -h $@'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

sco3.2v5*-gcc*)
	SHOBJ_CFLAGS='-fpic'		# DEFAULTS TO ELF
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

sco3.2v5*)
	SHOBJ_CFLAGS='-K pic -b elf'
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

sysv5uw7*-gcc*)
	SHOBJ_CFLAGS='-fpic'
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

sysv5uw7*)
	SHOBJ_CFLAGS='-K PIC'
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS='-G -dy -z text -h $@'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;
	
dgux*-gcc*)
	SHOBJ_CFLAGS=-fpic
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

dgux*)
	SHOBJ_CFLAGS='-K pic'
	SHOBJ_LD=ld
	SHOBJ_LDFLAGS='-G -dy -h $@'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;
#
# Rely on correct gcc configuration for everything else
#
*-gcc*)
	SHOBJ_CFLAGS=-fpic
	SHOBJ_LD='${CC}'
	SHOBJ_LDFLAGS='-shared'

	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
	;;

*)
	SHOBJ_STATUS=unsupported
	SHLIB_STATUS=unsupported
	;;

esac

echo SHOBJ_CC=\'"$SHOBJ_CC"\'
echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\'
echo SHOBJ_LD=\'"$SHOBJ_LD"\'
echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\'
echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\'
echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\'

echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\'
echo SHLIB_LIBS=\'"$SHLIB_LIBS"\'
echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\'
echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\'

echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\'
echo SHLIB_STATUS=\'"$SHLIB_STATUS"\'

exit 0
