]> git.lizzy.rs Git - rust.git/commitdiff
configure: correct submodule code, only reconfigure LLVM when changed.
authorGraydon Hoare <graydon@mozilla.com>
Wed, 29 Feb 2012 03:15:13 +0000 (19:15 -0800)
committerGraydon Hoare <graydon@mozilla.com>
Wed, 29 Feb 2012 06:39:45 +0000 (22:39 -0800)
configure

index ac7d08a3832281d4bff6dcdb9261b8b65728baf1..f6587cef3f8ac27fa50ec0965c7de888bb1c545e 100755 (executable)
--- a/configure
+++ b/configure
@@ -173,7 +173,6 @@ opt() {
      fi
 }
 
-
 msg "looking for configure programs"
 need_cmd cmp
 need_cmd mkdir
@@ -482,138 +481,168 @@ then
 fi
 
 # Have to be in the top of src directory for this
-cd ${CFG_SRC_DIR}
-
 if [ -z $CFG_DISABLE_MANAGE_SUBMODULES ]
 then
-msg "git: submodule sync"
-"${CFG_GIT}" submodule sync --quiet
-SUBMODULE_STATUS=$("${CFG_GIT}" submodule status)
-NEED_INIT_COUNT=$(echo "$SUBMODULE_STATUS" | grep -c "^-")
-NEED_UPDATE_COUNT=$(echo "$SUBMODULE_STATUS" | grep -c "^+")
-NEED_INIT=$(test $NEED_INIT_COUNT -gt 0)$?
-NEED_UPDATE=$(test "($NEED_INIT)" -o "$NEED_UPDATE_COUNT" -gt 0)$?
-else
-NEED_INIT=
-NEED_UPDATE=
-fi
-
-if [ $NEED_INIT ]
-then
-    msg "git: submodule init"
-    "${CFG_GIT}" submodule init --quiet
-    need_ok "git failed"
-fi
-
-if [ $NEED_UPDATE ]
-then
-    msg "git: submodule update"
-    "${CFG_GIT}" submodule update --quiet
-    need_ok "git failed"
+    cd ${CFG_SRC_DIR}
+    msg "git: submodule sync"
+    "${CFG_GIT}" submodule sync --quiet
+    SUBMODULES=$("${CFG_GIT}" submodule status | awk '{print $2}')
+    for s in $SUBMODULES
+    do
+        msg "git: submodule status ${s}"
+        status=$("${CFG_GIT}" submodule status ${s} | awk '{print $1}')
+        case ${status} in
+            -*)
+                msg "${s} is not initialized, initializing"
+                "${CFG_GIT}" submodule init --quiet ${s}
+                need_ok "git failed"
+                msg "${s} updating"
+                "${CFG_GIT}" submodule update --quiet ${s}
+                need_ok "git failed"
+                ;;
+            +*)
+                msg "${s} is not up to date, updating"
+                "${CFG_GIT}" submodule update --quiet ${s}
+                need_ok "git failed"
+                ;;
+            *)
+                msg "${s} is clean"
+                ;;
+        esac
+    done
+    cd ${CFG_BUILD_DIR}
 fi
 
-cd ${CFG_BUILD_DIR}
-
-
-# Configure llvm. Here we go...
+# Configure llvm, only if necessary
+step_msg "looking at LLVM"
 CFG_LLVM_SRC_DIR=${CFG_SRC_DIR}src/llvm
-
 for t in $CFG_TARGET_TRIPLES
 do
+    do_reconfigure=1
+
     if [ -z $CFG_LLVM_ROOT ]
     then
-       step_msg "configuring LLVM for $t"
-
-       LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t
+        LLVM_BUILD_DIR=$CFG_BUILD_DIR/llvm/$t
+        if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]
+        then
+            LLVM_DBG_OPTS=""
+            # Just use LLVM straight from its build directory to
+            # avoid 'make install' time
+            LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug+Asserts
+        else
+            LLVM_DBG_OPTS="--enable-optimized"
+            LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts
+        fi
+    else
+        msg "not reconfiguring LLVM, external LLVM root"
+        # The user is using their own LLVM
+        LLVM_BUILD_DIR=
+        LLVM_INST_DIR=$CFG_LLVM_ROOT
+        do_reconfigure=0
+    fi
 
-       LLVM_TARGETS="--enable-targets=x86,x86_64"
-       LLVM_BUILD="--build=$t"
-       LLVM_HOST="--host=$t"
-       LLVM_TARGET="--target=$t"
 
-    if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]
+    if [ ${do_reconfigure} -ne 0 ]
     then
-        LLVM_DBG_OPTS=""
-        # Just use LLVM straight from its build directory to
-        # avoid 'make install' time
-           LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug+Asserts
-    else
-        LLVM_DBG_OPTS="--enable-optimized"
-           LLVM_INST_DIR=$LLVM_BUILD_DIR/Release+Asserts
+    # because git is hilarious, it might have put the module index
+    # in a couple places.
+        index1="${CFG_SRC_DIR}.git/modules/src/llvm/index"
+        index2="${CFG_SRC_DIR}src/llvm/.git/index"
+        for index in ${index1} ${index2}
+        do
+            config_status="${CFG_BUILD_DIR}/llvm/$t/config.status"
+            if test -e ${index} -a \
+                    -e ${config_status} -a \
+                    ${config_status} -nt ${index}
+            then
+                msg "not reconfiguring LLVM, config.status is fresh"
+                do_reconfigure=0
+            fi
+        done
     fi
