Imported Upstream version 2.8.10.2
[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 find_package(CVS)
7 find_package(Subversion)
8 find_package(Git)
9 find_package(Hg)
10
11 option(ExternalProjectTest_USE_FOLDERS "Enable folder grouping in IDEs." ON)
12 if(ExternalProjectTest_USE_FOLDERS)
13   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
14 else()
15   set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
16 endif()
17
18 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
19   "CMakePredefinedTargets-in-ExternalProjectTest")
20
21 set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
22 set(binary_base "${base}/Build")
23 set_property(DIRECTORY PROPERTY EP_BASE ${base})
24 set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
25
26 if(NOT DEFINED can_build_tutorial_step5)
27   set(can_build_tutorial_step5 1)
28
29   # Tutorial Step5 cannot build correctly using Visual Studio 6
30   # on Windows 98 if the path of its build tree exceeds 72
31   # characters in length... So don't attempt to build it
32   # in a long path on Win98:
33   #
34   if(CMAKE_SYSTEM STREQUAL "Windows-4.10")
35     string(LENGTH "${binary_base}/TutorialStep5-Local" n)
36     if(n GREATER 72)
37       set(can_build_tutorial_step5 0)
38     endif()
39   endif()
40
41   # The ExternalProject builds of Tutorial Step5 cannot be built
42   # correctly 2nd and later times in an in-source build...
43   # (because the CMakeCache.txt from the real in-source build of
44   # the Tests/Tutorial/Step5 directory gets copied when we do
45   # the "source directory copy" step... but it still refers to
46   # its original path which yields a configure error.) So:
47   #
48   if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
49     set(can_build_tutorial_step5 0)
50   endif()
51 endif()
52
53
54 # Empty projects that test all the known ExternalProject_Add argument key words:
55 #
56 set(proj AAA-TestAlphabetization)
57 ExternalProject_Add(${proj}
58   BUILD_COMMAND ""
59   CONFIGURE_COMMAND ""
60   DOWNLOAD_COMMAND ""
61   INSTALL_COMMAND ""
62 )
63
64 set(proj ZZZ-TestAlphabetization)
65 ExternalProject_Add(${proj}
66   BUILD_COMMAND ""
67   CONFIGURE_COMMAND ""
68   DOWNLOAD_COMMAND ""
69   INSTALL_COMMAND ""
70 )
71
72 set(proj TargetNameSameAsFolder)
73 ExternalProject_Add(${proj}
74   BUILD_COMMAND ""
75   CONFIGURE_COMMAND ""
76   DOWNLOAD_COMMAND ""
77   INSTALL_COMMAND ""
78 )
79 set_property(TARGET ${proj} PROPERTY FOLDER "${proj}")
80
81 set(proj MinimalNoOpProject)
82 ExternalProject_Add(${proj}
83   BUILD_COMMAND ""
84   CONFIGURE_COMMAND ""
85   DOWNLOAD_COMMAND ""
86   INSTALL_COMMAND ""
87 )
88
89 set(proj EmptyNoOpProject)
90 ExternalProject_Add(${proj}
91   BUILD_COMMAND ""
92   CMAKE_ARGS ""
93   CONFIGURE_COMMAND ""
94   CVS_REPOSITORY ""
95   CVS_MODULE ""
96   CVS_TAG ""
97   DEPENDS "MinimalNoOpProject"
98   DOWNLOAD_COMMAND ""
99   INSTALL_COMMAND ""
100   PATCH_COMMAND ""
101   STEP_TARGETS install update
102   SVN_REPOSITORY ""
103   SVN_REVISION ""
104   SVN_USERNAME ""
105   SVN_PASSWORD ""
106   SVN_TRUST_CERT 1
107   TEST_COMMAND ""
108   TIMEOUT ""
109   URL ""
110   URL_MD5 ""
111   UPDATE_COMMAND ""
112 )
113 set_property(TARGET ${proj} PROPERTY FOLDER "")
114
115
116 # Local DIR:
117 #
118 if(can_build_tutorial_step5)
119   set(proj TutorialStep5-Local)
120   ExternalProject_Add(${proj}
121     URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
122     CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
123     CMAKE_ARGS -G ${CMAKE_GENERATOR} <SOURCE_DIR>
124     TEST_BEFORE_INSTALL 1
125     LOG_INSTALL 1
126   )
127   set_property(TARGET ${proj} PROPERTY FOLDER "Local")
128   ExternalProject_Get_Property(${proj} install_dir)
129   set(TutorialStep5_install_dir ${install_dir})
130
131   set(proj TutorialStep5-Local-TestAfterInstall)
132   ExternalProject_Add(${proj}
133     URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
134     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
135     TEST_AFTER_INSTALL 1
136     LOG_TEST 1
137   )
138   set_property(TARGET ${proj} PROPERTY FOLDER "Local")
139 endif()
140
141
142 # Local TAR:
143 #
144 set(proj TutorialStep1-LocalTAR)
145 ExternalProject_Add(${proj}
146   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar"
147   URL_MD5 a87c5b47c0201c09ddfe1d5738fdb1e3
148   LIST_SEPARATOR ::
149   PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
150   CMAKE_GENERATOR "${CMAKE_GENERATOR}"
151   CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
152              -DTEST_LIST:STRING=A::B::C
153   INSTALL_COMMAND ""
154   LOG_CONFIGURE 1
155 )
156 set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")
157
158 set(proj TutorialStep1-LocalNoDirTAR)
159 ExternalProject_Add(${proj}
160   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar"
161   URL_MD5 d09e3d370c5c908fa035c30939ee438e
162   LIST_SEPARATOR @@
163   CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
164              -DTEST_LIST:STRING=1@@2@@3
165   INSTALL_COMMAND ""
166 )
167 set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")
168 ExternalProject_Add_Step(${proj} mypatch
169   COMMAND ${CMAKE_COMMAND} -E echo "This is a custom external project step."
170   COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
171   WORKING_DIRECTORY <SOURCE_DIR>
172   DEPENDEES download
173   DEPENDERS configure
174   )
175
176
177 # Local TGZ:
178 #
179 set(proj TutorialStep1-LocalTGZ)
180 ExternalProject_Add(${proj}
181   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tgz"
182   URL_MD5 38c648e817339c356f6be00eeed79bd0
183   CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
184   INSTALL_COMMAND ""
185   LOG_BUILD 1
186 )
187 set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")
188
189 set(proj TutorialStep1-LocalNoDirTGZ)
190 ExternalProject_Add(${proj}
191   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tgz"
192   URL_HASH SHA256=496229e2a5ed620a37c385ad9406004a18026beab8b55dd2c4565d4b7f1d5383
193   CMAKE_GENERATOR "${CMAKE_GENERATOR}"
194   CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
195   INSTALL_COMMAND ""
196 )
197 set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")
198
199
200 # Local BZ2:
201 #
202 # (The bz2 tests are here just to verify that the bz2 decompression is executed
203 #  during a test suite run... The configure and build commands are set to
204 #  nothing to make the test quicker. To make this more complete, I should add
205 #  a diff between this and the TGZ source tree since that one does build...)
206 #
207 set(proj TutorialStep1-LocalBZ2)
208 ExternalProject_Add(${proj}
209   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar.bz2"
210   CONFIGURE_COMMAND ""
211   BUILD_COMMAND ""
212   INSTALL_COMMAND ""
213 )
214 set_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")
215
216 set(proj TutorialStep1-LocalNoDirBZ2)
217 ExternalProject_Add(${proj}
218   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar.bz2"
219   CONFIGURE_COMMAND ""
220   BUILD_COMMAND ""
221   INSTALL_COMMAND ""
222 )
223 set_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")
224
225
226 # Local ZIP:
227 #
228 # (The zip tests are here just to verify that the zip decompression is executed
229 #  during a test suite run... The configure and build commands are set to
230 #  nothing to make the test quicker. To make this more complete, I should add
231 #  a diff between this and the TGZ source tree since that one does build...)
232 #
233 set(proj TutorialStep1-LocalZIP)
234 ExternalProject_Add(${proj}
235   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.zip"
236   CONFIGURE_COMMAND ""
237   BUILD_COMMAND ""
238   INSTALL_COMMAND ""
239 )
240 set_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")
241
242 set(proj TutorialStep1-LocalNoDirZIP)
243 ExternalProject_Add(${proj}
244   URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.zip"
245   CONFIGURE_COMMAND ""
246   BUILD_COMMAND ""
247   INSTALL_COMMAND ""
248 )
249 set_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")
250
251
252 # CVS-based tests:
253 #
254 set(do_cvs_tests 0)
255
256 if(CVS_EXECUTABLE)
257   set(do_cvs_tests 1)
258 endif()
259
260 if(do_cvs_tests AND NOT UNIX)
261   if("${CVS_EXECUTABLE}" MATCHES "cygwin")
262     message(STATUS "No ExternalProject cvs tests with cygwin cvs.exe outside cygwin!")
263     set(do_cvs_tests 0)
264   endif()
265 endif()
266
267 if(do_cvs_tests)
268   # Unzip/untar the CVS repository in our source folder so that other
269   # projects below may use it to test CVS args of ExternalProject_Add
270   #
271   set(proj SetupLocalCVSRepository)
272   set(local_cvs_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/CVS")
273   ExternalProject_Add(${proj}
274     SOURCE_DIR ${local_cvs_repo}
275     URL ${CMAKE_CURRENT_SOURCE_DIR}/cvsrepo.tgz
276     URL_MD5 55fc85825ffdd9ed2597123c68b79f7e
277     BUILD_COMMAND ""
278     CONFIGURE_COMMAND "${CVS_EXECUTABLE}" --version
279     INSTALL_COMMAND ""
280   )
281   set_property(TARGET ${proj}
282     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
283
284   # The MSYS cvs tool interprets "c:/" as a "machine:" name for SSH.
285   # Detect the MSYS cvs and convert the repo path to an MSYS path.
286   if(WIN32)
287     if(EXISTS "${CVS_EXECUTABLE}")
288       file(STRINGS "${CVS_EXECUTABLE}" cvs_is_msys LIMIT_COUNT 1 REGEX "[Mm][Ss][Yy][Ss]")
289       if(cvs_is_msys)
290         message(STATUS "'${CVS_EXECUTABLE}' is from MSYS (contains '${cvs_is_msys}')")
291         string(REGEX REPLACE "^([A-Za-z]):" "/\\1" local_cvs_repo "${local_cvs_repo}")
292       endif()
293     endif()
294   endif()
295
296   # CVS by date stamp:
297   #
298   set(proj TutorialStep1-CVS-20090626)
299   ExternalProject_Add(${proj}
300     CVS_REPOSITORY "${local_cvs_repo}"
301     CVS_MODULE "TutorialStep1"
302     CVS_TAG "-D2009-06-26 16:50:00 UTC"
303     UPDATE_COMMAND ""
304     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
305     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
306     INSTALL_COMMAND ""
307     DEPENDS "SetupLocalCVSRepository"
308   )
309   set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
310
311   # CVS by tag:
312   #
313   set(proj TutorialStep1-CVS-testtag1)
314   ExternalProject_Add(${proj}
315     CVS_REPOSITORY "${local_cvs_repo}"
316     CVS_MODULE "TutorialStep1"
317     CVS_TAG -rtesttag1
318     UPDATE_COMMAND ""
319     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
320     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
321     INSTALL_COMMAND ""
322     DEPENDS "SetupLocalCVSRepository"
323   )
324   set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
325
326   # Live CVS / HEAD (no CVS_TAG):
327   #
328   set(proj TutorialStep1-CVS-HEAD)
329   ExternalProject_Add(${proj}
330     CVS_REPOSITORY "${local_cvs_repo}"
331     CVS_MODULE "TutorialStep1"
332     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
333     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
334     INSTALL_COMMAND ""
335     DEPENDS "SetupLocalCVSRepository"
336     DEPENDS "EmptyNoOpProject"
337     DEPENDS "TutorialStep1-LocalTAR"
338     DEPENDS "TutorialStep1-LocalNoDirTAR"
339     DEPENDS "TutorialStep1-LocalTGZ"
340     DEPENDS "TutorialStep1-LocalNoDirTGZ"
341     DEPENDS "TutorialStep1-CVS-20090626"
342     DEPENDS "TutorialStep1-CVS-testtag1"
343   )
344   set_property(TARGET ${proj} PROPERTY FOLDER "CVS")
345 endif()
346
347
348 # SVN-based tests:
349 #
350 set(do_svn_tests 0)
351
352 if(Subversion_SVN_EXECUTABLE)
353   set(do_svn_tests 1)
354 endif()
355
356 # Only do svn tests with svn >= version 1.2
357 #
358 if(do_svn_tests)
359   if(Subversion_VERSION_SVN VERSION_LESS 1.2)
360     message(STATUS "No ExternalProject svn tests with svn client less than version 1.2")
361     set(do_svn_tests 0)
362   endif()
363 endif()
364
365 # Only do svn tests in cygwin/cygwin or not-cygwin/not-cygwin arrangements:
366 #
367 if(do_svn_tests)
368   if(CMAKE_CURRENT_BINARY_DIR MATCHES "cygdrive/" AND
369      NOT "${Subversion_SVN_EXECUTABLE}" MATCHES "cygwin")
370     message(STATUS "No ExternalProject svn tests with non-cygwin svn client in a /cygdrive based build")
371     set(do_svn_tests 0)
372   endif()
373 endif()
374
375 if(do_svn_tests)
376   # Unzip/untar the SVN repository in our source folder so that other
377   # projects below may use it to test SVN args of ExternalProject_Add
378   #
379   set(proj SetupLocalSVNRepository)
380   set(local_svn_repo "${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/SVN")
381   set(local_svn_repo_url "file:///${local_svn_repo}/TutorialStep1")
382   ExternalProject_Add(${proj}
383     SOURCE_DIR ${local_svn_repo}
384     URL ${CMAKE_CURRENT_SOURCE_DIR}/svnrepo.tgz
385     URL_MD5 2f468be4ed1fa96377fca0cc830819c4
386     BUILD_COMMAND ""
387     CONFIGURE_COMMAND "${Subversion_SVN_EXECUTABLE}" --version
388     INSTALL_COMMAND ""
389   )
390   set_property(TARGET ${proj}
391     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
392
393   # SVN by date stamp:
394   #
395   set(proj TutorialStep1-SVN-20090626)
396   ExternalProject_Add(${proj}
397     SVN_REPOSITORY "${local_svn_repo_url}"
398     SVN_REVISION "-r{2009-06-26 16:50:00 +0000}"
399     UPDATE_COMMAND ""
400     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
401     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
402     INSTALL_COMMAND ""
403     DEPENDS "SetupLocalSVNRepository"
404   )
405   set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
406
407   # SVN by revision number:
408   #
409   set(proj TutorialStep1-SVN-r2)
410   ExternalProject_Add(${proj}
411     SVN_REPOSITORY "${local_svn_repo_url}"
412     SVN_REVISION "-r2"
413     UPDATE_COMMAND ""
414     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
415     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
416     INSTALL_COMMAND ""
417     DEPENDS "SetupLocalSVNRepository"
418   )
419   set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
420
421   # Live SVN / trunk (no SVN_REVISION):
422   #
423   set(proj TutorialStep1-SVN-trunk)
424   ExternalProject_Add(${proj}
425     SVN_REPOSITORY "${local_svn_repo_url}"
426     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
427     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
428     INSTALL_COMMAND ""
429     DEPENDS "SetupLocalSVNRepository"
430     LOG_DOWNLOAD 1
431   )
432   set_property(TARGET ${proj} PROPERTY FOLDER "SVN")
433 endif()
434
435
436 set(do_git_tests 0)
437
438 if(GIT_EXECUTABLE)
439   set(do_git_tests 1)
440
441   execute_process(
442     COMMAND "${GIT_EXECUTABLE}" --version
443     OUTPUT_VARIABLE ov
444     OUTPUT_STRIP_TRAILING_WHITESPACE
445     )
446   string(REGEX REPLACE "^git version (.+)$" "\\1" git_version "${ov}")
447   message(STATUS "git_version='${git_version}'")
448
449   if(git_version VERSION_LESS 1.6.5)
450     message(STATUS "No ExternalProject git tests with git client less than version 1.6.5")
451     set(do_git_tests 0)
452   endif()
453 endif()
454
455
456 if(do_git_tests)
457   set(local_git_repo "../../LocalRepositories/GIT")
458
459   # Unzip/untar the git repository in our source folder so that other
460   # projects below may use it to test git args of ExternalProject_Add
461   #
462   set(proj SetupLocalGITRepository)
463   ExternalProject_Add(${proj}
464     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT
465     URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz
466     BUILD_COMMAND ""
467     CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
468     INSTALL_COMMAND ""
469   )
470   set_property(TARGET ${proj}
471     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
472
473   # git by commit id:
474   #
475   set(proj TutorialStep1-GIT-byhash)
476   ExternalProject_Add(${proj}
477     GIT_REPOSITORY "${local_git_repo}"
478     GIT_TAG d1970730310fe8bc07e73f15dc570071f9f9654a
479     UPDATE_COMMAND ""
480     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
481     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
482     INSTALL_COMMAND ""
483     DEPENDS "SetupLocalGITRepository"
484   )
485   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
486
487   # git by explicit branch/tag name:
488   #
489   set(proj TutorialStep1-GIT-bytag)
490   ExternalProject_Add(${proj}
491     GIT_REPOSITORY "${local_git_repo}"
492     GIT_TAG "origin/master"
493     UPDATE_COMMAND ""
494     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
495     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
496     INSTALL_COMMAND ""
497     DEPENDS "SetupLocalGITRepository"
498   )
499   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
500
501   # Live git / master (no GIT_TAG):
502   #
503   set(proj TutorialStep1-GIT-master)
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     INSTALL_COMMAND ""
509     DEPENDS "SetupLocalGITRepository"
510     LOG_UPDATE 1
511   )
512   set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
513 endif()
514
515 set(do_hg_tests 0)
516
517 if(HG_EXECUTABLE)
518   set(do_hg_tests 1)
519 endif()
520
521 if(do_hg_tests)
522   set(local_hg_repo "../../LocalRepositories/HG")
523
524   # Unzip/untar the hg repository in our source folder so that other
525   # projects below may use it to test hg args of ExternalProject_Add
526   #
527   set(proj SetupLocalHGRepository)
528   ExternalProject_Add(${proj}
529     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/HG
530     URL ${CMAKE_CURRENT_SOURCE_DIR}/hgrepo.tgz
531     BUILD_COMMAND ""
532     CONFIGURE_COMMAND "${HG_EXECUTABLE}" --version
533     INSTALL_COMMAND ""
534   )
535   set_property(TARGET ${proj}
536     PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
537
538
539   # hg by commit id:
540   #
541   set(proj TutorialStep1-HG-byhash)
542   ExternalProject_Add(${proj}
543     HG_REPOSITORY "${local_hg_repo}"
544     HG_TAG dd2ce38a6b8a
545     UPDATE_COMMAND ""
546     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
547     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
548     INSTALL_COMMAND ""
549     DEPENDS "SetupLocalHGRepository"
550   )
551   set_property(TARGET ${proj} PROPERTY FOLDER "HG")
552
553   # hg by explicit branch/tag name:
554   #
555   set(proj TutorialStep1-HG-bytag)
556   ExternalProject_Add(${proj}
557     HG_REPOSITORY "${local_hg_repo}"
558     HG_TAG "default"
559     UPDATE_COMMAND ""
560     CMAKE_GENERATOR "${CMAKE_GENERATOR}"
561     CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
562     INSTALL_COMMAND ""
563     DEPENDS "SetupLocalHGRepository"
564   )
565   set_property(TARGET ${proj} PROPERTY FOLDER "HG")
566
567   # Live hg / tip (no HG_TAG):
568   #
569   # Mercurial 2.1 does not distinguish an empty pull from a failed pull,
570   # so do not run the test with that version.
571   if(NOT "${HG_VERSION_STRING}" STREQUAL "2.1")
572     set(proj TutorialStep1-HG-tip)
573     ExternalProject_Add(${proj}
574       HG_REPOSITORY "${local_hg_repo}"
575       CMAKE_GENERATOR "${CMAKE_GENERATOR}"
576       CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
577       INSTALL_COMMAND ""
578       DEPENDS "SetupLocalHGRepository"
579       LOG_UPDATE 1
580     )
581     set_property(TARGET ${proj} PROPERTY FOLDER "HG")
582   endif()
583 endif()
584
585
586 # Test the testable built/installed products:
587 #
588 enable_testing()
589
590
591 # Do at least a smoke test of a built executable from each
592 # project's build directory...
593 #
594 # BuildTree tests:
595 #
596 if(can_build_tutorial_step5)
597   add_test(TutorialStep5-Local-BuildTreeTest
598     "${binary_base}/TutorialStep5-Local/Tutorial" 42)
599   set_property(TEST TutorialStep5-Local-BuildTreeTest
600     APPEND PROPERTY LABELS Step5 BuildTree)
601 endif()
602
603 add_test(TutorialStep1-LocalTAR-BuildTreeTest
604   "${binary_base}/TutorialStep1-LocalTAR/EP-Tutorial" 36)
605 set_property(TEST TutorialStep1-LocalTAR-BuildTreeTest
606   APPEND PROPERTY LABELS TAR)
607
608 add_test(TutorialStep1-LocalNoDirTAR-BuildTreeTest
609   "${binary_base}/TutorialStep1-LocalNoDirTAR/EP-Tutorial" 25)
610
611 add_test(TutorialStep1-LocalTGZ-BuildTreeTest
612   "${binary_base}/TutorialStep1-LocalTGZ/Tutorial" 16)
613 set_property(TEST TutorialStep1-LocalTGZ-BuildTreeTest
614   APPEND PROPERTY LABELS TGZ)
615
616 add_test(TutorialStep1-LocalNoDirTGZ-BuildTreeTest
617   "${binary_base}/TutorialStep1-LocalNoDirTGZ/Tutorial" 9)
618
619 if(do_cvs_tests)
620   add_test(TutorialStep1-CVS-20090626-BuildTreeTest
621     "${binary_base}/TutorialStep1-CVS-20090626/Tutorial" 4)
622
623   add_test(TutorialStep1-CVS-testtag1-BuildTreeTest
624     "${binary_base}/TutorialStep1-CVS-testtag1/Tutorial" 64)
625
626   add_test(TutorialStep1-CVS-HEAD-BuildTreeTest
627     "${binary_base}/TutorialStep1-CVS-HEAD/Tutorial" 81)
628 endif()
629
630 if(do_svn_tests)
631   add_test(TutorialStep1-SVN-20090626-BuildTreeTest
632     "${binary_base}/TutorialStep1-SVN-20090626/Tutorial" 100)
633
634   add_test(TutorialStep1-SVN-r2-BuildTreeTest
635     "${binary_base}/TutorialStep1-SVN-r2/Tutorial" 99)
636
637   add_test(TutorialStep1-SVN-trunk-BuildTreeTest
638     "${binary_base}/TutorialStep1-SVN-trunk/Tutorial" 98)
639 endif()
640
641
642 # InstallTree tests:
643 #
644 if(can_build_tutorial_step5)
645   add_test(TutorialStep5-InstallTreeTest
646     "${TutorialStep5_install_dir}/bin/Tutorial" 49)
647   set_property(TEST TutorialStep5-InstallTreeTest
648     APPEND PROPERTY LABELS Step5 InstallTree)
649 endif()
650
651
652 message(STATUS "can_build_tutorial_step5='${can_build_tutorial_step5}'")
653 message(STATUS "do_cvs_tests='${do_cvs_tests}'")
654 message(STATUS "do_svn_tests='${do_svn_tests}'")
655 message(STATUS "do_git_tests='${do_git_tests}' GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
656 message(STATUS "do_hg_tests='${do_hg_tests}'   HG_EXECUTABLE='${HG_EXECUTABLE}'")