450e7e5e0b9892aa881e6aa65cbf11ee35cd0874
[platform/upstream/cmake.git] / Tests / ExternalProject / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8)
2 project(ExternalProjectTest NONE)
3
4 include(ExternalProject)
5
6 # Test ExternalProject, especially with checkouts from VCS
7
8 find_package(CVS)
9 find_package(Subversion)
10 find_package(Git)
11 find_package(Hg)
12
13 option(ExternalProjectTest_USE_FOLDERS "Enable folder grouping in IDEs." ON)
14 if(ExternalProjectTest_USE_FOLDERS)
15   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
16 else()
17   set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
18 endif()
19
20 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
21   "CMakePredefinedTargets-in-ExternalProjectTest")
22
23 set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
24 set(binary_base "${base}/Build")
25 set_property(DIRECTORY PROPERTY EP_BASE ${base})
26 set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
27
28 add_custom_target(NonExternalProjectTarget
29   COMMAND ${CMAKE_COMMAND} -E echo NonExternalProjectTarget)
30
31 # Empty projects that test all the known ExternalProject_Add argument key words:
32 #
33 set(proj AAA-TestAlphabetization)
34 ExternalProject_Add(${proj}
35   BUILD_COMMAND ""
36   CONFIGURE_COMMAND ""
37   DOWNLOAD_COMMAND ""
38   INSTALL_COMMAND ""
39 )
40
41 set(proj ZZZ-TestAlphabetization)
42 ExternalProject_Add(${proj}
43   BUILD_COMMAND ""
44   CONFIGURE_COMMAND ""
45   DOWNLOAD_COMMAND ""
46   INSTALL_COMMAND ""
47 )
48
49 set(proj TargetNameSameAsFolder)
50 ExternalProject_Add(${proj}
51   BUILD_COMMAND ""
52   CONFIGURE_COMMAND ""
53   DOWNLOAD_COMMAND ""
54   INSTALL_COMMAND ""
55 )
56 set_property(TARGET ${proj} PROPERTY FOLDER "${proj}")
57
58 set(proj MinimalNoOpProject)
59 ExternalProject_Add(${proj}
60   BUILD_COMMAND ""
61   CONFIGURE_COMMAND ""
62   DOWNLOAD_COMMAND ""
63   INSTALL_COMMAND ""
64 )
65
66 set(proj EmptyNoOpProject)
67 ExternalProject_Add(${proj}
68   BUILD_COMMAND ""
69   CMAKE_ARGS ""
70   CONFIGURE_COMMAND ""
71   CVS_REPOSITORY ""
72   CVS_MODULE ""
73   CVS_TAG ""
74   DEPENDS "MinimalNoOpProject" NonExternalProjectTarget
75   DOWNLOAD_COMMAND ""
76   DOWNLOAD_NO_PROGRESS 1
77   INSTALL_COMMAND ""
78   PATCH_COMMAND ""
79   STEP_TARGETS install update
80   SVN_REPOSITORY ""
81   SVN_REVISION ""
82   SVN_USERNAME ""
83   SVN_PASSWORD ""
84   SVN_TRUST_CERT 1
85   TEST_COMMAND ""
86   TIMEOUT ""
87   URL ""
88   URL_MD5 ""
89   UPDATE_COMMAND ""
90 )
91 set_property(TARGET ${proj} PROPERTY FOLDER "")
92
93 set(proj NoExtractLogDownload)
94 ExternalProject_Add(${proj}
95   URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz
96   DOWNLOAD_NO_EXTRACT 1
97   LOG_DOWNLOAD 1
98   BUILD_COMMAND ""
99   CONFIGURE_COMMAND ""
100   INSTALL_COMMAND ""
101 )
102
103
104 # CVS-based tests:
105 #
106 set(do_cvs_tests 0)
107
108 if(CVS_EXECUTABLE)
109   set(do_cvs_tests 1)
110 endif()
111
112 if(do_cvs_tests AND NOT UNIX)
113   if("${CVS_EXECUTABLE}" MATCHES "cygwin")
114     message(STATUS "No ExternalProject cvs tests with cygwin cvs.exe outside cygwin!")
115     set(do_cvs_tests 0)
116   endif()
117 endif()
118
119 if(do_cvs_tests)
120   # Unzip/untar the CVS repository in our source folder so that other
121   # projects below may use it to test CVS args of ExternalProject_Add
122   #
123   set(proj SetupLocalCVSRepository)
124   set(local_cvs_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/CVS")
125   ExternalProject_Add(${proj}
126     SOURCE_DIR ${local_cvs_repo}
127     URL ${CMAKE_CURRENT_SOURCE_DIR}/cvsrepo.tgz
128     URL_MD5 55fc85825ffdd9ed2597123c68b79f7e
129     BUILD_COMMAND ""
130     CONFIGURE_COMMAND "${CVS_EXECUTABLE}" --version
131     INSTALL_COMMAND ""
132   )
133   set_property(TARGET ${proj}
134     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
135
136   # The MSYS cvs tool interprets "c:/" as a "machine:" name for SSH.
137   # Detect the MSYS cvs and convert the repo path to an MSYS path.
138   if(WIN32)
139     if(EXISTS "${CVS_EXECUTABLE}")
140       file(STRINGS "${CVS_EXECUTABLE}" cvs_is_msys LIMIT_COUNT 1 REGEX "[Mm][Ss][Yy][Ss]")
141       if(cvs_is_msys)
142         message(STATUS "'${CVS_EXECUTABLE}' is from MSYS (contains '${cvs_is_msys}')")
143         string(REGEX REPLACE "^([A-Za-z]):" "/\\1" local_cvs_repo "${local_cvs_repo}")
144       endif()
145     endif()
146   endif()
147
148   # CVS by date stamp:
149   #
150   set(proj TutorialStep1-CVS-20090626)
151   ExternalProject_Add(${proj}
152     CVS_REPOSITORY "${local_cvs_repo}"
153     CVS_MODULE "TutorialStep1"
154     CVS_TAG "-D2009-06-26 16:50:00 UTC"
155     UPDATE_COMMAND ""
156     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
157     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
158     INSTALL_COMMAND ""
159     DEPENDS "SetupLocalCVSRepository"
160   )
161   set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
162
163   # CVS by tag:
164   #
165   set(proj TutorialStep1-CVS-testtag1)
166   ExternalProject_Add(${proj}
167     CVS_REPOSITORY "${local_cvs_repo}"
168     CVS_MODULE "TutorialStep1"
169     CVS_TAG -rtesttag1
170     UPDATE_COMMAND ""
171     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
172     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
173     INSTALL_COMMAND ""
174     DEPENDS "SetupLocalCVSRepository"
175   )
176   set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
177
178   # Live CVS / HEAD (no CVS_TAG):
179   #
180   set(proj TutorialStep1-CVS-HEAD)
181   ExternalProject_Add(${proj}
182     CVS_REPOSITORY "${local_cvs_repo}"
183     CVS_MODULE "TutorialStep1"
184     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
185     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
186     INSTALL_COMMAND ""
187     DEPENDS "SetupLocalCVSRepository"
188     DEPENDS "EmptyNoOpProject"
189     DEPENDS "TutorialStep1-CVS-20090626"
190     DEPENDS "TutorialStep1-CVS-testtag1"
191   )
192   set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
193 endif()
194
195
196 # SVN-based tests:
197 #
198 set(do_svn_tests 0)
199
200 if(Subversion_SVN_EXECUTABLE)
201   set(do_svn_tests 1)
202 endif()
203
204 # Only do svn tests with svn >= version 1.2
205 #
206 if(do_svn_tests)
207   if(Subversion_VERSION_SVN VERSION_LESS 1.2)
208     message(STATUS "No ExternalProject svn tests with svn client less than version 1.2")
209     set(do_svn_tests 0)
210   endif()
211 endif()
212
213 # Only do svn tests in cygwin/cygwin or not-cygwin/not-cygwin arrangements:
214 #
215 if(do_svn_tests)
216   if(CMAKE_CURRENT_BINARY_DIR MATCHES "cygdrive/" AND
217      NOT "${Subversion_SVN_EXECUTABLE}" MATCHES "cygwin")
218     message(STATUS "No ExternalProject svn tests with non-cygwin svn client in a /cygdrive based build")
219     set(do_svn_tests 0)
220   endif()
221 endif()
222
223 if(do_svn_tests)
224   # Unzip/untar the SVN repository in our source folder so that other
225   # projects below may use it to test SVN args of ExternalProject_Add
226   #
227   set(proj SetupLocalSVNRepository)
228   set(local_svn_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/SVN")
229   set(local_svn_repo_url "file:///${local_svn_repo}/TutorialStep1")
230   ExternalProject_Add(${proj}
231     SOURCE_DIR ${local_svn_repo}
232     URL ${CMAKE_CURRENT_SOURCE_DIR}/svnrepo.tgz
233     URL_MD5 2f468be4ed1fa96377fca0cc830819c4
234     BUILD_COMMAND ""
235     CONFIGURE_COMMAND "${Subversion_SVN_EXECUTABLE}" --version
236     INSTALL_COMMAND ""
237   )
238   set_property(TARGET ${proj}
239     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
240
241   # SVN by date stamp:
242   #
243   set(proj TutorialStep1-SVN-20090626)
244   ExternalProject_Add(${proj}
245     SVN_REPOSITORY "${local_svn_repo_url}"
246     SVN_REVISION "-r{2009-06-26 16:50:00 +0000}"
247     UPDATE_COMMAND ""
248     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
249     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
250     INSTALL_COMMAND ""
251     DEPENDS "SetupLocalSVNRepository"
252   )
253   set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
254
255   # SVN by revision number:
256   #
257   set(proj TutorialStep1-SVN-r2)
258   ExternalProject_Add(${proj}
259     SVN_REPOSITORY "${local_svn_repo_url}"
260     SVN_REVISION "-r2"
261     UPDATE_COMMAND ""
262     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
263     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
264     INSTALL_COMMAND ""
265     DEPENDS "SetupLocalSVNRepository"
266   )
267   set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
268
269   # Live SVN / trunk (no SVN_REVISION):
270   #
271   set(proj TutorialStep1-SVN-trunk)
272   ExternalProject_Add(${proj}
273     SVN_REPOSITORY "${local_svn_repo_url}"
274     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
275     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
276     INSTALL_COMMAND ""
277     DEPENDS "SetupLocalSVNRepository"
278     LOG_DOWNLOAD 1
279   )
280   set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
281 endif()
282
283
284 set(do_git_tests 0)
285
286 if(GIT_EXECUTABLE)
287   set(do_git_tests 1)
288
289   execute_process(
290     COMMAND "${GIT_EXECUTABLE}" --version
291     OUTPUT_VARIABLE ov
292     OUTPUT_STRIP_TRAILING_WHITESPACE
293     )
294   string(REGEX REPLACE "^git version (.+)$" "\\1" git_version "${ov}")
295   message(STATUS "git_version='${git_version}'")
296
297   if(git_version VERSION_LESS 1.6.5)
298     message(STATUS "No ExternalProject git tests with git client less than version 1.6.5")
299     set(do_git_tests 0)
300   endif()
301 endif()
302
303
304 if(do_git_tests)
305   set(local_git_repo "../../LocalRepositories/GIT")
306
307   # Unzip/untar the git repository in our source folder so that other
308   # projects below may use it to test git args of ExternalProject_Add
309   #
310   set(proj SetupLocalGITRepository)
311   ExternalProject_Add(${proj}
312     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT
313     URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz
314     BUILD_COMMAND ""
315     CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
316     INSTALL_COMMAND ""
317   )
318   set_property(TARGET ${proj}
319     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
320
321   # git by commit id:
322   #
323   set(proj TutorialStep1-GIT-byhash)
324   ExternalProject_Add(${proj}
325     GIT_REPOSITORY "${local_git_repo}"
326     GIT_TAG d1970730310fe8bc07e73f15dc570071f9f9654a
327     UPDATE_COMMAND ""
328     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
329     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
330     INSTALL_COMMAND ""
331     DEPENDS "SetupLocalGITRepository"
332   )
333   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
334
335   # git by explicit branch/tag name:
336   #
337   set(proj TutorialStep1-GIT-bytag)
338   ExternalProject_Add(${proj}
339     GIT_REPOSITORY "${local_git_repo}"
340     GIT_TAG "origin/master"
341     UPDATE_COMMAND ""
342     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
343     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
344     INSTALL_COMMAND ""
345     DEPENDS "SetupLocalGITRepository"
346   )
347   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
348
349   # Live git / master (no GIT_TAG):
350   #
351   set(proj TutorialStep1-GIT-master)
352   ExternalProject_Add(${proj}
353     GIT_REPOSITORY "${local_git_repo}"
354     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
355     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
356     INSTALL_COMMAND ""
357     DEPENDS "SetupLocalGITRepository"
358     LOG_UPDATE 1
359   )
360   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
361
362   # Live git / master (no GIT_TAG), but shallow
363   #
364   set(proj TutorialStep1-GIT-shallow-master)
365   ExternalProject_Add(${proj}
366     GIT_REPOSITORY "${local_git_repo}"
367     GIT_SHALLOW 1
368     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
369     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
370     INSTALL_COMMAND ""
371     DEPENDS "SetupLocalGITRepository"
372     LOG_UPDATE 1
373   )
374   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
375
376   # Live git / master (no GIT_TAG), but git config flags
377   #
378   # The `git clone --config` parameter has been introduced in Git 1.7.7
379   if(NOT git_version VERSION_LESS 1.7.7)
380     set(proj TutorialStep1-GIT-config)
381     ExternalProject_Add(${proj}
382       GIT_REPOSITORY "${local_git_repo}"
383       GIT_CONFIG core.eol=lf
384                  core.autocrlf=input
385                  "http.extraheader=AUTHORIZATION: bearer --unsupportedOption"
386       CMAKE_GENERATOR "${CMAKE_GENERATOR}"
387       CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
388       INSTALL_COMMAND ""
389       DEPENDS "SetupLocalGITRepository"
390       LOG_UPDATE 1
391     )
392     set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
393   endif()
394
395   # git by explicit branch/tag with empty submodule list
396   #
397   set(proj TutorialStep1-GIT-bytag-withsubmodules)
398   ExternalProject_Add(${proj}
399     GIT_REPOSITORY "${local_git_repo}"
400     GIT_TAG "origin/master"
401     GIT_SUBMODULES ""
402     UPDATE_COMMAND ""
403     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
404     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
405     INSTALL_COMMAND ""
406     DEPENDS "SetupLocalGITRepository"
407   )
408   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
409
410   # Unzip/untar the git repository in our source folder so that other
411   # projects below may use it to test git args of ExternalProject_Add
412   #
413   set(proj SetupLocalGITRepositoryWithSubmodules)
414   ExternalProject_Add(${proj}
415     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT-with-submodules
416     URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo-sub.tgz
417     BUILD_COMMAND ""
418     CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
419     INSTALL_COMMAND ""
420   )
421   set_property(TARGET ${proj}
422     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
423
424   set(local_git_repo "../../LocalRepositories/GIT-with-submodules")
425
426   set(proj TS1-GIT-all-GIT_SUBMODULES)
427   ExternalProject_Add(${proj}
428     GIT_REPOSITORY "${local_git_repo}"
429     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
430     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
431                -DWITH_m1:BOOL=ON
432                -DWITH_m2:BOOL=ON
433     BUILD_COMMAND ""
434     INSTALL_COMMAND ""
435     DEPENDS "SetupLocalGITRepository"
436             "SetupLocalGITRepositoryWithSubmodules"
437   )
438   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
439
440   set(proj TS1-GIT-all-GIT_SUBMODULES-via-CMP0097-OLD)
441   cmake_policy(SET CMP0097 OLD)
442   ExternalProject_Add(${proj}
443     GIT_REPOSITORY "${local_git_repo}"
444     GIT_SUBMODULES ""
445     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
446     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
447                -DWITH_m1:BOOL=ON
448                -DWITH_m2:BOOL=ON
449     BUILD_COMMAND ""
450     INSTALL_COMMAND ""
451     DEPENDS "SetupLocalGITRepository"
452             "SetupLocalGITRepositoryWithSubmodules"
453   )
454   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
455
456   set(proj TS1-GIT-no-GIT_SUBMODULES)
457   cmake_policy(SET CMP0097 NEW)
458   ExternalProject_Add(${proj}
459     GIT_REPOSITORY "${local_git_repo}"
460     GIT_SUBMODULES ""
461     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
462     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
463                -DWITH_m1:BOOL=OFF
464                -DWITH_m2:BOOL=OFF
465     BUILD_COMMAND ""
466     INSTALL_COMMAND ""
467     DEPENDS "SetupLocalGITRepository"
468             "SetupLocalGITRepositoryWithSubmodules"
469   )
470   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
471
472   set(proj TS1-GIT-some-GIT_SUBMODULES)
473   ExternalProject_Add(${proj}
474     GIT_REPOSITORY "${local_git_repo}"
475     GIT_SUBMODULES "m/m1"
476     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
477     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
478                -DWITH_m1:BOOL=ON
479                -DWITH_m2:BOOL=OFF
480     BUILD_COMMAND ""
481     INSTALL_COMMAND ""
482     DEPENDS "SetupLocalGITRepository"
483             "SetupLocalGITRepositoryWithSubmodules"
484   )
485   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
486
487   # Unzip/untar the git repository in our source folder so that other
488   # projects below may use it to test git args of ExternalProject_Add
489   #
490   set(proj SetupLocalGITRepositoryWithRecursiveSubmodules)
491   ExternalProject_Add(${proj}
492           SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT-with-recursive-submodules
493           URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo-sub-rec.tgz
494           BUILD_COMMAND ""
495           CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
496           INSTALL_COMMAND ""
497           )
498   set_property(TARGET ${proj}
499           PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
500
501   set(local_git_repo "../../LocalRepositories/GIT-with-recursive-submodules")
502
503   set(proj TS1-GIT-RECURSIVE_SUBMODULES-default)
504   ExternalProject_Add(${proj}
505           GIT_REPOSITORY "${local_git_repo}"
506           CMAKE_GENERATOR "${CMAKE_GENERATOR}"
507           CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
508                      -DWITH_RECURSIVE:BOOL=ON
509           BUILD_COMMAND  ""
510           INSTALL_COMMAND ""
511           DEPENDS "SetupLocalGITRepository"
512                   "SetupLocalGITRepositoryWithSubmodules"
513                   "SetupLocalGITRepositoryWithRecursiveSubmodules"
514           )
515   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
516
517   set(proj TS1-GIT-RECURSIVE_SUBMODULES-exclusive)
518   ExternalProject_Add(${proj}
519           GIT_REPOSITORY "${local_git_repo}"
520           GIT_SUBMODULES_RECURSE TRUE
521           CMAKE_GENERATOR "${CMAKE_GENERATOR}"
522           CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
523                      -DWITH_RECURSIVE:BOOL=ON
524           BUILD_COMMAND  ""
525           INSTALL_COMMAND ""
526           DEPENDS "SetupLocalGITRepository"
527                   "SetupLocalGITRepositoryWithSubmodules"
528                   "SetupLocalGITRepositoryWithRecursiveSubmodules"
529           )
530   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
531
532   set(proj TS1-GIT-RECURSIVE_SUBMODULES-off)
533   ExternalProject_Add(${proj}
534           GIT_REPOSITORY "${local_git_repo}"
535           GIT_SUBMODULES_RECURSE FALSE
536           CMAKE_GENERATOR "${CMAKE_GENERATOR}"
537           CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
538                      -DWITH_RECURSIVE:BOOL=OFF
539           BUILD_COMMAND  ""
540           INSTALL_COMMAND ""
541           DEPENDS "SetupLocalGITRepository"
542                   "SetupLocalGITRepositoryWithSubmodules"
543                   "SetupLocalGITRepositoryWithRecursiveSubmodules"
544           )
545   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
546
547 endif()
548
549 set(do_hg_tests 0)
550
551 if(HG_EXECUTABLE)
552   set(do_hg_tests 1)
553 endif()
554
555 if(do_hg_tests AND NOT UNIX)
556   if("${HG_EXECUTABLE}" MATCHES "cygwin")
557     message(STATUS "No ExternalProject hg tests with cygwin hg outside cygwin!")
558     set(do_hg_tests 0)
559   endif()
560 endif()
561
562 if(do_hg_tests)
563   set(local_hg_repo "../../LocalRepositories/HG")
564
565   # Unzip/untar the hg repository in our source folder so that other
566   # projects below may use it to test hg args of ExternalProject_Add
567   #
568   set(proj SetupLocalHGRepository)
569   ExternalProject_Add(${proj}
570     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/HG
571     URL ${CMAKE_CURRENT_SOURCE_DIR}/hgrepo.tgz
572     BUILD_COMMAND ""
573     CONFIGURE_COMMAND "${HG_EXECUTABLE}" --version
574     INSTALL_COMMAND ""
575   )
576   set_property(TARGET ${proj}
577     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
578
579
580   # hg by commit id:
581   #
582   set(proj TutorialStep1-HG-byhash)
583   ExternalProject_Add(${proj}
584     HG_REPOSITORY "${local_hg_repo}"
585     HG_TAG dd2ce38a6b8a
586     UPDATE_COMMAND ""
587     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
588     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
589     INSTALL_COMMAND ""
590     DEPENDS "SetupLocalHGRepository"
591   )
592   set_property(TARGET ${proj} PROPERTY FOLDER "HG")
593
594   # hg by explicit branch/tag name:
595   #
596   set(proj TutorialStep1-HG-bytag)
597   ExternalProject_Add(${proj}
598     HG_REPOSITORY "${local_hg_repo}"
599     HG_TAG "default"
600     UPDATE_COMMAND ""
601     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
602     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
603     INSTALL_COMMAND ""
604     DEPENDS "SetupLocalHGRepository"
605   )
606   set_property(TARGET ${proj} PROPERTY FOLDER "HG")
607
608   # Live hg / tip (no HG_TAG):
609   #
610   # Mercurial 2.1 does not distinguish an empty pull from a failed pull,
611   # so do not run the test with that version.
612   if(NOT "${HG_VERSION_STRING}" STREQUAL "2.1")
613     set(proj TutorialStep1-HG-tip)
614     ExternalProject_Add(${proj}
615       HG_REPOSITORY "${local_hg_repo}"
616       CMAKE_GENERATOR "${CMAKE_GENERATOR}"
617       CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
618       INSTALL_COMMAND ""
619       DEPENDS "SetupLocalHGRepository"
620       LOG_UPDATE 1
621     )
622     set_property(TARGET ${proj} PROPERTY FOLDER "HG")
623   endif()
624 endif()
625
626
627 # Test the testable built/installed products:
628 #
629 enable_testing()
630
631
632 # Do at least a smoke test of a built executable from each
633 # project's build directory...
634 #
635 # BuildTree tests:
636 #
637 if(do_cvs_tests)
638   add_test(TutorialStep1-CVS-20090626-BuildTreeTest
639     "${binary_base}/TutorialStep1-CVS-20090626/Tutorial" 4)
640
641   add_test(TutorialStep1-CVS-testtag1-BuildTreeTest
642     "${binary_base}/TutorialStep1-CVS-testtag1/Tutorial" 64)
643
644   add_test(TutorialStep1-CVS-HEAD-BuildTreeTest
645     "${binary_base}/TutorialStep1-CVS-HEAD/Tutorial" 81)
646 endif()
647
648 if(do_svn_tests)
649   add_test(TutorialStep1-SVN-20090626-BuildTreeTest
650     "${binary_base}/TutorialStep1-SVN-20090626/Tutorial" 100)
651
652   add_test(TutorialStep1-SVN-r2-BuildTreeTest
653     "${binary_base}/TutorialStep1-SVN-r2/Tutorial" 99)
654
655   add_test(TutorialStep1-SVN-trunk-BuildTreeTest
656     "${binary_base}/TutorialStep1-SVN-trunk/Tutorial" 98)
657 endif()
658
659 if(do_git_tests)
660   add_test(TutorialStep1-GIT-byhash
661     "${binary_base}/TutorialStep1-GIT-byhash/Tutorial" 100)
662
663   add_test(TutorialStep1-GIT-bytag
664     "${binary_base}/TutorialStep1-GIT-bytag/Tutorial" 99)
665
666   add_test(TutorialStep1-GIT-bytag-withsubmodules
667     "${binary_base}/TutorialStep1-GIT-bytag-withsubmodules/Tutorial" 99)
668
669   add_test(TutorialStep1-GIT-shallow-master
670     "${binary_base}/TutorialStep1-GIT-shallow-master/Tutorial" 98)
671
672   add_test(TutorialStep1-GIT-master
673     "${binary_base}/TutorialStep1-GIT-master/Tutorial" 98)
674
675   if(NOT git_version VERSION_LESS 1.7.7)
676     add_test(TutorialStep1-GIT-config
677       "${binary_base}/TutorialStep1-GIT-config/Tutorial" 98)
678   endif()
679 endif()
680
681
682 message(STATUS "do_cvs_tests='${do_cvs_tests}'")
683 message(STATUS "do_svn_tests='${do_svn_tests}'")
684 message(STATUS "do_git_tests='${do_git_tests}' GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
685 message(STATUS "do_hg_tests='${do_hg_tests}'   HG_EXECUTABLE='${HG_EXECUTABLE}'")
686
687
688 # Test if log works when the first arguments of *_COMMAND is "COMMAND".
689 set(proj ExternalProject-no-log)
690 set(download_cmd "")
691 set(patch_cmd "")
692 set(update_cmd "")
693 set(configure_cmd "")
694 set(build_cmd "")
695 set(install_cmd "")
696
697 ExternalProject_Add(${proj}
698   DOWNLOAD_COMMAND "${download_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "download"
699   PATCH_COMMAND "${patch_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "patch"
700   UPDATE_COMMAND "${update_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "update"
701   CONFIGURE_COMMAND "${configure_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "configure"
702   BUILD_COMMAND "${build_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "build"
703   INSTALL_COMMAND "${install_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "install"
704   )
705
706 set(proj ExternalProject-log)
707 ExternalProject_Add(${proj}
708   DOWNLOAD_COMMAND "${download_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "download"
709   PATCH_COMMAND "${patch_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "patch"
710   UPDATE_COMMAND "${update_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "update"
711   CONFIGURE_COMMAND "${configure_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "configure"
712   BUILD_COMMAND "${build_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "build"
713   INSTALL_COMMAND "${install_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "install"
714   LOG_DOWNLOAD 1
715   LOG_PATCH 1
716   LOG_UPDATE 1
717   LOG_CONFIGURE 1
718   LOG_BUILD 1
719   LOG_INSTALL 1
720   )
721
722 set(proj ExternalProject-log-dir)
723 ExternalProject_Add(${proj}
724   DOWNLOAD_COMMAND "${download_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "download"
725   PATCH_COMMAND "${patch_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "patch"
726   UPDATE_COMMAND "${update_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "update"
727   CONFIGURE_COMMAND "${configure_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "configure"
728   BUILD_COMMAND "${build_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "build"
729   INSTALL_COMMAND "${install_cmd}" COMMAND "${CMAKE_COMMAND}" -E echo "install"
730   LOG_MERGED_STDOUTERR 1
731   LOG_DIR ${CMAKE_CURRENT_BINARY_DIR}/different_log
732   LOG_DOWNLOAD 1
733   LOG_PATCH 1
734   LOG_UPDATE 1
735   LOG_CONFIGURE 1
736   LOG_BUILD 1
737   LOG_INSTALL 1
738   )