From 396bda49e2eaa01b3c7440625d7fcf7cdf33b9e5 Mon Sep 17 00:00:00 2001 From: Stefan Goetschi Date: Sat, 27 Jul 2024 15:47:18 +0200 Subject: [PATCH] Allow findinging XercesC with CMake's FindXercesC.cmake. This avoids explicitly specifying the library path for regularly installed versions of XercesC. Alternatively, the path needs to be specified only once by adding the path to XercesC to CMake's search paths with -DCMAKE_SYSTEM_PREFIX_PATH=. --- README.md | 2 +- sources/CMakeLists.txt | 16 +++++++++++++--- test/CMakeLists.txt | 11 +++++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d517b6f5..57042ffe 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ The project is based on the CMAKE build system and should be pretty straight for Dependencies: -The XercesC xml parsing library is the only requirement compiling and using libcitygml. Please use a version > 3.1 compiled with an SDK that is compatible with C++11. +The XercesC xml parsing library is the only requirement compiling and using libcitygml. Please use a version > 3.1 compiled with an SDK that is compatible with C++11. If the library is not found by CMake use `-DCMAKE_SYSTEM_PREFIX_PATH=`. OpenGL is required if you want to use the tesselator provided in the project. Otherwise, you can provide another implementation by inheriting TesselatorBase, or not use tesselation. Set the cmake option "LIBCITYGML_USE_OPENGL" to OFF to disable the use of OpenGL. diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index cda87ee7..8a1c8f84 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -11,7 +11,10 @@ IF( LIBCITYGML_USE_OPENGL) ELSE( LIBCITYGML_USE_OPENGL ) SET( GLU_INCLUDE_PATH "" ) ENDIF( LIBCITYGML_USE_OPENGL ) -FIND_PACKAGE( Xerces REQUIRED ) +FIND_PACKAGE( XercesC ) +IF( NOT XercesC_FOUND ) + FIND_PACKAGE( Xerces REQUIRED ) +ENDIF( NOT XercesC_FOUND) # gdal library OPTION(LIBCITYGML_USE_GDAL "Set to ON to build libcitygml with GDAL library so that it supports coordinates transformations." ON) @@ -50,9 +53,11 @@ configure_file("${CMAKE_MODULE_PATH}/citygml_api.h.in" ${CMAKE_CURRENT_SOURCE_DI SET(EXPORT_HEADER_FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR}/include/citygml/citygml_export.h) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/include - ${XERCESC_INCLUDE} ${GLU_INCLUDE_PATH} ${GDAL_INCLUDE_DIR}) +IF ( NOT XercesC_FOUND ) + INCLUDE_DIRECTORIES( ${XERCESC_INCLUDE}) +ENDIF ( NOT XercesC_FOUND ) SET(SOURCES src/citygml/attributesmap.cpp @@ -225,7 +230,12 @@ generate_export_header(citygml EXPORT_MACRO_NAME LIBCITYGML_EXPORT EXPORT_FILE_NAME ${EXPORT_HEADER_FILE_NAME}) -TARGET_LINK_LIBRARIES( ${target} PUBLIC ${XERCESC_LIBRARIES} ) +if(XercesC_FOUND) + TARGET_LINK_LIBRARIES( ${target} PUBLIC XercesC::XercesC) +else(XercesC_FOUND) + TARGET_LINK_LIBRARIES( ${target} PUBLIC ${XERCESC_LIBRARIES} ) +endif(XercesC_FOUND) + if(LIBCITYGML_USE_OPENGL) TARGET_LINK_LIBRARIES( ${target} PUBLIC ${OPENGL_LIBRARIES} ) endif(LIBCITYGML_USE_OPENGL) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 07fd643e..a9b7aaf7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -5,7 +5,10 @@ ENDIF() IF( LIBCITYGML_USE_OPENGL) FIND_PACKAGE( OpenGL REQUIRED ) ENDIF( LIBCITYGML_USE_OPENGL ) -FIND_PACKAGE( Xerces REQUIRED ) +FIND_PACKAGE( XercesC ) +IF( NOT XercesC_FOUND ) + FIND_PACKAGE( Xerces REQUIRED ) +ENDIF( NOT XercesC_FOUND) IF( LIBCITYGML_DYNAMIC ) ADD_DEFINITIONS( -DLIBCITYGML_DYNAMIC ) @@ -20,7 +23,11 @@ SET( PRG_SRCS citygmltest.cpp ) ADD_EXECUTABLE( citygmltest ${PRG_SRCS} ) -TARGET_LINK_LIBRARIES( citygmltest citygml ${XERCESC_LIBRARY}) +IF( XercesC_FOUND ) + TARGET_LINK_LIBRARIES( citygmltest citygml XercesC::XercesC) +ELSE( XercesC_FOUND ) + TARGET_LINK_LIBRARIES( citygmltest citygml ${XERCESC_LIBRARY} ) +ENDIF( XercesC_FOUND ) IF(LIBCITYGML_USE_OPENGL) TARGET_COMPILE_DEFINITIONS( citygmltest PUBLIC LIBCITYGML_USE_OPENGL) TARGET_LINK_LIBRARIES( citygmltest citygml ${OPENGL_LIBRARIES} )