cmake_release.sh 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  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. check_host()
  52. {
  53. HOST="$1"
  54. if [ -z "$HOST" ]; then
  55. echo "Must specify host."
  56. return 1
  57. fi
  58. }
  59. #-----------------------------------------------------------------------------
  60. remote()
  61. {
  62. check_host "$1" || return 1
  63. shift
  64. REMOTE_TASK="$@"
  65. RESULT=0
  66. echo "------- Running remote task on $HOST. -------" &&
  67. (echo "REMOTE=\"1\"" &&
  68. echo "TASK=\"${REMOTE_TASK}\"" &&
  69. cat $SELF) | ssh "$HOST" /bin/sh 2>/dev/null || RESULT=1
  70. echo "-------- Remote task on $HOST done. --------" &&
  71. return $RESULT
  72. }
  73. #-----------------------------------------------------------------------------
  74. remote_copy()
  75. {
  76. check_host "$1" || return 1
  77. EXPR="$2"
  78. [ ! -z "$EXPR" ] || EXPR="*"
  79. echo "------- Copying tarballs from $HOST. -------" &&
  80. scp "$HOST:${RELEASE_ROOT_NAME}/Tarballs/${EXPR}" . &&
  81. echo "---- Done copying tarballs from $HOST. -----"
  82. }
  83. #-----------------------------------------------------------------------------
  84. remote_copy_source()
  85. {
  86. check_host "$1" || return 1
  87. remote_copy "$HOST" "cmake-${VERSION}.tar*"
  88. }
  89. #-----------------------------------------------------------------------------
  90. remote_copy_binary()
  91. {
  92. check_host "$1" || return 1
  93. remote_copy "$HOST" "cmake-${VERSION}-*"
  94. }
  95. #-----------------------------------------------------------------------------
  96. remote_source()
  97. {
  98. check_host "$1" || return 1
  99. remote "$HOST" source_tarball &&
  100. remote_copy_source "$HOST"
  101. }
  102. #-----------------------------------------------------------------------------
  103. remote_binary()
  104. {
  105. check_host "$1" || return 1
  106. remote "$HOST" binary_tarball &&
  107. remote_copy_binary "$HOST"
  108. }
  109. #-----------------------------------------------------------------------------
  110. upload()
  111. {
  112. echo "------- Copying tarballs to www.cmake.org. -------"
  113. scp cmake-${VERSION}*tar.* www.cmake.org:/projects/FTP/pub/cmake
  114. echo "---- Done copying tarballs to www.cmake.org. -----"
  115. }
  116. #-----------------------------------------------------------------------------
  117. setup()
  118. {
  119. [ -z "${DONE_setup}" ] || return 0 ; DONE_setup="yes"
  120. mkdir -p ${RELEASE_ROOT}/Logs &&
  121. echo "Entering ${RELEASE_ROOT}" &&
  122. cd ${RELEASE_ROOT}
  123. }
  124. #-----------------------------------------------------------------------------
  125. clean()
  126. {
  127. setup || return 1
  128. echo "Cleaning up ${RELEASE_ROOT}" &&
  129. rm -rf *
  130. }
  131. #-----------------------------------------------------------------------------
  132. cvs_login()
  133. {
  134. [ -z "${DONE_cvs_login}" ] || return 0 ; DONE_cvs_login="yes"
  135. setup || return 1
  136. (
  137. if [ -f "${HOME}/.cvspass" ]; then
  138. CVSPASS="${HOME}/.cvspass"
  139. else
  140. CVSPASS=""
  141. fi
  142. if [ -z "`grep \"$CVSROOT_GREP\" ${CVSPASS} /dev/null`" ]; then
  143. echo "cmake" | cvs -q -z3 -d $CVSROOT login
  144. else
  145. echo "Already logged in."
  146. fi
  147. ) >Logs/cvs_login.log 2>&1 || error_log Logs/cvs_login.log
  148. }
  149. #-----------------------------------------------------------------------------
  150. utilities()
  151. {
  152. [ -z "${DONE_utilities}" ] || return 0 ; DONE_utilities="yes"
  153. cvs_login || return 1
  154. (
  155. if [ -d "ReleaseUtilities/CVS" ]; then
  156. cd ReleaseUtilities && cvs -z3 -q update -dAP
  157. else
  158. rm -rf CheckoutTemp &&
  159. mkdir CheckoutTemp &&
  160. cd CheckoutTemp &&
  161. cvs -q -z3 -d $CVSROOT co CMake/Utilities/Release &&
  162. mv CMake/Utilities/Release ../ReleaseUtilities &&
  163. cd .. &&
  164. rm -rf CheckoutTemp
  165. fi
  166. ) >Logs/utilities.log 2>&1 || error_log Logs/utilities.log
  167. }
  168. #-----------------------------------------------------------------------------
  169. config()
  170. {
  171. [ -z "${DONE_config}" ] || return 0 ; DONE_config="yes"
  172. utilities || return 1
  173. CONFIG_FILE="config_`uname`"
  174. echo "Loading ${CONFIG_FILE} ..."
  175. . ${RELEASE_ROOT}/ReleaseUtilities/${CONFIG_FILE} >Logs/config.log 2>&1 || error_log Logs/config.log
  176. if [ -z "${CC}" ] || [ -z "${CXX}" ] || [ -z "${PLATFORM}" ]; then
  177. echo "${CONFIG_FILE} should specify CC, CXX, and PLATFORM." &&
  178. return 1
  179. fi
  180. export CC CXX CFLAGS CXXFLAGS PATH LD_LIBRARY_PATH
  181. }
  182. #-----------------------------------------------------------------------------
  183. checkout()
  184. {
  185. [ -z "${DONE_checkout}" ] || return 0 ; DONE_checkout="yes"
  186. config || return 1
  187. echo "Exporting cmake from cvs ..." &&
  188. (
  189. rm -rf cmake-${VERSION} &&
  190. rm -rf CheckoutTemp &&
  191. mkdir CheckoutTemp &&
  192. cd CheckoutTemp &&
  193. cvs -q -z3 -d $CVSROOT export -r ${TAG} CMake &&
  194. mv CMake ../cmake-${VERSION} &&
  195. cd .. &&
  196. rm -rf CheckoutTemp
  197. ) >Logs/checkout.log 2>&1 || error_log Logs/checkout.log
  198. }
  199. #-----------------------------------------------------------------------------
  200. source_tarball()
  201. {
  202. [ -z "${DONE_source_tarball}" ] || return 0 ; DONE_source_tarball="yes"
  203. config || return 1
  204. [ -d "cmake-${VERSION}" ] || checkout || return 1
  205. echo "Creating source tarballs ..." &&
  206. (
  207. mkdir -p Tarballs &&
  208. rm -rf Tarballs/cmake-${VERSION}.tar* &&
  209. tar cvf Tarballs/cmake-${VERSION}.tar cmake-${VERSION} &&
  210. gzip -c Tarballs/cmake-${VERSION}.tar >Tarballs/cmake-${VERSION}.tar.gz &&
  211. compress Tarballs/cmake-${VERSION}.tar
  212. ) >Logs/source_tarball.log 2>&1 || error_log Logs/source_tarball.log
  213. }
  214. #-----------------------------------------------------------------------------
  215. write_cache()
  216. {
  217. cat > CMakeCache.txt <<EOF
  218. BUILD_TESTING:BOOL=OFF
  219. EOF
  220. }
  221. #-----------------------------------------------------------------------------
  222. cache()
  223. {
  224. [ -z "${DONE_cache}" ] || return 0 ; DONE_cache="yes"
  225. config || return 1
  226. echo "Writing CMakeCache.txt ..." &&
  227. (
  228. rm -rf "cmake-${VERSION}-${PLATFORM}" &&
  229. mkdir -p "cmake-${VERSION}-${PLATFORM}" &&
  230. cd "cmake-${VERSION}-${PLATFORM}" &&
  231. write_cache
  232. ) >Logs/cache.log 2>&1 || error_log Logs/cache.log
  233. }
  234. #-----------------------------------------------------------------------------
  235. configure()
  236. {
  237. [ -z "${DONE_configure}" ] || return 0 ; DONE_configure="yes"
  238. config || return 1
  239. [ -d "cmake-${VERSION}" ] || checkout || return 1
  240. cache || return 1
  241. echo "Running configure ..." &&
  242. (
  243. cd "cmake-${VERSION}-${PLATFORM}" &&
  244. ../cmake-${VERSION}/configure --prefix=${PREFIX}
  245. ) >Logs/configure.log 2>&1 || error_log Logs/configure.log
  246. }
  247. #-----------------------------------------------------------------------------
  248. build()
  249. {
  250. [ -z "${DONE_build}" ] || return 0 ; DONE_build="yes"
  251. config || return 1
  252. if [ ! -d "cmake-${VERSION}-${PLATFORM}/Bootstrap" ]; then
  253. configure || return 1
  254. fi
  255. echo "Running make ..." &&
  256. (
  257. cd "cmake-${VERSION}-${PLATFORM}" &&
  258. make
  259. ) >Logs/build.log 2>&1 || error_log Logs/build.log
  260. }
  261. #-----------------------------------------------------------------------------
  262. install()
  263. {
  264. [ -z "${DONE_install}" ] || return 0 ; DONE_install="yes"
  265. config || return 1
  266. [ -f "cmake-${VERSION}-${PLATFORM}/Source/ccmake" ] || build || return 1
  267. echo "Running make install ..." &&
  268. (
  269. rm -rf Install &&
  270. cd "cmake-${VERSION}-${PLATFORM}" &&
  271. make install DESTDIR="${RELEASE_ROOT}/Install"
  272. ) >Logs/install.log 2>&1 || error_log Logs/install.log
  273. }
  274. #-----------------------------------------------------------------------------
  275. strip()
  276. {
  277. [ -z "${DONE_strip}" ] || return 0 ; DONE_strip="yes"
  278. config || return 1
  279. [ -f "Install/usr/local/bin/ccmake" ] || install || return 1
  280. echo "Stripping executables ..." &&
  281. (
  282. strip Install${PREFIX}/bin/*
  283. ) >Logs/strip.log 2>&1 || error_log Logs/strip.log
  284. }
  285. #-----------------------------------------------------------------------------
  286. manifest()
  287. {
  288. [ -z "${DONE_manifest}" ] || return 0 ; DONE_manifest="yes"
  289. config || return 1
  290. [ -f "Install/usr/local/bin/ccmake" ] || install || return 1
  291. echo "Writing MANIFEST ..." &&
  292. (
  293. mkdir -p Install${PREFIX}${DOC_DIR} &&
  294. rm -rf Install${PREFIX}${DOC_DIR}/MANIFEST &&
  295. touch Install${PREFIX}${DOC_DIR}/MANIFEST &&
  296. cd Install${PREFIX} &&
  297. FILES=`find ${INSTALL_SUBDIRS} -type f |sed 's/^\.\///'` &&
  298. cd ${RELEASE_ROOT} &&
  299. (cat >> Install${PREFIX}${DOC_DIR}/MANIFEST <<EOF
  300. ${FILES}
  301. EOF
  302. ) &&
  303. rm -rf Install/README &&
  304. (cat > Install/README <<EOF
  305. CMake $VERSION binary for $PLATFORM
  306. Extract the file "cmake-${VERSION}-${PLATFORM}-files.tar" into your
  307. destination directory (typically /usr/local). The following files will
  308. be extracted:
  309. ${FILES}
  310. EOF
  311. )
  312. ) >Logs/manifest.log 2>&1 || error_log Logs/manifest.log
  313. }
  314. #-----------------------------------------------------------------------------
  315. binary_tarball()
  316. {
  317. [ -z "${DONE_binary_tarball}" ] || return 0 ; DONE_binary_tarball="yes"
  318. config || return 1
  319. strip || return 1
  320. manifest || return 1
  321. echo "Creating binary tarballs ..." &&
  322. (
  323. mkdir -p Tarballs &&
  324. rm -rf Install/cmake-${VERSION}-${PLATFORM}-files.tar &&
  325. (
  326. cd Install${PREFIX} &&
  327. tar cvf ${RELEASE_ROOT}/Install/cmake-${VERSION}-${PLATFORM}-files.tar ${INSTALL_SUBDIRS}
  328. ) &&
  329. rm -rf Tarballs/cmake-${VERSION}-${PLATFORM}.tar* &&
  330. (
  331. cd Install &&
  332. tar cvf ${RELEASE_ROOT}/Tarballs/cmake-${VERSION}-${PLATFORM}.tar cmake-${VERSION}-${PLATFORM}-files.tar README
  333. ) &&
  334. (
  335. cd Tarballs &&
  336. gzip -c cmake-${VERSION}-${PLATFORM}.tar >cmake-${VERSION}-${PLATFORM}.tar.gz &&
  337. compress cmake-${VERSION}-${PLATFORM}.tar
  338. )
  339. ) >Logs/binary_tarball.log 2>&1 || error_log Logs/binary_tarball.log
  340. }
  341. #-----------------------------------------------------------------------------
  342. cygwin_source_tarball()
  343. {
  344. [ -z "${DONE_cygwin_source_tarball}" ] || return 0 ; DONE_cygwin_source_tarball="yes"
  345. config || return 1
  346. [ -d "cmake-${VERSION}" ] || checkout || return 1
  347. echo "Creating cygwin source tarball ..." &&
  348. (
  349. rm -rf cmake-${VERSION}.tar.bz2 &&
  350. tar cvjf cmake-${VERSION}.tar.bz2 cmake-${VERSION}
  351. ) >Logs/cygwin_source_tarball.log 2>&1 || error_log Logs/cygwin_source_tarball.log
  352. }
  353. #-----------------------------------------------------------------------------
  354. cygwin_source_patch()
  355. {
  356. [ -z "${DONE_cygwin_source_patch}" ] || return 0 ; DONE_cygwin_source_patch="yes"
  357. config || return 1
  358. [ -d "cmake-${VERSION}" ] || checkout || return 1
  359. echo "Creating source patch for cygwin ..." &&
  360. (
  361. rm -rf Patched &&
  362. mkdir -p Patched &&
  363. (tar c cmake-${VERSION} | (cd Patched; tar x)) &&
  364. cd Patched &&
  365. mkdir -p cmake-${VERSION}/CYGWIN-PATCHES &&
  366. (
  367. CYGVERSION=`uname -r`
  368. cat > cmake-${VERSION}/CYGWIN-PATCHES/cmake.README <<EOF
  369. cmake
  370. --------------------------------------
  371. Runtime requirements:
  372. cygwin-${CYGVERSION} or newer
  373. Build requirements
  374. cygwin-${CYGVERSION} or newer
  375. make
  376. Canonical homepage:
  377. http://www.cmake.org
  378. Canonical download:
  379. ftp://www.cmake.org/pub/cmake/
  380. ------------------------------------
  381. Build instructions:
  382. unpack cmake-${VERSION}-${RELEASE}-src.tar.bz2
  383. if you use setup to install this src package, it will be
  384. unpacked under /usr/src automatically
  385. cd /usr/src
  386. ./cmake-${VERSION}-${RELEASE}.sh all
  387. This will create:
  388. /usr/src/cmake-${VERSION}-${RELEASE}.tar.bz2
  389. /usr/src/cmake-${VERSION}-${RELEASE}-src.tar.bz2
  390. -------------------------------------------
  391. Port Notes:
  392. <none>
  393. ------------------
  394. Cygwin port maintained by: CMake Developers <[email protected]>
  395. EOF
  396. ) &&
  397. (
  398. cat > cmake-${VERSION}/CYGWIN-PATCHES/setup.hint <<EOF
  399. # CMake setup.hint file for cygwin setup.exe program
  400. category: Devel
  401. requires: libncurses6 cygwin
  402. sdesc: "A cross platform build manger"
  403. ldesc: "CMake is a cross platform build manager. It allows you to specify build parameters for C and C++ programs in a cross platform manner. For cygwin Makefiles will be generated. CMake is also capable of generating microsoft project files, nmake, and borland makefiles. CMake can also perform system inspection operations like finding installed libraries and header files."
  404. prev: ${PREVIOUS_VERSION}-${PREVIOUS_RELEASE}
  405. curr: ${VERSION}-${RELEASE}
  406. EOF
  407. ) &&
  408. dos2unix cmake-${VERSION}/CYGWIN-PATCHES/setup.hint &&
  409. cp cmake-${VERSION}/CYGWIN-PATCHES/setup.hint ../setup.hint &&
  410. (diff -urN "../cmake-${VERSION}" "cmake-${VERSION}" > "../cmake-${VERSION}-${RELEASE}.patch"; [ "$?" = "1" ])
  411. ) >Logs/cygwin_source_patch.log 2>&1 || error_log Logs/cygwin_source_patch.log
  412. }
  413. #-----------------------------------------------------------------------------
  414. cygwin_package_script()
  415. {
  416. [ -z "${DONE_cygwin_package_script}" ] || return 0 ; DONE_cygwin_package_script="yes"
  417. utilities || return 1
  418. echo "Creating cygwin packaging script ..." &&
  419. (
  420. cp ReleaseUtilities/cmake-cygwin-package.sh cmake-${VERSION}-${RELEASE}.sh &&
  421. chmod u+x cmake-${VERSION}-${RELEASE}.sh
  422. ) >Logs/cygwin_package_script.log 2>&1 || error_log Logs/cygwin_package_script.log
  423. }
  424. #-----------------------------------------------------------------------------
  425. cygwin_package()
  426. {
  427. [ -z "${DONE_cygwin_package}" ] || return 0 ; DONE_cygwin_package="yes"
  428. config || return 1
  429. [ -f "cmake-${VERSION}.tar.bz2" ] || cygwin_source_tarball || return 1
  430. [ -f "cmake-${VERSION}-${RELEASE}.patch" ] || cygwin_source_patch || return 1
  431. [ -f "cmake-${VERSION}-${RELEASE}.sh" ] || cygwin_package_script || return 1
  432. echo "Running cygwin packaging script ..." &&
  433. (
  434. rm -rf Package &&
  435. mkdir -p Package &&
  436. cd Package &&
  437. cp ../setup.hint . &&
  438. cp ../cmake-${VERSION}.tar.bz2 . &&
  439. cp ../cmake-${VERSION}-${RELEASE}.patch . &&
  440. cp ../cmake-${VERSION}-${RELEASE}.sh . &&
  441. ./cmake-${VERSION}-${RELEASE}.sh all
  442. ) >Logs/cygwin_package.log 2>&1 || error_log Logs/cygwin_package.log
  443. }
  444. if [ -z "$TASK" ]; then
  445. [ -z "$REMOTE" ] && TASK="$@"
  446. fi
  447. if [ -z "$TASK" ]; then
  448. TASK="usage"
  449. fi
  450. eval $TASK