diff --git a/cmake/SpecMiCPDepends.cmake b/cmake/SpecMiCPDepends.cmake index f040af6..6366c0d 100644 --- a/cmake/SpecMiCPDepends.cmake +++ b/cmake/SpecMiCPDepends.cmake @@ -1,42 +1,55 @@ # Eigen # ----- find_package(Eigen3 REQUIRED) # This module comes from the Eigen3 Package message(STATUS "Eigen3 version ${EIGEN3_VERSION}") # optional find_package(Eigen3Unsupported) add_library(Eigen::eigen INTERFACE IMPORTED) set_property(TARGET Eigen::eigen PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${EIGEN3_INCLUDE_DIR}) # HDF5 # ---- # HDF5 is required and used by all modules for output # # Only the C serial API is used find_package(HDF5 REQUIRED COMPONENTS C) add_library(HDF5::hdf5 UNKNOWN IMPORTED) set_property(TARGET HDF5::hdf5 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIRS} ) set_property(TARGET HDF5::hdf5 PROPERTY IMPORTED_LOCATION ${HDF5_C_LIBRARY_hdf5} ) # Yaml-cpp # -------- # YAML-cpp library is required and used by all modules for configuration # and data storage # YAML-CPP does not provide a CMake find module. # Instead, we use pkgconfig include(FindPkgConfig) pkg_check_modules(YAML REQUIRED IMPORTED_TARGET yaml-cpp>=0.5) + +# cmake < 3.6 + +if(NOT TARGET PkgConfig::YAML) + add_library(PkgConfig::YAML UNKNOWN IMPORTED) + set_property(TARGET PkgConfig::YAML PROPERTY + INTERFACE_INCLUDE_DIRECTORIES ${YAML_INCLUDE_DIRS} + ) + set_property(TARGET PkgConfig::YAML PROPERTY + IMPORTED_LOCATION ${YAML_LIBRARY_DIRS}/${YAML_LIBRARIES} + ) +endif() + diff --git a/src/specmicp_database/CMakeLists.txt b/src/specmicp_database/CMakeLists.txt index ef481bb..baee654 100644 --- a/src/specmicp_database/CMakeLists.txt +++ b/src/specmicp_database/CMakeLists.txt @@ -1,138 +1,138 @@ # The database # ============ # var to store the files set(specmicp_database_srcs "" CACHE INTERNAL "specmicp_database files" FORCE) set(specmicp_database_headers "" CACHE INTERNAL "specmicp_database headers" FORCE ) # macro to add to vars macro(add_to_database_srcs_list LIST_NAME) set(tmp "") foreach (src ${${LIST_NAME}}) list(APPEND tmp ${CMAKE_CURRENT_SOURCE_DIR}/${src}) endforeach(src) set(specmicp_database_srcs "${specmicp_database_srcs};${tmp}" CACHE INTERNAL "specmicp_database files" FORCE) endmacro(add_to_database_srcs_list) macro(add_to_database_headers_list LIST_NAME) set( tmp "") foreach(header ${${LIST_NAME}}) LIST(APPEND tmp ${CMAKE_CURRENT_SOURCE_DIR}/${header}) endforeach(header) set(specmicp_database_headers "${specmicp_database_headers};${tmp}" CACHE INTERNAL "specmicp_database headers" FORCE) endmacro(add_to_database_headers_list) # database libraries # ------------------ set(specmicp_database_main_srcs appender.cpp aqueous_selector.cpp data_container.cpp database.cpp mineral_selector.cpp module.cpp oxydo_selector.cpp reader_common.cpp selector.cpp switch_basis.cpp unknown_class.cpp yaml_reader.cpp yaml_writer.cpp ) set(specmicp_database_main_headers appender.hpp aqueous_selector.hpp config_database.hpp data_container.hpp database.hpp database_fwd.hpp database_holder.hpp errors.hpp mineral_selector.hpp module.hpp oxydo_selector.hpp reader_common.hpp section_name.hpp selector.hpp switch_basis.hpp unknown_class.hpp yaml_reader.hpp yaml_writer.hpp ) add_to_database_srcs_list(specmicp_database_main_srcs) add_to_database_headers_list(specmicp_database_main_headers) INSTALL(FILES ${specmicp_database_main_headers} DESTINATION ${INCLUDE_INSTALL_DIR}/specmicp_database ) # add_subdirectory(io) add_subdirectory(species) # build library # ============= set_visibility_flag(${specmicp_database_srcs}) set_pgo_flag(${specmicp_database_srcs}) add_library(objspecmicp_database OBJECT ${specmicp_database_srcs} ${specmicp_database_headers} ) target_include_directories(objspecmicp_database PUBLIC ${EIGEN3_INCLUDE_DIR} ${HDF5_INCLUDE_DIRS} ${YAML_INCLUDE_DIRS}) set_property(TARGET objspecmicp_database PROPERTY POSITION_INDEPENDENT_CODE 1) set_property(TARGET objspecmicp_database PROPERTY CXX_STANDARD ${SPECMICP_CXX_STANDARD}) set_property(TARGET objspecmicp_database PROPERTY CXX_STANDARD_REQUIRED ON) add_library(specmicp_database SHARED $) target_link_libraries(specmicp_database PUBLIC specmicp_common) -target_link_libraries(specmicp_database PRIVATE ${YAML_LIBRARIES}) +target_link_libraries(specmicp_database PUBLIC PkgConfig::YAML) spc_set_cxx_version_interface(specmicp_database) install(TARGETS specmicp_database EXPORT ${SPECMICP_TARGET} LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR} ) # static libraries # ---------------- if(SPECMICP_BUILD_STATIC) add_library(specmicp_database_static STATIC $ ) install(TARGETS specmicp_database_static EXPORT ${SPECMICP_TARGET} ARCHIVE DESTINATION ${STATIC_LIBRARY_INSTALL_DIR} ) else() add_library(specmicp_database_static EXCLUDE_FROM_ALL STATIC $ ) endif() set_target_properties(specmicp_database_static PROPERTIES OUTPUT_NAME specmicp_database ) spc_set_cxx_version_interface(specmicp_database_static) target_link_libraries(specmicp_database_static PUBLIC specmicp_common_static) -target_link_libraries(specmicp_database_static PUBLIC ${YAML_LIBRARIES}) +target_link_libraries(specmicp_database_static PUBLIC PkgConfig::YAML)