mklib: Extract archives into temporary directories
When static libraries are created from other archives, objects are extracted and then deleted when the static library is done. This can race when there are multiple static libraries being created from the same archives as with libmesa.a and libmesagallium.a. Should fix this issue with parallel jobs: make[5]: *** No rule to make target > `../../../../../../src/mesa/libmesagallium.a', needed by > `radeon_dri.so'. Stop Signed-off-by: Dan Nicholson <dbn.lists@gmail.com> Reported-and-Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
This commit is contained in:
parent
dddd5a36ac
commit
a1de400e8d
22
bin/mklib
22
bin/mklib
|
@ -28,15 +28,26 @@
|
|||
# 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.
|
||||
expand_archives() {
|
||||
DIR=$1
|
||||
shift
|
||||
FILES=$@
|
||||
NEWFILES=""
|
||||
ORIG_DIR=`pwd`
|
||||
mkdir -p "$DIR"
|
||||
cd "$DIR"
|
||||
for FILE in $FILES ; do
|
||||
case $FILE in
|
||||
*.a)
|
||||
# extract the .o files from this .a archive
|
||||
case $FILE in
|
||||
/*) ;;
|
||||
*) FILE="$ORIG_DIR/$FILE" ;;
|
||||
esac
|
||||
MEMBERS=`ar t $FILE`
|
||||
ar x $FILE
|
||||
NEWFILES="$NEWFILES $MEMBERS"
|
||||
for MEMBER in $MEMBERS ; do
|
||||
NEWFILES="$NEWFILES $DIR/$MEMBER"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
# other file type, just add to list
|
||||
|
@ -44,6 +55,7 @@ expand_archives() {
|
|||
;;
|
||||
esac
|
||||
done
|
||||
cd "$ORIG_DIR"
|
||||
echo $NEWFILES
|
||||
}
|
||||
|
||||
|
@ -360,13 +372,13 @@ case $ARCH in
|
|||
fi
|
||||
|
||||
# expand .a into .o files
|
||||
NEW_OBJECTS=`expand_archives $OBJECTS`
|
||||
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 -f `contents_of_archives $OBJECTS`
|
||||
rm -rf ${LIBNAME}.obj
|
||||
else
|
||||
# make dynamic library
|
||||
LIBNAME="lib${LIBNAME}" # prefix with "lib"
|
||||
|
@ -553,12 +565,12 @@ case $ARCH in
|
|||
echo "mklib: Making FreeBSD static library: " ${STLIB}
|
||||
|
||||
# expand .a into .o files
|
||||
NEW_OBJECTS=`expand_archives $OBJECTS`
|
||||
NEW_OBJECTS=`expand_archives ${STLIB}.obj $OBJECTS`
|
||||
|
||||
FINAL_LIBS=`make_ar_static_lib cq 1 ${STLIB} ${NEW_OBJECTS}`
|
||||
|
||||
# remove temporary extracted .o files
|
||||
rm -f `contents_of_archives $OBJECTS`
|
||||
rm -rf ${STLIB}.obj
|
||||
else
|
||||
# make dynamic library
|
||||
SHLIB="lib${LIBNAME}.so.${MAJOR}"
|
||||
|
|
Loading…
Reference in New Issue