Mercurial > code
diff cmake/CodeFunctions.cmake @ 486:7ee8da32da98
Unify all in modules/
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 13 Nov 2015 09:26:46 +0100 |
parents | |
children | d061bad36315 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/CodeFunctions.cmake Fri Nov 13 09:26:46 2015 +0100 @@ -0,0 +1,67 @@ +function(code_define_module) + set(options NO_TEST) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES RESOURCES LIBRARIES INCLUDES FLAGS) + + cmake_parse_arguments(MOD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT MOD_NAME) + message(FATAL_ERROR "Argument NAME is not set") + endif () + + string(TOUPPER ${MOD_NAME} optionname) + + # Tests are optional + if (NOT ${MOD_NO_TEST}) + # Create the option for enabling the test + option(WITH_${optionname} "Enable ${MOD_NAME}" On) + + if (WITH_${optionname}) + # Add the test executable + set(MAIN ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) + + if (NOT EXISTS ${MAIN}) + message(FATAL_ERROR "${MAIN} file does not exists") + endif () + + # + # Copy optional resources in the ${CMAKE_BINARY_DIR}/${MOD_NAME} directory. + # + if (MOD_RESOURCES) + foreach (res ${MOD_RESOURCES}) + get_filename_component(inputname ${res} NAME) + set(output ${CMAKE_BINARY_DIR}/${MOD_NAME}/${inputname}) + + add_custom_command( + OUTPUT ${output} + COMMENT "Copying ${inputname}" + DEPENDS ${res} + COMMAND ${CMAKE_COMMAND} -E copy ${res} ${output} + ) + + list(APPEND ${MOD_SOURCES} ${output}) + endforeach() + endif () + + # + # Finally create the executable and the test + # + add_executable(${MOD_NAME} ${MOD_SOURCES} ${MOD_RESOURCES} ${MAIN}) + + add_test( + NAME ${MOD_NAME}-test + COMMAND ${MOD_NAME} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) + + target_compile_definitions(${MOD_NAME} PRIVATE ${MOD_FLAGS}) + target_include_directories( + ${MOD_NAME} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${MOD_INCLUDES} + ) + target_link_libraries(${MOD_NAME} gtest ${MOD_LIBRARIES}) + endif () + endif () +endfunction() \ No newline at end of file