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