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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
486
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 function(code_define_module)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 set(options NO_TEST)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 set(oneValueArgs NAME)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 set(multiValueArgs SOURCES RESOURCES LIBRARIES INCLUDES FLAGS)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
5
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 cmake_parse_arguments(MOD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
7
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 if (NOT MOD_NAME)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 message(FATAL_ERROR "Argument NAME is not set")
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 endif ()
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
11
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 string(TOUPPER ${MOD_NAME} optionname)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
13
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 # Tests are optional
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 if (NOT ${MOD_NO_TEST})
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 # Create the option for enabling the test
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 option(WITH_${optionname} "Enable ${MOD_NAME}" On)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 if (WITH_${optionname})
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 # Add the test executable
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 set(MAIN ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 if (NOT EXISTS ${MAIN})
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 message(FATAL_ERROR "${MAIN} file does not exists")
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 endif ()
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 # Copy optional resources in the ${CMAKE_BINARY_DIR}/${MOD_NAME} directory.
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 if (MOD_RESOURCES)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 foreach (res ${MOD_RESOURCES})
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 get_filename_component(inputname ${res} NAME)
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 set(output ${CMAKE_BINARY_DIR}/${MOD_NAME}/${inputname})
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 add_custom_command(
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 OUTPUT ${output}
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 COMMENT "Copying ${inputname}"
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 DEPENDS ${res}
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 COMMAND ${CMAKE_COMMAND} -E copy ${res} ${output}
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 )
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 endforeach()
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 endif ()
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 #
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 # Finally create the executable and the test
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 )
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 PRIVATE
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 ${CMAKE_CURRENT_SOURCE_DIR}
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 ${MOD_INCLUDES}
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 endif ()
7ee8da32da98 Unify all in modules/
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 endif ()
487
d061bad36315 Fix various case-sensitive includes and resources not copied
David Demelier <markand@malikania.fr>
parents: 486
diff changeset
76 endfunction()