cmake_release.sh 9.6 KB

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