summaryrefslogtreecommitdiffstats
path: root/bin/mklib
diff options
context:
space:
mode:
Diffstat (limited to 'bin/mklib')
-rwxr-xr-xbin/mklib53
1 files changed, 29 insertions, 24 deletions
diff --git a/bin/mklib b/bin/mklib
index 9e6e46de8b9..08ef99ec105 100755
--- a/bin/mklib
+++ b/bin/mklib
@@ -25,8 +25,14 @@
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+# Clear CDPATH as the 'cd' command will echo stuff
+# to stdout if it is set
+unset CDPATH
+
# Given a list of files, look for .a archives and unpack them.
# Return the original list of files minus the .a files plus the unpacked files.
+# first param: name of a temp directory (to be deleted when finished)
+# remaining params: list of .o and .a files
expand_archives() {
DIR=$1
shift
@@ -60,27 +66,6 @@ expand_archives() {
}
-# Given a list of files, look for .a archives and return a list of all objects
-# in the .a archives.
-contents_of_archives() {
- FILES=$@
- NEWFILES=""
- for FILE in $FILES ; do
- case $FILE in
- *.a)
- # get list of members in this .a archive
- MEMBERS=`ar t $FILE`
- NEWFILES="$NEWFILES $MEMBERS"
- ;;
- *)
- # skip other file types
- ;;
- esac
- done
- echo $NEWFILES
-}
-
-
# Make static library with 'ar'
# params:
# options to ar
@@ -758,12 +743,20 @@ case $ARCH in
if [ $STATIC = 1 ] ; then
LIBNAME="lib${LIBNAME}.a"
echo "mklib: Making Darwin static library: " ${LIBNAME}
- LINK="ar"
OPTS="-ruvs"
if [ "${ALTOPTS}" ] ; then
OPTS=${ALTOPTS}
fi
- ${LINK} ${OPTS} ${LIBNAME} ${OBJECTS}
+
+ # expand .a into .o files
+ NEW_OBJECTS=`expand_archives ${LIBNAME}.obj $OBJECTS`
+
+ # make static lib
+ FINAL_LIBS=`make_ar_static_lib ${OPTS} 1 ${LIBNAME} ${NEW_OBJECTS}`
+
+ # remove temporary extracted .o files
+ rm -rf ${LIBNAME}.obj
+
FINAL_LIBS=${LIBNAME}
else
# On Darwin a .bundle is used for a library that you want to dlopen
@@ -955,7 +948,14 @@ case $ARCH in
if [ "${ALTOPTS}" ] ; then
OPTS=${ALTOPTS}
fi
- FINAL_LIBS=`make_ar_static_lib ${OPTS} 1 ${LIBNAME} ${OBJECTS}`
+
+ # expand .a into .o files
+ NEW_OBJECTS=`expand_archives ${LIBNAME}.obj $OBJECTS`
+
+ FINAL_LIBS=`make_ar_static_lib ${OPTS} 1 ${LIBNAME} ${NEW_OBJECTS}`
+
+ # remove temporary extracted .o files
+ rm -rf ${LIBNAME}.obj
else
OPTS="-shared -Wl,--enable-auto-image-base -Wl,-export-all -Wl,--out-implib=${LIBNAME}-${MAJOR}.dll.a"
if [ "${ALTOPTS}" ] ; then
@@ -977,6 +977,11 @@ case $ARCH in
# make lib
${LINK} ${OPTS} ${LDFLAGS} -o ${CYGNAME}-${MAJOR}.dll ${OBJECTS} ${DEPS}
+ # make build fail if link failed
+ es=$?
+ if [ "$es" -ne "0" ]; then
+ exit $es
+ fi
# make usual symlinks
ln -s ${LIBNAME}-${MAJOR}.dll.a ${LIBNAME}.dll.a
# finish up