Files
mincmake/cmake/boost_test.cmake
2019-01-11 05:53:39 +02:00

109 lines
3.3 KiB
CMake

# Copyright 2018 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
function(boost_test)
cmake_parse_arguments(_ "" "TYPE;PREFIX;NAME" "SOURCES;LIBRARIES;ARGUMENTS" ${ARGN})
if(NOT __TYPE)
set(__TYPE run)
endif()
if(NOT __PREFIX)
set(__PREFIX ${PROJECT_NAME})
endif()
if(NOT __NAME)
list(GET __SOURCES 0 __NAME)
string(MAKE_C_IDENTIFIER ${__NAME} __NAME)
endif()
set(__NAME ${__PREFIX}-${__NAME})
if(__TYPE STREQUAL "compile" OR __TYPE STREQUAL "compile-fail")
add_library(${__NAME} EXCLUDE_FROM_ALL ${__SOURCES})
target_link_libraries(${__NAME} ${__LIBRARIES})
add_test(NAME compile-${__NAME} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${__NAME})
if(__TYPE STREQUAL "compile-fail")
set_tests_properties(compile-${__NAME} PROPERTIES WILL_FAIL TRUE)
endif()
elseif(__TYPE STREQUAL "link")
add_executable(${__NAME} EXCLUDE_FROM_ALL ${__SOURCES})
target_link_libraries(${__NAME} ${__LIBRARIES})
add_test(NAME link-${__NAME} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${__NAME})
elseif(__TYPE STREQUAL "link-fail")
add_library(compile-${__NAME} EXCLUDE_FROM_ALL ${__SOURCES})
target_link_libraries(compile-${__NAME} ${__LIBRARIES})
add_test(NAME compile-${__NAME} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target compile-${__NAME})
add_executable(${__NAME} EXCLUDE_FROM_ALL ${__SOURCES})
target_link_libraries(${__NAME} ${__LIBRARIES})
add_test(NAME link-${__NAME} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${__NAME})
set_tests_properties(link-${__NAME} PROPERTIES WILL_FAIL TRUE)
elseif(__TYPE STREQUAL "run" OR __TYPE STREQUAL "run-fail")
add_executable(${__NAME} EXCLUDE_FROM_ALL ${__SOURCES})
target_link_libraries(${__NAME} ${__LIBRARIES})
add_test(NAME compile-${__NAME} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${__NAME})
add_test(NAME run-${__NAME} COMMAND ${__NAME} ${__ARGUMENTS})
set_tests_properties(run-${__NAME} PROPERTIES DEPENDS compile-${__NAME})
if(__TYPE STREQUAL "run-fail")
set_tests_properties(run-${__NAME} PROPERTIES WILL_FAIL TRUE)
endif()
endif()
endfunction(boost_test)
function(boost_test_jamfile)
cmake_parse_arguments(_ "" "FILE;PREFIX" "LIBRARIES" ${ARGN})
file(STRINGS ${__FILE} data)
set(types compile compile-fail link link-fail run run-fail)
foreach(line IN LISTS data)
if(line)
string(REGEX MATCHALL "[^ ]+" ll ${line})
if(ll)
list(GET ll 0 e0)
if(e0 IN_LIST types)
list(LENGTH ll lln)
if(NOT lln EQUAL 2)
message("Jamfile line ignored: ${line}")
else()
list(GET ll 1 e1)
boost_test(PREFIX ${__PREFIX} TYPE ${e0} SOURCES ${e1} LIBRARIES ${__LIBRARIES})
endif()
endif()
endif()
endif()
endforeach(line)
endfunction(boost_test_jamfile)