Mercurial > code
annotate cmake/CodeFunctions.cmake @ 487:d061bad36315
Fix various case-sensitive includes and resources not copied
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 13 Nov 2015 09:50:52 +0100 |
parents | 7ee8da32da98 |
children | b280d7aca160 |
rev | line source |
---|---|
486 | 1 function(code_define_module) |
2 set(options NO_TEST) | |
3 set(oneValueArgs NAME) | |
4 set(multiValueArgs SOURCES RESOURCES LIBRARIES INCLUDES FLAGS) | |
5 | |
6 cmake_parse_arguments(MOD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) | |
7 | |
8 if (NOT MOD_NAME) | |
9 message(FATAL_ERROR "Argument NAME is not set") | |
10 endif () | |
11 | |
12 string(TOUPPER ${MOD_NAME} optionname) | |
13 | |
14 # Tests are optional | |
15 if (NOT ${MOD_NO_TEST}) | |
16 # Create the option for enabling the test | |
17 option(WITH_${optionname} "Enable ${MOD_NAME}" On) | |
18 | |
19 if (WITH_${optionname}) | |
20 # Add the test executable | |
21 set(MAIN ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) | |
22 | |
23 if (NOT EXISTS ${MAIN}) | |
24 message(FATAL_ERROR "${MAIN} file does not exists") | |
25 endif () | |
26 | |
27 # | |
28 # Copy optional resources in the ${CMAKE_BINARY_DIR}/${MOD_NAME} directory. | |
29 # | |
30 if (MOD_RESOURCES) | |
31 foreach (res ${MOD_RESOURCES}) | |
32 get_filename_component(inputname ${res} NAME) | |
33 set(output ${CMAKE_BINARY_DIR}/${MOD_NAME}/${inputname}) | |
34 | |
35 add_custom_command( | |
36 OUTPUT ${output} | |
37 COMMENT "Copying ${inputname}" | |
38 DEPENDS ${res} | |
39 COMMAND ${CMAKE_COMMAND} -E copy ${res} ${output} | |
40 ) | |
41 | |
487
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
42 list(APPEND MOD_SOURCES ${output}) |
486 | 43 endforeach() |
44 endif () | |
45 | |
46 # | |
47 # Finally create the executable and the test | |
48 # | |
487
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
49 add_executable(test-${MOD_NAME} ${MOD_SOURCES} ${MOD_RESOURCES} ${MAIN}) |
486 | 50 |
51 add_test( | |
487
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
52 NAME ${MOD_NAME} |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
53 COMMAND test-${MOD_NAME} |
486 | 54 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
55 ) | |
56 | |
487
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
57 set_target_properties( |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
58 test-${MOD_NAME} |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
59 PROPERTIES |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
60 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
61 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
62 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
63 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
64 RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
65 ) |
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
66 target_compile_definitions(test-${MOD_NAME} PRIVATE ${MOD_FLAGS}) |
486 | 67 target_include_directories( |
487
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
68 test-${MOD_NAME} |
486 | 69 PRIVATE |
70 ${CMAKE_CURRENT_SOURCE_DIR} | |
71 ${MOD_INCLUDES} | |
72 ) | |
487
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
73 target_link_libraries(test-${MOD_NAME} gtest ${MOD_LIBRARIES}) |
486 | 74 endif () |
75 endif () | |
487
d061bad36315
Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
76 endfunction() |