summaryrefslogtreecommitdiffstats
path: root/Tests/ExternalProjectLocal/CMakeLists.txt
blob: cbbb555bab0d34d8288020b6d7e2aef906d15539 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
cmake_minimum_required(VERSION 2.8)
project(ExternalProjectLocalTest NONE)

include(ExternalProject)

# Test ExternalProject with local projects

option(ExternalProjectTest_USE_FOLDERS "Enable folder grouping in IDEs." ON)
if(ExternalProjectTest_USE_FOLDERS)
  set_property(GLOBAL PROPERTY USE_FOLDERS ON)
else()
  set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
endif()

set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
  "CMakePredefinedTargets-in-ExternalProjectTest")

set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
set(binary_base "${base}/Build")
set_property(DIRECTORY PROPERTY EP_BASE ${base})
set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)

if(NOT DEFINED can_build_tutorial_step5)
  set(can_build_tutorial_step5 1)

  # Tutorial Step5 cannot build correctly using Visual Studio 6
  # on Windows 98 if the path of its build tree exceeds 72
  # characters in length... So don't attempt to build it
  # in a long path on Win98:
  #
  if(CMAKE_SYSTEM STREQUAL "Windows-4.10")
    string(LENGTH "${binary_base}/TutorialStep5-Local" n)
    if(n GREATER 72)
      set(can_build_tutorial_step5 0)
    endif()
  endif()

  # The ExternalProject builds of Tutorial Step5 cannot be built
  # correctly 2nd and later times in an in-source build...
  # (because the CMakeCache.txt from the real in-source build of
  # the Tests/Tutorial/Step5 directory gets copied when we do
  # the "source directory copy" step... but it still refers to
  # its original path which yields a configure error.) So:
  #
  if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
    set(can_build_tutorial_step5 0)
  endif()
endif()

# Local DIR:
#
if(can_build_tutorial_step5)
  set(proj TutorialStep5-Local)
  ExternalProject_Add(${proj}
    URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
    CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
    CMAKE_ARGS -G ${CMAKE_GENERATOR} <SOURCE_DIR>
    TEST_BEFORE_INSTALL 1
    LOG_INSTALL 1
  )
  set_property(TARGET ${proj} PROPERTY FOLDER "Local")
  ExternalProject_Get_Property(${proj} install_dir)
  set(TutorialStep5_install_dir ${install_dir})

  set(proj TutorialStep5-Local-TestAfterInstall)
  ExternalProject_Add(${proj}
    URL "${CMAKE_CURRENT_SOURCE_DIR}/../Tutorial/Step5"
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
    CMAKE_CACHE_DEFAULT_ARGS -DUSE_MYMATH:BOOL=OFF
    TEST_AFTER_INSTALL 1
    LOG_TEST 1
  )
  set_property(TARGET ${proj} PROPERTY FOLDER "Local")
endif()


# Local TAR:
#
set(proj TutorialStep1-LocalTAR)
ExternalProject_Add(${proj}
  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tar"
  URL_MD5 a87c5b47c0201c09ddfe1d5738fdb1e3
  LIST_SEPARATOR ::
  PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
             -DTEST_LIST:STRING=A::B::C
  INSTALL_COMMAND ""
  LOG_CONFIGURE 1
)
set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")

set(proj TutorialStep1-LocalNoDirTAR)
ExternalProject_Add(${proj}
  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar"
  URL_MD5 d09e3d370c5c908fa035c30939ee438e
  LIST_SEPARATOR @@
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
             -DTEST_LIST:STRING=1@@2@@3
  INSTALL_COMMAND ""
)
set_property(TARGET ${proj} PROPERTY FOLDER "Local/TAR")
ExternalProject_Add_Step(${proj} mypatch
  COMMAND ${CMAKE_COMMAND} -E echo "This is a custom external project step."
  COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/Step1Patch.cmake
  WORKING_DIRECTORY <SOURCE_DIR>
  DEPENDEES download
  DEPENDERS configure
  )


# Local TGZ:
#
set(proj TutorialStep1-LocalTGZ)
ExternalProject_Add(${proj}
  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1.tgz"
  URL_MD5 38c648e817339c356f6be00eeed79bd0
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -G ${CMAKE_GENERATOR} <SOURCE_DIR>
  INSTALL_COMMAND ""
  LOG_BUILD 1
)
set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")

set(proj TutorialStep1-LocalNoDirTGZ)
ExternalProject_Add(${proj}
  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tgz"
  URL_HASH SHA256=496229e2a5ed620a37c385ad9406004a18026beab8b55dd2c4565d4b7f1d5383
  CMAKE_GENERATOR "${CMAKE_GENERATOR}"
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
  INSTALL_COMMAND ""
)
set_property(TARGET ${proj} PROPERTY FOLDER "Local/TGZ")


# 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_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")

set(proj TutorialStep1-LocalNoDirBZ2)
ExternalProject_Add(${proj}
  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.tar.bz2"
  CONFIGURE_COMMAND ""
  BUILD_COMMAND ""
  INSTALL_COMMAND ""
)
set_property(TARGET ${proj} PROPERTY FOLDER "Local/BZ2")


# 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_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")

set(proj TutorialStep1-LocalNoDirZIP)
ExternalProject_Add(${proj}
  URL "${CMAKE_CURRENT_SOURCE_DIR}/Step1NoDir.zip"
  CONFIGURE_COMMAND ""
  BUILD_COMMAND ""
  INSTALL_COMMAND ""
)
set_property(TARGET ${proj} PROPERTY FOLDER "Local/ZIP")


# Test the testable built/installed products:
#
enable_testing()


# Do at least a smoke test of a built executable from each
# project's build directory...
#
# BuildTree tests:
#
if(can_build_tutorial_step5)
  add_test(TutorialStep5-Local-BuildTreeTest
    "${binary_base}/TutorialStep5-Local/Tutorial" 42)
  set_property(TEST TutorialStep5-Local-BuildTreeTest
    APPEND PROPERTY LABELS Step5 BuildTree)
endif()

add_test(TutorialStep1-LocalTAR-BuildTreeTest
  "${binary_base}/TutorialStep1-LocalTAR/EP-Tutorial" 36)
set_property(TEST TutorialStep1-LocalTAR-BuildTreeTest
  APPEND PROPERTY LABELS TAR)

add_test(TutorialStep1-LocalNoDirTAR-BuildTreeTest
  "${binary_base}/TutorialStep1-LocalNoDirTAR/EP-Tutorial" 25)

add_test(TutorialStep1-LocalTGZ-BuildTreeTest
  "${binary_base}/TutorialStep1-LocalTGZ/Tutorial" 16)
set_property(TEST TutorialStep1-LocalTGZ-BuildTreeTest
  APPEND PROPERTY LABELS TGZ)

add_test(TutorialStep1-LocalNoDirTGZ-BuildTreeTest
  "${binary_base}/TutorialStep1-LocalNoDirTGZ/Tutorial" 9)

# InstallTree tests:
#
if(can_build_tutorial_step5)
  add_test(TutorialStep5-InstallTreeTest
    "${TutorialStep5_install_dir}/bin/Tutorial" 49)
  set_property(TEST TutorialStep5-InstallTreeTest
    APPEND PROPERTY LABELS Step5 InstallTree)
endif()


message(STATUS "can_build_tutorial_step5='${can_build_tutorial_step5}'")