mirror of
https://github.com/boostorg/cmake.git
synced 2026-01-26 18:32:39 +00:00
Change the RegEx to match "whitespace+filename"-elements instead of the other way round as there might be no trailing whitespace when the semicolon is on the next line.
82 lines
2.7 KiB
CMake
82 lines
2.7 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...
|
|
# )
|
|
|
|
function(boost_test_jamfile)
|
|
|
|
cmake_parse_arguments(_ "" "FILE;PREFIX" "LIBRARIES;LINK_LIBRARIES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;COMPILE_FEATURES" ${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}
|
|
)
|
|
endif()
|
|
|
|
endforeach()
|
|
endfunction()
|