Skip to content

Commit dece090

Browse files
committed
Add patch function
1 parent 5ee678d commit dece090

File tree

2 files changed

+122
-93
lines changed

2 files changed

+122
-93
lines changed

share/modules/cmake/BCMConfig.cmake

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ macro(cm_project INPUT_WORKSPACE_NAME INPUT_PROJECT_NAME)
3131
set(CURRENT_PROJECT_NAME ${INPUT_PROJECT_NAME})
3232
string(TOUPPER ${INPUT_PROJECT_NAME} UPPER_PROJECT_NAME)
3333
set(CURRENT_UPPER_PROJECT_NAME ${UPPER_PROJECT_NAME})
34+
set_current_source_dir(${CMAKE_CURRENT_SOURCE_DIR} CURRENT_SOURCES_DIR)
35+
set(CURRENT_TEST_SOURCES_DIR ${CURRENT_SOURCES_DIR}/test)
3436
endmacro()
3537

3638
macro(cm_workspace WORKSPACE_NAME)
@@ -55,8 +57,12 @@ function(patch_file INPUT_SOURCE INPUT_PATCH OUTPUT_DIRECTORY)
5557
if(NOT Patch_FOUND)
5658
message(FATAL_ERROR "Patch utulity is not found")
5759
endif()
58-
59-
execute_process(COMMAND patch ${INPUT_SOURCE} ${INPUT_PATCH}
60+
string(REPLACE ${CURRENT_TEST_SOURCES_DIR} ${CMAKE_CURRENT_BINARY_DIR} OUTPUT_FILE ${INPUT_SOURCE})
61+
get_filename_component(OUTPUT_DIRECTORY ${OUTPUT_FILE} DIRECTORY)
62+
message(COPY ${INPUT_SOURCE} DESTINATION ${OUTPUT_DIRECTORY})
63+
file(COPY ${INPUT_SOURCE} DESTINATION ${OUTPUT_DIRECTORY})
64+
get_filename_component(SOURCE_FILE_NAME ${INPUT_SOURCE} NAME)
65+
execute_process(COMMAND patch ${OUTPUT_FILE} ${INPUT_PATCH}
6066
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
6167
endfunction()
6268

@@ -65,13 +71,27 @@ function(patch_directory SOURCES_DIRECTORY PATCHES_DIRECTORY OUTPUT_DIRECTORY)
6571
if(NOT Patch_FOUND)
6672
message(FATAL_ERROR "Patch utulity is not found")
6773
endif()
74+
file(GLOB_RECURSE PATCHES_FILES LIST_DIRECTORIES FALSE ${PATCHES_DIRECTORY}/*.patch)
75+
file(GLOB_RECURSE SOURCES_FILES LIST_DIRECTORIES FALSE ${SOURCES_DIRECTORY}/*)
76+
message(PTCH = ${PATCHES_DIRECTORY})
77+
message(SRC = ${SOURCES_DIRECTORY})
78+
foreach(PATCH_FILE IN LISTS PATCHES_FILES)
79+
#get_filename_component(PATHC_FILE_NAME ${PATCH_FILE} NAME)
80+
#message("SOURCES_DIRECTORY=" ${SOURCES_DIRECTORY})
81+
#message("PATHC_FILE_NAME=" ${PATCHES_DIRECTORY})
82+
string(REPLACE ".patch" "" SOURCE_FILE_NAME ${PATCH_FILE})
83+
string(REPLACE ${PATCHES_DIRECTORY} ${SOURCES_DIRECTORY} SOURCE_FILE_NAME ${SOURCE_FILE_NAME})
6884

69-
file(GLOB_RECURSE ${PATCHES_FILES} LIST_DIRECTORIES FALSE ${PATCHES_DIRECTORY})
70-
file(GLOB_RECURSE ${SOURCES_FILES} LIST_DIRECTORIES FALSE ${SOURCES_DIRECTORY})
71-
72-
foreach(PATCH_FILE IN PATCHES_FILES)
73-
string(REPLACE ".patch" ${PATCH_FILE} PATCH_FILE_NAME)
74-
list(FIND ${SOURCES_FILES} PATCH_FILE)
75-
execute_process(COMMAND patch)
85+
list(FIND SOURCES_FILES ${SOURCE_FILE_NAME} SOURCES_FILE_FIND)
86+
if (${SOURCES_FILE_FIND} EQUAL -1)
87+
message(FATAL_ERROR "Source file for patch is not found: " ${PATCH_FILE})
88+
endif()
89+
list(GET SOURCES_FILES ${SOURCES_FILE_FIND} SOURCE_FILE)
90+
patch_file(${SOURCE_FILE} ${PATCH_FILE} ${OUTPUT_DIRECTORY})
7691
endforeach()
92+
endfunction()
93+
94+
function(set_current_source_dir WORKSPACE_SOURCE RESULT_NAME)
95+
string(REPLACE "/libs" "/boost_1.58/libs" CURRENT_SOURCES_DIR ${WORKSPACE_SOURCE})
96+
set(${RESULT_NAME} ${CURRENT_SOURCES_DIR} PARENT_SCOPE)
7797
endfunction()

share/modules/cmake/BCMTest.cmake

Lines changed: 93 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -2,93 +2,93 @@ option(BUILD_TESTS "Controls whether to build the tests as part of the main buil
22

33
enable_testing()
44

5-
foreach(scope GLOBAL DIRECTORY)
5+
foreach (scope GLOBAL DIRECTORY)
66
define_property(${scope} PROPERTY "ENABLE_TESTS" INHERITED
7-
BRIEF_DOCS "Enable tests"
8-
FULL_DOCS "Enable tests"
9-
)
10-
endforeach()
7+
BRIEF_DOCS "Enable tests"
8+
FULL_DOCS "Enable tests"
9+
)
10+
endforeach ()
1111
option(CMAKE_ENABLE_TESTS "Enable tests" ON)
1212
set_property(GLOBAL PROPERTY ENABLE_TESTS ${CMAKE_ENABLE_TESTS})
1313

1414
include(ProcessorCount)
1515
processorcount(_cm_ctest_parallel_level)
1616
set(CTEST_PARALLEL_LEVEL ${_cm_ctest_parallel_level} CACHE STRING "CTest parallel level")
1717

18-
if(NOT TARGET check)
18+
if (NOT TARGET check)
1919
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C ${CMAKE_CFG_INTDIR} -j ${CTEST_PARALLEL_LEVEL} WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
20-
endif()
20+
endif ()
2121

2222

23-
if(NOT TARGET tests)
23+
if (NOT TARGET tests)
2424
add_custom_target(tests COMMENT "Build all tests.")
2525
add_dependencies(check tests)
26-
endif()
26+
endif ()
2727

28-
if(NOT TARGET check-${PROJECT_NAME})
28+
if (NOT TARGET check-${PROJECT_NAME})
2929
add_custom_target(check-${PROJECT_NAME} COMMAND ${CMAKE_CTEST_COMMAND} -L ${PROJECT_NAME} --output-on-failure -C ${CMAKE_CFG_INTDIR} -j ${CTEST_PARALLEL_LEVEL} WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
30-
endif()
30+
endif ()
3131

32-
if(NOT TARGET tests-${PROJECT_NAME})
32+
if (NOT TARGET tests-${PROJECT_NAME})
3333
add_custom_target(tests-${PROJECT_NAME} COMMENT "Build all tests for ${PROJECT_NAME}.")
3434
add_dependencies(check-${PROJECT_NAME} tests-${PROJECT_NAME})
35-
endif()
35+
endif ()
3636

3737
function(cm_mark_as_test)
38-
foreach(TEST_TARGET ${ARGN})
39-
if(NOT BUILD_TESTS)
38+
foreach (TEST_TARGET ${ARGN})
39+
if (NOT BUILD_TESTS)
4040
get_target_property(TEST_TARGET_TYPE ${TEST_TARGET} TYPE)
4141
# We can onle use EXCLUDE_FROM_ALL on build targets
42-
if(NOT "${TEST_TARGET_TYPE}" STREQUAL "INTERFACE_LIBRARY")
42+
if (NOT "${TEST_TARGET_TYPE}" STREQUAL "INTERFACE_LIBRARY")
4343
set_target_properties(${TEST_TARGET}
44-
PROPERTIES EXCLUDE_FROM_ALL TRUE
45-
)
46-
endif()
47-
endif()
44+
PROPERTIES EXCLUDE_FROM_ALL TRUE
45+
)
46+
endif ()
47+
endif ()
4848
add_dependencies(tests ${TEST_TARGET})
4949
add_dependencies(tests-${PROJECT_NAME} ${TEST_TARGET})
50-
endforeach()
50+
endforeach ()
5151
endfunction(cm_mark_as_test)
5252

5353

5454
function(cm_create_internal_targets)
55-
if(NOT TARGET _cm_internal_tests-${PROJECT_NAME})
55+
if (NOT TARGET _cm_internal_tests-${PROJECT_NAME})
5656
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/_cm_internal_tests-${PROJECT_NAME}.cpp "")
5757
add_library(_cm_internal_tests-${PROJECT_NAME} STATIC ${CMAKE_CURRENT_BINARY_DIR}/_cm_internal_tests-${PROJECT_NAME}.cpp)
5858
cm_mark_as_test(_cm_internal_tests-${PROJECT_NAME})
59-
endif()
59+
endif ()
6060
endfunction()
6161

62-
foreach(scope DIRECTORY TARGET)
62+
foreach (scope DIRECTORY TARGET)
6363
define_property(${scope} PROPERTY "BCM_TEST_DEPENDENCIES" INHERITED
64-
BRIEF_DOCS "Default test dependencies"
65-
FULL_DOCS "Default test dependencies"
66-
)
67-
endforeach()
64+
BRIEF_DOCS "Default test dependencies"
65+
FULL_DOCS "Default test dependencies"
66+
)
67+
endforeach ()
6868

6969
function(cm_test_link_libraries)
7070
cm_create_internal_targets()
71-
if(BUILD_TESTS)
71+
if (BUILD_TESTS)
7272
set_property(DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES ${ARGN})
7373
target_link_libraries(_cm_internal_tests-${PROJECT_NAME} ${ARGN})
74-
else()
75-
foreach(TARGET ${ARGN})
76-
if(TARGET ${TARGET})
74+
else ()
75+
foreach (TARGET ${ARGN})
76+
if (TARGET ${TARGET})
7777
set_property(DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES ${TARGET})
7878
target_link_libraries(_cm_internal_tests-${PROJECT_NAME} ${TARGET})
79-
elseif(${TARGET} MATCHES "::")
79+
elseif (${TARGET} MATCHES "::")
8080
cm_shadow_exists(HAS_TARGET ${TARGET})
8181
set_property(DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES $<${HAS_TARGET}:${TARGET}>)
8282
target_link_libraries(_cm_internal_tests-${PROJECT_NAME} $<${HAS_TARGET}:${TARGET}>)
83-
else()
83+
else ()
8484
set_property(DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES ${TARGET})
8585
target_link_libraries(_cm_internal_tests-${PROJECT_NAME} ${TARGET})
86-
endif()
87-
if(BUILD_SHARED_LIBS)
86+
endif ()
87+
if (BUILD_SHARED_LIBS)
8888
target_compile_definitions(_cm_internal_tests-${PROJECT_NAME} PRIVATE -DBOOST_TEST_DYN_LINK=1 -DBOOST_TEST_NO_AUTO_LINK=1)
89-
endif()
90-
endforeach()
91-
endif()
89+
endif ()
90+
endforeach ()
91+
endif ()
9292
endfunction()
9393

9494
function(cm_target_link_test_libs TARGET)
@@ -102,42 +102,50 @@ endfunction()
102102

103103
function(cm_test)
104104
set(options COMPILE_ONLY WILL_FAIL NO_TEST_LIBS)
105-
set(oneValueArgs NAME)
105+
set(oneValueArgs NAME SOURCES_PREFIX)
106106
set(multiValueArgs SOURCES CONTENT ARGS)
107107

108108
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
109109

110-
if(PARSE_UNPARSED_ARGUMENTS)
110+
if (PARSE_UNPARSED_ARGUMENTS)
111111
message(FATAL_ERROR "Unknown keywords given to cm_test(): \"${PARSE_UNPARSED_ARGUMENTS}\"")
112-
endif()
112+
endif ()
113113

114114
set(SOURCES ${PARSE_SOURCES})
115115

116-
if(PARSE_NAME)
116+
if (PARSE_NAME)
117117
set(TEST_NAME ${PARSE_NAME})
118-
else()
118+
else ()
119119
string(MAKE_C_IDENTIFIER "${PROJECT_NAME}_${SOURCES}_test" TEST_NAME)
120-
endif()
120+
endif ()
121121

122-
if(PARSE_CONTENT)
122+
if (PARSE_CONTENT)
123123
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generated-${TEST_NAME}.cpp "${PARSE_CONTENT}")
124124
set(SOURCES ${CMAKE_CURRENT_BINARY_DIR}/generated-${TEST_NAME}.cpp)
125-
endif()
125+
endif ()
126126

127-
if(PARSE_COMPILE_ONLY)
127+
if (PARSE_COMPILE_ONLY)
128128
add_library(${TEST_NAME} STATIC EXCLUDE_FROM_ALL ${SOURCES})
129129
add_test(NAME ${TEST_NAME}
130-
COMMAND ${CMAKE_COMMAND} --build . --target ${TEST_NAME} --config $<CONFIGURATION>
131-
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
132-
target_include_directories(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR})
130+
COMMAND ${CMAKE_COMMAND} --build . --target ${TEST_NAME} --config $<CONFIGURATION>
131+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
132+
if (PARSE_SOURCES_PREFIX)
133+
target_include_directories(${TEST_NAME} PRIVATE ${PARSE_SOURCES_PREFIX})
134+
else ()
135+
target_include_directories(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR})
136+
endif ()
133137

134138
# set_tests_properties(${TEST_NAME} PROPERTIES RESOURCE_LOCK cm_test_compile_only)
135-
else()
139+
else ()
136140
add_executable(${TEST_NAME} ${SOURCES})
137141
cm_mark_as_test(${TEST_NAME})
138-
target_include_directories(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR})
139-
if(WIN32)
140-
foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES} "")
142+
if (PARSE_SOURCES_PREFIX)
143+
target_include_directories(${TEST_NAME} PRIVATE ${PARSE_SOURCES_PREFIX})
144+
else ()
145+
target_include_directories(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR})
146+
endif ()
147+
if (WIN32)
148+
foreach (CONFIG ${CMAKE_CONFIGURATION_TYPES} "")
141149
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}-test-run-${CONFIG}.cmake CONTENT "
142150
include(\"${CMAKE_BINARY_DIR}/cm_set_rpath-$<CONFIG>.cmake\")
143151
if(CMAKE_CROSSCOMPILING)
@@ -157,24 +165,24 @@ if(NOT RESULT EQUAL 0)
157165
message(FATAL_ERROR \"Test failed\")
158166
endif()
159167
" CONDITION $<CONFIG:${CONFIG}>)
160-
endforeach()
168+
endforeach ()
161169
add_test(NAME ${TEST_NAME} COMMAND ${CMAKE_COMMAND} -DCMAKE_CROSSCOMPILING=${CMAKE_CROSSCOMPILING} -P ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}-test-run-$<CONFIG>.cmake)
162-
else()
170+
else ()
163171
add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME} ${PARSE_ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
164-
endif()
165-
endif()
172+
endif ()
173+
endif ()
166174

167-
if(BUILD_SHARED_LIBS)
175+
if (BUILD_SHARED_LIBS)
168176
target_compile_definitions(${TEST_NAME} PRIVATE -DBOOST_TEST_DYN_LINK=1 -DBOOST_TEST_NO_AUTO_LINK=1)
169-
endif()
177+
endif ()
170178

171-
if(PARSE_WILL_FAIL)
179+
if (PARSE_WILL_FAIL)
172180
set_tests_properties(${TEST_NAME} PROPERTIES WILL_FAIL TRUE)
173-
endif()
181+
endif ()
174182
set_tests_properties(${TEST_NAME} PROPERTIES LABELS ${PROJECT_NAME})
175-
if(NOT PARSE_NO_TEST_LIBS)
183+
if (NOT PARSE_NO_TEST_LIBS)
176184
cm_target_link_test_libs(${TEST_NAME})
177-
endif()
185+
endif ()
178186
endfunction(cm_test)
179187

180188
function(cm_test_header)
@@ -184,40 +192,41 @@ function(cm_test_header)
184192

185193
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
186194

187-
if(PARSE_UNPARSED_ARGUMENTS)
195+
if (PARSE_UNPARSED_ARGUMENTS)
188196
message(FATAL_ERROR "Unknown keywords given to cm_test_header(): \"${PARSE_UNPARSED_ARGUMENTS}\"")
189-
endif()
197+
endif ()
190198

191-
if(PARSE_NAME)
199+
if (PARSE_NAME)
192200
set(TEST_NAME ${PARSE_NAME})
193-
else()
201+
else ()
194202
string(MAKE_C_IDENTIFIER "${PROJECT_NAME}_${PARSE_HEADER}_header_test" TEST_NAME)
195-
endif()
203+
endif ()
196204

197-
if(PARSE_STATIC)
205+
if (PARSE_STATIC)
198206
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${TEST_NAME}.cpp
199-
"#include <${PARSE_HEADER}>\nint main() {}\n"
200-
)
207+
"#include <${PARSE_HEADER}>\nint main() {}\n"
208+
)
201209
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${TEST_NAME}.cpp
202-
"#include <${PARSE_HEADER}>\n"
203-
)
210+
"#include <${PARSE_HEADER}>\n"
211+
)
204212
cm_test(NAME ${TEST_NAME} SOURCES
205-
${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${TEST_NAME}.cpp
206-
${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${TEST_NAME}.cpp
207-
)
208-
else()
213+
${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${TEST_NAME}.cpp
214+
${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${TEST_NAME}.cpp
215+
)
216+
else ()
209217
cm_test(NAME ${TEST_NAME} CONTENT
210-
"#include <${PARSE_HEADER}>\nint main() {}\n"
211-
)
212-
endif()
218+
"#include <${PARSE_HEADER}>\nint main() {}\n"
219+
)
220+
endif ()
213221
set_tests_properties(${TEST_NAME} PROPERTIES LABELS ${PROJECT_NAME})
214222
endfunction(cm_test_header)
215223

216224
macro(cm_add_test_subdirectory)
217225
get_directory_property(_enable_tests_property ENABLE_TESTS)
218226
get_property(_enable_tests_global_property GLOBAL PROPERTY ENABLE_TESTS)
219227
string(TOUPPER "${_enable_tests_property}" _enable_tests_property_upper)
220-
if(_enable_tests_property_upper STREQUAL "OFF" OR _enable_tests_property_upper EQUAL 1)
228+
if (_enable_tests_property_upper STREQUAL "OFF" OR _enable_tests_property_upper EQUAL 1)
229+
set(CURRENT_SOURCES_DIR ${CURRENT_SOURCES_DIR}/test)
221230
add_subdirectory(${ARGN})
222-
endif()
231+
endif ()
223232
endmacro()

0 commit comments

Comments
 (0)