Mercurial > code
changeset 516:cc50a80dc163
CMake: change code_define_module and rename the CMake file
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 01 Jun 2016 16:18:36 +0200 |
parents | 409cf1aa4af9 |
children | 00f1789a49fa |
files | CMakeLists.txt cmake/CodeDefineModule.cmake cmake/CodeFunctions.cmake |
diffstat | 3 files changed, 85 insertions(+), 87 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Wed Jun 01 15:41:22 2016 +0200 +++ b/CMakeLists.txt Wed Jun 01 16:18:36 2016 +0200 @@ -16,23 +16,15 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # -# -# This CMakeLists build system is primarily used for testing all -# modules. -# -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.5) project(code) -set(CMAKE_MODULE_PATH ${code_SOURCE_DIR}/cmake) - -include(CMakeParseArguments) -include(CodeFunctions) +include(${code_SOURCE_DIR}/cmake/CodeDefineModule.cmake) add_subdirectory(extern) - enable_testing() -# Doxygen target +# Doxygen target. find_package(Doxygen) if (DOXYGEN_FOUND)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/CodeDefineModule.cmake Wed Jun 01 16:18:36 2016 +0200 @@ -0,0 +1,82 @@ +# +# CMakeLists.txt -- code building for common code +# +# Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +# +# code_define_module +# ------------------------------------------------------------------- +# +# code_define_module( +# NAME lowercase name +# SOURCES source files +# LIBRARIES (Optional) libraries +# INCLUDES (Optional) include directories +# FLAGS (Optional) flags +# ) +# +# Create a test for the given module. +# +# This macro adds a new option WITH_<uppercase NAME> to test the module. +# +# If the module has a file test/main.cpp in its directory, a target test-<NAME> is created. +# + +include(CMakeParseArguments) + +function(code_define_module) + set(oneValueArgs NAME) + set(multiValueArgs SOURCES LIBRARIES INCLUDES FLAGS) + + cmake_parse_arguments(MOD "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT MOD_NAME) + message(FATAL_ERROR "Argument NAME is not set") + endif () + + # Create the option for enabling the test. + string(TOUPPER ${MOD_NAME} optionname) + option(WITH_${optionname} "Enable ${MOD_NAME}" On) + + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp AND WITH_${optionname}) + # Create test executable. + add_executable(test-${MOD_NAME} ${MOD_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) + set_target_properties( + test-${MOD_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} + ) + target_compile_definitions(test-${MOD_NAME} PRIVATE ${MOD_FLAGS}) + target_include_directories( + test-${MOD_NAME} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${MOD_INCLUDES} + ) + target_link_libraries(test-${MOD_NAME} gtest ${MOD_LIBRARIES}) + + # Register the test. + add_test( + NAME ${MOD_NAME} + COMMAND test-${MOD_NAME} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) + endif () +endfunction()
--- a/cmake/CodeFunctions.cmake Wed Jun 01 15:41:22 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -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(test-${MOD_NAME} ${MOD_SOURCES} ${MOD_RESOURCES} ${MAIN}) - - add_test( - NAME ${MOD_NAME} - COMMAND test-${MOD_NAME} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - ) - - set_target_properties( - test-${MOD_NAME} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} - ) - target_compile_definitions(test-${MOD_NAME} PRIVATE ${MOD_FLAGS}) - target_include_directories( - test-${MOD_NAME} - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR} - ${MOD_INCLUDES} - ) - target_link_libraries(test-${MOD_NAME} gtest ${MOD_LIBRARIES}) - endif () - endif () -endfunction()