瀏覽代碼

ENH: Improved robustness of remote invocation. Added more documentation.

Brad King 23 年之前
父節點
當前提交
d1d92f7678
共有 1 個文件被更改,包括 44 次插入15 次删除
  1. 44 15
      Utilities/Release/cmake_release.sh

+ 44 - 15
Utilities/Release/cmake_release.sh

@@ -19,23 +19,40 @@
 #
 #
 # CMake UNIX Release Script.
 # CMake UNIX Release Script.
 #
 #
+# Run with no arguments for documentation.
+#
 
 
-[ -z "$REMOTE" ] && SELF="$0"
-CVSROOT=":pserver:[email protected]:/cvsroot/CMake"
-CVSROOT_GREP=":pserver:[email protected]:[0-9]*/cvsroot/CMake"
+# Release version number.
 TAG="Release-1-6-2"
 TAG="Release-1-6-2"
 VERSION="1.6.2"
 VERSION="1.6.2"
 RELEASE="1"
 RELEASE="1"
 PREVIOUS_VERSION="1.4.7"
 PREVIOUS_VERSION="1.4.7"
 PREVIOUS_RELEASE="1"
 PREVIOUS_RELEASE="1"
+
+# CVSROOT setting used to check out CMake.
+CVSROOT=":pserver:[email protected]:/cvsroot/CMake"
+CVSROOT_GREP=":pserver:[email protected]:[0-9]*/cvsroot/CMake"
+
+# CMake release root directory.
 RELEASE_ROOT_NAME="CMakeReleaseRoot"
 RELEASE_ROOT_NAME="CMakeReleaseRoot"
 RELEASE_ROOT="${HOME}/${RELEASE_ROOT_NAME}"
 RELEASE_ROOT="${HOME}/${RELEASE_ROOT_NAME}"
+
+# Installation prefix used during tarball creation.  Tarballs are
+# relative to the installation prefix and do not include this in their
+# paths.
+PREFIX="/usr/local"
+
+# Directory relative to PREFIX where documentation should be placed.
+DOC_DIR="/doc/cmake"
+
+# No default compiler.  The config file must provide it.
 CC=""
 CC=""
 CXX=""
 CXX=""
 CFLAGS=""
 CFLAGS=""
 CXXFLAGS=""
 CXXFLAGS=""
-PREFIX="/usr/local"
-DOC_DIR="/doc/cmake"
+
+# Details of remote invocation.
+[ -z "$REMOTE" ] && SELF="$0"
 
 
 #-----------------------------------------------------------------------------
 #-----------------------------------------------------------------------------
 usage()
 usage()
@@ -115,14 +132,18 @@ check_host()
 # key authentication and no password.
 # key authentication and no password.
 remote()
 remote()
 {
 {
+    if [ ! -z "$REMOTE" ]; then
+        echo "Cannot do recursive remote calls."
+        return 1
+    fi
     check_host "$1" || return 1
     check_host "$1" || return 1
     shift
     shift
-    REMOTE_TASK="$@"
+    RTASK="'$1'"; shift; for i in "$@"; do RTASK="${RTASK} '$i'"; done
     RESULT=0
     RESULT=0
     echo "------- Running remote task on $HOST. -------" &&
     echo "------- Running remote task on $HOST. -------" &&
     (echo "REMOTE=\"1\"" &&
     (echo "REMOTE=\"1\"" &&
-     echo "TASK=\"${REMOTE_TASK}\"" &&
-     cat $SELF) | ssh "$HOST" /bin/sh 2>/dev/null || RESULT=1
+        (echo TASK=\"`(eval echo '${RTASK}') | (sed 's/"/\\\\"/g')`\") &&
+        cat $SELF) | ssh -e none "$HOST" /bin/sh  || RESULT=1
     echo "-------- Remote task on $HOST done.  --------" &&
     echo "-------- Remote task on $HOST done.  --------" &&
     return $RESULT
     return $RESULT
 }
 }
@@ -647,12 +668,20 @@ osx_install()
     ) >Logs/osx_install.log 2>&1 || error_log Logs/osx_install.log
     ) >Logs/osx_install.log 2>&1 || error_log Logs/osx_install.log
 }
 }
 
 
-if [ -z "$TASK" ]; then
-    [ -z "$REMOTE" ] && TASK="$@"
-fi
+#-----------------------------------------------------------------------------
+run()
+{
+    CMD="'$1'"; shift; for i in "$@"; do CMD="${CMD} '$i'"; done
+    eval "$CMD"
+}
 
 
-if [ -z "$TASK" ]; then
-    TASK="usage"
+# Determine task and evaluate it.
+if [ -z "$TASK" ] && [ -z "$REMOTE" ] ; then
+    if [ -z "$1" ]; then
+        usage
+    else
+        run "$@"
+    fi
+else
+    [ -z "$TASK" ] || eval run "$TASK"
 fi
 fi
-
-eval $TASK