88 lines
2.8 KiB
CMake
88 lines
2.8 KiB
CMake
|
# Copyright 2018, 2019 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
|
||
|
|
||
|
# Include BoostTest outside the include guard for it to clear its global variables
|
||
|
include(BoostTest)
|
||
|
|
||
|
if(NOT CMAKE_VERSION VERSION_LESS 3.10)
|
||
|
include_guard()
|
||
|
endif()
|
||
|
|
||
|
if(BUILD_TESTING AND CMAKE_VERSION VERSION_LESS 3.9)
|
||
|
message(AUTHOR_WARNING "BoostTestJamfile requires CMake 3.9") # CMAKE_MATCH_x
|
||
|
endif()
|
||
|
|
||
|
include(BoostMessage)
|
||
|
|
||
|
# boost_test_jamfile( FILE jamfile [PREFIX prefix]
|
||
|
# LINK_LIBRARIES libs...
|
||
|
# COMPILE_DEFINITIONS defs...
|
||
|
# COMPILE_OPTIONS opts...
|
||
|
# COMPILE_FEATURES features...
|
||
|
# INCLUDE_DIRECTORIES dirs...
|
||
|
# )
|
||
|
|
||
|
function(boost_test_jamfile)
|
||
|
|
||
|
cmake_parse_arguments(_
|
||
|
""
|
||
|
"FILE;PREFIX"
|
||
|
"LIBRARIES;LINK_LIBRARIES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;COMPILE_FEATURES;INCLUDE_DIRECTORIES"
|
||
|
${ARGN})
|
||
|
|
||
|
if(__UNPARSED_ARGUMENTS)
|
||
|
message(AUTHOR_WARNING "boost_test_jamfile: extra arguments ignored: ${__UNPARSED_ARGUMENTS}")
|
||
|
endif()
|
||
|
|
||
|
if(__LIBRARIES)
|
||
|
message(AUTHOR_WARNING "boost_test_jamfile: LIBRARIES is deprecated, use LINK_LIBRARIES")
|
||
|
endif()
|
||
|
|
||
|
if(NOT __FILE)
|
||
|
message(AUTHOR_WARNING "boost_test_jamfile: required argument FILE is missing")
|
||
|
return()
|
||
|
endif()
|
||
|
|
||
|
if(DEFINED BUILD_TESTING AND NOT BUILD_TESTING)
|
||
|
return()
|
||
|
endif()
|
||
|
|
||
|
file(STRINGS "${__FILE}" data)
|
||
|
|
||
|
set(types "compile|compile-fail|link|link-fail|run|run-fail")
|
||
|
|
||
|
foreach(line IN LISTS data)
|
||
|
# Extract type and remaining part, (silently) ignore any other line
|
||
|
if(line MATCHES "^[ \t]*(${types})([ \t].*|$)")
|
||
|
set(type ${CMAKE_MATCH_1})
|
||
|
set(args ${CMAKE_MATCH_2}) # This starts with a space
|
||
|
|
||
|
if(args MATCHES "^[ \t]+([^ \t]+)[ \t]*(;[ \t]*)?$")
|
||
|
# Single source, e.g. 'run foo.c ;'
|
||
|
# Semicolon is optional to support e.g. 'run mytest.cpp\n : : : something ;' (ignore 'something')
|
||
|
set(sources ${CMAKE_MATCH_1})
|
||
|
elseif(args MATCHES "^(([ \t]+[a-zA-Z0-9_]+\.cpp)+)[ \t]*(;[ \t]*)?$")
|
||
|
# Multiple sources with restricted names to avoid false positives, e.g. 'run foo.cpp bar.cpp ;'
|
||
|
# Again with optional semicolon
|
||
|
string(STRIP "${CMAKE_MATCH_1}" sources)
|
||
|
# Convert space-separated list into CMake list
|
||
|
string(REGEX REPLACE "\.cpp[ \t]+" ".cpp;" sources "${sources}")
|
||
|
else()
|
||
|
boost_message(VERBOSE "boost_test_jamfile: Jamfile line ignored: ${line}")
|
||
|
continue()
|
||
|
endif()
|
||
|
|
||
|
boost_test(PREFIX "${__PREFIX}" TYPE "${type}"
|
||
|
SOURCES ${sources}
|
||
|
LINK_LIBRARIES ${__LIBRARIES} ${__LINK_LIBRARIES}
|
||
|
COMPILE_DEFINITIONS ${__COMPILE_DEFINITIONS}
|
||
|
COMPILE_OPTIONS ${__COMPILE_OPTIONS}
|
||
|
COMPILE_FEATURES ${__COMPILE_FEATURES}
|
||
|
INCLUDE_DIRECTORIES ${__INCLUDE_DIRECTORIES}
|
||
|
)
|
||
|
endif()
|
||
|
|
||
|
endforeach()
|
||
|
endfunction()
|