view cmake/function/MalikaniaDefineTest.cmake @ 200:0a285d62ace7

windows: initial VS2017 support While here, do some cleanup in CMake files for a better hierarchy.
author David Demelier <markand@malikania.fr>
date Wed, 28 Nov 2018 22:01:55 +0100
parents 74afc5a41c83
children c973501abe36
line wrap: on
line source

#
# MalikaniaDefineTest.cmake -- CMake build system for malikania
#
# Copyright (c) 2013-2018 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.
#

#
# malikania_create_test
# ---------------------
#
# malikania_create_test(
#       NAME            Test name (must be lowercase)
#       SOURCES         Test sources files
#       LIBRARIES       (Optional) Libraries to link to
#       FLAGS           (Optional) Add list of compile definitions
# )
#
# This will generate a target named test-<name> where name is the parameter
# NAME.
#
# The variables CMAKE_SOURCE_DIR, CMAKE_BINARY_DIR, CMAKE_CURRENT_SOURCE_DIR
# and CMAKE_CURRENT_BINARY_DIR are automatically set.
#

include(CMakeParseArguments)

function(malikania_create_test)
	set(singleArgs NAME)
	set(multiArgs FLAGS LIBRARIES SOURCES RESOURCES)

	cmake_parse_arguments(TEST "" "${singleArgs}" "${multiArgs}" ${ARGN})

	if (NOT TEST_NAME)
		message(FATAL_ERROR "Missing NAME parameter")
	endif ()
	if (NOT TEST_SOURCES)
		message(FATAL_ERROR "Missing SOURCES parameter")
	endif ()

	add_executable(test-${TEST_NAME} ${TEST_SOURCES})
	target_compile_definitions(
		test-${TEST_NAME}
		PRIVATE
			CMAKE_CURRENT_BINARY_DIR="${CMAKE_CURRENT_BINARY_DIR}"
			CMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
			CMAKE_BINARY_DIR="${CMAKE_BINARY_DIR}"
			CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}"
			${TEST_FLAGS}
	)

	set_target_properties(test-${TEST_NAME} PROPERTIES FOLDER "tests")

	add_test(
		NAME ${TEST_NAME}
		COMMAND $<TARGET_FILE:test-${TEST_NAME}>
		WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME}
	)

	target_link_libraries(
		test-${TEST_NAME}
		${TEST_LIBRARIES}
		Boost::boost
		Boost::dynamic_linking
		Boost::disable_autolinking
		Boost::unit_test_framework
	)
endfunction()