cmake_release.sh 9.8 KB

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