cmake_release.sh 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. #!/bin/sh
  2. #=============================================================================
  3. #
  4. # Program: CMake - Cross-Platform Makefile Generator
  5. # Module: $RCSfile$
  6. # Language: C++
  7. # Date: $Date$
  8. # Version: $Revision$
  9. #
  10. # Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
  11. # See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
  12. #
  13. # This software is distributed WITHOUT ANY WARRANTY; without even
  14. # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  15. # PURPOSE. See the above copyright notices for more information.
  16. #
  17. #=============================================================================
  18. #
  19. # CMake UNIX Release Script.
  20. #
  21. [ -z "$REMOTE" ] && SELF="$0"
  22. CVSROOT=":pserver:[email protected]:/cvsroot/CMake"
  23. CVSROOT_GREP=":pserver:[email protected]:[0-9]*/cvsroot/CMake"
  24. TAG="Release-1-6"
  25. VERSION="1.6.beta2"
  26. RELEASE="1"
  27. PREVIOUS_VERSION="1.4.7"
  28. PREVIOUS_RELEASE="1"
  29. RELEASE_ROOT_NAME="CMakeReleaseRoot"
  30. RELEASE_ROOT="${HOME}/${RELEASE_ROOT_NAME}"
  31. CC=""
  32. CXX=""
  33. CFLAGS=""
  34. CXXFLAGS=""
  35. PREFIX="/usr/local"
  36. INSTALL_SUBDIRS="bin share doc"
  37. DOC_DIR="/doc/cmake"
  38. #-----------------------------------------------------------------------------
  39. usage()
  40. {
  41. echo "Usage!!"
  42. }
  43. #-----------------------------------------------------------------------------
  44. error_log()
  45. {
  46. echo "An error has been logged to $1:" &&
  47. cat "$1" &&
  48. return 1
  49. }
  50. #-----------------------------------------------------------------------------
  51. remote()
  52. {
  53. HOST="$1"
  54. shift
  55. REMOTE_TASK="$@"
  56. echo "------- Running remote task on $HOST. -------"
  57. (echo "REMOTE=\"1\"" &&
  58. echo "TASK=\"${REMOTE_TASK}\"" &&
  59. cat $SELF) | ssh "$HOST" /bin/sh 2>/dev/null
  60. echo "-------- Remote task on $HOST done. --------"
  61. }
  62. #-----------------------------------------------------------------------------
  63. remote_copy()
  64. {
  65. HOST="$1"
  66. echo "------- Copying tarballs from $HOST. -------"
  67. scp "$HOST:${RELEASE_ROOT_NAME}/Tarballs/*" .
  68. echo "---- Done copying tarballs from $HOST. -----"
  69. }
  70. #-----------------------------------------------------------------------------
  71. setup()
  72. {
  73. [ -z "${DONE_setup}" ] || return 0 ; DONE_setup="yes"
  74. mkdir -p ${RELEASE_ROOT}/Logs &&
  75. echo "Entering ${RELEASE_ROOT}" &&
  76. cd ${RELEASE_ROOT}
  77. }
  78. #-----------------------------------------------------------------------------
  79. clean()
  80. {
  81. setup || return 1
  82. echo "Cleaning up ${RELEASE_ROOT}" &&
  83. rm -rf *
  84. }
  85. #-----------------------------------------------------------------------------
  86. cvs_login()
  87. {
  88. [ -z "${DONE_cvs_login}" ] || return 0 ; DONE_cvs_login="yes"
  89. setup || return 1
  90. (
  91. if [ -f "${HOME}/.cvspass" ]; then
  92. CVSPASS="${HOME}/.cvspass"
  93. else
  94. CVSPASS=""
  95. fi
  96. if [ -z "`grep \"$CVSROOT_GREP\" ${CVSPASS} /dev/null`" ]; then
  97. echo "cmake" | cvs -q -z3 -d $CVSROOT login
  98. else
  99. echo "Already logged in."
  100. fi
  101. ) >Logs/cvs_login.log 2>&1 || error_log Logs/cvs_login.log
  102. }
  103. #-----------------------------------------------------------------------------
  104. utilities()
  105. {
  106. [ -z "${DONE_utilities}" ] || return 0 ; DONE_utilities="yes"
  107. cvs_login || return 1
  108. (
  109. if [ -d "ReleaseUtilities/CVS" ]; then
  110. cd ReleaseUtilities && cvs -z3 -q update -dAP
  111. else
  112. rm -rf CheckoutTemp &&
  113. mkdir CheckoutTemp &&
  114. cd CheckoutTemp &&
  115. cvs -q -z3 -d $CVSROOT co CMake/Utilities/Release &&
  116. mv CMake/Utilities/Release ../ReleaseUtilities &&
  117. cd .. &&
  118. rm -rf CheckoutTemp
  119. fi
  120. ) >Logs/utilities.log 2>&1 || error_log Logs/utilities.log
  121. }
  122. #-----------------------------------------------------------------------------
  123. config()
  124. {
  125. [ -z "${DONE_config}" ] || return 0 ; DONE_config="yes"
  126. utilities || return 1
  127. CONFIG_FILE="config_`uname`"
  128. echo "Loading ${CONFIG_FILE} ..."
  129. . ${RELEASE_ROOT}/ReleaseUtilities/${CONFIG_FILE} >Logs/config.log 2>&1 || error_log Logs/config.log
  130. if [ -z "${CC}" ] || [ -z "${CXX}" ] || [ -z "${PLATFORM}" ]; then
  131. echo "${CONFIG_FILE} should specify CC, CXX, and PLATFORM." &&
  132. return 1
  133. fi
  134. }
  135. #-----------------------------------------------------------------------------
  136. checkout()
  137. {
  138. [ -z "${DONE_checkout}" ] || return 0 ; DONE_checkout="yes"
  139. config || return 1
  140. echo "Exporting cmake from cvs ..." &&
  141. (
  142. rm -rf cmake-${VERSION} &&
  143. rm -rf CheckoutTemp &&
  144. mkdir CheckoutTemp &&
  145. cd CheckoutTemp &&
  146. cvs -q -z3 -d $CVSROOT export -r ${TAG} CMake &&
  147. mv CMake ../cmake-${VERSION} &&
  148. cd .. &&
  149. rm -rf CheckoutTemp
  150. ) >Logs/checkout.log 2>&1 || error_log Logs/checkout.log
  151. }
  152. #-----------------------------------------------------------------------------
  153. source_tarball()
  154. {
  155. [ -z "${DONE_source_tarball}" ] || return 0 ; DONE_source_tarball="yes"
  156. config || return 1
  157. [ -d "cmake-${VERSION}" ] || checkout || return 1
  158. echo "Creating source tarballs ..." &&
  159. (
  160. mkdir -p Tarballs &&
  161. rm -rf Tarballs/cmake-${VERSION}.tar* &&
  162. tar cvf Tarballs/cmake-${VERSION}.tar cmake-${VERSION} &&
  163. gzip -c Tarballs/cmake-${VERSION}.tar >Tarballs/cmake-${VERSION}.tar.gz &&
  164. compress Tarballs/cmake-${VERSION}.tar
  165. ) >Logs/source_tarball.log 2>&1 || error_log Logs/source_tarball.log
  166. }
  167. #-----------------------------------------------------------------------------
  168. write_cache()
  169. {
  170. cat > CMakeCache.txt <<EOF
  171. BUILD_TESTING:BOOL=OFF
  172. EOF
  173. }
  174. #-----------------------------------------------------------------------------
  175. cache()
  176. {
  177. [ -z "${DONE_cache}" ] || return 0 ; DONE_cache="yes"
  178. config || return 1
  179. echo "Writing CMakeCache.txt ..." &&
  180. (
  181. rm -rf "cmake-${VERSION}-${PLATFORM}" &&
  182. mkdir -p "cmake-${VERSION}-${PLATFORM}" &&
  183. cd "cmake-${VERSION}-${PLATFORM}" &&
  184. write_cache
  185. ) >Logs/cache.log 2>&1 || error_log Logs/cache.log
  186. }
  187. #-----------------------------------------------------------------------------
  188. configure()
  189. {
  190. [ -z "${DONE_configure}" ] || return 0 ; DONE_configure="yes"
  191. config || return 1
  192. [ -d "cmake-${VERSION}" ] || checkout || return 1
  193. cache || return 1
  194. echo "Running configure ..." &&
  195. (
  196. cd "cmake-${VERSION}-${PLATFORM}" &&
  197. export CC CXX CFLAGS CXXFLAGS PATH LD_LIBRARY_PATH &&
  198. ../cmake-${VERSION}/configure --prefix=${PREFIX}
  199. ) >Logs/configure.log 2>&1 || error_log Logs/configure.log
  200. }
  201. #-----------------------------------------------------------------------------
  202. build()
  203. {
  204. [ -z "${DONE_build}" ] || return 0 ; DONE_build="yes"
  205. config || return 1
  206. if [ ! -d "cmake-${VERSION}-${PLATFORM}/Bootstrap" ]; then
  207. configure || return 1
  208. fi
  209. echo "Running make ..." &&
  210. (
  211. cd "cmake-${VERSION}-${PLATFORM}" &&
  212. make
  213. ) >Logs/build.log 2>&1 || error_log Logs/build.log
  214. }
  215. #-----------------------------------------------------------------------------
  216. install()
  217. {
  218. [ -z "${DONE_install}" ] || return 0 ; DONE_install="yes"
  219. config || return 1
  220. [ -f "cmake-${VERSION}-${PLATFORM}/Source/ccmake" ] || build || return 1
  221. echo "Running make install ..." &&
  222. (
  223. rm -rf Install &&
  224. cd "cmake-${VERSION}-${PLATFORM}" &&
  225. make install DESTDIR="${RELEASE_ROOT}/Install"
  226. ) >Logs/install.log 2>&1 || error_log Logs/install.log
  227. }
  228. #-----------------------------------------------------------------------------
  229. strip()
  230. {
  231. [ -z "${DONE_strip}" ] || return 0 ; DONE_strip="yes"
  232. config || return 1
  233. [ -f "Install/usr/local/bin/ccmake" ] || install || return 1
  234. echo "Stripping executables ..." &&
  235. (
  236. strip Install${PREFIX}/bin/*
  237. ) >Logs/strip.log 2>&1 || error_log Logs/strip.log
  238. }
  239. #-----------------------------------------------------------------------------
  240. manifest()
  241. {
  242. [ -z "${DONE_manifest}" ] || return 0 ; DONE_manifest="yes"
  243. config || return 1
  244. [ -f "Install/usr/local/bin/ccmake" ] || install || return 1
  245. echo "Writing MANIFEST ..." &&
  246. (
  247. mkdir -p Install${PREFIX}${DOC_DIR} &&
  248. rm -rf Install${PREFIX}${DOC_DIR}/MANIFEST &&
  249. touch Install${PREFIX}${DOC_DIR}/MANIFEST &&
  250. cd Install${PREFIX} &&
  251. FILES=`find ${INSTALL_SUBDIRS} -type f |sed 's/^\.\///'` &&
  252. cd ${RELEASE_ROOT} &&
  253. (cat >> Install${PREFIX}${DOC_DIR}/MANIFEST <<EOF
  254. ${FILES}
  255. EOF
  256. ) &&
  257. rm -rf Install/README &&
  258. (cat > Install/README <<EOF
  259. CMake $VERSION binary for $PLATFORM
  260. Extract the file "cmake-${VERSION}-${PLATFORM}-files.tar" into your
  261. destination directory (typically /usr/local). The following files will
  262. be extracted:
  263. ${FILES}
  264. EOF
  265. )
  266. ) >Logs/manifest.log 2>&1 || error_log Logs/manifest.log
  267. }
  268. #-----------------------------------------------------------------------------
  269. binary_tarball()
  270. {
  271. [ -z "${DONE_binary_tarball}" ] || return 0 ; DONE_binary_tarball="yes"
  272. config || return 1
  273. strip || return 1
  274. manifest || return 1
  275. echo "Creating binary tarballs ..." &&
  276. (
  277. mkdir -p Tarballs &&
  278. rm -rf Install/cmake-${VERSION}-${PLATFORM}-files.tar &&
  279. (
  280. cd Install${PREFIX} &&
  281. tar cvf ${RELEASE_ROOT}/Install/cmake-${VERSION}-${PLATFORM}-files.tar ${INSTALL_SUBDIRS}
  282. ) &&
  283. rm -rf Tarballs/cmake-${VERSION}-${PLATFORM}.tar* &&
  284. (
  285. cd Install &&
  286. tar cvf ${RELEASE_ROOT}/Tarballs/cmake-${VERSION}-${PLATFORM}.tar cmake-${VERSION}-${PLATFORM}-files.tar README
  287. ) &&
  288. (
  289. cd Tarballs &&
  290. gzip -c cmake-${VERSION}-${PLATFORM}.tar >cmake-${VERSION}-${PLATFORM}.tar.gz &&
  291. compress cmake-${VERSION}-${PLATFORM}.tar
  292. )
  293. ) >Logs/binary_tarball.log 2>&1 || error_log Logs/binary_tarball.log
  294. }
  295. if [ -z "$TASK" ]; then
  296. [ -z "$REMOTE" ] && TASK="$@"
  297. fi
  298. if [ -z "$TASK" ]; then
  299. TASK="usage"
  300. fi
  301. eval $TASK