cmake_release.sh 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  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-0"
  25. VERSION="1.6.0"
  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. cd "${HOME}" &&
  128. echo "Cleaning up ${RELEASE_ROOT}" &&
  129. rm -rf "${RELEASE_ROOT_NAME}"
  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. tests()
  263. {
  264. [ -z "${DONE_tests}" ] || return 0 ; DONE_tests="yes"
  265. config || return 1
  266. [ -f "cmake-${VERSION}-${PLATFORM}/Source/ccmake" ] || build || return 1
  267. echo "Running tests ..." &&
  268. (
  269. cd "cmake-${VERSION}-${PLATFORM}" &&
  270. rm -rf Tests &&
  271. ./Source/ctest -V
  272. ) >Logs/tests.log 2>&1 || error_log Logs/tests.log
  273. }
  274. #-----------------------------------------------------------------------------
  275. install()
  276. {
  277. [ -z "${DONE_install}" ] || return 0 ; DONE_install="yes"
  278. config || return 1
  279. [ -d "cmake-${VERSION}-${PLATFORM}/Tests/Simple" ] || tests || return 1
  280. echo "Running make install ..." &&
  281. (
  282. rm -rf Install &&
  283. cd "cmake-${VERSION}-${PLATFORM}" &&
  284. make install DESTDIR="${RELEASE_ROOT}/Install"
  285. ) >Logs/install.log 2>&1 || error_log Logs/install.log
  286. }
  287. #-----------------------------------------------------------------------------
  288. strip()
  289. {
  290. [ -z "${DONE_strip}" ] || return 0 ; DONE_strip="yes"
  291. config || return 1
  292. [ -f "Install/usr/local/bin/ccmake" ] || install || return 1
  293. echo "Stripping executables ..." &&
  294. (
  295. strip Install${PREFIX}/bin/*
  296. ) >Logs/strip.log 2>&1 || error_log Logs/strip.log
  297. }
  298. #-----------------------------------------------------------------------------
  299. manifest()
  300. {
  301. [ -z "${DONE_manifest}" ] || return 0 ; DONE_manifest="yes"
  302. config || return 1
  303. [ -f "Install/usr/local/bin/ccmake" ] || install || return 1
  304. echo "Writing MANIFEST ..." &&
  305. (
  306. mkdir -p Install${PREFIX}${DOC_DIR} &&
  307. rm -rf Install${PREFIX}${DOC_DIR}/MANIFEST &&
  308. touch Install${PREFIX}${DOC_DIR}/MANIFEST &&
  309. cd Install${PREFIX} &&
  310. FILES=`find ${INSTALL_SUBDIRS} -type f |sed 's/^\.\///'` &&
  311. cd ${RELEASE_ROOT} &&
  312. (cat >> Install${PREFIX}${DOC_DIR}/MANIFEST <<EOF
  313. ${FILES}
  314. EOF
  315. ) &&
  316. rm -rf Install/README &&
  317. (cat > Install/README <<EOF
  318. CMake $VERSION binary for $PLATFORM
  319. Extract the file "cmake-${VERSION}-${PLATFORM}-files.tar" into your
  320. destination directory (typically /usr/local). The following files will
  321. be extracted:
  322. ${FILES}
  323. EOF
  324. )
  325. ) >Logs/manifest.log 2>&1 || error_log Logs/manifest.log
  326. }
  327. #-----------------------------------------------------------------------------
  328. binary_tarball()
  329. {
  330. [ -z "${DONE_binary_tarball}" ] || return 0 ; DONE_binary_tarball="yes"
  331. config || return 1
  332. strip || return 1
  333. manifest || return 1
  334. echo "Creating binary tarballs ..." &&
  335. (
  336. mkdir -p Tarballs &&
  337. rm -rf Install/cmake-${VERSION}-${PLATFORM}-files.tar &&
  338. (
  339. cd Install${PREFIX} &&
  340. tar cvf ${RELEASE_ROOT}/Install/cmake-${VERSION}-${PLATFORM}-files.tar ${INSTALL_SUBDIRS}
  341. ) &&
  342. rm -rf Tarballs/cmake-${VERSION}-${PLATFORM}.tar* &&
  343. (
  344. cd Install &&
  345. tar cvf ${RELEASE_ROOT}/Tarballs/cmake-${VERSION}-${PLATFORM}.tar cmake-${VERSION}-${PLATFORM}-files.tar README
  346. ) &&
  347. (
  348. cd Tarballs &&
  349. gzip -c cmake-${VERSION}-${PLATFORM}.tar >cmake-${VERSION}-${PLATFORM}.tar.gz &&
  350. compress cmake-${VERSION}-${PLATFORM}.tar
  351. )
  352. ) >Logs/binary_tarball.log 2>&1 || error_log Logs/binary_tarball.log
  353. }
  354. #-----------------------------------------------------------------------------
  355. cygwin_source_tarball()
  356. {
  357. [ -z "${DONE_cygwin_source_tarball}" ] || return 0 ; DONE_cygwin_source_tarball="yes"
  358. config || return 1
  359. [ -d "cmake-${VERSION}" ] || checkout || return 1
  360. echo "Creating cygwin source tarball ..." &&
  361. (
  362. mkdir -p Cygwin &&
  363. rm -rf Cygwin/cmake-${VERSION}.tar.bz2 &&
  364. tar cvjf Cygwin/cmake-${VERSION}.tar.bz2 cmake-${VERSION}
  365. ) >Logs/cygwin_source_tarball.log 2>&1 || error_log Logs/cygwin_source_tarball.log
  366. }
  367. #-----------------------------------------------------------------------------
  368. cygwin_source_patch()
  369. {
  370. [ -z "${DONE_cygwin_source_patch}" ] || return 0 ; DONE_cygwin_source_patch="yes"
  371. config || return 1
  372. [ -d "cmake-${VERSION}" ] || checkout || return 1
  373. echo "Creating source patch for cygwin ..." &&
  374. (
  375. mkdir -p Cygwin &&
  376. rm -rf Cygwin/Patched &&
  377. mkdir -p Cygwin/Patched &&
  378. (tar c cmake-${VERSION} | (cd Cygwin/Patched; tar x)) &&
  379. cd Cygwin/Patched &&
  380. mkdir -p cmake-${VERSION}/CYGWIN-PATCHES &&
  381. (
  382. CYGVERSION=`uname -r`
  383. cat > cmake-${VERSION}/CYGWIN-PATCHES/cmake.README <<EOF
  384. cmake
  385. --------------------------------------
  386. Runtime requirements:
  387. cygwin-${CYGVERSION} or newer
  388. Build requirements
  389. cygwin-${CYGVERSION} or newer
  390. make
  391. Canonical homepage:
  392. http://www.cmake.org
  393. Canonical download:
  394. ftp://www.cmake.org/pub/cmake/
  395. ------------------------------------
  396. Build instructions:
  397. unpack cmake-${VERSION}-${RELEASE}-src.tar.bz2
  398. if you use setup to install this src package, it will be
  399. unpacked under /usr/src automatically
  400. cd /usr/src
  401. ./cmake-${VERSION}-${RELEASE}.sh all
  402. This will create:
  403. /usr/src/cmake-${VERSION}-${RELEASE}.tar.bz2
  404. /usr/src/cmake-${VERSION}-${RELEASE}-src.tar.bz2
  405. -------------------------------------------
  406. Port Notes:
  407. <none>
  408. ------------------
  409. Cygwin port maintained by: CMake Developers <[email protected]>
  410. EOF
  411. ) &&
  412. (
  413. cat > cmake-${VERSION}/CYGWIN-PATCHES/setup.hint <<EOF
  414. # CMake setup.hint file for cygwin setup.exe program
  415. category: Devel
  416. requires: libncurses6 cygwin
  417. sdesc: "A cross platform build manger"
  418. 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."
  419. prev: ${PREVIOUS_VERSION}-${PREVIOUS_RELEASE}
  420. curr: ${VERSION}-${RELEASE}
  421. EOF
  422. ) &&
  423. dos2unix cmake-${VERSION}/CYGWIN-PATCHES/setup.hint &&
  424. cp cmake-${VERSION}/CYGWIN-PATCHES/setup.hint ../setup.hint &&
  425. (diff -urN "../../cmake-${VERSION}" "cmake-${VERSION}" > "../cmake-${VERSION}-${RELEASE}.patch"; [ "$?" = "1" ])
  426. ) >Logs/cygwin_source_patch.log 2>&1 || error_log Logs/cygwin_source_patch.log
  427. }
  428. #-----------------------------------------------------------------------------
  429. cygwin_package_script()
  430. {
  431. [ -z "${DONE_cygwin_package_script}" ] || return 0 ; DONE_cygwin_package_script="yes"
  432. utilities || return 1
  433. echo "Creating cygwin packaging script ..." &&
  434. (
  435. mkdir -p Cygwin &&
  436. cp ReleaseUtilities/cygwin-package.sh.in Cygwin/cmake-${VERSION}-${RELEASE}.sh &&
  437. chmod u+x Cygwin/cmake-${VERSION}-${RELEASE}.sh
  438. ) >Logs/cygwin_package_script.log 2>&1 || error_log Logs/cygwin_package_script.log
  439. }
  440. #-----------------------------------------------------------------------------
  441. cygwin_package()
  442. {
  443. [ -z "${DONE_cygwin_package}" ] || return 0 ; DONE_cygwin_package="yes"
  444. config || return 1
  445. [ -f "Cygwin/cmake-${VERSION}.tar.bz2" ] || cygwin_source_tarball || return 1
  446. [ -f "Cygwin/cmake-${VERSION}-${RELEASE}.patch" ] || cygwin_source_patch || return 1
  447. [ -f "Cygwin/cmake-${VERSION}-${RELEASE}.sh" ] || cygwin_package_script || return 1
  448. echo "Running cygwin packaging script ..." &&
  449. (
  450. rm -rf Cygwin/Package &&
  451. mkdir -p Cygwin/Package &&
  452. cd Cygwin/Package &&
  453. cp ../setup.hint . &&
  454. cp ../cmake-${VERSION}.tar.bz2 . &&
  455. cp ../cmake-${VERSION}-${RELEASE}.patch . &&
  456. cp ../cmake-${VERSION}-${RELEASE}.sh . &&
  457. ./cmake-${VERSION}-${RELEASE}.sh all
  458. ) >Logs/cygwin_package.log 2>&1 || error_log Logs/cygwin_package.log
  459. }
  460. #-----------------------------------------------------------------------------
  461. cygwin_upload()
  462. {
  463. setup || return 1
  464. echo "------- Copying cywgin packages to www.cmake.org. -------"
  465. scp Cygwin/Package/cmake-${VERSION}-${RELEASE}-src.tar.bz2 \
  466. Cygwin/Package/cmake-${VERSION}-${RELEASE}.tar.bz2 \
  467. Cygwin/Package/setup.hint \
  468. www.cmake.org:/projects/FTP/pub/cmake/cygwin
  469. echo "---- Done copying cygwin packages to www.cmake.org. -----"
  470. }
  471. #-----------------------------------------------------------------------------
  472. osx_install()
  473. {
  474. [ -z "${DONE_osx_install}" ] || return 0 ; DONE_osx_install="yes"
  475. config || return 1
  476. [ -f "cmake-${VERSION}-${PLATFORM}/Source/ccmake" ] || build || return 1
  477. if [ -z "${WX_RESOURCES}" ]; then
  478. echo "${CONFIG_FILE} should specify WX_RESOURCES."
  479. return 1
  480. fi
  481. echo "Running make install for OSX package ..." &&
  482. (
  483. rm -rf OSX &&
  484. mkdir -p OSX/Package_Root/Applications &&
  485. mkdir -p OSX/Resources/PreFlight &&
  486. mkdir -p OSX/Resources/PostFlight &&
  487. (
  488. cd "cmake-${VERSION}-${PLATFORM}" &&
  489. make install DESTDIR="${RELEASE_ROOT}/OSX/Package_Root"
  490. ) &&
  491. cp cmake-${VERSION}/Copyright.txt OSX/Resources/License.txt &&
  492. cp -r cmake-${VERSION}-${PLATFORM}/Source/CMake.app OSX/Package_Root/Applications &&
  493. echo "APPL????" > OSX/Package_Root/Applications/CMake.app/Contents/PkgInfo &&
  494. cp "${WX_RESOURCES}" OSX/Package_Root/Applications/CMake.app/Contents/Resources/wxCMakeSetup.rsrc
  495. ) >Logs/osx_install.log 2>&1 || error_log Logs/osx_install.log
  496. }
  497. if [ -z "$TASK" ]; then
  498. [ -z "$REMOTE" ] && TASK="$@"
  499. fi
  500. if [ -z "$TASK" ]; then
  501. TASK="usage"
  502. fi
  503. eval $TASK