90 lines
2.4 KiB
Plaintext
90 lines
2.4 KiB
Plaintext
. ../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=$final_dir/lib/elk/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
|