Added header-dependency tests.
This commit is contained in:
		@@ -12,6 +12,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
				
			|||||||
add_library(spdlog INTERFACE)
 | 
					add_library(spdlog INTERFACE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
option(SPDLOG_BUILD_EXAMPLES "Build examples" OFF)
 | 
					option(SPDLOG_BUILD_EXAMPLES "Build examples" OFF)
 | 
				
			||||||
 | 
					option(SPDLOG_BUILD_TESTS "Build tests" OFF)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target_include_directories(
 | 
					target_include_directories(
 | 
				
			||||||
    spdlog
 | 
					    spdlog
 | 
				
			||||||
@@ -20,11 +21,17 @@ target_include_directories(
 | 
				
			|||||||
    "$<INSTALL_INTERFACE:include>"
 | 
					    "$<INSTALL_INTERFACE:include>"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(HEADER_BASE "${CMAKE_CURRENT_SOURCE_DIR}/include")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include(CTest)
 | 
				
			||||||
if(SPDLOG_BUILD_EXAMPLES)
 | 
					if(SPDLOG_BUILD_EXAMPLES)
 | 
				
			||||||
  enable_testing()
 | 
					 | 
				
			||||||
    add_subdirectory(example)
 | 
					    add_subdirectory(example)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(SPDLOG_BUILD_TESTS)
 | 
				
			||||||
 | 
					    add_subdirectory(tests)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Install ###
 | 
					### Install ###
 | 
				
			||||||
# * https://github.com/forexample/package-example
 | 
					# * https://github.com/forexample/package-example
 | 
				
			||||||
set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
 | 
					set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								tests/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								tests/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# Tests
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enable_testing()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Catch unit tests
 | 
				
			||||||
 | 
					add_library(catch INTERFACE)
 | 
				
			||||||
 | 
					target_include_directories(catch INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					file(GLOB catch_tests LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
 | 
				
			||||||
 | 
					add_executable(catch_tests ${catch_tests})
 | 
				
			||||||
 | 
					target_link_libraries(catch_tests spdlog)
 | 
				
			||||||
 | 
					add_test(NAME catch_tests COMMAND catch_tests)
 | 
				
			||||||
 | 
					file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/logs")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ensure headers include their own dependencies
 | 
				
			||||||
 | 
					add_subdirectory(header_dependencies)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										58
									
								
								tests/header_dependencies/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								tests/header_dependencies/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# Ensure all headers include all dependencies
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(IGNORED_HEADERS "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(COMMON_TEST_LIBRARIES spdlog)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_custom_target(header_dependencies)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					file(GLOB_RECURSE headers RELATIVE "${HEADER_BASE}" ${HEADER_BASE}/*.h)
 | 
				
			||||||
 | 
					set(test_index 0)
 | 
				
			||||||
 | 
					foreach(HEADER ${headers})
 | 
				
			||||||
 | 
					    # Sample of relevant variables computed here
 | 
				
			||||||
 | 
					    # HEADER: details/line_logger_impl.h
 | 
				
			||||||
 | 
					    # symbolname: spdlog_details_line_logger_impl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Compute symbolname
 | 
				
			||||||
 | 
					    string(REPLACE ".h" "" symbolname "${HEADER}")
 | 
				
			||||||
 | 
					    string(MAKE_C_IDENTIFIER "${symbolname}" symbolname)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    list(FIND IGNORED_HEADERS "${HEADER}" _index)
 | 
				
			||||||
 | 
					    # If we didn't explicitly ignore this and if we built this target
 | 
				
			||||||
 | 
					    if(${_index} EQUAL -1)
 | 
				
			||||||
 | 
					        #message(STATUS "${HEADER}: '${symbolname}'")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        set(extension cpp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Name the test and output file with a number, to dodge Windows path length limits.
 | 
				
			||||||
 | 
					        # Call it header, instead of test, to avoid polluting the 'executable namespace'
 | 
				
			||||||
 | 
					        set(test_name "header_${extension}_${test_index}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        set(source_file "${CMAKE_CURRENT_SOURCE_DIR}/main.${extension}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        add_executable(${test_name} "${source_file}")
 | 
				
			||||||
 | 
					        target_compile_definitions(${test_name} PRIVATE HEADER_TO_TEST="${HEADER}")
 | 
				
			||||||
 | 
					        target_include_directories(${test_name}
 | 
				
			||||||
 | 
					            PRIVATE
 | 
				
			||||||
 | 
					            ${BUILDTREE_HEADER_BASE}
 | 
				
			||||||
 | 
					            ${HEADER_BASE})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        set_target_properties(${test_name} PROPERTIES
 | 
				
			||||||
 | 
					            FOLDER "Header dependency tests")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        target_link_libraries(${test_name}
 | 
				
			||||||
 | 
					            PRIVATE
 | 
				
			||||||
 | 
					            ${COMMON_TEST_LIBRARIES}
 | 
				
			||||||
 | 
					            ${LIBRARIES_${symbolname}}
 | 
				
			||||||
 | 
					            ${LIBRARIES_${libname}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        add_test(NAME ${test_name}_builds COMMAND ${test_name})
 | 
				
			||||||
 | 
					        add_dependencies(header_dependencies ${test_name})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        math(EXPR test_index "${test_index} + 1")
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					endforeach()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								tests/header_dependencies/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tests/header_dependencies/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					#include HEADER_TO_TEST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char** argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								tests/header_dependencies/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								tests/header_dependencies/main.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					#include HEADER_TO_TEST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char *argv[]) { return 0; }
 | 
				
			||||||
		Reference in New Issue
	
	Block a user