Fossil SCM

Build Fossil via ExternalProject

ashepilko 2018-08-02 09:24 cmake-ide
Commit cddc7bb0e4fe905deaf93d1a0222000146a5a2c8f271e09145687461df4150ae
1 file changed +354 -215
+354 -215
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -1,215 +1,354 @@
1
-PROJECT(Fossil C)
2
-
3
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
4
-
5
-# Build options.
6
-OPTION(FOSSIL_BUILD_STATIC "Build Fossil static" TRUE)
7
-OPTION(FOSSIL_ENABLE_SSL "Enable SSL support" FALSE)
8
-
9
-# Include some macros.
10
-INCLUDE(CheckIncludeFile)
11
-
12
-# Source files which gets processed by the translate program.
13
-SET(TRANS_SRCS
14
- add allrepo attach bag bisect blob branch browse captcha cgi checkin
15
- checkout clearsign clone comformat configure content db delta deltacmd
16
- descendants diff diffcmd doc encode event export file finfo glob graph gzip
17
- http http_socket http_transport import info leaf login main manifest md5
18
- merge merge3 name path pivot popen pqueue printf rebuild report rss schema
19
- search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main
20
- timeline tkt tktsetup undo update url user verify vfile wiki wikiformat
21
- winhttp xfer zip http_ssl
22
-)
23
-
24
-# Additional source files.
25
-SET(OTHER_SRCS
26
- src/sqlite3.c src/shell.c src/th.c src/th_lang.c
27
-)
28
-
29
-# Add the resource file on windows to the source files.
30
-IF(WIN32)
31
- SET(OTHER_SRCS ${OTHER_SRCS} win/fossil.rc)
32
-ENDIF(WIN32)
33
-
34
-# Set compile definitions for src/shell.c.
35
-SET(SHELL_COMP_DEFS
36
- main=sqlite3_shell
37
- SQLITE_OMIT_LOAD_EXTENSION=1
38
-)
39
-SET_SOURCE_FILES_PROPERTIES(src/shell.c
40
- PROPERTIES COMPILE_DEFINITIONS "${SHELL_COMP_DEFS}"
41
-)
42
-
43
-# Set compile definitions for src/sqlite.c.
44
-SET(SQLITE3_COMP_DEFS
45
- SQLITE_OMIT_LOAD_EXTENSION=1
46
- SQLITE_THREADSAFE=0
47
- SQLITE_DEFAULT_FILE_FORMAT=4
48
- SQLITE_ENABLE_STAT2
49
- SQLITE_ENABLE_LOCKING_STYLE=0
50
- localtime=fossil_localtime
51
-)
52
-SET_SOURCE_FILES_PROPERTIES(src/sqlite3.c
53
- PROPERTIES COMPILE_DEFINITIONS "${SQLITE3_COMP_DEFS}"
54
-)
55
-
56
-# Build the makeheaders program.
57
-ADD_EXECUTABLE(makeheaders src/makeheaders.c)
58
-GET_TARGET_PROPERTY(MAKEHEADERS_LOC makeheaders LOCATION)
59
-
60
-# Build the translate program.
61
-ADD_EXECUTABLE(translate src/translate.c)
62
-GET_TARGET_PROPERTY(TRANSLATE_LOC translate LOCATION)
63
-
64
-# Build the mkindex program.
65
-ADD_EXECUTABLE(mkindex src/mkindex.c)
66
-GET_TARGET_PROPERTY(MKINDEX_LOC mkindex LOCATION)
67
-
68
-# Build the version program.
69
-ADD_EXECUTABLE(version win/version.c)
70
-GET_TARGET_PROPERTY(VERSION_LOC version LOCATION)
71
-
72
-# Custom command to build the VERSION.h include file.
73
-ADD_CUSTOM_COMMAND(
74
- OUTPUT ${PROJECT_BINARY_DIR}/VERSION.h
75
- DEPENDS version
76
- ${PROJECT_SOURCE_DIR}/manifest.uuid
77
- ${PROJECT_SOURCE_DIR}/manifest
78
- COMMAND ${VERSION_LOC}
79
- ARGS ${PROJECT_SOURCE_DIR}/manifest.uuid
80
- ${PROJECT_SOURCE_DIR}/manifest
81
- > ${PROJECT_BINARY_DIR}/VERSION.h
82
- COMMENT "Generating VERSION.h ..."
83
-)
84
-
85
-# Custom commands to build the translated sources.
86
-FOREACH(SRC ${TRANS_SRCS})
87
-
88
- ADD_CUSTOM_COMMAND(
89
- OUTPUT ${PROJECT_BINARY_DIR}/${SRC}_.c
90
- DEPENDS translate
91
- ${PROJECT_SOURCE_DIR}/src/${SRC}.c
92
- COMMAND ${TRANSLATE_LOC}
93
- ARGS ${PROJECT_SOURCE_DIR}/src/${SRC}.c
94
- > ${PROJECT_BINARY_DIR}/${SRC}_.c
95
- COMMENT "Translating src/${SRC}.c ..."
96
- )
97
-
98
- # Build a list of all the results.
99
- SET(TRANS_SRC ${TRANS_SRC} ${PROJECT_BINARY_DIR}/${SRC}_.c)
100
-
101
-ENDFOREACH(SRC)
102
-
103
-# Custom command to build page_index.h.
104
-ADD_CUSTOM_COMMAND(
105
- OUTPUT ${PROJECT_BINARY_DIR}/page_index.h
106
- DEPENDS mkindex
107
- ${TRANS_SRC}
108
- COMMAND ${MKINDEX_LOC}
109
- ARGS ${TRANS_SRC}
110
- > ${PROJECT_BINARY_DIR}/page_index.h
111
- COMMENT "Generating page_index.h ..."
112
-)
113
-ADD_CUSTOM_TARGET(page_index DEPENDS ${PROJECT_BINARY_DIR}/page_index.h)
114
-
115
-# Create an input file for the makeheaders program.
116
-FILE(WRITE ${PROJECT_BINARY_DIR}/mkhdr.dat
117
-"# Warning: this file is automatically generated by CMake.
118
-${PROJECT_SOURCE_DIR}/src/sqlite3.h
119
-${PROJECT_SOURCE_DIR}/src/th.h
120
-${PROJECT_BINARY_DIR}/VERSION.h\n"
121
-)
122
-FOREACH(SRC ${TRANS_SRCS})
123
- FILE(APPEND ${PROJECT_BINARY_DIR}/mkhdr.dat
124
- "${PROJECT_BINARY_DIR}/${SRC}_.c:${PROJECT_BINARY_DIR}/${SRC}.h\n"
125
- )
126
- # Build a list of all the generated header files.
127
- SET(GEN_HDRS ${GEN_HDRS} ${PROJECT_BINARY_DIR}/${SRC}.h)
128
-ENDFOREACH(SRC)
129
-
130
-# Custom commands to build the header files.
131
-ADD_CUSTOM_COMMAND(
132
- OUTPUT ${PROJECT_BINARY_DIR}/headers ${GEN_HDRS}
133
- DEPENDS makeheaders
134
- ${PROJECT_SOURCE_DIR}/src/sqlite3.h
135
- ${PROJECT_SOURCE_DIR}/src/th.h
136
- ${PROJECT_BINARY_DIR}/VERSION.h
137
- ${TRANS_SRC}
138
- COMMAND ${MAKEHEADERS_LOC}
139
- ARGS -f mkhdr.dat
140
- COMMAND ${CMAKE_COMMAND}
141
- ARGS -E echo Headers generated > ${PROJECT_BINARY_DIR}/headers
142
- COMMENT "Generating header files..."
143
-)
144
-ADD_CUSTOM_TARGET(hdr_files DEPENDS ${PROJECT_BINARY_DIR}/headers)
145
-
146
-# Make sure that the CMake output directory and the source file directory
147
-# gets searched for include files.
148
-SET(FOSSIL_INCL_DIRS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src)
149
-
150
-# Disable internationalization.
151
-SET(FOSSIL_COMP_DEFS FOSSIL_I18N=0)
152
-
153
-# Fossil requires the Zlib library.
154
-CHECK_INCLUDE_FILE(zlib.h ZLIB_INTRINSIC)
155
-IF(ZLIB_INTRINSIC)
156
- SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} z)
157
-ELSE(ZLIB_INTRINSIC)
158
- FIND_PACKAGE(ZLIB REQUIRED)
159
- IF(ZLIB_FOUND)
160
- SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ${ZLIB_LIBRARIES})
161
- SET(FOSSIL_INCL_DIRS ${FOSSIL_INCL_DIRS} ${ZLIB_INCLUDE_DIRS})
162
- ENDIF(ZLIB_FOUND)
163
-ENDIF(ZLIB_INTRINSIC)
164
-
165
-IF(FOSSIL_ENABLE_SSL)
166
- CHECK_INCLUDE_FILE(openssl/ssl.h OPENSSL_INTRINSIC)
167
- IF(OPENSSL_INTRINSIC)
168
- SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ssl crypto)
169
- ELSE(OPENSSL_INTRINSIC)
170
- FIND_PACKAGE(OpenSSL REQUIRED)
171
- IF(OPENSSL_FOUND)
172
- SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ${OPENSSL_LIBRARIES})
173
- SET(FOSSIL_INCL_DIRS ${FOSSIL_INCL_DIRS} ${OPENSSL_INCLUDE_DIR})
174
- ENDIF(OPENSSL_FOUND)
175
- ENDIF(OPENSSL_INTRINSIC)
176
- SET(FOSSIL_COMP_DEFS ${FOSSIL_COMP_DEFS} FOSSIL_ENABLE_SSL=1)
177
-ENDIF(FOSSIL_ENABLE_SSL)
178
-
179
-# On Windows, Fossil requires the socket library.
180
-IF(WIN32)
181
- SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ws2_32)
182
-ENDIF(WIN32)
183
-
184
-# Set the include diretories.
185
-INCLUDE_DIRECTORIES(BEFORE ${FOSSIL_INCL_DIRS})
186
-
187
-# Build the Fossil program.
188
-ADD_EXECUTABLE(fossil ${TRANS_SRC} ${OTHER_SRCS})
189
-
190
-# Fossil depends on the generated header files.
191
-ADD_DEPENDENCIES(fossil hdr_files page_index)
192
-
193
-# Set flags for building fossil static.
194
-IF(FOSSIL_BUILD_STATIC)
195
- SET(FOSSIL_LINK_FLAGS ${FOSSIL_LINK_FLAGS} -static)
196
-ENDIF(FOSSIL_BUILD_STATIC)
197
-
198
-# Set the additional link flags for the fossil target.
199
-IF(DEFINED FOSSIL_LINK_FLAGS)
200
- SET_TARGET_PROPERTIES(fossil PROPERTIES
201
- LINK_FLAGS ${FOSSIL_LINK_FLAGS}
202
- )
203
-ENDIF(DEFINED FOSSIL_LINK_FLAGS)
204
-
205
-# Set the compile definitions for the fossil target.
206
-IF(DEFINED FOSSIL_COMP_DEFS)
207
- SET_TARGET_PROPERTIES(fossil PROPERTIES
208
- COMPILE_DEFINITIONS "${FOSSIL_COMP_DEFS}"
209
- )
210
-ENDIF(DEFINED FOSSIL_COMP_DEFS)
211
-
212
-# Set the additional link libraries for the fossil target.
213
-IF(DEFINED FOSSIL_LINK_LIBS)
214
- TARGET_LINK_LIBRARIES(fossil ${FOSSIL_LINK_LIBS})
215
-ENDIF(DEFINED FOSSIL_LINK_LIBS)
1
+cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
2
+
3
+project(fossil C)
4
+include(ExternalProject)
5
+
6
+set(CMAKE_VERBOSE_MAKEFILE ON)
7
+
8
+
9
+set(default_build_type "RelWithDebInfo")
10
+
11
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
12
+ message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
13
+ set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
14
+ STRING "Choose the type of build." FORCE)
15
+ # Set the possible values of build type for cmake-gui
16
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
17
+ "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
18
+else()
19
+ message(STATUS "'${CMAKE_BUILD_TYPE}' build type")
20
+endif()
21
+
22
+
23
+## VARIABLES ---------------------------------------------------------------
24
+## Additional parameters can be passed in the following variables which can
25
+## be defined on cmake command line (or in cache).
26
+##
27
+## The parameters correspond to the ones used in the external fossil build
28
+## process (as specified at configure, make, and make test)
29
+##
30
+if(FOSSIL_CONFIGURE)
31
+ message(STATUS "Fossil build configuration '${FOSSIL_CONFIGURE}'")
32
+ set(configure_FLAGS ${FOSSIL_CONFIGURE})
33
+endif()
34
+
35
+if(FOSSIL_BUILD)
36
+ message(STATUS "Fossil build variables '${FOSSIL_BUILD}'")
37
+ set(build_FLAGS ${FOSSIL_BUILD})
38
+endif()
39
+
40
+if(FOSSIL_TEST)
41
+ message(STATUS "Fossil test configuration '${FOSSIL_TEST}'")
42
+ set(test_FLAGS ${FOSSIL_TEST})
43
+endif()
44
+
45
+
46
+add_executable(fossil-exe IMPORTED)
47
+
48
+set(fossil_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR})
49
+set(fossil_EXE_DIR "${fossil_INSTALL_DIR}/bin")
50
+set(fossil_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
51
+set(fossil_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/fossil)
52
+if(MSVC)
53
+ set(fossil_BUILD_DIR ${fossil_BINARY_DIR}/msvcbld)
54
+else(MSVC)
55
+ set(fossil_BUILD_DIR ${fossil_BINARY_DIR}/bld)
56
+endif(MSVC)
57
+set(fossil_TEST_DIR "${fossil_BINARY_DIR}/test")
58
+
59
+set(EXE ${CMAKE_EXECUTABLE_SUFFIX})
60
+set(fossil_EXE "${fossil_EXE_DIR}/fossil${EXE}")
61
+file(TO_NATIVE_PATH "${fossil_EXE}" fossil_EXE)
62
+set_target_properties(fossil-exe PROPERTIES
63
+ IMPORTED_LOCATION "${fossil_EXE}"
64
+)
65
+
66
+## SETUP IDE ---------------------------------------------------------------
67
+## Setup Project Sources View
68
+## Add more source files for convenience; otherwise only actual dependencies
69
+## would appear in the Projects tree pane.
70
+##
71
+file(GLOB_RECURSE project_sources_DIRS
72
+ #"autosetup/*" #may be useful when debuging configure
73
+ "skins/*"
74
+ "src/*"
75
+ "test/*.test" "test/tester.tcl"
76
+ "win/*"
77
+ "www/*.wiki" "www/*.md" "www/*.html"
78
+)
79
+
80
+file(GLOB project_sources_FILES
81
+ "auto.def"
82
+ "configure"
83
+
84
+ "fossil.1"
85
+ "manifest.uuid"
86
+ "VERSION"
87
+
88
+ "${fossil_BINARY_DIR}/autoconfig.h"
89
+ "${fossil_BINARY_DIR}/Makefile*"
90
+
91
+ "${fossil_BUILD_DIR}/*.[h]"
92
+ #"${fossil_BUILD_DIR}/main_.c"
93
+)
94
+
95
+include_directories(
96
+ "${fossil_BUILD_DIR}"
97
+ "${PROJECT_SOURCE_DIR}/src"
98
+ "${PROJECT_SOURCE_DIR}"
99
+)
100
+
101
+add_custom_target(project-sources ALL
102
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
103
+ SOURCES ${project_sources_DIRS} ${project_sources_FILES}
104
+)
105
+
106
+## CONFIGURE ---------------------------------------------------------------
107
+##
108
+set(fossil_configure_FLAGS "")
109
+if(configure_FLAGS)
110
+ set(fossil_configure_FLAGS ${configure_FLAGS})
111
+endif()
112
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
113
+ if(MSVC)
114
+ if(NOT "${fossil_configure_FLAGS}" MATCHES "FOSSIL_DEBUG")
115
+ set(fossil_configure_FLAGS "FOSSIL_DEBUG=1" ${fossil_configure_FLAGS})
116
+ endif()
117
+ else(MSVC)
118
+ if(NOT "${fossil_configure_FLAGS}" MATCHES "--fossil-debug")
119
+ set(fossil_configure_FLAGS "--fossil-debug" ${fossil_configure_FLAGS})
120
+ endif()
121
+ endif(MSVC)
122
+endif()
123
+
124
+## BUILD ---------------------------------------------------------------
125
+##
126
+# Build fossil as an external project; just pass the options for configure and
127
+# build stages. This way we rely upon the existing build scripts.
128
+#
129
+# Install the resulting binary into the local binary dir, such that the fossil
130
+# binary can be located at the fixed location on target platform.
131
+#
132
+# Then we define CMake install targets to copy the binaries from the local
133
+# binary dir.
134
+#
135
+
136
+set(fossil_build_FLAGS "")
137
+if(build_FLAGS)
138
+ set(fossil_build_FLAGS ${build_FLAGS})
139
+endif()
140
+
141
+separate_arguments(fossil_configure_FLAGS)
142
+separate_arguments(fossil_build_FLAGS)
143
+
144
+if(MSVC)
145
+ file(RELATIVE_PATH fossil_DESTDIR "${fossil_BINARY_DIR}" "${fossil_EXE_DIR}")
146
+ file(TO_NATIVE_PATH "${fossil_DESTDIR}" fossil_DESTDIR)
147
+
148
+ ExternalProject_Add(fossil
149
+ PREFIX fossil
150
+ SOURCE_DIR "${fossil_SOURCE_DIR}"
151
+ CONFIGURE_COMMAND ""
152
+ BINARY_DIR "${fossil_BINARY_DIR}"
153
+ BUILD_COMMAND "${fossil_SOURCE_DIR}/win/buildmsvc.bat" all install
154
+ ${fossil_configure_FLAGS}
155
+ DESTDIR=${fossil_DESTDIR}
156
+ ${fossil_build_FLAGS}
157
+ VERBATIM
158
+ INSTALL_COMMAND ""
159
+ STEP_TARGETS configure build install
160
+ )
161
+
162
+else(MSVC)
163
+
164
+ file(RELATIVE_PATH fossil_DESTDIR "${fossil_BINARY_DIR}" "${fossil_INSTALL_DIR}")
165
+
166
+ ExternalProject_Add(fossil
167
+ PREFIX fossil
168
+ SOURCE_DIR "${fossil_SOURCE_DIR}"
169
+ CONFIGURE_COMMAND "${fossil_SOURCE_DIR}/configure"
170
+ --prefix=/ ${fossil_configure_FLAGS}
171
+ VERBATIM
172
+ BINARY_DIR "${fossil_BINARY_DIR}"
173
+ BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}"
174
+ ${fossil_build_FLAGS}
175
+ VERBATIM
176
+ INSTALL_COMMAND "${CMAKE_MAKE_PROGRAM}" install
177
+ DESTDIR=${fossil_DESTDIR}
178
+ STEP_TARGETS configure build install
179
+ )
180
+
181
+endif(MSVC)
182
+
183
+set_property(DIRECTORY APPEND PROPERTY
184
+ ADDITIONAL_MAKE_CLEAN_FILES "${fossil_BUILD_DIR}"
185
+ "${fossil_EXE_DIR}"
186
+)
187
+
188
+ExternalProject_Add_Step(fossil forcebuild
189
+ COMMAND "${CMAKE_COMMAND}" -E echo "Build fossil"
190
+ DEPENDEES configure
191
+ DEPENDERS build
192
+ ALWAYS 1
193
+)
194
+
195
+add_dependencies(fossil-exe fossil)
196
+
197
+
198
+## We need an executable target, so that IDEs can infer what to run/debug.
199
+## Define a substitute executable target to stand in for the actual fossil binary
200
+## that we just built via ExternalProject_Add.
201
+## Keep the actual fossil binary, clean up the built substitute artifacts.
202
+
203
+get_filename_component(app_NAME "${fossil_EXE}" NAME_WE)
204
+get_filename_component(app_DIR "${fossil_EXE}" DIRECTORY)
205
+file(TO_NATIVE_PATH "${app_DIR}" app_DIR)
206
+
207
+file(WRITE "${CMAKE_BINARY_DIR}/app.c" "int main(){ return 0; }\n")
208
+add_executable(app app.c)
209
+
210
+set_target_properties(app PROPERTIES
211
+ OUTPUT_NAME "${app_NAME}"
212
+ RUNTIME_OUTPUT_DIRECTORY "${app_DIR}"
213
+)
214
+if(MSVC)
215
+ set_target_properties(app PROPERTIES
216
+ PDB_NAME "${app_NAME}"
217
+ LINK_FLAGS "/INCREMENTAL:NO /MANIFEST:NO"
218
+ )
219
+endif()
220
+add_custom_command(TARGET app PRE_LINK
221
+ COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
222
+ "${CMAKE_COMMAND}" -E rename "$<TARGET_FILE_NAME:app>"
223
+ "$<TARGET_FILE_NAME:app>-imported"
224
+)
225
+if(MSVC)
226
+ add_custom_command(TARGET app PRE_LINK
227
+ COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
228
+ "${CMAKE_COMMAND}" -E rename "$<TARGET_PROPERTY:app,PDB_NAME>.pdb"
229
+ "$<TARGET_PROPERTY:app,PDB_NAME>.pdb-imported"
230
+ )
231
+endif()
232
+add_custom_command(TARGET app POST_BUILD
233
+ COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
234
+ "${CMAKE_COMMAND}" -E remove "$<TARGET_FILE_NAME:app>"
235
+ COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
236
+ "${CMAKE_COMMAND}" -E rename "$<TARGET_FILE_NAME:app>-imported"
237
+ "$<TARGET_FILE_NAME:app>"
238
+)
239
+if(MSVC)
240
+ add_custom_command(TARGET app POST_BUILD
241
+ COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
242
+ "${CMAKE_COMMAND}" -E rename "$<TARGET_PROPERTY:app,PDB_NAME>.pdb-imported"
243
+ "$<TARGET_PROPERTY:app,PDB_NAME>.pdb"
244
+ )
245
+endif(MSVC)
246
+
247
+add_dependencies(app fossil-exe)
248
+
249
+
250
+## TEST ---------------------------------------------------------------
251
+##
252
+add_custom_target(test-fossil-setup
253
+ COMMENT "Setting up test-fossil"
254
+ DEPENDS fossil-install
255
+)
256
+add_custom_command(TARGET test-fossil-setup PRE_BUILD
257
+ COMMAND "${CMAKE_COMMAND}" -E copy_directory
258
+ "${fossil_SOURCE_DIR}/test" "${fossil_TEST_DIR}"
259
+ WORKING_DIRECTORY "${fossil_BINARY_DIR}"
260
+ COMMENT "Copying data for test-fossil"
261
+ VERBATIM
262
+)
263
+add_custom_command(TARGET test-fossil-setup POST_BUILD
264
+ COMMAND "${fossil_EXE}" new "${fossil_BINARY_DIR}/test-fossil.fsl"
265
+ --admin-user testuser
266
+ COMMAND "${fossil_EXE}" open "${fossil_BINARY_DIR}/test-fossil.fsl"
267
+ COMMAND "${fossil_EXE}" user default testuser --user testuser
268
+ WORKING_DIRECTORY "${fossil_TEST_DIR}"
269
+ COMMENT "Setting up repository for test-fossil"
270
+ VERBATIM
271
+)
272
+
273
+
274
+# Run the test suite.
275
+# Other flags that can be included in TESTFLAGS are:
276
+#
277
+# -halt Stop testing after the first failed test
278
+# -keep Keep the temporary workspace for debugging
279
+# -prot Write a detailed log of the tests to the file ./prot
280
+# -verbose Include even more details in the output
281
+# -quiet Hide most output from the terminal
282
+# -strict Treat known bugs as failures
283
+#
284
+# TESTFLAGS can also include names of specific test files to limit
285
+# the run to just those test cases.
286
+
287
+set(TCL "tclsh")
288
+if( test_FLAGS )
289
+ set(fossil_test_FLAGS ${test_FLAGS})
290
+endif()
291
+
292
+separate_arguments(fossil_test_FLAGS)
293
+add_custom_target(test-fossil
294
+ COMMAND "${TCL}" tester.tcl "${fossil_EXE}" -quiet ${fossil_test_FLAGS}
295
+ VERBATIM
296
+ WORKING_DIRECTORY "${fossil_TEST_DIR}"
297
+ COMMENT "Running test-fossil"
298
+ DEPENDS fossil-install
299
+)
300
+
301
+add_custom_target(test-fossil-clean
302
+ COMMENT "Tearing down test-fossil"
303
+ DEPENDS fossil-install
304
+)
305
+add_custom_command(TARGET test-fossil-clean PRE_BUILD
306
+ COMMAND "${CMAKE_COMMAND}" -E remove "${fossil_BINARY_DIR}/test-fossil.fsl"
307
+ WORKING_DIRECTORY "${fossil_TEST_DIR}"
308
+ COMMENT "Removing repository for test-fossil"
309
+ VERBATIM
310
+)
311
+add_custom_command(TARGET test-fossil-clean POST_BUILD
312
+ COMMAND "${CMAKE_COMMAND}" -E remove_directory "${fossil_TEST_DIR}"
313
+ WORKING_DIRECTORY "${fossil_BINARY_DIR}"
314
+ COMMENT "Removing data for test-fossil"
315
+ VERBATIM
316
+)
317
+
318
+add_custom_target(clean-fossil
319
+ COMMAND "${CMAKE_COMMAND}" -E remove_directory "${fossil_EXE_DIR}"
320
+ VERBATIM
321
+ COMMAND "${CMAKE_MAKE_PROGRAM}" clean
322
+ VERBATIM
323
+ WORKING_DIRECTORY "${fossil_BINARY_DIR}"
324
+ COMMENT "Cleaning fossil build artifacts"
325
+ DEPENDS fossil-configure
326
+)
327
+
328
+
329
+enable_testing()
330
+add_test(NAME setup
331
+ COMMAND "${CMAKE_COMMAND}" --build . --target test-fossil-setup
332
+)
333
+add_test(NAME test
334
+ COMMAND "${CMAKE_COMMAND}" --build . --target test-fossil
335
+)
336
+add_test(NAME clean
337
+ COMMAND "${CMAKE_COMMAND}" --build . --target test-fossil-clean
338
+)
339
+set_property(TEST test APPEND PROPERTY
340
+ DEPENDS setup)
341
+set_property(TEST clean APPEND PROPERTY
342
+ DEPENDS setup)
343
+
344
+add_custom_target(check
345
+ COMMAND "${CMAKE_CTEST_COMMAND}" -V
346
+ DEPENDS test-fossil
347
+)
348
+
349
+## INSTALL ---------------------------------------------------------------
350
+##
351
+install(DIRECTORY ${fossil_EXE_DIR}/
352
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/
353
+ USE_SOURCE_PERMISSIONS
354
+)
216355
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -1,215 +1,354 @@
1 PROJECT(Fossil C)
2
3 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
4
5 # Build options.
6 OPTION(FOSSIL_BUILD_STATIC "Build Fossil static" TRUE)
7 OPTION(FOSSIL_ENABLE_SSL "Enable SSL support" FALSE)
8
9 # Include some macros.
10 INCLUDE(CheckIncludeFile)
11
12 # Source files which gets processed by the translate program.
13 SET(TRANS_SRCS
14 add allrepo attach bag bisect blob branch browse captcha cgi checkin
15 checkout clearsign clone comformat configure content db delta deltacmd
16 descendants diff diffcmd doc encode event export file finfo glob graph gzip
17 http http_socket http_transport import info leaf login main manifest md5
18 merge merge3 name path pivot popen pqueue printf rebuild report rss schema
19 search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main
20 timeline tkt tktsetup undo update url user verify vfile wiki wikiformat
21 winhttp xfer zip http_ssl
22 )
23
24 # Additional source files.
25 SET(OTHER_SRCS
26 src/sqlite3.c src/shell.c src/th.c src/th_lang.c
27 )
28
29 # Add the resource file on windows to the source files.
30 IF(WIN32)
31 SET(OTHER_SRCS ${OTHER_SRCS} win/fossil.rc)
32 ENDIF(WIN32)
33
34 # Set compile definitions for src/shell.c.
35 SET(SHELL_COMP_DEFS
36 main=sqlite3_shell
37 SQLITE_OMIT_LOAD_EXTENSION=1
38 )
39 SET_SOURCE_FILES_PROPERTIES(src/shell.c
40 PROPERTIES COMPILE_DEFINITIONS "${SHELL_COMP_DEFS}"
41 )
42
43 # Set compile definitions for src/sqlite.c.
44 SET(SQLITE3_COMP_DEFS
45 SQLITE_OMIT_LOAD_EXTENSION=1
46 SQLITE_THREADSAFE=0
47 SQLITE_DEFAULT_FILE_FORMAT=4
48 SQLITE_ENABLE_STAT2
49 SQLITE_ENABLE_LOCKING_STYLE=0
50 localtime=fossil_localtime
51 )
52 SET_SOURCE_FILES_PROPERTIES(src/sqlite3.c
53 PROPERTIES COMPILE_DEFINITIONS "${SQLITE3_COMP_DEFS}"
54 )
55
56 # Build the makeheaders program.
57 ADD_EXECUTABLE(makeheaders src/makeheaders.c)
58 GET_TARGET_PROPERTY(MAKEHEADERS_LOC makeheaders LOCATION)
59
60 # Build the translate program.
61 ADD_EXECUTABLE(translate src/translate.c)
62 GET_TARGET_PROPERTY(TRANSLATE_LOC translate LOCATION)
63
64 # Build the mkindex program.
65 ADD_EXECUTABLE(mkindex src/mkindex.c)
66 GET_TARGET_PROPERTY(MKINDEX_LOC mkindex LOCATION)
67
68 # Build the version program.
69 ADD_EXECUTABLE(version win/version.c)
70 GET_TARGET_PROPERTY(VERSION_LOC version LOCATION)
71
72 # Custom command to build the VERSION.h include file.
73 ADD_CUSTOM_COMMAND(
74 OUTPUT ${PROJECT_BINARY_DIR}/VERSION.h
75 DEPENDS version
76 ${PROJECT_SOURCE_DIR}/manifest.uuid
77 ${PROJECT_SOURCE_DIR}/manifest
78 COMMAND ${VERSION_LOC}
79 ARGS ${PROJECT_SOURCE_DIR}/manifest.uuid
80 ${PROJECT_SOURCE_DIR}/manifest
81 > ${PROJECT_BINARY_DIR}/VERSION.h
82 COMMENT "Generating VERSION.h ..."
83 )
84
85 # Custom commands to build the translated sources.
86 FOREACH(SRC ${TRANS_SRCS})
87
88 ADD_CUSTOM_COMMAND(
89 OUTPUT ${PROJECT_BINARY_DIR}/${SRC}_.c
90 DEPENDS translate
91 ${PROJECT_SOURCE_DIR}/src/${SRC}.c
92 COMMAND ${TRANSLATE_LOC}
93 ARGS ${PROJECT_SOURCE_DIR}/src/${SRC}.c
94 > ${PROJECT_BINARY_DIR}/${SRC}_.c
95 COMMENT "Translating src/${SRC}.c ..."
96 )
97
98 # Build a list of all the results.
99 SET(TRANS_SRC ${TRANS_SRC} ${PROJECT_BINARY_DIR}/${SRC}_.c)
100
101 ENDFOREACH(SRC)
102
103 # Custom command to build page_index.h.
104 ADD_CUSTOM_COMMAND(
105 OUTPUT ${PROJECT_BINARY_DIR}/page_index.h
106 DEPENDS mkindex
107 ${TRANS_SRC}
108 COMMAND ${MKINDEX_LOC}
109 ARGS ${TRANS_SRC}
110 > ${PROJECT_BINARY_DIR}/page_index.h
111 COMMENT "Generating page_index.h ..."
112 )
113 ADD_CUSTOM_TARGET(page_index DEPENDS ${PROJECT_BINARY_DIR}/page_index.h)
114
115 # Create an input file for the makeheaders program.
116 FILE(WRITE ${PROJECT_BINARY_DIR}/mkhdr.dat
117 "# Warning: this file is automatically generated by CMake.
118 ${PROJECT_SOURCE_DIR}/src/sqlite3.h
119 ${PROJECT_SOURCE_DIR}/src/th.h
120 ${PROJECT_BINARY_DIR}/VERSION.h\n"
121 )
122 FOREACH(SRC ${TRANS_SRCS})
123 FILE(APPEND ${PROJECT_BINARY_DIR}/mkhdr.dat
124 "${PROJECT_BINARY_DIR}/${SRC}_.c:${PROJECT_BINARY_DIR}/${SRC}.h\n"
125 )
126 # Build a list of all the generated header files.
127 SET(GEN_HDRS ${GEN_HDRS} ${PROJECT_BINARY_DIR}/${SRC}.h)
128 ENDFOREACH(SRC)
129
130 # Custom commands to build the header files.
131 ADD_CUSTOM_COMMAND(
132 OUTPUT ${PROJECT_BINARY_DIR}/headers ${GEN_HDRS}
133 DEPENDS makeheaders
134 ${PROJECT_SOURCE_DIR}/src/sqlite3.h
135 ${PROJECT_SOURCE_DIR}/src/th.h
136 ${PROJECT_BINARY_DIR}/VERSION.h
137 ${TRANS_SRC}
138 COMMAND ${MAKEHEADERS_LOC}
139 ARGS -f mkhdr.dat
140 COMMAND ${CMAKE_COMMAND}
141 ARGS -E echo Headers generated > ${PROJECT_BINARY_DIR}/headers
142 COMMENT "Generating header files..."
143 )
144 ADD_CUSTOM_TARGET(hdr_files DEPENDS ${PROJECT_BINARY_DIR}/headers)
145
146 # Make sure that the CMake output directory and the source file directory
147 # gets searched for include files.
148 SET(FOSSIL_INCL_DIRS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src)
149
150 # Disable internationalization.
151 SET(FOSSIL_COMP_DEFS FOSSIL_I18N=0)
152
153 # Fossil requires the Zlib library.
154 CHECK_INCLUDE_FILE(zlib.h ZLIB_INTRINSIC)
155 IF(ZLIB_INTRINSIC)
156 SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} z)
157 ELSE(ZLIB_INTRINSIC)
158 FIND_PACKAGE(ZLIB REQUIRED)
159 IF(ZLIB_FOUND)
160 SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ${ZLIB_LIBRARIES})
161 SET(FOSSIL_INCL_DIRS ${FOSSIL_INCL_DIRS} ${ZLIB_INCLUDE_DIRS})
162 ENDIF(ZLIB_FOUND)
163 ENDIF(ZLIB_INTRINSIC)
164
165 IF(FOSSIL_ENABLE_SSL)
166 CHECK_INCLUDE_FILE(openssl/ssl.h OPENSSL_INTRINSIC)
167 IF(OPENSSL_INTRINSIC)
168 SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ssl crypto)
169 ELSE(OPENSSL_INTRINSIC)
170 FIND_PACKAGE(OpenSSL REQUIRED)
171 IF(OPENSSL_FOUND)
172 SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ${OPENSSL_LIBRARIES})
173 SET(FOSSIL_INCL_DIRS ${FOSSIL_INCL_DIRS} ${OPENSSL_INCLUDE_DIR})
174 ENDIF(OPENSSL_FOUND)
175 ENDIF(OPENSSL_INTRINSIC)
176 SET(FOSSIL_COMP_DEFS ${FOSSIL_COMP_DEFS} FOSSIL_ENABLE_SSL=1)
177 ENDIF(FOSSIL_ENABLE_SSL)
178
179 # On Windows, Fossil requires the socket library.
180 IF(WIN32)
181 SET(FOSSIL_LINK_LIBS ${FOSSIL_LINK_LIBS} ws2_32)
182 ENDIF(WIN32)
183
184 # Set the include diretories.
185 INCLUDE_DIRECTORIES(BEFORE ${FOSSIL_INCL_DIRS})
186
187 # Build the Fossil program.
188 ADD_EXECUTABLE(fossil ${TRANS_SRC} ${OTHER_SRCS})
189
190 # Fossil depends on the generated header files.
191 ADD_DEPENDENCIES(fossil hdr_files page_index)
192
193 # Set flags for building fossil static.
194 IF(FOSSIL_BUILD_STATIC)
195 SET(FOSSIL_LINK_FLAGS ${FOSSIL_LINK_FLAGS} -static)
196 ENDIF(FOSSIL_BUILD_STATIC)
197
198 # Set the additional link flags for the fossil target.
199 IF(DEFINED FOSSIL_LINK_FLAGS)
200 SET_TARGET_PROPERTIES(fossil PROPERTIES
201 LINK_FLAGS ${FOSSIL_LINK_FLAGS}
202 )
203 ENDIF(DEFINED FOSSIL_LINK_FLAGS)
204
205 # Set the compile definitions for the fossil target.
206 IF(DEFINED FOSSIL_COMP_DEFS)
207 SET_TARGET_PROPERTIES(fossil PROPERTIES
208 COMPILE_DEFINITIONS "${FOSSIL_COMP_DEFS}"
209 )
210 ENDIF(DEFINED FOSSIL_COMP_DEFS)
211
212 # Set the additional link libraries for the fossil target.
213 IF(DEFINED FOSSIL_LINK_LIBS)
214 TARGET_LINK_LIBRARIES(fossil ${FOSSIL_LINK_LIBS})
215 ENDIF(DEFINED FOSSIL_LINK_LIBS)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -1,215 +1,354 @@
1 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
2
3 project(fossil C)
4 include(ExternalProject)
5
6 set(CMAKE_VERBOSE_MAKEFILE ON)
7
8
9 set(default_build_type "RelWithDebInfo")
10
11 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
12 message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
13 set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
14 STRING "Choose the type of build." FORCE)
15 # Set the possible values of build type for cmake-gui
16 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
17 "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
18 else()
19 message(STATUS "'${CMAKE_BUILD_TYPE}' build type")
20 endif()
21
22
23 ## VARIABLES ---------------------------------------------------------------
24 ## Additional parameters can be passed in the following variables which can
25 ## be defined on cmake command line (or in cache).
26 ##
27 ## The parameters correspond to the ones used in the external fossil build
28 ## process (as specified at configure, make, and make test)
29 ##
30 if(FOSSIL_CONFIGURE)
31 message(STATUS "Fossil build configuration '${FOSSIL_CONFIGURE}'")
32 set(configure_FLAGS ${FOSSIL_CONFIGURE})
33 endif()
34
35 if(FOSSIL_BUILD)
36 message(STATUS "Fossil build variables '${FOSSIL_BUILD}'")
37 set(build_FLAGS ${FOSSIL_BUILD})
38 endif()
39
40 if(FOSSIL_TEST)
41 message(STATUS "Fossil test configuration '${FOSSIL_TEST}'")
42 set(test_FLAGS ${FOSSIL_TEST})
43 endif()
44
45
46 add_executable(fossil-exe IMPORTED)
47
48 set(fossil_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR})
49 set(fossil_EXE_DIR "${fossil_INSTALL_DIR}/bin")
50 set(fossil_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
51 set(fossil_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/fossil)
52 if(MSVC)
53 set(fossil_BUILD_DIR ${fossil_BINARY_DIR}/msvcbld)
54 else(MSVC)
55 set(fossil_BUILD_DIR ${fossil_BINARY_DIR}/bld)
56 endif(MSVC)
57 set(fossil_TEST_DIR "${fossil_BINARY_DIR}/test")
58
59 set(EXE ${CMAKE_EXECUTABLE_SUFFIX})
60 set(fossil_EXE "${fossil_EXE_DIR}/fossil${EXE}")
61 file(TO_NATIVE_PATH "${fossil_EXE}" fossil_EXE)
62 set_target_properties(fossil-exe PROPERTIES
63 IMPORTED_LOCATION "${fossil_EXE}"
64 )
65
66 ## SETUP IDE ---------------------------------------------------------------
67 ## Setup Project Sources View
68 ## Add more source files for convenience; otherwise only actual dependencies
69 ## would appear in the Projects tree pane.
70 ##
71 file(GLOB_RECURSE project_sources_DIRS
72 #"autosetup/*" #may be useful when debuging configure
73 "skins/*"
74 "src/*"
75 "test/*.test" "test/tester.tcl"
76 "win/*"
77 "www/*.wiki" "www/*.md" "www/*.html"
78 )
79
80 file(GLOB project_sources_FILES
81 "auto.def"
82 "configure"
83
84 "fossil.1"
85 "manifest.uuid"
86 "VERSION"
87
88 "${fossil_BINARY_DIR}/autoconfig.h"
89 "${fossil_BINARY_DIR}/Makefile*"
90
91 "${fossil_BUILD_DIR}/*.[h]"
92 #"${fossil_BUILD_DIR}/main_.c"
93 )
94
95 include_directories(
96 "${fossil_BUILD_DIR}"
97 "${PROJECT_SOURCE_DIR}/src"
98 "${PROJECT_SOURCE_DIR}"
99 )
100
101 add_custom_target(project-sources ALL
102 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
103 SOURCES ${project_sources_DIRS} ${project_sources_FILES}
104 )
105
106 ## CONFIGURE ---------------------------------------------------------------
107 ##
108 set(fossil_configure_FLAGS "")
109 if(configure_FLAGS)
110 set(fossil_configure_FLAGS ${configure_FLAGS})
111 endif()
112 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
113 if(MSVC)
114 if(NOT "${fossil_configure_FLAGS}" MATCHES "FOSSIL_DEBUG")
115 set(fossil_configure_FLAGS "FOSSIL_DEBUG=1" ${fossil_configure_FLAGS})
116 endif()
117 else(MSVC)
118 if(NOT "${fossil_configure_FLAGS}" MATCHES "--fossil-debug")
119 set(fossil_configure_FLAGS "--fossil-debug" ${fossil_configure_FLAGS})
120 endif()
121 endif(MSVC)
122 endif()
123
124 ## BUILD ---------------------------------------------------------------
125 ##
126 # Build fossil as an external project; just pass the options for configure and
127 # build stages. This way we rely upon the existing build scripts.
128 #
129 # Install the resulting binary into the local binary dir, such that the fossil
130 # binary can be located at the fixed location on target platform.
131 #
132 # Then we define CMake install targets to copy the binaries from the local
133 # binary dir.
134 #
135
136 set(fossil_build_FLAGS "")
137 if(build_FLAGS)
138 set(fossil_build_FLAGS ${build_FLAGS})
139 endif()
140
141 separate_arguments(fossil_configure_FLAGS)
142 separate_arguments(fossil_build_FLAGS)
143
144 if(MSVC)
145 file(RELATIVE_PATH fossil_DESTDIR "${fossil_BINARY_DIR}" "${fossil_EXE_DIR}")
146 file(TO_NATIVE_PATH "${fossil_DESTDIR}" fossil_DESTDIR)
147
148 ExternalProject_Add(fossil
149 PREFIX fossil
150 SOURCE_DIR "${fossil_SOURCE_DIR}"
151 CONFIGURE_COMMAND ""
152 BINARY_DIR "${fossil_BINARY_DIR}"
153 BUILD_COMMAND "${fossil_SOURCE_DIR}/win/buildmsvc.bat" all install
154 ${fossil_configure_FLAGS}
155 DESTDIR=${fossil_DESTDIR}
156 ${fossil_build_FLAGS}
157 VERBATIM
158 INSTALL_COMMAND ""
159 STEP_TARGETS configure build install
160 )
161
162 else(MSVC)
163
164 file(RELATIVE_PATH fossil_DESTDIR "${fossil_BINARY_DIR}" "${fossil_INSTALL_DIR}")
165
166 ExternalProject_Add(fossil
167 PREFIX fossil
168 SOURCE_DIR "${fossil_SOURCE_DIR}"
169 CONFIGURE_COMMAND "${fossil_SOURCE_DIR}/configure"
170 --prefix=/ ${fossil_configure_FLAGS}
171 VERBATIM
172 BINARY_DIR "${fossil_BINARY_DIR}"
173 BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}"
174 ${fossil_build_FLAGS}
175 VERBATIM
176 INSTALL_COMMAND "${CMAKE_MAKE_PROGRAM}" install
177 DESTDIR=${fossil_DESTDIR}
178 STEP_TARGETS configure build install
179 )
180
181 endif(MSVC)
182
183 set_property(DIRECTORY APPEND PROPERTY
184 ADDITIONAL_MAKE_CLEAN_FILES "${fossil_BUILD_DIR}"
185 "${fossil_EXE_DIR}"
186 )
187
188 ExternalProject_Add_Step(fossil forcebuild
189 COMMAND "${CMAKE_COMMAND}" -E echo "Build fossil"
190 DEPENDEES configure
191 DEPENDERS build
192 ALWAYS 1
193 )
194
195 add_dependencies(fossil-exe fossil)
196
197
198 ## We need an executable target, so that IDEs can infer what to run/debug.
199 ## Define a substitute executable target to stand in for the actual fossil binary
200 ## that we just built via ExternalProject_Add.
201 ## Keep the actual fossil binary, clean up the built substitute artifacts.
202
203 get_filename_component(app_NAME "${fossil_EXE}" NAME_WE)
204 get_filename_component(app_DIR "${fossil_EXE}" DIRECTORY)
205 file(TO_NATIVE_PATH "${app_DIR}" app_DIR)
206
207 file(WRITE "${CMAKE_BINARY_DIR}/app.c" "int main(){ return 0; }\n")
208 add_executable(app app.c)
209
210 set_target_properties(app PROPERTIES
211 OUTPUT_NAME "${app_NAME}"
212 RUNTIME_OUTPUT_DIRECTORY "${app_DIR}"
213 )
214 if(MSVC)
215 set_target_properties(app PROPERTIES
216 PDB_NAME "${app_NAME}"
217 LINK_FLAGS "/INCREMENTAL:NO /MANIFEST:NO"
218 )
219 endif()
220 add_custom_command(TARGET app PRE_LINK
221 COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
222 "${CMAKE_COMMAND}" -E rename "$<TARGET_FILE_NAME:app>"
223 "$<TARGET_FILE_NAME:app>-imported"
224 )
225 if(MSVC)
226 add_custom_command(TARGET app PRE_LINK
227 COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
228 "${CMAKE_COMMAND}" -E rename "$<TARGET_PROPERTY:app,PDB_NAME>.pdb"
229 "$<TARGET_PROPERTY:app,PDB_NAME>.pdb-imported"
230 )
231 endif()
232 add_custom_command(TARGET app POST_BUILD
233 COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
234 "${CMAKE_COMMAND}" -E remove "$<TARGET_FILE_NAME:app>"
235 COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
236 "${CMAKE_COMMAND}" -E rename "$<TARGET_FILE_NAME:app>-imported"
237 "$<TARGET_FILE_NAME:app>"
238 )
239 if(MSVC)
240 add_custom_command(TARGET app POST_BUILD
241 COMMAND "${CMAKE_COMMAND}" -E chdir "$<TARGET_FILE_DIR:app>"
242 "${CMAKE_COMMAND}" -E rename "$<TARGET_PROPERTY:app,PDB_NAME>.pdb-imported"
243 "$<TARGET_PROPERTY:app,PDB_NAME>.pdb"
244 )
245 endif(MSVC)
246
247 add_dependencies(app fossil-exe)
248
249
250 ## TEST ---------------------------------------------------------------
251 ##
252 add_custom_target(test-fossil-setup
253 COMMENT "Setting up test-fossil"
254 DEPENDS fossil-install
255 )
256 add_custom_command(TARGET test-fossil-setup PRE_BUILD
257 COMMAND "${CMAKE_COMMAND}" -E copy_directory
258 "${fossil_SOURCE_DIR}/test" "${fossil_TEST_DIR}"
259 WORKING_DIRECTORY "${fossil_BINARY_DIR}"
260 COMMENT "Copying data for test-fossil"
261 VERBATIM
262 )
263 add_custom_command(TARGET test-fossil-setup POST_BUILD
264 COMMAND "${fossil_EXE}" new "${fossil_BINARY_DIR}/test-fossil.fsl"
265 --admin-user testuser
266 COMMAND "${fossil_EXE}" open "${fossil_BINARY_DIR}/test-fossil.fsl"
267 COMMAND "${fossil_EXE}" user default testuser --user testuser
268 WORKING_DIRECTORY "${fossil_TEST_DIR}"
269 COMMENT "Setting up repository for test-fossil"
270 VERBATIM
271 )
272
273
274 # Run the test suite.
275 # Other flags that can be included in TESTFLAGS are:
276 #
277 # -halt Stop testing after the first failed test
278 # -keep Keep the temporary workspace for debugging
279 # -prot Write a detailed log of the tests to the file ./prot
280 # -verbose Include even more details in the output
281 # -quiet Hide most output from the terminal
282 # -strict Treat known bugs as failures
283 #
284 # TESTFLAGS can also include names of specific test files to limit
285 # the run to just those test cases.
286
287 set(TCL "tclsh")
288 if( test_FLAGS )
289 set(fossil_test_FLAGS ${test_FLAGS})
290 endif()
291
292 separate_arguments(fossil_test_FLAGS)
293 add_custom_target(test-fossil
294 COMMAND "${TCL}" tester.tcl "${fossil_EXE}" -quiet ${fossil_test_FLAGS}
295 VERBATIM
296 WORKING_DIRECTORY "${fossil_TEST_DIR}"
297 COMMENT "Running test-fossil"
298 DEPENDS fossil-install
299 )
300
301 add_custom_target(test-fossil-clean
302 COMMENT "Tearing down test-fossil"
303 DEPENDS fossil-install
304 )
305 add_custom_command(TARGET test-fossil-clean PRE_BUILD
306 COMMAND "${CMAKE_COMMAND}" -E remove "${fossil_BINARY_DIR}/test-fossil.fsl"
307 WORKING_DIRECTORY "${fossil_TEST_DIR}"
308 COMMENT "Removing repository for test-fossil"
309 VERBATIM
310 )
311 add_custom_command(TARGET test-fossil-clean POST_BUILD
312 COMMAND "${CMAKE_COMMAND}" -E remove_directory "${fossil_TEST_DIR}"
313 WORKING_DIRECTORY "${fossil_BINARY_DIR}"
314 COMMENT "Removing data for test-fossil"
315 VERBATIM
316 )
317
318 add_custom_target(clean-fossil
319 COMMAND "${CMAKE_COMMAND}" -E remove_directory "${fossil_EXE_DIR}"
320 VERBATIM
321 COMMAND "${CMAKE_MAKE_PROGRAM}" clean
322 VERBATIM
323 WORKING_DIRECTORY "${fossil_BINARY_DIR}"
324 COMMENT "Cleaning fossil build artifacts"
325 DEPENDS fossil-configure
326 )
327
328
329 enable_testing()
330 add_test(NAME setup
331 COMMAND "${CMAKE_COMMAND}" --build . --target test-fossil-setup
332 )
333 add_test(NAME test
334 COMMAND "${CMAKE_COMMAND}" --build . --target test-fossil
335 )
336 add_test(NAME clean
337 COMMAND "${CMAKE_COMMAND}" --build . --target test-fossil-clean
338 )
339 set_property(TEST test APPEND PROPERTY
340 DEPENDS setup)
341 set_property(TEST clean APPEND PROPERTY
342 DEPENDS setup)
343
344 add_custom_target(check
345 COMMAND "${CMAKE_CTEST_COMMAND}" -V
346 DEPENDS test-fossil
347 )
348
349 ## INSTALL ---------------------------------------------------------------
350 ##
351 install(DIRECTORY ${fossil_EXE_DIR}/
352 DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/
353 USE_SOURCE_PERMISSIONS
354 )
355

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button