X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=build%2Flmake;h=9020cc1dba6b4285791adbe792a573b6e844df1a;hb=0201023b739be4b8c15e48c34e77c0e14ca68c1a;hp=854151058594cbb368a0c3f8ddec2631f72194ea;hpb=bbf352545f275c194f195f1a702e931412fbbe76;p=fs%2Flustre-release.git diff --git a/build/lmake b/build/lmake index 8541510..9020cc1 100755 --- a/build/lmake +++ b/build/lmake @@ -10,6 +10,7 @@ TARGET_ARCH= TARGET_CONFIG= JOBS=1 CONFIGURE_FLAGS= +TMPDIR=${TMPDIR:-"/var/tmp"} # commands to run BUILD_LUSTRE=0 @@ -260,6 +261,25 @@ load_target() fi } +# do these after load_target(), which maybe export CC +setup_ccache_distcc() +{ + # distcc can't handle ".incbin" + if [ "$TARGET" == "2.6-suse" -o "$TARGET" == "2.6-rhel4" ]; then + if [ "$TARGET_ARCH" == "x86_64" ]; then + unset DISTCC + fi + fi + + CC=${CC:-gcc} + if [ "$CCACHE" ]; then + CC="$CCACHE $CC" + [ "$DISTCC" ] && export CCACHE_PREFIX="$DISTCC" + else + [ "$DISTCC" ] && CC="$DISTCC $CC" + fi +} + tarflags() { case "$1" in @@ -341,6 +361,30 @@ set_make() MAKE_J="$MAKE -j $JOBS" } +timed_run() { + SLEEP_TIME=$1 + shift + + set -o monitor + + #bash -c "$@" & + ("$@") & + child_pid=$! + + (sleep $SLEEP_TIME + kill -TERM -$child_pid 2>/dev/null + sleep 5 + kill -KILL -$child_pid 2>/dev/null + echo "$1 was killed due to timeout") & + dog_pid=$! + + wait $child_pid + # status will be set to 143 if the process had to be killed due to timeout + status=${PIPESTATUS[0]} + kill -KILL -$dog_pid + return $status +} + depend_kernel() { (( $DEPEND_KERNEL )) || return 0 @@ -353,26 +397,65 @@ depend_kernel() echo "Making depend in $PWD..." $MAKE "$MAKE_CC" mrproper || fatal 1 "Error running make mrproper" rm -f rpm-release + # remove localversion-* files to avoid kernel release string + # srewing up by the top-level Makefile + rm -f localversion-* cp "$CONFIG_FILE" .config - for oc in oldconfig_nonint silentoldconfig oldconfig ; do - if grep -q "^$oc:" Makefile ; then - $MAKE "$MAKE_CC" $oc || fatal 1 "Error running make oldconfig ($oc)" - break - fi + local UPDATE_OLDCONFIG= + for oc in oldconfig_nonint silentoldconfig oldconfig ; do + if grep -q "$oc" Makefile ; then + timed_run 300 $MAKE "$MAKE_CC" $oc || UPDATE_OLDCONFIG=1 + break + fi done - # now notify if resulting .config is different than $CONFIG_FILE - if ! cmp "$CONFIG_FILE" .config; then - { cat <$tmpfile + if [ -s $tmpfile ]; then + { cat < build/lustre.spec - $RPMBUILD --target ${TARGET_ARCH} -bb build/lustre.spec \ + < lustre.spec.in \ + > lustre.spec + $RPMBUILD --target ${TARGET_ARCH} -bb lustre.spec \ + --define "_tmppath $TMPDIR" \ --define "_topdir $(lbuild_topdir)" || \ fatal 1 "Error building Lustre rpms." # $MAKE_J "$MAKE_CC" || fatal 1 "Error building Lustre." @@ -534,7 +618,7 @@ build_kms() mkdir -p "${TOPDIR}/modules-${FULL_VERSION}" for dir in /usr/src/kernel-modules/* ; do # we are replacing lustre-lite, so don't include it - if [ ${dir##*/} != "lustre-lite" -a -e $dir/Makefile ]; then + if [ "${dir##*/}" != "lustre-lite" -a -e $dir/Makefile ]; then build_dir="${TOPDIR}/modules-${FULL_VERSION}/${dir##*/}" cp -a $dir $build_dir # these modules are terrible, and don't all build @@ -725,6 +809,7 @@ done check_options load_target +setup_ccache_distcc extract_kernel patch_kernel