remove the -dlopen option. Always make both kinds of libs for AIX, Darwin.
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 13 Apr 2006 15:17:50 +0000 (15:17 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 13 Apr 2006 15:17:50 +0000 (15:17 +0000)
bin/mklib

index b8f7a0127f537457ff94802fd30c1662b712b5f2..32e43987b3795344a5cc35f56823b8518b8a66ad 100755 (executable)
--- a/bin/mklib
+++ b/bin/mklib
@@ -5,7 +5,7 @@
 # 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"),
@@ -36,7 +36,6 @@ DEPS=""
 LINK=""
 CPLUSPLUS=0
 STATIC=0
-DLOPEN=0
 INSTALLDIR="."
 ARCH="auto"
 ARCHOPT=""
@@ -65,7 +64,6 @@ do
            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'
@@ -106,9 +104,6 @@ do
        '-static')
            STATIC=1
            ;;
-       '-dlopen')
-           DLOPEN=1
-           ;;
        '-install')
            shift 1;
            INSTALLDIR=$1
@@ -214,8 +209,10 @@ case $ARCH in
         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
@@ -323,11 +320,8 @@ case $ARCH in
            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}
@@ -459,16 +453,18 @@ case $ARCH in
         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"
@@ -495,13 +491,13 @@ case $ARCH in
 
             # 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
         ;;
 
@@ -546,20 +542,23 @@ case $ARCH in
             ${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++"
@@ -568,7 +567,8 @@ case $ARCH in
            fi
             ${LINK} ${FLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
             ln -s ${LIBNAME} ${LINKNAME}
-            FINAL_LIBS="${LIBNAME} ${LINKNAME}"
+
+            FINAL_LIBS="${LIBNAME} ${LINKNAME} ${BLIBNAME} ${BLINKNAME}"
         fi
         ;;