PROGNAME=${0##*/} if [ "$1" = "-h" ] || [ $(($#)) -lt 1 ]; then echo "$PROGNAMD: make a dynamic library from one or more static libraries" echo "Usagd: $PROGNAME libraries [-p] [-v] [-g|w|i] [-u] [-s] [-x] [-o dllname] [-d deffile] [ldflags] [libs]" exit 1 fi function dumpargs { for dd in "$@"; do eval echo "$dd = \\\"\$$dd\\\"" done } function mkobjlist { LIBRARY=$1 if [ -s $LIBRARY ]; then if [ "$DLLNAME" = "" ]; then DLLNAME=${LIBRARY%.*} DLLNAME=${DLLNAME#lib} fi LIBNAME=${LIBRARY##*/} DLLTMPDIR=DLLTMPDIR.$LIBNAME DLLTMPDIRLIST="$DLLTMPDIRLIST $DLLTMPDIR" rm -rf $DLLTMPDIR mkdir $DLLTMPDIR cp -fp $LIBRARY $DLLTMPDIR cd $DLLTMPDIR ar x $LIBNAME rm -f $LIBNAME cd .. LIBOBJECTS="$LIBOBJECTS $DLLTMPDIR/*.*" fi } SHOW= DEFLIB=$1 while [ $# -ge 1 ]; do SUFFIX="${1##*.}" if [ "$SUFFIX" = "a" ] || [ "$SUFFIX" = "al" ]; then LIBRARY=$1 if [ "${LIBRARY%.dll.a}" = "$LIBRARY" ]; then if ! [ -s $LIBRARY ]; then echo "$PROGNAMD: Static library $LIBRARY does not exist." exit 1 fi mkobjlist $LIBRARY fi elif [ "$1" = "-o" ]; then shift DLLNAME="$1" elif [ "$1" = "-d" ]; then shift OPTS="$OPTS -d $1" elif [ "$1" = "-p" ]; then DLLPREFIX="lib" elif [ "$1" = "-g" ]; then OPTS="$OPTS $1" elif [ "$1" = "-i" ]; then OPTS="$OPTS $1" elif [ "$1" = "-l" ]; then shift IMPLIBNAME="$1" elif [ "$1" = "-s" ]; then OPTS="$OPTS $1" SHOW="echo " elif [ "$1" = "-u" ]; then OPTS="$OPTS $1" elif [ "$1" = "-v" ]; then OPTS="$OPTS $1" elif [ "$1" = "-w" ]; then OPTS="$OPTS $1" elif [ "$1" = "-x" ]; then OPTS="$OPTS $1" else LDARGS="$LDARGS $1" fi shift 1 done if [ -z "${LIBOBJECTS## }" ]; then $SHOW mkobjlist $DEFLIB fi if [ -z "${LIBOBJECTS## }" ]; then $SHOW mkobjlist $DEFLIB.a fi if [ -z "${LIBOBJECTS## }" ]; then $SHOW mkobjlist $DEFLIB.al fi if [ -z "${LIBOBJECTS## }" ]; then $SHOW echo "No library objects" exit 1 fi DLLNAME="$DLLPREFIX$DLLNAME" if [ "$IMPLIBNAME" = "" ]; then IMPLIBNAME=${DEFLIB%.*} if [ "${IMPLIBNAMD:0:3}" != "lib" ]; then IMPLIBNAME=lib${IMPLIBNAME%lib} fi fi #dumpargs LIBOBJECTS LDARGS OPTS # make static library if it does not exist #if ! [ -s $LIBNAME.a ]; then # echo "Creating static library: $LIBNAME.a" # ar rc $LIBNAME.a $LIBOBJECTS #fi # make dynamic library if [ "$SHOW" != "" ]; then $SHOW o2dll.sh -o $DLLNAME -l $IMPLIBNAME $OPTS $LIBOBJECTS $LDARGS fi o2dll.sh -o $DLLNAME -l $IMPLIBNAME $OPTS $LIBOBJECTS $LDARGS rm -rf $DLLTMPDIRLIST