gil/test/header/CMakeLists.txt
Mateusz Łoskot 96df5442bc
Move tests of extensions inside test/ directory (#302)
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)
2019-09-26 11:43:13 +02:00

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)