From 2deba1b9119e6a3dd40931606e08b70744735650 Mon Sep 17 00:00:00 2001 From: David Cole Date: Mon, 31 May 2010 14:22:24 -0400 Subject: [PATCH] Add .zip and .tar.bz2 extraction to ExternalProject. Add archives of these file types and add to the test cases covered in the ExternalProject test. Also add an "Example" directory in the Tests/ExternalProject directory containing the canonical simplest example of ExternalProject usage. --- Modules/ExternalProject.cmake | 22 ++++---- Tests/ExternalProject/CMakeLists.txt | 54 ++++++++++++++++++- Tests/ExternalProject/Example/CMakeLists.txt | 11 ++++ Tests/ExternalProject/Step1.tar.bz2 | Bin 0 -> 904 bytes Tests/ExternalProject/Step1.zip | Bin 0 -> 1074 bytes Tests/ExternalProject/Step1NoDir.tar.bz2 | Bin 0 -> 852 bytes Tests/ExternalProject/Step1NoDir.zip | Bin 0 -> 1038 bytes 7 files changed, 75 insertions(+), 12 deletions(-) create mode 100644 Tests/ExternalProject/Example/CMakeLists.txt create mode 100644 Tests/ExternalProject/Step1.tar.bz2 create mode 100644 Tests/ExternalProject/Step1.zip create mode 100644 Tests/ExternalProject/Step1NoDir.tar.bz2 create mode 100644 Tests/ExternalProject/Step1NoDir.zip diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 0302d5c4b..c926ef1db 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -246,20 +246,16 @@ endfunction(_ep_write_downloadfile_script) function(_ep_write_extractfile_script script_filename filename tmp directory) set(args "") - if(filename MATCHES ".tar$") + if(filename MATCHES "(\\.bz2|\\.tar\\.gz|\\.tgz|\\.zip)$") + set(args xfz) + endif() + + if(filename MATCHES "\\.tar$") set(args xf) endif() - if(filename MATCHES ".tgz$") - set(args xfz) - endif() - - if(filename MATCHES ".tar.gz$") - set(args xfz) - endif() - if(args STREQUAL "") - message(SEND_ERROR "error: do not know how to extract '${filename}' -- known types are .tar, .tgz and .tar.gz") + message(SEND_ERROR "error: do not know how to extract '${filename}' -- known types are .bz2, .tar, .tar.gz, .tgz and .zip") return() endif() @@ -274,6 +270,10 @@ message(STATUS \"extracting... src='\${filename}' dst='\${directory}'\") +if(NOT EXISTS \"\${filename}\") + message(FATAL_ERROR \"error: file to extract does not exist: '\${filename}'\") +endif() + # Prepare a space for extracting: # set(i 1) @@ -696,7 +696,7 @@ function(_ep_add_download_command name) if("${url}" MATCHES "^[a-z]+://") # TODO: Should download and extraction be different steps? string(REGEX MATCH "[^/]*$" fname "${url}") - if(NOT "${fname}" MATCHES "\\.(tar|tgz|tar\\.gz)$") + if(NOT "${fname}" MATCHES "\\.(bz2|tar|tgz|tar\\.gz|zip)$") message(FATAL_ERROR "Could not extract tarball filename from url:\n ${url}") endif() set(file ${download_dir}/${fname}) diff --git a/Tests/ExternalProject/CMakeLists.txt b/Tests/ExternalProject/CMakeLists.txt index f02f2f76d..123dcb442 100644 --- a/Tests/ExternalProject/CMakeLists.txt +++ b/Tests/ExternalProject/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8) project(ExternalProjectTest NONE) include(ExternalProject) @@ -139,6 +139,56 @@ ExternalProject_Add(${proj} ) +# Local BZ2: +# +# (The bz2 tests are here just to verify that the bz2 decompression is executed +# during a test suite run... The configure and build commands are set to +# nothing to make the test quicker. To make this more complete, I should add +# a diff between this and the TGZ source tree since that one does build...) +# +set(proj TutorialStep1-LocalBZ2) +ExternalProject_Add(${proj} + URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar.bz2" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) + +set(proj TutorialStep1-LocalNoDirBZ2) +ExternalProject_Add(${proj} + URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar.bz2" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) + + +# Local ZIP: +# +# (The zip tests are here just to verify that the zip decompression is executed +# during a test suite run... The configure and build commands are set to +# nothing to make the test quicker. To make this more complete, I should add +# a diff between this and the TGZ source tree since that one does build...) +# +set(proj TutorialStep1-LocalZIP) +ExternalProject_Add(${proj} + URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.zip" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) + +set(proj TutorialStep1-LocalNoDirZIP) +ExternalProject_Add(${proj} + URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.zip" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) + + +# CVS-based tests: +# set(do_cvs_tests 0) if(CVS_EXECUTABLE) @@ -215,6 +265,8 @@ if(do_cvs_tests) endif() +# SVN-based tests: +# set(do_svn_tests 0) if(Subversion_SVN_EXECUTABLE) diff --git a/Tests/ExternalProject/Example/CMakeLists.txt b/Tests/ExternalProject/Example/CMakeLists.txt new file mode 100644 index 000000000..2cadd7d22 --- /dev/null +++ b/Tests/ExternalProject/Example/CMakeLists.txt @@ -0,0 +1,11 @@ +# This is the canonical simplest ExternalProject example CMakeLists.txt file: +cmake_minimum_required(VERSION 2.8) +project(ExternalProjectExample NONE) +include(ExternalProject) + +ExternalProject_Add( + cmake281 + URL http://www.cmake.org/files/v2.8/cmake-2.8.1.tar.gz + CMAKE_ARGS -D CMAKE_INSTALL_PREFIX= + BUILD_COMMAND "" +) diff --git a/Tests/ExternalProject/Step1.tar.bz2 b/Tests/ExternalProject/Step1.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..49b5f23a6bfdaf83829be0ec1e3cc40ef035f96e GIT binary patch literal 904 zcmV;319$vFT4*^jL0KkKSwEAmzyJZF|BcO12moGn|DS%h-#-8U|LQ;h009sH00>Y6 zUNC_|lt&pdXwVuo#AIk<7!yXAgAt&@01OhEiK8lQJrhM5Ju-SzMvqCg0L0TqjR4w% zLqkEvOqw(XjWHP-7={GVrXa*FB)_KENL##Xx0%y1T-cG z$5mX=4F4UZUxX#G*&?T4cOLp~F+C>w@8o4N25{vDjSnb6q>&)83>YwKe5yedBL;5G z+tg=ncvDtBN2@DVQV`Y0%|LU_je~L9*lc-nwgd5a;kcg%Rw*sG=7-HwPPs!QUP5ZV zj1Rzq921omBcfQNa(PuGf0*B5ovTfzF7z4CSA%J1?xDz@!o;%dChb3x(BPLXts8|-71 zL8@IwSbOh(Psf%*oNwjzUS zvo;fo9@b8*%$YBfQR0UP(P*mMAz#toF0rbNK@IU|9_%$~pjc(i*cz&8wWKtGRckoS zt@tfNxU!a$QVo}Dfd+^`4p#1%gC0P0?PfNvuLRai;Tz=BHt6l^RL!!?i?l~x&7qMn z4h(u3^+FEUq*V%(kHRY5mBEeTAr5rFwUGgdv|6!aWNwm;ghFm-=7=art2tUhVR>s) zF9dAV&g)f{Nh)N~m?cY+H*TRJOj5eN6pbc9omMhs4i!S{xba38%)ix4gIPu^zCnmJ z8x}3Pu$e7+NMN9hXkWNOr84vx4A4=Sg62lcgVP>O1?Pz(8t+onu^a*`8Zi%g8LOG>0<&6oVi+-#U{_`8xR!i0hRopu1Dew$GM literal 0 HcmV?d00001 diff --git a/Tests/ExternalProject/Step1.zip b/Tests/ExternalProject/Step1.zip new file mode 100644 index 0000000000000000000000000000000000000000..49dac24edff7e6b281bd3ce85cfd1a9f3dbd6107 GIT binary patch literal 1074 zcmWIWW@Zs#U|`^2SYEWuCj7HufgU3RgESKZ14uNuB(=a$-`O`YJJlz%xTILGq@tvB zqQC!P1D>Pre~Mgta3Sv0eCF?gWiOVjT_No;XOT|fb%)tJ>WR)B@BN~B4_?@zT6g}u z{pn4@`X{V&OT?}Gen^=tYUW*-!zQOVQz)ik` z*B(6nP$PCzF|8{1nx2_^aD2Jhgd-A5C&+&KAu!pX;o{HZwV{6MKPTy*YS)_oVfUh6 zdwv`{)!w(}%+223xc;LPK z%sX#`zOe?NgzwF&uRHXC;p+^NJ4~4-YL^6r*5~7V^}yW61)p?|T2^)>fzZGt5)8_?OtzK5unn zt?=e3%P296%1qxEKc&2vnM`M@llu8``iDbo6?JDX9Ncx==JqX}_~-JME4Ee6-*fcy ze}l`BHt&1?ZTYw|^PJqnJ9Em)w_McP&U3UUl<9DAX~9Lq?eFwrc6jS#W=hU;=snZa zW?>^3JwbS<)62O=2V1W*ad-{xbEBBH1oouYtzkVP6ZB_M?UDF~# zy!^o8^OyN|+fCTPEH2Iv;LXS+0?t0zGZoNb48Sx11=z9}x(VpX2BZ~YLIRM2n1Gy! i(DkE-3qt>XU_ylG#}Y~b-mGjOrOZHh5=aL#gLnWD?Xc(o literal 0 HcmV?d00001 diff --git a/Tests/ExternalProject/Step1NoDir.tar.bz2 b/Tests/ExternalProject/Step1NoDir.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..92eb480d6a4473ed4018c04808d5d1f706cf0357 GIT binary patch literal 852 zcmV-a1FQT(T4*^jL0KkKS%QEeL;wLY|BcO12moGn|DS$0-){f^|LOz)009sH00=+> z9Y<>!XaGtopOR^jJc;OyJtmJ(c~4VAA&@cvXc}k-s5ykt8Usd*BSDDM6DB5u2+%SC zlL3&E6k=G#bbeSea zO}VGkgo>4@X@gC8d_1#KLonv<>hVi@>z!FO{xNyVO-t$NitD`M z4l{-0vGdoye#cc_+b5#9lcT@kbZ%ikzLrY{d@RjgcM~N=eYzuqrZ35fo5wWn)l`ZmRXbIh8XB6qel(z%Ml9vEB;~C~Q#_FiS#>ju7YYkx>7!!I%8f+^g169O zLe1SQoy@}FN}DWV(=@WE+j>rTmN7vBq2`w}37MQ_E^Mjpz58-vLkkh*0EGO&}12TdP^cdT__EieTc6KcYC|a&T zmb|N@QPMbgxVcNK*BHh)sxATBG|S8 zRz;|12K%-l+*fUc)Pr^0uprS00pM=wh%wBe98x)R-*q0H!Cw0n4rzSf7gZN>g>dgz z{_Dgvv;-D9+4I5<$FNlj+hgyFvvx=^ya+@7ObZzh7@I|l3|SkbqgfR!pX{&8*x~p60o2m_*Gs&^gc4xo6P^?HbEQ2OmajF+x&xBz~l>F_?HKby@ zwP3cJmK-+aGg$PHzR?(@IjI>?Vrhbm#1^tSEf17?`i!RZh<7NZv0!mgSfc^>6vl-j epuaL^gA*l&j$OP{he}|-@pmLsg$W2K0u(@hS%u30 literal 0 HcmV?d00001 diff --git a/Tests/ExternalProject/Step1NoDir.zip b/Tests/ExternalProject/Step1NoDir.zip new file mode 100644 index 0000000000000000000000000000000000000000..b42d318798ed7237fb07687519e67973183ff0a1 GIT binary patch literal 1038 zcmWIWW@Zs#U|`^2SYEWuCj7HufgU3RgESKZ10PV-**7se)hDyKq*$+{qNH@9zyDza zo}=%7id=heA@0DD-QCxHtK0z3jNI9z6a~ zBX(0Utt$7Lo|$`ae7V_#BN9s|$bR}EFxjBt;?Lu?p?>N=C+VMR*P8!f_o82WejGd1 z-nZuD7D?IN`Q1NvR9U@!xAriT(@MsqrM(NvKeSXlaB|$#S^a}8%X>j@PV=F}gL3!3 znmtVH-f%Tn`nB7^`;IyHkA~Vzd1G2~GV{bmL4kJxZ2Dokn<5_B-#_el;Jy6JJ8y%& zu?C=o?9HmLJM@7e>kAB79$?6pl$PWdWhUn6C0A6m2Kr_nauC@2etpFfmL$%=>NVRG zma=o3Cae|L-lR4=Me%0u?~C0(?(aU*R$q;;yPXuT5E(!5SRU z>=L%s)Ms~><9nS@9xpHEnT<|2vQCTae5|CId&=ON+EXK~dArw6%HO@WYu2L6AH}YD z9L@Zx}qhOI1^3=0q$pWtLdjI3rR;Tzg%u}@Zm)O%jZ*^m>@a8DX zC^3u5Oy3tjrM#D!OlPW-`uTGDheK=?b!RUe+;!XL_AQ2Ppq!9~OE@AP7Jc%dL