diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 7dbd2d62f6..e1e06b04ea 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -170,6 +170,8 @@ if(NOT IS_ABSOLUTE ${INCLUDEDIR}) endif() message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") +set(IFCOPENSHELL_EXPORT_TARGETS "${PROJECT_NAME}Targets") + if(BUILD_SHARED_LIBS) add_definitions(-DIFC_SHARED_BUILD) if(MSVC) @@ -681,3 +683,5 @@ set(CPACK_DEBIAN_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") # set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/debian/postinst") include(CPack) + +include(package_export.cmake) diff --git a/cmake/IfcOpenShellConfig.cmake.in b/cmake/IfcOpenShellConfig.cmake.in new file mode 100644 index 0000000000..156aaa37da --- /dev/null +++ b/cmake/IfcOpenShellConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@CONFIG_TARGETS_FILENAME@") + +check_required_components("@PROJECT_NAME@") diff --git a/cmake/package_export.cmake b/cmake/package_export.cmake new file mode 100644 index 0000000000..6c9c233b90 --- /dev/null +++ b/cmake/package_export.cmake @@ -0,0 +1,35 @@ +set(CONFIG_PACKAGE_LOCATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") +set(CONFIG_NAMESPACE "${PROJECT_NAME}") +set(CONFIG_TARGETS_FILENAME ${PROJECT_NAME}Targets.cmake) +set(CONFIG_VERSION_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake") +set(CONFIG_PACKAGE_INPUT "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in") +set(CONFIG_PACKAGE_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake") + +# Allow linking against build directory. +export( + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + FILE ${CONFIG_TARGETS_FILENAME} + NAMESPACE ${CONFIG_NAMESPACE}:: +) + +install( + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + NAMESPACE ${CONFIG_NAMESPACE}:: + DESTINATION "${CONFIG_PACKAGE_LOCATION}" +) + + +include(CMakePackageConfigHelpers) +write_basic_package_version_file(${CONFIG_VERSION_OUTPUT} + COMPATIBILITY ExactVersion) + +configure_package_config_file(${CONFIG_PACKAGE_INPUT} + ${CONFIG_PACKAGE_OUTPUT} + INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION} +) + +install(FILES + "${CONFIG_PACKAGE_OUTPUT}" + "${CONFIG_VERSION_OUTPUT}" + DESTINATION ${CONFIG_PACKAGE_LOCATION} +) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index dd6a0040a2..4293a3222a 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -16,4 +16,6 @@ target_link_libraries(IfcConvert ${CGAL_LIBRARIES} ${GLTF_LIBRARIES} ) -install(TARGETS IfcConvert) +install(TARGETS IfcConvert + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 8ffd1e77c4..ff839663ea 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -31,8 +31,9 @@ if(NOT WASM_BUILD) target_link_libraries(IfcGeom IfcParse) endif() -install(TARGETS IfcGeom) - +install(TARGETS IfcGeom + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) install(FILES ${SCHEMA_AGNOSTIC_H_FILES} DESTINATION ${INCLUDEDIR}/ifcgeom -) \ No newline at end of file +) diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt index 9031c08148..84920be5c2 100644 --- a/src/ifcgeom/Serialization/CMakeLists.txt +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -11,6 +11,8 @@ install(FILES ${IFCGEOM_SERIALIZATION_H_FILE} DESTINATION ${INCLUDEDIR}/ifcgeom/Serialization ) -install(TARGETS geometry_serializer ${geometry_serializer_libraries}) +install(TARGETS geometry_serializer ${geometry_serializer_libraries} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 5ccb71f149..5b5aedc781 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -12,6 +12,9 @@ foreach(kernel ${GEOMETRY_KERNELS}) set_property(TARGET ${KERNEL_TARGET} APPEND PROPERTY COMPILE_FLAGS "-DIFC_GEOM_EXPORTS") list(APPEND kernel_libraries ${KERNEL_TARGET}) target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) + install(TARGETS ${KERNEL_TARGET} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + ) if(${kernel} STREQUAL "cgal") find_package(CGAL REQUIRED) @@ -24,6 +27,9 @@ foreach(kernel ${GEOMETRY_KERNELS}) list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL_INTERFACE) + install(TARGETS ${KERNEL_TARGET_SIMPLE} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + ) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) endif() diff --git a/src/ifcgeom/mapping/CMakeLists.txt b/src/ifcgeom/mapping/CMakeLists.txt index c5d283a2c1..5f7fd661ea 100644 --- a/src/ifcgeom/mapping/CMakeLists.txt +++ b/src/ifcgeom/mapping/CMakeLists.txt @@ -11,6 +11,9 @@ foreach(schema ${SCHEMA_VERSIONS}) target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen) list(APPEND mapping_libraries geometry_mapping_ifc${schema}) + install(TARGETS geometry_mapping_ifc${schema} + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} + ) endforeach() set(mapping_libraries ${mapping_libraries} PARENT_SCOPE) diff --git a/src/ifcgeomserver/CMakeLists.txt b/src/ifcgeomserver/CMakeLists.txt index ff56607ff2..15fdbbb3a6 100644 --- a/src/ifcgeomserver/CMakeLists.txt +++ b/src/ifcgeomserver/CMakeLists.txt @@ -5,4 +5,6 @@ set(SOURCE_FILES ${CPP_FILES}) add_executable(IfcGeomServer ${SOURCE_FILES}) target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OpenCASCADE_LIBRARIES}) -install(TARGETS IfcGeomServer) +install(TARGETS IfcGeomServer + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) diff --git a/src/ifcparse/CMakeLists.txt b/src/ifcparse/CMakeLists.txt index 88003d342d..f7d3f06f3b 100644 --- a/src/ifcparse/CMakeLists.txt +++ b/src/ifcparse/CMakeLists.txt @@ -53,4 +53,6 @@ install(FILES ${IFCPARSE_H_FILES} DESTINATION ${INCLUDEDIR}/ifcparse ) -install(TARGETS IfcParse) +install(TARGETS IfcParse + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index ed777d23a4..6da19bc586 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -72,5 +72,7 @@ if(WIN32) target_link_options(svgfill_exe PRIVATE "/NOIMPLIB") endif() -install(TARGETS svgfill_exe svgfill) +install(TARGETS svgfill_exe svgfill + EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} +) install(FILES ${LIB_H_FILES} DESTINATION ${INCLUDEDIR})