From 046ceb452a664f1c39e8abf51b07b11d332df239 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 19 Apr 2026 12:32:18 +0200 Subject: [PATCH] Tighten scope of cmake vars and dirs --- cmake/CMakeLists.txt | 50 +++---------------------------------- cmake/FindOpenCOLLADA.cmake | 7 +++--- cmake/FindPROJ.cmake | 18 ++++++++----- cmake/FindUSD.cmake | 3 --- src/ifcgeom/CMakeLists.txt | 12 +++++++++ src/ifcparse/CMakeLists.txt | 14 +++++++++++ 6 files changed, 46 insertions(+), 58 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 446344953c..2207c96dc8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -197,10 +197,6 @@ endforeach() if(WITH_CGAL) find_package(CGAL REQUIRED) - if(TARGET CGAL::CGAL) - link_libraries(CGAL::CGAL) - endif() - add_definitions(-DIFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) list(APPEND GEOMETRY_KERNELS cgal) endif() @@ -209,7 +205,6 @@ if(BUILD_IFCGEOM AND WITH_OPENCASCADE) find_package(OpenCASCADE REQUIRED) # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OpenCASCADE_LIBRARIES used by kernel generic cmake file set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) - add_definitions(-DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) list(APPEND GEOMETRY_KERNELS opencascade) endif() @@ -225,8 +220,6 @@ if(BUILD_IFCGEOM AND WITH_MANIFOLD) else() message(FATAL_ERROR "Unable to determine manifold target") endif() - add_definitions(-DIFOPSH_WITH_MANIFOLD) - set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_MANIFOLD) list(APPEND GEOMETRY_KERNELS manifold) endif() @@ -235,29 +228,7 @@ if(BUILD_IFCGEOM) endif() if(GLTF_SUPPORT) - UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR) - if(NOT JSON_INCLUDE_DIR) - find_package(nlohmann_json CONFIG) - if(nlohmann_json_DIR) - link_libraries(nlohmann_json::nlohmann_json) - else() - message(STATUS "Unable to find nlohmann_json package, trying to find it as a header-only library.") - endif() - endif() - - if(NOT nlohmann_json_DIR) - find_path(json_header_path "nlohmann/json.hpp" HINTS ${JSON_INCLUDE_DIR}) - set(JSON_INCLUDE_DIR ${json_header_path}) - - if(json_header_path) - message(STATUS "JSON for Modern C++ header file found in '${JSON_INCLUDE_DIR}'.") - else() - message(FATAL_ERROR "Unable to find JSON for Modern C++ header file / package, aborting") - endif() - endif() - - add_definitions(-DWITH_GLTF) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_GLTF) + find_package(nlohmann_json REQUIRED) endif() # Add USD support to serializers @@ -280,9 +251,6 @@ if (WITH_ROCKSDB) endif() message(STATUS "RocksDB: found at '${RocksDB_DIR}'.") - add_definitions(-DIFOPSH_WITH_ROCKSDB) - set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB) - link_libraries(RocksDB::rocksdb) if (WITH_ZSTD) # @todo do we actually need the zstd include dir or rather just pass @@ -290,10 +258,6 @@ if (WITH_ROCKSDB) # detect based on rocksdb API? find_package(zstd CONFIG REQUIRED) message(STATUS "zstd: found at '${zstd_DIR}'.") - link_libraries(zstd::libzstd_static) - - add_definitions(-DIFOPSH_WITH_ROCKSDB_ZSTD) - set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB_ZSTD) endif() endif() @@ -340,8 +304,6 @@ if(USE_MMAP) else() set(BOOST_COMPONENTS ${BOOST_COMPONENTS} iostreams) endif() - - add_definitions(-DUSE_MMAP) endif() find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) @@ -354,9 +316,6 @@ endif() if(HDF5_SUPPORT) find_package(HDF5 REQUIRED COMPONENTS C CXX) - - add_definitions(-DWITH_HDF5) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_HDF5) endif(HDF5_SUPPORT) if(ENABLE_BUILD_OPTIMIZATIONS) @@ -469,10 +428,9 @@ else() endif() endif(MSVC) -include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} - ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} - ${TBB_INCLUDE_DIR} +include_directories(${INCLUDE_DIRECTORIES} + ${Boost_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR} + ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ) if(NOT SCHEMA_VERSIONS) diff --git a/cmake/FindOpenCOLLADA.cmake b/cmake/FindOpenCOLLADA.cmake index f261f51e7d..94b8fffd1a 100644 --- a/cmake/FindOpenCOLLADA.cmake +++ b/cmake/FindOpenCOLLADA.cmake @@ -139,7 +139,8 @@ if(NOT OpenCOLLADA_DIR) endif() endif(NOT OpenCOLLADA_DIR) -if(OPENCOLLADA_FOUND) - add_definitions(-DWITH_OPENCOLLADA) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_OPENCOLLADA) +if(OPENCOLLADA_FOUND AND NOT TARGET OpenCOLLADA::OpenCOLLADA) + add_library(OpenCOLLADA::OpenCOLLADA INTERFACE IMPORTED) + target_include_directories(OpenCOLLADA::OpenCOLLADA INTERFACE ${OPENCOLLADA_INCLUDE_DIRS}) + target_link_libraries(OpenCOLLADA::OpenCOLLADA INTERFACE ${OPENCOLLADA_LIBRARIES}) endif() diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake index 14829987c6..eac494fe48 100644 --- a/cmake/FindPROJ.cmake +++ b/cmake/FindPROJ.cmake @@ -6,7 +6,7 @@ # Input variables could also be provided as environment variables. # # Output targets: -# - `PROJ::proj` +# - `proj::proj` # # To avoid cyclic calls to this file @@ -34,10 +34,12 @@ if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES)) message(FATAL_ERROR "Unable to find PROJ libraries in: ${PROJ_LIBRARY_DIR}") endif() - add_library(PROJ::proj INTERFACE IMPORTED) - target_include_directories(PROJ::proj INTERFACE "${PROJ_INCLUDE_DIR}") - target_link_libraries(PROJ::proj INTERFACE ${PROJ_LIBRARIES}) - target_link_directories(PROJ::proj INTERFACE "${PROJ_LIBRARY}") + if(NOT TARGET proj::proj) + add_library(proj::proj INTERFACE IMPORTED) + target_include_directories(proj::proj INTERFACE "${PROJ_INCLUDE_DIR}") + target_link_libraries(proj::proj INTERFACE ${PROJ_LIBRARIES}) + target_link_directories(proj::proj INTERFACE "${PROJ_LIBRARY}") + endif() endif() else() find_library(PROJ_LIBRARY NAMES proj PATHS ${PROJ_LIBRARY_DIR}) @@ -50,7 +52,11 @@ else() set(PROJ_INCLUDE_DIR ${PROJ_INCLUDE_DIR} CACHE FILEPATH "PROJ header files") message(STATUS "Looking for PROJ include files in: ${PROJ_INCLUDE_DIR}") - include_directories(${PROJ_INCLUDE_DIR}) + if(NOT TARGET proj::proj) + add_library(proj::proj INTERFACE IMPORTED) + target_include_directories(proj::proj INTERFACE "${PROJ_INCLUDE_DIR}") + target_link_libraries(proj::proj INTERFACE ${PROJ_LIBRARIES}) + endif() endif() list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) diff --git a/cmake/FindUSD.cmake b/cmake/FindUSD.cmake index 3616cca52c..6e02f0789f 100644 --- a/cmake/FindUSD.cmake +++ b/cmake/FindUSD.cmake @@ -64,7 +64,6 @@ set(USD_LIBRARIES find_library(USD_LIBRARY NAMES ${USD_LIBRARIES} PATHS ${USD_LIBRARY_DIR}) if(USD_LIBRARY) message(STATUS "USD libraries ${USD_LIBRARIES} found in: ${USD_LIBRARY_DIR}") - link_directories(${USD_LIBRARY_DIR}) else() message(FATAL_ERROR "Unable to find USD libraries in: ${USD_LIBRARY_DIR}") endif() @@ -82,5 +81,3 @@ if(MSVC) endif() target_compile_definitions(pxr::USD INTERFACE PXR_STATIC WITH_USD) - -set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_USD) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 9dc9045dec..a179a659cc 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -14,6 +14,18 @@ add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES}) add_library(geometry ALIAS IfcGeom) set_target_properties(IfcGeom PROPERTIES COMPILE_FLAGS -DIFC_GEOM_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") target_compile_definitions(IfcGeom PRIVATE BOOST_DLL_USE_STD_FS SERIALIZERS_EXPORTS) +if(WITH_CGAL) + target_compile_definitions(IfcGeom PUBLIC IFOPSH_WITH_CGAL) +endif() +if(WITH_OPENCASCADE) + target_compile_definitions(IfcGeom PUBLIC IFOPSH_WITH_OPENCASCADE) +endif() +if(WITH_MANIFOLD) + target_compile_definitions(IfcGeom PUBLIC IFOPSH_WITH_MANIFOLD) +endif() +if(HDF5_SUPPORT) + target_compile_definitions(IfcGeom PUBLIC WITH_HDF5) +endif() if(UNIX) find_package(Threads) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index 166a1b0944..b9113fa4db 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -36,6 +36,13 @@ set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES}) add_library(IfcParse ${IFCPARSE_FILES}) add_library(parse ALIAS IfcParse) target_compile_definitions(IfcParse PUBLIC ${SCHEMA_DEFINITIONS}) +if(USE_MMAP) + target_compile_definitions(IfcParse PUBLIC USE_MMAP) +endif() +if(WITH_ROCKSDB) + target_compile_definitions(IfcParse PUBLIC IFOPSH_WITH_ROCKSDB) + set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB PARENT_SCOPE) +endif() set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") if(WASM_BUILD) @@ -44,6 +51,13 @@ else() target_link_libraries(IfcParse plugin ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES}) endif() +if(WITH_ROCKSDB) + target_link_libraries(IfcParse RocksDB::rocksdb) + if(WITH_ZSTD) + target_link_libraries(IfcParse zstd::libzstd_static) + endif() +endif() + # CMake installation targets install(FILES ${IFCPARSE_H_FILES} DESTINATION ${INCLUDEDIR}/ifcparse