From d566ba6e1f0935b3406d72c2d5f88bf4c8014a7d Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Thu, 4 Dec 2025 19:15:41 +0100 Subject: [PATCH] cmake: Use correct proj target See-Also: https://proj.org/en/stable/development/cmake.html --- cmake/FindCGAL.cmake | 4 +-- cmake/FindPROJ.cmake | 63 ++++++++++++++++++++++++++++++++++ src/serializers/CMakeLists.txt | 4 +-- 3 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 cmake/FindPROJ.cmake diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index 1511d2be80..9aff5f14a0 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -47,7 +47,7 @@ else() set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") endif() find_package(CGAL CONFIG) - if(NOT CGAL::CGAL) + if(NOT CGAL_FOUND) message( FATAL_ERROR "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." @@ -56,5 +56,5 @@ else() message(STATUS "CGAL: found config at '${CGAL_DIR}'.") endif() -target_compile_definitions(CGAL::CGAL INTERFACE IFOPSH_WITH_CGAL) +target_compile_definitions(CGAL INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake new file mode 100644 index 0000000000..ead66f76e2 --- /dev/null +++ b/cmake/FindPROJ.cmake @@ -0,0 +1,63 @@ +# +# Input variables: +# - `PROJ_INCLUDE_DIR` +# - `PROJ_LIBRARIES` +# If input variables are not specified, try to find PROJ config. +# Input variables could also be provided as environment variables. +# +# Output variables: +# - `PROJ_INCLUDE_DIR` +# - `PROJ_LIBRARIES` +# + +# To avoid cyclic calls to this file +list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) + +UNIFY_ENVVARS_AND_CACHE(PROJ_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(PROJ_LIBRARIES) + +if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES)) + find_package(PROJ QUIET CONFIG) + + if(NOT PROJ_FOUND) + find_path(PROJ_INCLUDE_DIR proj.h + PATHS + /usr/include/proj + REQUIRED + ) + if(PROJ_INCLUDE_DIR) + message(STATUS "Found PROJ include files in: ${PROJ_INCLUDE_DIR}") + else() + message(FATAL_ERROR "Unable to find PROJ include directory, specify PROJ_INCLUDE_DIR manually.") + endif() + + find_library(PROJ_LIBRARY + NAMES proj + PATHS /usr/lib/x86_64-linux-gnu) + if(PROJ_LIBRARY) + message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}") + set(PROJ_LIBRARIES ${PROJ_LIBRARY}) + else() + 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}") + endif() +else() + find_library(PROJ_LIBRARY + NAMES proj + PATHS ${PROJ_LIBRARY_DIR}) + if(PROJ_LIBRARY) + message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}") + set(PROJ_LIBRARIES ${PROJ_LIBRARY}) + else() + message(FATAL_ERROR "Unable to find PROJ libraries in: ${PROJ_LIBRARY_DIR}") + endif() + + 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}) +endif() diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index c1d9c761f1..5d70971f92 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -9,12 +9,12 @@ set_target_properties(Serializers PROPERTIES COMPILE_FLAGS "-DSERIALIZERS_EXPORT set(SERIALIZER_SCHEMA_LIBRARIES Serializers ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE) if(WITH_PROJ) - find_package(proj REQUIRED) + find_package(PROJ REQUIRED) target_compile_definitions(Serializers PRIVATE "WITH_PROJ") if(PROJ_STATIC) target_compile_definitions(Serializers PRIVATE "PROJ_DLL=") endif() - target_link_libraries(Serializers PRIVATE proj::proj) + target_link_libraries(Serializers PRIVATE PROJ::proj) endif() target_link_libraries(Serializers