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()