[Mesa-dev] [PATCH 1/4] mklib: Add support for -whole-archive/-no-whole-archive.

Christopher James Halse Rogers christopher.halse.rogers at canonical.com
Fri Aug 26 01:03:20 PDT 2011


This is useful for building convenience libraries before combining them into
shared libraries, like dricore

Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
---
 bin/mklib |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/bin/mklib b/bin/mklib
index 2c7ed38..b4b5dd5 100755
--- a/bin/mklib
+++ b/bin/mklib
@@ -124,6 +124,11 @@ usage() {
     echo "  -noprefix     don't prefix library name with 'lib' nor add any suffix"
     echo '  -exports FILE only export the symbols listed in FILE'
     echo '  -id NAME      Sets the id of the dylib (Darwin)'
+    echo '  -whole-archive OBJS1 OBJS2 ... -no-whole-archive'
+    echo '                Include every object file in archives OBJS1 OBJS2 ...'
+    echo '                rather than searching them for required symbols.'
+    echo '                Useful for including convinience libraries in shared'
+    echo '                objects.'
     echo '  -h, --help    display this information and exit'
 }
 
@@ -194,6 +199,18 @@ do
 	-Wl*)
             DEPS="$DEPS $1"
             ;;
+	'-whole-archive')
+	    shift
+	    while [ "x$1" != "x-no-whole-archive" ] ; do
+		if [ "x$1" = "x" ] ; then
+		    echo "mklib: End of arguments reached when scanning for -no-whole-archive"
+		    echo "       Arguments to -whole-archive must be terminated by -no-whole-archive"
+		    exit 1
+		fi
+		WHOLE_ARCHIVE="$WHOLE_ARCHIVE $1"
+		shift
+	    done
+	    ;;
 	-pthread)
 	    # this is a special case (see bugzilla 10876)
 	    DEPS="$DEPS $1"
@@ -271,6 +288,11 @@ if [ $STATIC = 1 ]; then
     OBJECTS=$NEWOBJECTS
 fi
 
+if [ "x$WHOLE_ARCHIVE" != "x" ] ; then
+    ARCHIVE_TEMP=$(mktemp -d)
+    NEW_OBJECTS=`expand_archives ${ARCHIVE_TEMP} ${WHOLE_ARCHIVE}`
+    OBJECTS="${OBJECTS} ${NEW_OBJECTS}"
+fi
 
 #
 # Error checking
@@ -1010,3 +1032,13 @@ if [ ${INSTALLDIR} != "." ] ; then
         mv ${FINAL_BINS} ${INSTALLDIR}/
     fi
 fi
+
+#
+# Clean up temporary directory
+#
+if [ ${ARCHIVE_TEMP} ] ; then
+    if [ -d ${ARCHIVE_TEMP} ] ; then
+	echo "Removing directory ${ARCHIVE_TEMP}"
+	rm -r ${ARCHIVE_TEMP}
+    fi
+fi
-- 
1.7.5.4



More information about the mesa-dev mailing list