Module: Mesa Branch: master Commit: a1de400e8de06a80ab140bb0fa950e990607572d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1de400e8de06a80ab140bb0fa950e990607572d
Author: Dan Nicholson <dbn.li...@gmail.com> Date: Thu Jan 7 17:11:37 2010 -0800 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.li...@gmail.com> Reported-and-Tested-by: Sedat Dilek <sedat.di...@gmail.com> --- bin/mklib | 22 +++++++++++++++++----- 1 files changed, 17 insertions(+), 5 deletions(-) diff --git a/bin/mklib b/bin/mklib index 0acaeb9..9799a4e 100755 --- a/bin/mklib +++ b/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}" _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit