first
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(spdlog_tweakme_consumer LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
if(SPDLOG_TEST_INSTALLED)
|
||||
find_package(spdlog CONFIG REQUIRED)
|
||||
|
||||
add_executable(package-compiled main.cpp)
|
||||
target_link_libraries(package-compiled PRIVATE spdlog::spdlog)
|
||||
|
||||
add_executable(package-header-only main.cpp)
|
||||
target_link_libraries(package-header-only PRIVATE spdlog::spdlog_header_only)
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
add_executable(raw-header-only main.cpp)
|
||||
target_include_directories(raw-header-only PRIVATE "${SPDLOG_TEST_PREFIX}/include")
|
||||
target_link_libraries(raw-header-only PRIVATE Threads::Threads)
|
||||
else()
|
||||
set(SPDLOG_GENERATE_TWEAKME_H ON CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_NO_THREAD_ID ON CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_NO_TLS ON CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_DISABLE_DEFAULT_LOGGER ON CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_BUILD_SHARED ${SPDLOG_TEST_SHARED} CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_INSTALL ON CACHE BOOL "" FORCE)
|
||||
add_subdirectory("${SPDLOG_TEST_SOURCE_DIR}" spdlog)
|
||||
|
||||
add_executable(source-compiled main.cpp)
|
||||
target_link_libraries(source-compiled PRIVATE spdlog::spdlog)
|
||||
|
||||
add_executable(source-header-only main.cpp)
|
||||
target_link_libraries(source-header-only PRIVATE spdlog::spdlog_header_only)
|
||||
endif()
|
||||
@@ -0,0 +1,19 @@
|
||||
#include <spdlog/spdlog.h>
|
||||
|
||||
#ifndef SPDLOG_TWEAKME_H_GENERATED
|
||||
#error The generated tweakme.h must be selected before the source header
|
||||
#endif
|
||||
|
||||
#ifndef SPDLOG_NO_THREAD_ID
|
||||
#error SPDLOG_NO_THREAD_ID must be provided by the generated tweakme.h
|
||||
#endif
|
||||
|
||||
#ifndef SPDLOG_NO_TLS
|
||||
#error SPDLOG_NO_TLS must be provided by the generated tweakme.h
|
||||
#endif
|
||||
|
||||
#ifndef SPDLOG_DISABLE_DEFAULT_LOGGER
|
||||
#error SPDLOG_DISABLE_DEFAULT_LOGGER must be provided by the generated tweakme.h
|
||||
#endif
|
||||
|
||||
int main() { return 0; }
|
||||
@@ -0,0 +1,66 @@
|
||||
function(run_checked description)
|
||||
execute_process(COMMAND ${ARGN} RESULT_VARIABLE result OUTPUT_VARIABLE output ERROR_VARIABLE error)
|
||||
if(NOT result EQUAL 0)
|
||||
message(FATAL_ERROR "${description} failed (${result}):\n${output}\n${error}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(configure_checked description source_dir build_dir)
|
||||
file(MAKE_DIRECTORY "${build_dir}")
|
||||
execute_process(
|
||||
COMMAND "${CMAKE_COMMAND}" ${ARGN} "${source_dir}"
|
||||
WORKING_DIRECTORY "${build_dir}"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE output
|
||||
ERROR_VARIABLE error)
|
||||
if(NOT result EQUAL 0)
|
||||
message(FATAL_ERROR "${description} failed (${result}):\n${output}\n${error}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(test_tweakme_configuration library_type shared)
|
||||
set(build_dir "${SPDLOG_TEST_BINARY_DIR}/${library_type}/build")
|
||||
set(prefix "${SPDLOG_TEST_BINARY_DIR}/${library_type}/prefix")
|
||||
set(consumer_dir "${SPDLOG_TEST_BINARY_DIR}/${library_type}/consumer")
|
||||
file(REMOVE_RECURSE "${SPDLOG_TEST_BINARY_DIR}/${library_type}")
|
||||
|
||||
set(generator_args -G "${SPDLOG_TEST_GENERATOR}")
|
||||
if(SPDLOG_TEST_GENERATOR_PLATFORM)
|
||||
list(APPEND generator_args -A "${SPDLOG_TEST_GENERATOR_PLATFORM}")
|
||||
endif()
|
||||
if(SPDLOG_TEST_GENERATOR_TOOLSET)
|
||||
list(APPEND generator_args -T "${SPDLOG_TEST_GENERATOR_TOOLSET}")
|
||||
endif()
|
||||
|
||||
set(common_args
|
||||
"-DCMAKE_CXX_COMPILER=${SPDLOG_TEST_CXX_COMPILER}"
|
||||
"-DCMAKE_BUILD_TYPE=${SPDLOG_TEST_CONFIG}")
|
||||
|
||||
configure_checked(
|
||||
"Configure ${library_type} source-tree consumer"
|
||||
"${CMAKE_CURRENT_LIST_DIR}/tweakme" "${build_dir}" ${generator_args} ${common_args}
|
||||
"-DSPDLOG_TEST_SOURCE_DIR=${SPDLOG_TEST_SOURCE_DIR}" "-DSPDLOG_TEST_SHARED=${shared}"
|
||||
"-DCMAKE_INSTALL_PREFIX=${prefix}")
|
||||
run_checked("Build ${library_type} source-tree consumer" "${CMAKE_COMMAND}" --build "${build_dir}" --config
|
||||
"${SPDLOG_TEST_CONFIG}")
|
||||
run_checked("Install ${library_type} spdlog" "${CMAKE_COMMAND}" --build "${build_dir}" --target install --config
|
||||
"${SPDLOG_TEST_CONFIG}")
|
||||
|
||||
set(installed_tweakme "${prefix}/include/spdlog/tweakme.h")
|
||||
file(READ "${installed_tweakme}" tweakme_contents)
|
||||
foreach(expected_macro SPDLOG_NO_THREAD_ID SPDLOG_NO_TLS SPDLOG_DISABLE_DEFAULT_LOGGER)
|
||||
if(NOT tweakme_contents MATCHES "#define ${expected_macro}([\r\n]|$)")
|
||||
message(FATAL_ERROR "${installed_tweakme} does not define ${expected_macro}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
configure_checked(
|
||||
"Configure ${library_type} installed consumers"
|
||||
"${CMAKE_CURRENT_LIST_DIR}/tweakme" "${consumer_dir}" ${generator_args} ${common_args}
|
||||
-DSPDLOG_TEST_INSTALLED=ON "-DSPDLOG_TEST_PREFIX=${prefix}" "-DCMAKE_PREFIX_PATH=${prefix}")
|
||||
run_checked("Build ${library_type} installed consumers" "${CMAKE_COMMAND}" --build "${consumer_dir}" --config
|
||||
"${SPDLOG_TEST_CONFIG}")
|
||||
endfunction()
|
||||
|
||||
test_tweakme_configuration(static OFF)
|
||||
test_tweakme_configuration(shared ON)
|
||||
Reference in New Issue
Block a user