diff --git a/CMakeLists.txt b/CMakeLists.txt index a16751e6..d06216ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ project(clang-uml) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_VERBOSE_MAKEFILE OFF) +set(CMAKE_FIND_DEBUG_MODE OFF) # # clang-uml custom defines @@ -44,7 +45,6 @@ include(AddLLVM) message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") message(STATUS "LLVM library dir: ${LLVM_LIBRARY_DIR}") -link_directories(${LLVM_LIBRARY_DIR}) if(LINK_LLVM_SHARED) set(LIBTOOLING_LIBS clang-cpp LLVM) @@ -86,18 +86,25 @@ find_package(Threads REQUIRED) # Setup yaml-cpp # message(STATUS "Checking for yaml-cpp...") -find_package(yaml-cpp REQUIRED) +if(APPLE) +find_package(PkgConfig) +if(PKG_CONFIG_FOUND) + pkg_check_modules(YAML_CPP yaml-cpp) + find_path(YAML_CPP_INCLUDE_DIR + NAMES yaml.h + PATHS ${YAML_CPP_INCLUDE_DIR} /usr/local/include/yaml-cpp) + find_library(YAML_CPP_LIBRARY + NAMES yaml-cpp + PATHS ${YAML_CPP_LIBRARIES} /usr/local/lib) + set(YAML_CPP_LIBRARY_DIR /usr/local/lib) +endif() +else(APPLE) + find_package(yaml-cpp REQUIRED) +endif(APPLE) -#message(STATUS "Checking for libclang...") -#set(LLVM_PREFERRED_VERSION 14.0.0) -# Add -# -DLLVM_CONFIG_PATH=/path/to/llvm-config -# to use custom LLVM version -#find_package(LibClang REQUIRED) +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} -Werror -Wall -Wextra -std=c++17") - -message(STATUS "Using CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") +link_directories(${LLVM_LIBRARY_DIR} ${YAML_CPP_LIBRARY_DIR}) # # Setup thirdparty sources @@ -119,16 +126,17 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 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} -I${GCC_STDDEF_INCLUDE} -Wno-unused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${GCC_STDDEF_INCLUDE}") endif() +message(STATUS "Using CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") # # Setup include directories # include_directories(${LLVM_INCLUDE_DIRS}) include_directories(${CLANG_UML_INSTALL_INCLUDE_DIR}) -include_directories(${YAML_CPP_INCLUDE_DIR}) +include_directories(${YAML_CPP_INCLUDE_DIRS}) include_directories(${UML_HEADERS_DIR}) include_directories(${THIRDPARTY_HEADERS_DIR}) include_directories(${PROJECT_SOURCE_DIR}/src/) diff --git a/src/class_diagram/model/class.h b/src/class_diagram/model/class.h index 3a6291c4..f1633a5b 100644 --- a/src/class_diagram/model/class.h +++ b/src/class_diagram/model/class.h @@ -108,9 +108,9 @@ private: namespace std { template <> struct hash< - std::reference_wrapper> { + std::reference_wrapper> { std::size_t operator()(const std::reference_wrapper< - const clanguml::class_diagram::model::class_> &key) const + clanguml::class_diagram::model::class_> &key) const { using clanguml::common::id_t; diff --git a/src/class_diagram/model/diagram.cc b/src/class_diagram/model/diagram.cc index 7c6afe9f..1873ff3d 100644 --- a/src/class_diagram/model/diagram.cc +++ b/src/class_diagram/model/diagram.cc @@ -213,9 +213,9 @@ void diagram::get_parents( bool found_new{false}; for (const auto &parent : parents) { for (const auto &pp : parent.get().parents()) { - const auto p = get_class(pp.id()); + auto p = get_class(pp.id()); if (p.has_value()) { - auto [it, found] = parents.emplace(p.value()); + auto [it, found] = parents.emplace(std::ref(p.value())); if (found) found_new = true; } diff --git a/src/common/model/diagram_filter.h b/src/common/model/diagram_filter.h index e0e86e6c..8330519a 100644 --- a/src/common/model/diagram_filter.h +++ b/src/common/model/diagram_filter.h @@ -219,7 +219,7 @@ private: cd, element.get().path().to_string()); while (parent.has_value()) { - parents.emplace(std::ref(parent.value())); + parents.emplace(parent.value()); parent = detail::get( cd, parent.value().path().to_string()); } diff --git a/src/common/model/package.h b/src/common/model/package.h index 911fbab0..b113b36b 100644 --- a/src/common/model/package.h +++ b/src/common/model/package.h @@ -57,9 +57,9 @@ private: namespace std { template <> -struct hash> { +struct hash> { std::size_t operator()( - const std::reference_wrapper + const std::reference_wrapper &key) const { using clanguml::common::id_t; diff --git a/src/common/model/source_file.h b/src/common/model/source_file.h index 092e57b5..c8aeefba 100644 --- a/src/common/model/source_file.h +++ b/src/common/model/source_file.h @@ -144,9 +144,9 @@ template <> struct hash { namespace std { template <> struct hash< - std::reference_wrapper> { + std::reference_wrapper> { std::size_t operator()( - const std::reference_wrapper + const std::reference_wrapper &key) const { using clanguml::common::id_t; diff --git a/src/common/types.h b/src/common/types.h index f25ad344..9a6b6ef0 100644 --- a/src/common/types.h +++ b/src/common/types.h @@ -115,6 +115,6 @@ template using reference_vector = std::vector>; template -using reference_set = std::unordered_set>; +using reference_set = std::unordered_set>; } // namespace clang::common \ No newline at end of file diff --git a/src/include_diagram/generators/plantuml/include_diagram_generator.cc b/src/include_diagram/generators/plantuml/include_diagram_generator.cc index 0156c160..507b48da 100644 --- a/src/include_diagram/generators/plantuml/include_diagram_generator.cc +++ b/src/include_diagram/generators/plantuml/include_diagram_generator.cc @@ -103,7 +103,7 @@ void generator::generate(std::ostream &ostr) const // Generate files and folders util::for_each_if( - m_model, [this](const auto &f) { return true; }, + m_model, [](const auto &f) { return true; }, [this, &ostr](const auto &f) { generate(dynamic_cast(*f), ostr); }); diff --git a/src/util/util.cc b/src/util/util.cc index 5ab820b8..b6c9eecf 100644 --- a/src/util/util.cc +++ b/src/util/util.cc @@ -253,9 +253,11 @@ bool starts_with( normal_prefix /= element; } - return std::search(normal_path.begin(), normal_path.end(), - normal_prefix.begin(), - normal_prefix.end()) == normal_path.begin(); + auto normal_path_str = normal_path.string(); + auto normal_prefix_str = normal_prefix.string(); + return std::search(normal_path_str.begin(), normal_path_str.end(), + normal_prefix_str.begin(), + normal_prefix_str.end()) == normal_path_str.begin(); } template <> bool starts_with(const std::string &s, const std::string &prefix)