Using Xerces version with CMake
I've been googling for a smarter FindXerces cmake module, that would take into account the version of Xerces-C library, but I couldn't find anything. I guess there might be better ways to do it but here is my solution. If you know a better way I'm open to suggestions.
FindXercesC.cmake
# - Try to find Xerces-C
# Once done this will define
#
# XERCESC_FOUND - system has Xerces-C
# XERCESC_INCLUDE - the Xerces-C include directory
# XERCESC_LIBRARY - Link these to use Xerces-C
# XERCESC_VERSION - Xerces-C found version
IF (XERCESC_INCLUDE AND XERCESC_LIBRARY)
# in cache already
SET(XERCESC_FIND_QUIETLY TRUE)
ENDIF (XERCESC_INCLUDE AND XERCESC_LIBRARY)
FIND_PATH(
XERCESC_INCLUDE
NAMES xercesc/util/XercesVersion.hpp
PATHS c:/Libs/xerces-c_2_8_0 ${XERCES_INCLUDE_DIR}
PATH_SUFFIXES xercesc)
FIND_LIBRARY(
XERCESC_LIBRARY
NAMES xerces-c xerces-c_2
PATHS ${XERCES_LIBRARY_DIR})
IF (XERCESC_INCLUDE AND XERCESC_LIBRARY)
SET(XERCESC_FOUND TRUE)
ELSE (XERCESC_INCLUDE AND XERCESC_LIBRARY)
SET(XERCESC_FOUND FALSE)
ENDIF (XERCESC_INCLUDE AND XERCESC_LIBRARY)
IF(XERCESC_FOUND)
FIND_PATH(XVERHPPPATH NAMES XercesVersion.hpp PATHS
${XERCESC_INCLUDE}/xercesc/util NO_DEFAULT_PATH)
IF ( ${XVERHPPPATH} STREQUAL XVERHPPPATH-NOTFOUND )
SET(XERCES_VERSION "0")
ELSE( ${XVERHPPPATH} STREQUAL XVERHPPPATH-NOTFOUND )
FILE(READ ${XVERHPPPATH}/XercesVersion.hpp XVERHPP)
STRING(REGEX MATCHALL "\n *#define XERCES_VERSION_MAJOR +[0-9]+" XVERMAJ
${XVERHPP})
STRING(REGEX MATCH "\n *#define XERCES_VERSION_MINOR +[0-9]+" XVERMIN
${XVERHPP})
STRING(REGEX MATCH "\n *#define XERCES_VERSION_REVISION +[0-9]+" XVERREV
${XVERHPP})
STRING(REGEX REPLACE "\n *#define XERCES_VERSION_MAJOR +" ""
XVERMAJ ${XVERMAJ})
STRING(REGEX REPLACE "\n *#define XERCES_VERSION_MINOR +" ""
XVERMIN ${XVERMIN})
STRING(REGEX REPLACE "\n *#define XERCES_VERSION_REVISION +" ""
XVERREV ${XVERREV})
SET(XERCESC_VERSION ${XVERMAJ}.${XVERMIN}.${XVERREV})
ENDIF ( ${XVERHPPPATH} STREQUAL XVERHPPPATH-NOTFOUND )
IF(NOT XERCESC_FIND_QUIETLY)
MESSAGE(STATUS "Found Xerces-C: ${XERCESC_LIBRARY}")
MESSAGE(STATUS " : ${XERCESC_INCLUDE}")
MESSAGE(STATUS " Version: ${XERCESC_VERSION}")
ENDIF(NOT XERCESC_FIND_QUIETLY)
ELSE(XERCESC_FOUND)
MESSAGE(FATAL_ERROR "Could not find Xerces-C !")
ENDIF(XERCESC_FOUND)
MARK_AS_ADVANCED(XERCESC_INCLUDE XERCESC_LIBRARY)
Than you can use it like this:
CMakeLists.txt
#
# Xerces-C
#
INCLUDE(${CMAKE_MODULE_PATH}/FindXercesC.cmake)
IF (XERCESC_FOUND)
# using COMPARE_VERSION_STRINGS instead of COMPARE_VERSION for staying compatible with cmake 2.4
COMPARE_VERSION_STRINGS("${XERCESC_VERSION}" 2.8.0 result)
IF (result LESS 0)
MESSAGE(FATAL_ERROR "Xerces ${XERCESC_VERSION} not supported.
Only 2.8.0, 3.0.1 and newer versions are supported")
ELSE (result LESS 0)
MESSAGE(STATUS "Found Xerces ${XERCESC_VERSION} -- ${XERCESC_LIBRARY}")
INCLUDE_DIRECTORIES(${XERCESC_INCLUDE})
SET(requiredlibs ${requiredlibs} ${XERCESC_LIBRARY})
ENDIF (result LESS 0)
ENDIF (XERCESC_FOUND)
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home