# Improvements/fixes are welcome.
-# Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
+# Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
LINK=""
CPLUSPLUS=0
STATIC=0
-DLOPEN=0
INSTALLDIR="."
ARCH="auto"
ARCHOPT=""
echo ' Not observed on all systems at this time.'
echo ' -cplusplus link with C++ runtime'
echo ' -static make a static library (default is dynamic/shared)'
- echo ' -dlopen make a shared library suitable for dynamic loading'
echo ' -install DIR put resulting library file(s) in DIR'
echo ' -arch ARCH override using `uname` to determine host system'
echo ' -archopt OPT specify an extra achitecture-specific option OPT'
'-static')
STATIC=1
;;
- '-dlopen')
- DLOPEN=1
- ;;
'-install')
shift 1;
INSTALLDIR=$1
elif [ $STATIC = 1 ] ; then
LIBNAME="lib${LIBNAME}" # prefix with "lib"
echo "mklib: Making" $ARCH "static library: " ${LIBNAME}.a
- rm -f ${LIBNAME}.a
- ar -ru ${LIBNAME}.a ${OBJECTS}
+ LINK="ar"
+ OPTS="-ru"
+ # make lib
+ ${LINK} ${OPTS} ${LIBNAME}.a ${OBJECTS}
ranlib ${LIBNAME}.a
# finish up
FINAL_LIBS=${LIBNAME}.a
if [ "$ARCHOPT" = "SUNV9" ] ; then
ARCHOPTS="-xarch=v9"
fi
- echo "mklib: linker is" ${LINK} ${OPTS} ${ARCHOPTS}
-
# for debug:
- #echo "mklib: linker is" ${LINK} ${OPTS}
-
+ #echo "mklib: linker is" ${LINK} ${OPTS} ${ARCHOPTS}
rm -f ${LIBNAME}.${MAJOR} ${LIBNAME}
${LINK} ${OPTS} ${ARCHOPTS} -o ${LIBNAME}.${MAJOR} ${OBJECTS} ${DEPS}
ln -s ${LIBNAME}.${MAJOR} ${LIBNAME}
if [ $STATIC = 1 ] ; then
LIBNAME="lib${LIBNAME}.a"
echo "mklib: Making AIX static library: " ${LIBNAME}
- rm -f ${LIBNAME}
ar -ruv ${X64} ${LIBNAME} ${OBJECTS}
FINAL_LIBS=${LIBNAME}
else
+ # We make both .a (normal shared lib) and .so (which can be
+ # loaded with dlopen).
EXPFILE="lib${LIBNAME}.exp"
if [ $ARCH = "AIX64" ] ; then
OFILE=shr_64.o
else
OFILE=shr.o #Want to be consistent with the IBM libGL.a
fi
+ DLOPENLIBNAME="lib${LIBNAME}.so" # different libs required for dlopen
LIBNAME="lib${LIBNAME}.a" # shared objects are still stored in the .a libraries
if [ $ARCH = "AIX64" ] ; then
OPTS="-bE:${EXPFILE} -bM:SRE -bnoentry -q64"
# On AIX a shared library is linked differently when
# you want to dlopen the file
- if [ $DLOPEN = "1" ] ; then
- cc -G ${OPTS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
- else
- cc ${OPTS} -o ${OFILE} ${OBJECTS} ${DEPS}
- ar ${X64} -r ${LIBNAME} ${OFILE}
- fi
- FINAL_LIBS="${LIBNAME}"
+ cc -G ${OPTS} -o ${DLOPENLIBNAME} ${OBJECTS} ${DEPS}
+
+ # Traditional link-time binding compatible with system lib
+ cc ${OPTS} -o ${OFILE} ${OBJECTS} ${DEPS}
+ ar ${X64} -r ${LIBNAME} ${OFILE}
+
+ FINAL_LIBS="${LIBNAME} ${DLOPENLIBNAME}"
fi
;;
${LINK} ${OPTS} ${LIBNAME} ${OBJECTS}
FINAL_LIBS=${LIBNAME}
else
- # may need these:
- # CFLAGS += -fno-common
- # LDFLAGS += -bundle -flat_namespace -undefined suppress
# On Darwin a .bundle is used for a library that you want to dlopen
- if [ $DLOPEN = "1" ] ; then
- LIBSUFFIX="bundle"
- FLAGS="${ARCHOPT} -bundle -multiply_defined suppress"
- else
- LIBSUFFIX="dylib"
- FLAGS="${ARCHOPT} -dynamiclib -multiply_defined suppress -current_version ${MAJOR}.${MINOR}.0 -compatibility_version ${MAJOR}.${MINOR}.0 -install_name lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}"
- fi
- LINKNAME="lib${LIBNAME}.${LIBSUFFIX}"
- LIBNAME="lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}"
+ FLAGS="${ARCHOPT} -bundle -multiply_defined suppress"
+ BLINKNAME="lib${LIBNAME}.bundle"
+ BLIBNAME="lib${LIBNAME}.${MAJOR}.bundle"
+ echo "mklib: Making Darwin bundle: " ${BLIBNAME}
+ if [ $CPLUSPLUS = 1 ] ; then
+ LINK="g++"
+ else
+ LINK="cc"
+ fi
+ ${LINK} ${FLAGS} -o ${BLIBNAME} ${OBJECTS} ${DEPS}
+ ln -s ${BLIBNAME} ${BLINKNAME}
+ # A .dylib is for link-time binding
+ FLAGS="${ARCHOPT} -dynamiclib -multiply_defined suppress -current_version ${MAJOR}.${MINOR}.0 -compatibility_version ${MAJOR}.${MINOR}.0 -install_name lib${LIBNAME}.${MAJOR}.${LIBSUFFIX}"
+ LINKNAME="lib${LIBNAME}.dylib"
+ LIBNAME="lib${LIBNAME}.${MAJOR}.dylib"
echo "mklib: Making Darwin shared library: " ${LIBNAME}
if [ $CPLUSPLUS = 1 ] ; then
LINK="g++"
fi
${LINK} ${FLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
ln -s ${LIBNAME} ${LINKNAME}
- FINAL_LIBS="${LIBNAME} ${LINKNAME}"
+
+ FINAL_LIBS="${LIBNAME} ${LINKNAME} ${BLIBNAME} ${BLINKNAME}"
fi
;;