96df5442bc
Split header tests accordingly i.e. test core headers as part of
core tests, numeric extension headers as part of numeric tests, etc.
It extends the convention of sub-directories already established in
`include/boost/gil` directory. It is sensible to follow it in other
areas of the source tree (i.e. `test/`, `doc/` and `benchmark/`).
Another important reason to move the tests is to enable removal of
the top-level `Jamfile` with all its definitions of test-specific
requirements.
The top-level `Jamfile` is not advised, especially if it specifies
build requirements like C++ language version.
Those affect non-tests builds e.g. documentation, causing failures
during generation of HTML documentation (leads to missing docs).
(cherry picked from develop branch commit 4ed7701b47
)
107 lines
3.4 KiB
CMake
107 lines
3.4 KiB
CMake
#
|
|
# Copyright (c) 2018 Mateusz Loskot <mateusz at loskot dot net>
|
|
#
|
|
# 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)
|
|
#
|
|
|
|
# List headers in order: concepts, core, io, extensions
|
|
file(GLOB_RECURSE _hpp_concepts RELATIVE
|
|
"${CMAKE_SOURCE_DIR}/include/boost/gil"
|
|
"${CMAKE_SOURCE_DIR}/include/boost/gil/concepts/*.hpp")
|
|
list(APPEND _headers ${_hpp_concepts})
|
|
|
|
file(GLOB _hpp_core RELATIVE
|
|
"${CMAKE_SOURCE_DIR}/include/boost/gil"
|
|
"${CMAKE_SOURCE_DIR}/include/boost/gil/*.hpp")
|
|
list(APPEND _headers ${_hpp_core})
|
|
|
|
list(APPEND _ext_dirs extension/dynamic_image/)
|
|
if(GIL_ENABLE_EXT_NUMERIC)
|
|
list(APPEND _ext_dirs extension/numeric)
|
|
endif()
|
|
if(GIL_ENABLE_EXT_TOOLBOX)
|
|
list(APPEND _ext_dirs extension/toolbox)
|
|
endif()
|
|
if(GIL_ENABLE_EXT_IO)
|
|
list(APPEND _ext_dirs io)
|
|
list(APPEND _ext_dirs extension/io)
|
|
endif()
|
|
|
|
foreach(_dir ${_ext_dirs})
|
|
file(GLOB_RECURSE _hpp RELATIVE
|
|
"${CMAKE_SOURCE_DIR}/include/boost/gil"
|
|
"${CMAKE_SOURCE_DIR}/include/boost/gil/${_dir}/*.hpp")
|
|
list(APPEND _headers ${_hpp})
|
|
endforeach()
|
|
|
|
if(NOT GIL_ENABLE_EXT_IO_RAW)
|
|
list(FILTER _headers EXCLUDE REGEX "\\/raw[\\.\\/]")
|
|
endif()
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Target: test_headers_self_contained
|
|
# Bundles all targets of self-contained header tests,
|
|
# functional equivalent to self-contained header tests defined in Jamfile.
|
|
#-----------------------------------------------------------------------------
|
|
message(STATUS "Boost.GIL: Configuring self-contained header tests for all headers")
|
|
add_custom_target(test_headers_self_contained)
|
|
|
|
file(READ ${CMAKE_CURRENT_LIST_DIR}/main.cpp _main_content)
|
|
|
|
foreach(_header ${_headers})
|
|
string(REPLACE ".hpp" "" _target ${_header})
|
|
string(REPLACE "/" "-" _target ${_target})
|
|
set(_cpp ${CMAKE_BINARY_DIR}/test/headers/${_target}.cpp)
|
|
set(_target test_header_${_target})
|
|
|
|
string(REPLACE "BOOST_GIL_TEST_HEADER" "${_header}" _content "${_main_content}")
|
|
file(WRITE ${_cpp} "${_content}")
|
|
unset(_content)
|
|
|
|
add_executable(${_target})
|
|
|
|
target_sources(${_target}
|
|
PRIVATE
|
|
${_cpp}
|
|
${CMAKE_SOURCE_DIR}/include/boost/gil/${_header})
|
|
unset(_cpp)
|
|
|
|
target_link_libraries(${_target}
|
|
PRIVATE
|
|
gil_compile_options
|
|
gil_include_directories
|
|
gil_dependencies)
|
|
|
|
add_dependencies(test_headers_self_contained ${_target})
|
|
|
|
unset(_target)
|
|
endforeach()
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Target: test_headers_all_in_one
|
|
# Verifies compilation of all headers included in one translation unit.
|
|
# An extra advantage is that such translation unit can be analysed with clang-tidy, etc.
|
|
#-----------------------------------------------------------------------------
|
|
message(STATUS "Boost.GIL: Configuring all-in-one headers test for all headers")
|
|
|
|
set(_cpp ${CMAKE_BINARY_DIR}/test/headers/test_headers_all_in_one.cpp)
|
|
file(WRITE ${_cpp} "// All headers included in one translation unit\n")
|
|
foreach(_header ${_headers})
|
|
file(APPEND ${_cpp} "#include <boost/gil/${_header}>\n")
|
|
endforeach()
|
|
unset(_headers)
|
|
file(APPEND ${_cpp} "int main() { return 0; }\n")
|
|
|
|
add_executable(test_headers_all_in_one)
|
|
|
|
target_sources(test_headers_all_in_one PRIVATE ${_cpp})
|
|
unset(_cpp)
|
|
|
|
target_link_libraries(test_headers_all_in_one
|
|
PRIVATE
|
|
gil_compile_options
|
|
gil_include_directories
|
|
gil_dependencies)
|