diff --git a/CMakeLists.txt b/CMakeLists.txt index ce5e66e5..15bf1602 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,17 +3,27 @@ cmake_minimum_required(VERSION 3.12) # # Project name # -project(clang-uml) +project(clang-uml C CXX) # # CMake standard defines # +set(CMAKE_DISABLE_SOURCE_CHANGES ON) +set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_STANDARD 17) set(CMAKE_VERBOSE_MAKEFILE OFF) set(CMAKE_FIND_DEBUG_MODE OFF) + +# +# C++ setup +# +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + if(APPLE) - set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) + set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES + ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) endif(APPLE) # @@ -22,41 +32,21 @@ endif(APPLE) set(CLANG_UML_INSTALL_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) set(CLANG_UML_INSTALL_BIN_DIR ${PROJECT_SOURCE_DIR}/bin) set(UML_HEADERS_DIR ${PROJECT_SOURCE_DIR}/src/uml) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") # # CMake build options # -option(LINK_LLVM_SHARED "Should LLVM be linked using shared libraries or statically" ON) +option(LINK_LLVM_SHARED "Should LLVM be linked using shared libraries" ON) set(LLVM_VERSION CACHE STRING "Path to custom llvm-config executable") # # Setup version string # -find_package(Git) - -if(NOT DEFINED GIT_VERSION) - if(GIT_EXECUTABLE) - execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --always --abbrev=7 - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_VERSION - RESULT_VARIABLE GIT_ERROR_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endif(GIT_EXECUTABLE) -endif(NOT DEFINED GIT_VERSION) - -if(NOT DEFINED GIT_VERSION) - set(GIT_VERSION "0.0.0-unknown") -endif(NOT DEFINED GIT_VERSION) - -string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.(.+)" - GIT_VERSION_MATCH ${GIT_VERSION}) -set(GIT_VERSION_MAJOR ${CMAKE_MATCH_1}) -set(GIT_VERSION_MINOR ${CMAKE_MATCH_2}) -set(GIT_VERSION_PATCH ${CMAKE_MATCH_3}) - -message(STATUS "clang-uml version: ${GIT_VERSION_MAJOR}.${GIT_VERSION_MINOR}.${GIT_VERSION_PATCH}") +include(GitVersion) +setup_git_version() +message(STATUS "clang-uml version: " + "${GIT_VERSION_MAJOR}.${GIT_VERSION_MINOR}.${GIT_VERSION_PATCH}") # # Setup LLVM @@ -170,32 +160,6 @@ link_directories(${LLVM_LIBRARY_DIR} ${YAML_CPP_LIBRARY_DIR}) # set(THIRDPARTY_HEADERS_DIR ${PROJECT_SOURCE_DIR}/thirdparty/) -# -# Configure clang-uml executable version -# -file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src/version) -configure_file(src/version.h.in ${PROJECT_BINARY_DIR}/src/version/version.h) - -# -# Handle various compiler quirks -# -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - execute_process(COMMAND gcc --print-file-name=include - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE GCC_STDDEF_INCLUDE) - message(STATUS "FOUND GCC STDDEF INCLUDE ${GCC_STDDEF_INCLUDE}") - include_directories(${GCC_STDDEF_INCLUDE}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -std=c++17 -Wno-unused-parameter -Wno-unused-private-field") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${GCC_STDDEF_INCLUDE}") -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -std=c++17 -Wno-unused-parameter -Wno-unused-private-field") -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLLVM_FORCE_USE_OLD_TOOLCHAIN /W1 /std:c++17 /bigobj /wd4291 /wd4624 /wd4244") - set(LINK_OPTIONS "${LINK_OPTIONS} /NODEFAULTLIB:MSVCRT /NODEFAULTLIB:MSVCRTD") -endif() - -message(STATUS "Using CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") - # # Setup include directories # @@ -207,71 +171,7 @@ include_directories(${THIRDPARTY_HEADERS_DIR}) include_directories(${PROJECT_SOURCE_DIR}/src/) include_directories(${PROJECT_BINARY_DIR}/src/version) -# -# Generate source list dynamically -# -file(GLOB_RECURSE SOURCES src/*.cc include/*.h) -set(MAIN_SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc) -list(REMOVE_ITEM SOURCES ${MAIN_SOURCE_FILE}) - -# -# Define library target for linking with test cases and output executable -# -if(MSVC) - add_library(clang-umllib STATIC ${SOURCES}) - set(MSVC_LIBRARIES "version") -else(MSVC) - add_library(clang-umllib OBJECT ${SOURCES}) -endif(MSVC) - -# -# Define the target executable clang-uml -# -add_executable(clang-uml ${MAIN_SOURCE_FILE}) - -target_link_libraries(clang-uml - ${YAML_CPP_LIBRARIES} - ${LIBTOOLING_LIBS} - ${MSVC_LIBRARIES} - clang-umllib - Threads::Threads) - -target_compile_features(clang-uml PRIVATE cxx_std_17) - -# -# Setup install options -# -include(GNUInstallDirs) - -install(TARGETS clang-uml DESTINATION ${CMAKE_INSTALL_BINDIR}) -install(FILES LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) -install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) - -# -# Setup installer -# -set(CPACK_PACKAGE_NAME "clang-uml") -set(CPACK_PACKAGE_VENDOR "Bartek Kryza ") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "clang-uml - C++ UML diagram generator based on Clang") -set(CPACK_PACKAGE_VERSION "${GIT_VERSION}") -set(CPACK_PACKAGE_VERSION_MAJOR "${GIT_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${GIT_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${GIT_VERSION_PATCH}") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "clang-uml") -set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md) - -if(MSVC) - set(CPACK_GENERATOR "NSIS") - set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) - set(CPACK_NSIS_DISPLAY_NAME "clang-uml") - set(CPACK_NSIS_HELP_LINK "https://github.com/bkryza/clang-uml") - set(CPACK_NSIS_URL_INFO_ABOUT "https://github.com/bkryza/clang-uml") - set(CPACK_NSIS_CONTACT "Bartek Kryza ") - set(CPACK_NSIS_MODIFY_PATH ON) - set(CPACK_SOURCE_GENERATOR "ZIP") -endif(MSVC) - -include(CPack) +add_subdirectory(src) # # Enable testing via CTest diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 00000000..f43bc470 --- /dev/null +++ b/build.ps1 @@ -0,0 +1,10 @@ +param ($Prefix="C:\clang-uml", $BuildType="Release") + +cmake -S . -B $BuildType -DCMAKE_PREFIX_PATH="$Prefix" -Thost=x64 +cmake --build $BuildType --config $BuildType + +# Create compile commands in Visual Studio +# before running these tests +cd $BuildType +ctest -C $BuildType --output-on-failure +cd .. \ No newline at end of file diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake new file mode 100644 index 00000000..690c695b --- /dev/null +++ b/cmake/GitVersion.cmake @@ -0,0 +1,25 @@ +find_package(Git) + +function(setup_git_version) + if(NOT DEFINED GIT_VERSION) + if(GIT_EXECUTABLE) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --always --abbrev=7 + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_VERSION + RESULT_VARIABLE GIT_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endif(GIT_EXECUTABLE) + endif(NOT DEFINED GIT_VERSION) + + if(NOT DEFINED GIT_VERSION) + set(GIT_VERSION "0.0.0-unknown" PARENT_SCOPE) + endif(NOT DEFINED GIT_VERSION) + + string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.(.+)" + GIT_VERSION_MATCH ${GIT_VERSION}) + set(GIT_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) + set(GIT_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) + set(GIT_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) +endfunction() \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..290c95f9 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,87 @@ +# +# Configure clang-uml executable version +# +file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src/version) +configure_file(${CMAKE_CURRENT_LIST_DIR}/version.h.in + ${PROJECT_BINARY_DIR}/src/version/version.h) + +# +# Generate source list dynamically +# +file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_LIST_DIR}/*.cc) +set(MAIN_SOURCE_FILE ${CMAKE_CURRENT_LIST_DIR}/main.cc) +list(REMOVE_ITEM SOURCES ${MAIN_SOURCE_FILE}) + +# +# Define library target for linking with test cases and output executable +# +if(MSVC) + add_library(clang-umllib STATIC ${SOURCES}) + set(MSVC_LIBRARIES "version") +else(MSVC) + add_library(clang-umllib OBJECT ${SOURCES}) +endif(MSVC) + +target_compile_features(clang-umllib INTERFACE cxx_std_17) +target_compile_options(clang-umllib PRIVATE + $<$,$>: + -Werror -Wall -Wextra -Wno-unused-parameter -Wno-unused-private-field> + $<$:/MP /W1 /bigobj /wd4291 /wd4624 /wd4244>) +target_compile_definitions(clang-umllib PRIVATE + $<$: + -DLLVM_FORCE_USE_OLD_TOOLCHAIN>) + +# +# Define the target executable clang-uml +# +add_executable(clang-uml ${MAIN_SOURCE_FILE}) + +target_compile_features(clang-uml PUBLIC cxx_std_17) +target_compile_options(clang-uml PRIVATE + $<$,$>: + -Werror -Wall -Wextra -Wno-unused-parameter -Wno-unused-private-field> + $<$:/MP /W1 /bigobj /wd4291 /wd4624 /wd4244>) +target_link_libraries(clang-uml + ${YAML_CPP_LIBRARIES} + ${LIBTOOLING_LIBS} + ${MSVC_LIBRARIES} + clang-umllib + Threads::Threads) + +# +# Setup install options +# +include(GNUInstallDirs) + +install(TARGETS clang-uml DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) +install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) +install(FILES AUTHORS.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) +install(FILES CHANGELOG.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) + +# +# Setup installer +# +set(CPACK_PACKAGE_NAME "clang-uml") +set(CPACK_PACKAGE_VENDOR "Bartek Kryza ") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "clang-uml - C++ UML diagram generator based on Clang") +set(CPACK_PACKAGE_VERSION "${GIT_VERSION}") +set(CPACK_PACKAGE_VERSION_MAJOR "${GIT_VERSION_MAJOR}") +set(CPACK_PACKAGE_VERSION_MINOR "${GIT_VERSION_MINOR}") +set(CPACK_PACKAGE_VERSION_PATCH "${GIT_VERSION_PATCH}") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "clang-uml") +set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE.md) + +if(MSVC) + set(CPACK_GENERATOR "NSIS") + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) + set(CPACK_NSIS_DISPLAY_NAME "clang-uml") + set(CPACK_NSIS_HELP_LINK "https://github.com/bkryza/clang-uml") + set(CPACK_NSIS_URL_INFO_ABOUT "https://github.com/bkryza/clang-uml") + set(CPACK_NSIS_CONTACT "Bartek Kryza ") + set(CPACK_NSIS_MODIFY_PATH ON) + set(CPACK_SOURCE_GENERATOR "ZIP") +endif(MSVC) + +include(CPack) diff --git a/src/class_diagram/visitor/translation_unit_visitor.cc b/src/class_diagram/visitor/translation_unit_visitor.cc index 2f84b579..0364c88b 100644 --- a/src/class_diagram/visitor/translation_unit_visitor.cc +++ b/src/class_diagram/visitor/translation_unit_visitor.cc @@ -1135,9 +1135,14 @@ void translation_unit_visitor::ensure_lambda_type_is_relative( #ifdef _MSC_VER auto root_name = fmt::format( "{}\\", std::filesystem::current_path().root_name().string()); + if (root_name.back() == '\\') { + root_name.pop_back(); + root_name.push_back('/'); + } #else auto root_name = std::string{"/"}; #endif + std::string lambda_prefix{fmt::format("(lambda at {}", root_name)}; while (parameter_type.find(lambda_prefix) != std::string::npos) { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 6edf1c76..ded8a48b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,27 +1,3 @@ -cmake_minimum_required(VERSION 3.12) - -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - -set(CMAKE_CXX_STANDARD 17) - -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(TEST_DISABLE_WARNINGS_DEBUG "-Wno-unused-parameter -Wno-unused-private-field -Wno-unused-variable -Wno-attributes -Wno-nonnull") - set(TEST_DISABLE_WARNINGS_RELEASE "${TEST_DISABLE_WARNINGS} -Wno-aggressive-loop-optimizations") -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(TEST_DISABLE_WARNINGS_DEBUG "-Wno-unused-parameter -Wno-unused-private-field -Wno-unused-variable -Wno-attributes -Wno-nonnull") - set(TEST_DISABLE_WARNINGS_RELEASE "${TEST_DISABLE_WARNINGS} -Wno-aggressive-loop-optimizations") -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W1 /std:c++17 /bigobj /wd4624") -endif() - -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} ${LIBCLANG_CXXFLAGS} ${TEST_DISABLE_WARNINGS_RELEASE}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} ${LIBCLANG_CXXFLAGS} ${TEST_DISABLE_WARNINGS_DEBUG}") - -if(APPLE) - # Without this, clang-uml test cases fail with error saying that clang cannot find stdarg.h - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -I${LLVM_LIBRARY_DIR}/clang/${LLVM_PACKAGE_VERSION}/include") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -I${LLVM_LIBRARY_DIR}/clang/${LLVM_PACKAGE_VERSION}/include") -endif(APPLE) file(GLOB_RECURSE TEST_CASE_SOURCES t*/*.cc) file(GLOB_RECURSE TEST_CASE_CONFIGS t*/.clang-uml) @@ -37,55 +13,35 @@ if(MSVC) list(APPEND CLANG_UML_TEST_LIBRARIES "Version.lib") endif(MSVC) +set(TEST_CASES + test_util + test_model + test_cases + test_decorator_parser + test_config + test_filters + test_thread_pool_executor) -set(CLANG_UML_TEST_UTIL_SRC test_util.cc ${TEST_UTIL_SOURCES}) -set(CLANG_UML_TEST_UTIL_HEADER catch.h) - -set(CLANG_UML_TEST_MODEL_SRC test_model.cc ${TEST_MODEL_SOURCES}) -set(CLANG_UML_TEST_MODEL_HEADER catch.h) - -set(CLANG_UML_TEST_CASES_SRC test_cases.cc ${TEST_CASE_SOURCES}) -set(CLANG_UML_TEST_CASES_HEADER catch.h) - -set(CLANG_UML_TEST_DECORATOR_PARSER_SRC test_decorator_parser.cc ${TEST_UTIL_SOURCES}) -set(CLANG_UML_TEST_DECORATOR_PARSER_HEADER catch.h) - -set(CLANG_UML_TEST_CONFIG_SRC test_config.cc ${TEST_UTIL_SOURCES}) -set(CLANG_UML_TEST_CONFIG_HEADER catch.h) - -set(CLANG_UML_TEST_FILTERS_SRC test_filters.cc ${TEST_FILTERS_SOURCES}) -set(CLANG_UML_TEST_FILTERS_HEADER catch.h) - -set(CLANG_UML_TEST_THREAD_POOL_EXECUTOR_SRC test_thread_pool_executor.cc) -set(CLANG_UML_TEST_THREAD_POOL_EXECUTOR_HEADER catch.h) - -add_executable(test_util ${CLANG_UML_TEST_UTIL_SRC} ${CLANG_UML_TEST_UTIL_HEADER}) -target_link_libraries(test_util PRIVATE ${CLANG_UML_TEST_LIBRARIES}) - -add_executable(test_model ${CLANG_UML_TEST_MODEL_SRC} ${CLANG_UML_TEST_MODEL_HEADER}) -target_link_libraries(test_model PRIVATE ${CLANG_UML_TEST_LIBRARIES}) - -add_executable(test_decorator_parser ${CLANG_UML_TEST_DECORATOR_PARSER_SRC} ${CLANG_UML_TEST_DECORATOR_PARSER_HEADER}) -target_link_libraries(test_decorator_parser PRIVATE ${CLANG_UML_TEST_LIBRARIES}) - -add_executable(test_config ${CLANG_UML_TEST_CONFIG_SRC} ${CLANG_UML_TEST_CONFIG_HEADER}) -target_link_libraries(test_config PRIVATE ${CLANG_UML_TEST_LIBRARIES}) - -add_executable(test_filters ${CLANG_UML_TEST_FILTERS_SRC} ${CLANG_UML_TEST_FILTERS_HEADER}) -target_link_libraries(test_filters PRIVATE ${CLANG_UML_TEST_LIBRARIES}) - -add_executable(test_thread_pool_executor ${CLANG_UML_TEST_THREAD_POOL_EXECUTOR_SRC} ${CLANG_UML_TEST_THREAD_POOL_EXECUTOR_HEADER}) -target_link_libraries(test_thread_pool_executor PRIVATE ${CLANG_UML_TEST_LIBRARIES}) - -add_executable(test_cases ${CLANG_UML_TEST_CASES_SRC} ${CLANG_UML_TEST_CASES_HEADER}) -target_link_libraries(test_cases PRIVATE ${CLANG_UML_TEST_LIBRARIES}) +foreach(TEST_NAME ${TEST_CASES}) + add_executable(${TEST_NAME} + ${TEST_NAME}.cc + $<$:${TEST_CASE_SOURCES}> + catch.h) + target_compile_features(${TEST_NAME} PRIVATE cxx_std_17) + target_compile_options(${TEST_NAME} PRIVATE + $<$,$>: + -Wno-unused-parameter -Wno-unused-private-field -Wno-unused-variable + -Wno-attributes -Wno-nonnull> + $<$:/MP /W1 /bigobj /wd4624>) + target_link_libraries(${TEST_NAME} PRIVATE ${CLANG_UML_TEST_LIBRARIES}) +endforeach() foreach(TEST_CASE_CONFIG ${TEST_CASE_CONFIGS}) file(RELATIVE_PATH TEST_CASE_CONFIG_RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${TEST_CASE_CONFIG}) - message(${TEST_CASE_CONFIG_RELATIVE}) + message(DEBUG ${TEST_CASE_CONFIG_RELATIVE}) configure_file( ${TEST_CASE_CONFIG_RELATIVE} ${TEST_CASE_CONFIG_RELATIVE} @@ -97,17 +53,13 @@ foreach(TEST_CONFIG_YML ${TEST_CONFIG_YMLS}) TEST_CONFIG_YML_RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${TEST_CONFIG_YML}) - message(${TEST_CONFIG_YML_RELATIVE}) + message(DEBUG ${TEST_CONFIG_YML_RELATIVE}) configure_file( ${TEST_CONFIG_YML_RELATIVE} ${TEST_CONFIG_YML_RELATIVE} COPYONLY) endforeach() -add_test(NAME test_util COMMAND test_util) -add_test(NAME test_decorator_parser COMMAND test_decorator_parser) -add_test(NAME test_config COMMAND test_config) -add_test(NAME test_model COMMAND test_model) -add_test(NAME test_thread_pool_executor COMMAND test_thread_pool_executor) -add_test(NAME test_cases COMMAND test_cases) -add_test(NAME test_filters COMMAND test_filters) +foreach(TEST_NAME ${TEST_CASES}) + add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME}) +endforeach() diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 42448016..c8e8ef3b 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -37,13 +37,19 @@ load_config(const std::string &test_name) { auto config = clanguml::config::load(test_name + "/.clang-uml", true); + LOG_DBG("Loading compilation database from {}", + config.compilation_database_dir()); + std::string err{}; auto compilation_database = clang::tooling::CompilationDatabase::autoDetectFromDirectory( config.compilation_database_dir(), err); - if (!err.empty()) + if (!err.empty()) { + LOG_ERROR("Failed to load compilation database from {}", + config.compilation_database_dir()); throw std::runtime_error{err}; + } return std::make_pair(std::move(config), std::move(compilation_database)); }