From 4a2cc0283126f16a4b4681a22358d2dd7b70cdd4 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Mon, 1 May 2006 22:31:08 -0400 Subject: ENH: try to call cpack from script --- Utilities/Release/cmake_release.sh | 759 +++++++++++++++++++++++++++++++++++++ 1 file changed, 759 insertions(+) create mode 100755 Utilities/Release/cmake_release.sh diff --git a/Utilities/Release/cmake_release.sh b/Utilities/Release/cmake_release.sh new file mode 100755 index 0000000..1b37650 --- /dev/null +++ b/Utilities/Release/cmake_release.sh @@ -0,0 +1,759 @@ +#!/bin/sh +#============================================================================= +# +# Program: CMake - Cross-Platform Makefile Generator +# Module: $RCSfile$ +# Language: C++ +# Date: $Date$ +# Version: $Revision$ +# +# Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. +# See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even +# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the above copyright notices for more information. +# +#============================================================================= + +# +# CMake UNIX Release Script. +# +# Run with no arguments for documentation. +# + +# Release version number. +TAG="CMake-2-4-1" +VERSION="2.4.1" +CMAKE_VERSION="2.4" +RELEASE="1" +PREVIOUS_VERSION="2.2.3" +PREVIOUS_RELEASE="1" + +# CVSROOT setting used to check out CMake. +CVSROOT=":pserver:anonymous@www.cmake.org:/cvsroot/CMake" +CVSROOT_GREP=":pserver:anonymous@www.cmake.org:[0-9]*/cvsroot/CMake" + +# CMake release root directory. +RELEASE_ROOT_NAME="CMakeReleaseRoot" +RELEASE_ROOT="${HOME}/${RELEASE_ROOT_NAME}" +INSTALL_DIR="Install" + +# 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="" +CXX="" +CFLAGS="" +CXXFLAGS="" + +# Provide a default make and build flags. +MAKE="make" +BUILD_FLAGS="" +BOOTSTRAP_FLAGS="" + +# Details of remote invocation. +[ -z "$REMOTE" ] && SELF="$0" + +#----------------------------------------------------------------------------- +usage() +{ + cat < clean + + Create binary release tarball: + + $0 remote_binary + + Create source release tarball: + + $0 remote_source + + Upload tarballs: + + $0 upload + + Create and upload cygwin package: + + $0 cygwin_package + $0 cygwin_upload + +Available commands: + +EOF + cat "$0" | awk ' +/^#--*$/ { doc=1; text="" } + +/(^#$|^#[^-].*$)/ { + if(doc) + { + if(text != "") { text = sprintf("%s %s\n", text, $0) } + else { text = sprintf(" %s\n", $0) } + } +} + +/^[A-Za-z0-9_]*\(\)$/ { + doc=0; + if(text != "") { printf("%s:\n%s\n", $0, text) } +} +' +} + +#----------------------------------------------------------------------------- +error_log() +{ + echo "An error has been logged to $1:" && + cat "$1" && + return 1 +} + +#----------------------------------------------------------------------------- +check_host() +{ + HOST="$1" + if [ -z "$HOST" ]; then + echo "Must specify host." + return 1 + fi +} + +#----------------------------------------------------------------------------- +# Run a command on the specified remote host. +# +# remote [command] +# +# Only one level of remote invocation is allowed. The +# specification must be a valid ssh destination with public +# key authentication and no password. +remote() +{ + if [ ! -z "$REMOTE" ]; then + echo "Cannot do recursive remote calls." + return 1 + fi + check_host "$1" || return 1 + shift + RTASK="'$1'"; shift; for i in "$@"; do RTASK="${RTASK} '$i'"; done + RESULT=0 + echo "------- Running remote task on $HOST. -------" && + (echo "REMOTE=\"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. --------" && + return $RESULT +} + +#----------------------------------------------------------------------------- +# Copy tarballs from the specified host. +# +# remote_copy [EXPR] +# +# The specification must be a valid ssh destination +# with public key authentication and no password. Only +# files matching the given expression are copied. If +# no expression is given, "*" is used. +remote_copy() +{ + check_host "$1" || return 1 + EXPR="$2" + [ ! -z "$EXPR" ] || EXPR="*" + echo "------- Copying tarballs from $HOST. -------" && + scp "$HOST:${RELEASE_ROOT_NAME}/Tarballs/${EXPR}" . && + echo "---- Done copying tarballs from $HOST. -----" +} + +#----------------------------------------------------------------------------- +remote_copy_source() +{ + check_host "$1" || return 1 + remote_copy "$HOST" "cmake-${VERSION}.tar*" +} + +#----------------------------------------------------------------------------- +remote_copy_binary() +{ + check_host "$1" || return 1 + remote_copy "$HOST" "cmake-${VERSION}-*" +} + +#----------------------------------------------------------------------------- +# Create source tarballs on the specified host and copy them locally. +# +# remote_source +# +# The specification must be a valid ssh destination +# with public key authentication and no password. +remote_source() +{ + check_host "$1" || return 1 + remote "$HOST" source_tarball && + remote_copy_source "$HOST" +} + +#----------------------------------------------------------------------------- +# Create binary tarballs on the specified host and copy them locally. +# +# remote_binary +# +# The specification must be a valid ssh destination +# with public key authentication and no password. +remote_binary() +{ + check_host "$1" || return 1 + remote "$HOST" binary_tarball && + remote_copy_binary "$HOST" +} + +#----------------------------------------------------------------------------- +# Upload any tarballs in the current directory to the CMake FTP site. +# +# upload +# +# The user must be able to ssh to kitware@www.cmake.org with public +# key authentication and no password. +upload() +{ + echo "------- Copying tarballs to www.cmake.org. -------" + scp cmake-${VERSION}*tar.* kitware@www.cmake.org:/projects/FTP/pub/cmake/v${CMAKE_VERSION} + echo "---- Done copying tarballs to www.cmake.org. -----" +} + +#----------------------------------------------------------------------------- +setup() +{ + [ -z "${DONE_setup}" ] || return 0 ; DONE_setup="yes" + mkdir -p ${RELEASE_ROOT}/Logs && + echo "Entering ${RELEASE_ROOT}" && + cd ${RELEASE_ROOT} +} + +#----------------------------------------------------------------------------- +# Remove the release root directory. +# +# clean +# +clean() +{ + cd "${HOME}" && + echo "Cleaning up ${RELEASE_ROOT}" && + rm -rf ${RELEASE_ROOT_NAME}/* +} + +#----------------------------------------------------------------------------- +cvs_login() +{ + [ -z "${DONE_cvs_login}" ] || return 0 ; DONE_cvs_login="yes" + setup || return 1 + ( + if [ -f "${HOME}/.cvspass" ]; then + CVSPASS="${HOME}/.cvspass" + else + CVSPASS="" + fi + if [ -z "`grep \"$CVSROOT_GREP\" ${CVSPASS} /dev/null`" ]; then + echo "cmake" | cvs -q -z3 -d $CVSROOT login + else + echo "Already logged in." + fi + ) >Logs/cvs_login.log 2>&1 || error_log Logs/cvs_login.log +} + +#----------------------------------------------------------------------------- +utilities() +{ + [ -z "${DONE_utilities}" ] || return 0 ; DONE_utilities="yes" + cvs_login || return 1 + ( + if [ -d "ReleaseUtilities/CVS" ]; then + cd ReleaseUtilities && cvs -z3 -q update -dAP -r ${TAG} + else + rm -rf CheckoutTemp && + mkdir CheckoutTemp && + cd CheckoutTemp && + cvs -q -z3 -d $CVSROOT co -r ${TAG} CMake/Utilities/Release && + mv CMake/Utilities/Release ../ReleaseUtilities && + cd .. && + rm -rf CheckoutTemp + fi + ) >Logs/utilities.log 2>&1 || error_log Logs/utilities.log +} + +#----------------------------------------------------------------------------- +config() +{ + [ -z "${DONE_config}" ] || return 0 ; DONE_config="yes" + utilities || return 1 + CONFIG_FILE="config_`uname`" + echo "Loading ${CONFIG_FILE} ..." + . "${RELEASE_ROOT}/ReleaseUtilities/${CONFIG_FILE}" >Logs/config.log 2>&1 || error_log Logs/config.log + if [ -z "${CC}" ] || [ -z "${CXX}" ] || [ -z "${PLATFORM}" ]; then + echo "${CONFIG_FILE} should specify CC, CXX, and PLATFORM." && + return 1 + fi + export CC CXX CFLAGS CXXFLAGS LDFLAGS PATH LD_LIBRARY_PATH MAKE +} + +#----------------------------------------------------------------------------- +checkout() +{ + [ -z "${DONE_checkout}" ] || return 0 ; DONE_checkout="yes" + config || return 1 + echo "Updating CMake from cvs ..." && + ( + if [ -d cmake-${VERSION}/CVS ]; then + cd cmake-${VERSION} && + cvs -q -z3 -d $CVSROOT update -dAP -r ${TAG} + else + rm -rf cmake-${VERSION} && + rm -rf CheckoutTemp && + mkdir CheckoutTemp && + cd CheckoutTemp && + cvs -q -z3 -d $CVSROOT co -r ${TAG} CMake && + mv CMake ../cmake-${VERSION} && + cd .. && + rm -rf CheckoutTemp + fi + ) >Logs/checkout.log 2>&1 || error_log Logs/checkout.log +} + +#----------------------------------------------------------------------------- +# Create source tarballs for CMake. +# +# source_tarball +# +source_tarball() +{ + [ -z "${DONE_source_tarball}" ] || return 0 ; DONE_source_tarball="yes" + config || return 1 + [ -d "cmake-${VERSION}" ] || checkout || return 1 + echo "Creating source tarballs ..." && + ( + mkdir -p Tarballs && + rm -rf Tarballs/cmake-${VERSION}.tar* && + tar cvf Tarballs/cmake-${VERSION}.tar --exclude CVS cmake-${VERSION} && + gzip -c Tarballs/cmake-${VERSION}.tar >Tarballs/cmake-${VERSION}.tar.gz && + compress Tarballs/cmake-${VERSION}.tar + ) >Logs/source_tarball.log 2>&1 || error_log Logs/source_tarball.log +} + +#----------------------------------------------------------------------------- +write_cache() +{ + write_standard_cache +} + +#----------------------------------------------------------------------------- +write_standard_cache() +{ + cat > CMakeCache.txt <Logs/cache.log 2>&1 || error_log Logs/cache.log +} + +#----------------------------------------------------------------------------- +configure() +{ + [ -z "${DONE_configure}" ] || return 0 ; DONE_configure="yes" + config || return 1 + [ -d "cmake-${VERSION}" ] || checkout || return 1 + cache || return 1 + echo "Running bootstrap ..." && + ( + cd "cmake-${VERSION}-${PLATFORM}" && + ../cmake-${VERSION}/bootstrap --prefix=${PREFIX} ${BOOTSTRAP_FLAGS} + ) >Logs/configure.log 2>&1 || error_log Logs/configure.log +} + +#----------------------------------------------------------------------------- +build() +{ + [ -z "${DONE_build}" ] || return 0 ; DONE_build="yes" + config || return 1 + if [ ! -d "cmake-${VERSION}-${PLATFORM}/Bootstrap" ]; then + configure || return 1 + fi + echo "Running make ..." && + ( + cd "cmake-${VERSION}-${PLATFORM}" && + ${MAKE} ${BUILD_FLAGS} + ) >Logs/build.log 2>&1 || error_log Logs/build.log +} + +#----------------------------------------------------------------------------- +tests() +{ + [ -z "${DONE_tests}" ] || return 0 ; DONE_tests="yes" + config || return 1 + [ -f "cmake-${VERSION}-${PLATFORM}/bin/ccmake" ] || build || return 1 + echo "Running tests ..." && + ( + cd "cmake-${VERSION}-${PLATFORM}" && + rm -rf Tests && + ./bin/ctest -V + ) >Logs/tests.log 2>&1 || error_log Logs/tests.log +} + +#----------------------------------------------------------------------------- +package() +{ + [ -z "${DONE_install}" ] || return 0 ; DONE_install="yes" + config || return 1 + [ -d "cmake-${VERSION}-${PLATFORM}/Tests/Simple" ] || tests || return 1 + echo "Running make package ..." && + ( + cd "cmake-${VERSION}-${PLATFORM}" && + ${MAKE} package" + ) >Logs/install.log 2>&1 || error_log Logs/install.log +} +#----------------------------------------------------------------------------- +install() +{ + [ -z "${DONE_install}" ] || return 0 ; DONE_install="yes" + config || return 1 + [ -d "cmake-${VERSION}-${PLATFORM}/Tests/Simple" ] || tests || return 1 + echo "Running make install ..." && + ( + rm -rf ${INSTALL_DIR} && + cd "cmake-${VERSION}-${PLATFORM}" && + ${MAKE} install DESTDIR="${RELEASE_ROOT}/${INSTALL_DIR}" + ) >Logs/install.log 2>&1 || error_log Logs/install.log +} + +#----------------------------------------------------------------------------- +strip() +{ + [ -z "${DONE_strip}" ] || return 0 ; DONE_strip="yes" + config || return 1 + [ -f "${INSTALL_DIR}/usr/local/bin/ccmake" ] || package || return 1 + echo "Stripping executables ..." && + ( + strip ${INSTALL_DIR}${PREFIX}/bin/* + ) >Logs/strip.log 2>&1 || error_log Logs/strip.log +} + +#----------------------------------------------------------------------------- +manifest() +{ + [ -z "${DONE_manifest}" ] || return 0 ; DONE_manifest="yes" + config || return 1 + [ -f "${INSTALL_DIR}/usr/local/bin/ccmake" ] || install || return 1 + echo "Writing MANIFEST ..." && + ( + mkdir -p ${INSTALL_DIR}${PREFIX}${DOC_DIR} && + rm -rf ${INSTALL_DIR}${PREFIX}${DOC_DIR}/MANIFEST && + touch ${INSTALL_DIR}${PREFIX}${DOC_DIR}/MANIFEST && + cd ${INSTALL_DIR}${PREFIX} && + FILES=`find . -type f |sed 's/^\.\///'` && + cd ${RELEASE_ROOT} && + (cat >> ${INSTALL_DIR}${PREFIX}${DOC_DIR}/MANIFEST < ${INSTALL_DIR}/README <Logs/manifest.log 2>&1 || error_log Logs/manifest.log +} + +#----------------------------------------------------------------------------- +# Create binary tarballs for CMake. +# +# binary_tarball +# +binary_tarball() +{ + [ -z "${DONE_binary_tarball}" ] || return 0 ; DONE_binary_tarball="yes" + config || return 1 + strip || return 1 +} + +#----------------------------------------------------------------------------- +cygwin_source_tarball() +{ + [ -z "${DONE_cygwin_source_tarball}" ] || return 0 ; DONE_cygwin_source_tarball="yes" + config || return 1 + [ -d "cmake-${VERSION}" ] || checkout || return 1 + echo "Creating cygwin source tarball ..." && + ( + mkdir -p Cygwin && + rm -rf Cygwin/cmake-${VERSION}.tar.bz2 && + tar cvjf Cygwin/cmake-${VERSION}.tar.bz2 --exclude CVS cmake-${VERSION} + ) >Logs/cygwin_source_tarball.log 2>&1 || error_log Logs/cygwin_source_tarball.log +} + +#----------------------------------------------------------------------------- +cygwin_source_patch() +{ + [ -z "${DONE_cygwin_source_patch}" ] || return 0 ; DONE_cygwin_source_patch="yes" + config || return 1 + [ -d "cmake-${VERSION}" ] || checkout || return 1 + echo "Creating source patch for cygwin ..." && + ( + mkdir -p Cygwin && + rm -rf Cygwin/Patched && + mkdir -p Cygwin/Patched && + (tar c --exclude CVS cmake-${VERSION} | (cd Cygwin/Patched; tar x)) && + cd Cygwin/Patched && + mkdir -p cmake-${VERSION}/CYGWIN-PATCHES && + ( + CYGVERSION=`uname -r` + cat > cmake-${VERSION}/CYGWIN-PATCHES/cmake.README < + +EOF + ) && + ( + cat > cmake-${VERSION}/CYGWIN-PATCHES/setup.hint < "../cmake-${VERSION}-${RELEASE}.patch"; [ "$?" = "1" ]) + ) >Logs/cygwin_source_patch.log 2>&1 || error_log Logs/cygwin_source_patch.log +} + +#----------------------------------------------------------------------------- +cygwin_package_script() +{ + [ -z "${DONE_cygwin_package_script}" ] || return 0 ; DONE_cygwin_package_script="yes" + utilities || return 1 + echo "Creating cygwin packaging script ..." && + ( + mkdir -p Cygwin && + cp ReleaseUtilities/cygwin-package.sh.in Cygwin/cmake-${VERSION}-${RELEASE}.sh && + chmod u+x Cygwin/cmake-${VERSION}-${RELEASE}.sh + ) >Logs/cygwin_package_script.log 2>&1 || error_log Logs/cygwin_package_script.log +} + +#----------------------------------------------------------------------------- +# Create the CMake cygwin package files. +# +# cygwin_package +# +# This command should be run from a cygwin prompt. +cygwin_package() +{ + [ -z "${DONE_cygwin_package}" ] || return 0 ; DONE_cygwin_package="yes" + config || return 1 + [ -f "Cygwin/cmake-${VERSION}.tar.bz2" ] || cygwin_source_tarball || return 1 + [ -f "Cygwin/cmake-${VERSION}-${RELEASE}.patch" ] || cygwin_source_patch || return 1 + [ -f "Cygwin/cmake-${VERSION}-${RELEASE}.sh" ] || cygwin_package_script || return 1 + echo "Running cygwin packaging script ..." && + ( + rm -rf Cygwin/Package && + mkdir -p Cygwin/Package && + cd Cygwin/Package && + cp ../setup.hint . && + cp ../cmake-${VERSION}.tar.bz2 . && + cp ../cmake-${VERSION}-${RELEASE}.patch . && + cp ../cmake-${VERSION}-${RELEASE}.sh . && + ./cmake-${VERSION}-${RELEASE}.sh all + ) >Logs/cygwin_package.log 2>&1 || error_log Logs/cygwin_package.log +} + +#----------------------------------------------------------------------------- +# Upload the CMake cygwin package files. +# +# cygwin_upload +# +# This should be run after "cygwin_package". +cygwin_upload() +{ + setup || return 1 + echo "------- Copying cywgin packages to www.cmake.org. -------" + scp Cygwin/Package/cmake-${VERSION}-${RELEASE}-src.tar.bz2 \ + Cygwin/Package/cmake-${VERSION}-${RELEASE}.tar.bz2 \ + Cygwin/Package/setup.hint \ + kitware@www.cmake.org:/projects/FTP/pub/cmake/cygwin + echo "---- Done copying cygwin packages to www.cmake.org. -----" +} + +#----------------------------------------------------------------------------- +win32_zipfile() +{ + setup || return 1 + echo "Creating windows non-admin install zip file ..." && + ( + mkdir -p Win32 && + cd "c:/Program Files" && + rm -rf cmake-${VERSION}-x86-win.zip && + zip -r cmake-${VERSION}-x86-win.zip CMake \ + -x CMake/INSTALL.LOG -x CMake/UNWISE.EXE -x CMake/WiseUpdt.exe && + mv cmake-${VERSION}-x86-win.zip ${RELEASE_ROOT}/Win32 + ) >Logs/win32_zipfile.log 2>&1 || error_log Logs/win32_zipfile.log +} + +#----------------------------------------------------------------------------- +win32_upload() +{ + setup || return 1 + echo "------- Copying windows zip file to www.cmake.org. -------" + scp Win32/cmake-${VERSION}-x86-win.zip \ + kitware@www.cmake.org:/projects/FTP/pub/cmake/v${CMAKE_VERSION} + echo "---- Done copying windows zip file to www.cmake.org. -----" +} + +#----------------------------------------------------------------------------- +# Install CMake into the OSX package directory structure. +# +# osx_install +# +# This will build CMake if it is not already built. +osx_install() +{ + [ -z "${DONE_osx_install}" ] || return 0 ; DONE_osx_install="yes" + config || return 1 + [ -f "cmake-${VERSION}-${PLATFORM}/bin/ccmake" ] || build || return 1 + if [ -z "${WX_RESOURCES}" ]; then + echo "${CONFIG_FILE} should specify WX_RESOURCES." + return 1 + fi + echo "Running make install for OSX package ..." && + ( + rm -rf OSX && + mkdir -p OSX/Resources && + ( + cd "cmake-${VERSION}-${PLATFORM}" && + ${MAKE} install DESTDIR="${RELEASE_ROOT}/OSX/Package_Root" + ) && + cp cmake-${VERSION}/Copyright.txt OSX/Resources/License.txt + ) >Logs/osx_install.log 2>&1 || error_log Logs/osx_install.log +# Use this version when the wxCMakeSetup dialog is restored: +# ( +# rm -rf OSX && +# mkdir -p OSX/Resources && +# mkdir -p OSX/Package_Root/Applications && +# ( +# cd "cmake-${VERSION}-${PLATFORM}" && +# ${MAKE} install DESTDIR="${RELEASE_ROOT}/OSX/Package_Root" +# ) && +# cp cmake-${VERSION}/Copyright.txt OSX/Resources/License.txt && +# cp -r cmake-${VERSION}-${PLATFORM}/bin/CMake.app OSX/Package_Root/Applications && +# echo "APPL????" > OSX/Package_Root/Applications/CMake.app/Contents/PkgInfo && +# cp "${WX_RESOURCES}" OSX/Package_Root/Applications/CMake.app/Contents/Resources/wxCMakeSetup.rsrc +# ) >Logs/osx_install.log 2>&1 || error_log Logs/osx_install.log +} + +#----------------------------------------------------------------------------- +run() +{ + CMD="'$1'"; shift; for i in "$@"; do CMD="${CMD} '$i'"; done + eval "$CMD" +} + +# 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 -- cgit v0.12