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