-       # Disable unused LLVM features
-       LLVM_OPTS="$LLVM_DBG_OPTS --disable-docs --disable-jit --enable-bindings=none --disable-threads --disable-pthreads"
-
-       if [ "$CFG_C_COMPILER" = "clang" ]
-       then
-           LLVM_CXX_32="clang++ -m32"
-           LLVM_CC_32="clang -m32"
-
-           LLVM_CXX_64="clang++"
-           LLVM_CC_64="clang"
-       else
-           LLVM_CXX_32="g++ -m32"
-           LLVM_CC_32="gcc -m32"
-
-           LLVM_CXX_64="g++"
-           LLVM_CC_64="gcc"
-       fi
-
-       LLVM_CFLAGS_32="-m32"
-       LLVM_CXXFLAGS_32="-m32"
-       LLVM_LDFLAGS_32="-m32"
-
-       LLVM_CFLAGS_64=""
-       LLVM_CXXFLAGS_64=""
-       LLVM_LDFLAGS_64=""
-
-       if echo $t | grep x86_64
-       then
-           LLVM_CXX=$LLVM_CXX_64
-           LLVM_CC=$LLVM_CC_64
-           LLVM_CFLAGS=$LLVM_CFLAGS_64
-           LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
-           LLVM_LDFLAGS=$LLVM_LDFLAGS_64
-       else
-           LLVM_CXX=$LLVM_CXX_32
-           LLVM_CC=$LLVM_CC_32
-           LLVM_CFLAGS=$LLVM_CFLAGS_32
-           LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
-           LLVM_LDFLAGS=$LLVM_LDFLAGS_32
-       fi
-
-       CXX=$LLVM_CXX
-       CC=$LLVM_CC
-       CFLAGS=$LLVM_CFLAGS
-       CXXFLAGS=$LLVM_CXXFLAGS
-       LDFLAGS=$LLVM_LDFLAGS
-
-       LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD $LLVM_HOST $LLVM_TARGET"
-
-       msg "configuring LLVM with:"
-       msg "$LLVM_FLAGS"
-
-       export CXX
-       export CC
-       export CFLAGS
-       export CXXFLAGS
-       export LDFLAGS
-
-       cd $LLVM_BUILD_DIR
-       case $CFG_SRC_DIR in
-           /* | [a-z]:* | [A-Z]:*)
-               ${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
-               ;;
-           *)
-               ${CFG_BUILD_DIR}/${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
-               ;;
-       esac
-    need_ok "LLVM configure failed"
-       cd $CFG_BUILD_DIR
-    else
-       LLVM_BUILD_DIR=
-        # The user is using their own LLVM
-       LLVM_INST_DIR=$CFG_LLVM_ROOT
+
+    if [ ${do_reconfigure} -ne 0 ]
+    then
+        msg "configuring LLVM for $t"
+
+        LLVM_TARGETS="--enable-targets=x86,x86_64"
+        LLVM_BUILD="--build=$t"
+        LLVM_HOST="--host=$t"
+        LLVM_TARGET="--target=$t"
+
+        # Disable unused LLVM features
+        LLVM_OPTS="$LLVM_DBG_OPTS --disable-docs --disable-jit \
+                   --enable-bindings=none --disable-threads \
+                   --disable-pthreads"
+
+        if [ "$CFG_C_COMPILER" = "clang" ]
+        then
+            LLVM_CXX_32="clang++ -m32"
+            LLVM_CC_32="clang -m32"
+
+            LLVM_CXX_64="clang++"
+            LLVM_CC_64="clang"
+        else
+            LLVM_CXX_32="g++ -m32"
+            LLVM_CC_32="gcc -m32"
+
+            LLVM_CXX_64="g++"
+            LLVM_CC_64="gcc"
+        fi
+
+        LLVM_CFLAGS_32="-m32"
+        LLVM_CXXFLAGS_32="-m32"
+        LLVM_LDFLAGS_32="-m32"
+
+        LLVM_CFLAGS_64=""
+        LLVM_CXXFLAGS_64=""
+        LLVM_LDFLAGS_64=""
+
+        if echo $t | grep -q x86_64
+        then
+            LLVM_CXX=$LLVM_CXX_64
+            LLVM_CC=$LLVM_CC_64
+            LLVM_CFLAGS=$LLVM_CFLAGS_64
+            LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
+            LLVM_LDFLAGS=$LLVM_LDFLAGS_64
+        else
+            LLVM_CXX=$LLVM_CXX_32
+            LLVM_CC=$LLVM_CC_32
+            LLVM_CFLAGS=$LLVM_CFLAGS_32
+            LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
+            LLVM_LDFLAGS=$LLVM_LDFLAGS_32
+        fi
+
+        CXX=$LLVM_CXX
+        CC=$LLVM_CC
+        CFLAGS=$LLVM_CFLAGS
+        CXXFLAGS=$LLVM_CXXFLAGS
+        LDFLAGS=$LLVM_LDFLAGS
+
+        LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD \
+                        $LLVM_HOST $LLVM_TARGET"
+
+        msg "configuring LLVM with:"
+        msg "$LLVM_FLAGS"
+
+        export CXX
+        export CC
+        export CFLAGS
+        export CXXFLAGS
+        export LDFLAGS
+
+        cd $LLVM_BUILD_DIR
+        case $CFG_SRC_DIR in
+            /* | [a-z]:* | [A-Z]:*)
+                ${CFG_LLVM_SRC_DIR}/configure $LLVM_FLAGS
+                ;;
+            *)
+                ${CFG_BUILD_DIR}/${CFG_LLVM_SRC_DIR}/configure \
+                    $LLVM_FLAGS
+                ;;
+        esac
+        need_ok "LLVM configure failed"
+        cd $CFG_BUILD_DIR
     fi
 
     # Construct variables for LLVM build and install directories for