. ../config/system
. ../config/site

cat <<HERE
#!/bin/sh

# This script creates an interpreter that is linked statically with your
# extensions and/or application-specific object files (usually on platforms
# that don't support incremental linking).
# 
# The first argument is the executable to be created, the remaining
# arguments are the object files and optional libraries.
#
# See INSTALL in the toplevel directory of the distribution for an
# example and further information.

if [ \$# = 0 ]
then
    echo Usage: "\$0: output-file [object-files]"
    exit 1
fi
ofile=$install_dir/lib/standalone.o
aout=\$1
if [ -f \$aout ]
then
    echo \$aout already exists.
    exit 1
fi
shift
extensions=\$*

# A special case is required for AIX.  The AIX linker discards all object
# files whose external symbols are not referenced.  This stupid \`garbage
# collection' cannot be switched off.  Since extensions do not have entry
# points that are called directly, they are garbage collected away by the
# linker (the interpreter scans its symbol table on startup to find the
# entry points and calls them indirectly by using the symbol values).
#
# To avoid this, we have to create an \`export list' containing at least one
# external function from each extension.  We are using the elk_init_
# functions, as it is guaranteed that each extensions exports at least one
# such function.
#
# We grep in the nm output for all lines of this form (i.e. entries that
# start with .elk_init_ and have a symbol type of "extern"):
# 
# .elk_init_foobar      |    113520|extern|             |      |     |.text
#
# then select the symbol name, and delete the initial period.

case $system in
*-aix3*-cc)
    echo Creating export list for AIX 3.x linker:
    for e in \$extensions
    do
	case \$e in
	-l*) ;;
	  *)
	    nm -e \$e | grep '^\.$init_prefix.*|extern|' | sed -e 's/[|.]//g'\\
		| awk '{print \$1}' >> exportlist
	    ;;
	esac
    done
    cat exportlist
    $cc -o \$aout -bexport:exportlist \$ofile \$extensions $ldflags
    rm exportlist
    ;;
*-aix4*-cc)
    echo Creating export list for AIX 4.x linker:
    for e in \$extensions
    do
	case \$e in
	-l*) ;;
	  *)
	    nm \$e | grep '^\.$init_prefix.* *T ' \\
		| awk '{print \$1}' >> exportlist
	    ;;
	esac
    done
    cat exportlist
    $cc -o \$aout -bexport:exportlist \$ofile \$extensions $ldflags
    rm exportlist
    ;;
*)
    $cc -o \$aout \$ofile \$extensions $ldflags
    ;;
esac
chmod +x \$aout
HERE
