blob: bee6cd581c40c164b76c09abf467d238a82b0b1f [file] [log] [blame]
# CMake build for xerces-c
#
# Written by Roger Leigh <rleigh@codelibre.net>
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Run "cmake" to generate the build files for your platform
cmake_minimum_required(VERSION 3.12.0)
# Try C++17, then fall back to C++14, C++11 then C++98. Used for feature tests
# for optional features.
set(CMAKE_CXX_STANDARD 17)
# Use folders (for IDE project grouping)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Source additional modules from the "cmake" directory
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_CURRENT_LIST_DIR}/cmake")
# Read version information from configure.ac.
file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/configure.ac" configure
REGEX "^AC_INIT\\(\\[xerces-c\\],\\[(.*)\\]\\)")
foreach(line IN LISTS configure)
string(REGEX REPLACE "^AC_INIT\\(\\[xerces-c\\],\\[(.*)\\]\\)" "\\1" xerces_c_version "${line}")
break()
endforeach()
file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/configure.ac" configure
REGEX "^INTERFACE_VERSION=.*")
foreach(line IN LISTS configure)
string(REGEX REPLACE "^INTERFACE_VERSION=(.*)" "\\1" xerces_c_interface_version "${line}")
break()
endforeach()
file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/configure.ac" configure
REGEX "^GRAMMAR_SERIALIZATION_LEVEL=.*")
foreach(line IN LISTS configure)
string(REGEX REPLACE "^GRAMMAR_SERIALIZATION_LEVEL=(.*)" "\\1" xerces_c_grammar_serialization_level "${line}")
break()
endforeach()
message(STATUS "Configuring Apache Xerces-C++ version ${xerces_c_version}")
# Project version
project(xerces-c
VERSION "${xerces_c_version}"
LANGUAGES C CXX)
enable_testing()
# For autotools header compatibility
set(PACKAGE "${PROJECT_NAME}")
set(PACKAGE_NAME "${PROJECT_NAME}")
set(PACKAGE_TARNAME "${PROJECT_NAME}")
set(PACKAGE_VERSION "${PROJECT_VERSION}")
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "c-dev@xerces.apache.org")
set(PACKAGE_URL "https://xerces.apache.org/xerces-c/")
set(VERSION "${PROJECT_VERSION}")
set(XERCES_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
set(XERCES_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
set(XERCES_VERSION_REVISION "${PROJECT_VERSION_PATCH}")
string(REPLACE "." ";" interface_version_parts "${xerces_c_interface_version}")
list(GET interface_version_parts 0 INTERFACE_VERSION_MAJOR)
list(GET interface_version_parts 1 INTERFACE_VERSION_MINOR)
set(INTERFACE_VERSION_D "${INTERFACE_VERSION_MAJOR}.${INTERFACE_VERSION_MINOR}")
set(INTERFACE_VERSION_U "${INTERFACE_VERSION_MAJOR}_${INTERFACE_VERSION_MINOR}")
set(XERCES_GRAMMAR_SERIALIZATION_LEVEL "${xerces_c_grammar_serialization_level}")
set(EXTRA_DIST
xerces-c.spec
xerces-c.pc.in
CREDITS
INSTALL
KEYS
LICENSE
NOTICE
README
config/pretty-make
doc
projects
reconf
scripts/createBindingsFormatFromHPP.pl
scripts/makeStringDefinition.pl
tools
)
include(GNUInstallDirs)
include(XercesWarnings)
include(XercesIncludes)
include(XercesFunctions)
include(XercesDLL)
include(XercesPathDelimiters)
include(XercesICU)
include(XercesMutexMgrSelection)
include(XercesNetAccessorSelection)
include(XercesMsgLoaderSelection)
include(XercesTranscoderSelection)
include(XercesFileMgrSelection)
include(XercesXMLCh)
include(XercesMFC)
include(XercesSSE2)
include(XercesPathMax)
include(XercesWChar)
include(XercesIconvConst)
include(XercesLFS)
# Generate headers
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/config.h
@ONLY)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/xercesc/util/Xerces_autoconf_config.hpp.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/src/xercesc/util/Xerces_autoconf_config.hpp
@ONLY)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/xercesc/util/XercesVersion.hpp.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/src/xercesc/util/XercesVersion.hpp
@ONLY)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/doc/style/dtd/entities.ent.in
${CMAKE_CURRENT_BINARY_DIR}/doc/style/dtd/entities.ent
@ONLY)
# Generate pkg-config file
set(pkgconfig-dir "${CMAKE_INSTALL_LIBDIR}/pkgconfig" CACHE STRING "pkg-config installation directory (default ${CMAKE_INSTALL_LIBDIR}/pkgconfig)")
set(PKGCONFIGDIR "${pkgconfig-dir}")
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "${CMAKE_INSTALL_PREFIX}")
set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/xerces-c.pc.in
${CMAKE_CURRENT_BINARY_DIR}/xerces-c.pc)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/xerces-c.pc
DESTINATION "${PKGCONFIGDIR}"
COMPONENT "development")
# Process subdirectories
add_subdirectory(doc)
add_subdirectory(src)
add_subdirectory(tests)
add_subdirectory(samples)
# Display configuration summary
message(STATUS "")
message(STATUS "Xerces-C++ configuration summary")
message(STATUS "--------------------------------")
message(STATUS "")
message(STATUS " Version: ${xerces-c_VERSION}")
message(STATUS " Library interface version: ${xerces_c_interface_version}")
message(STATUS "")
message(STATUS " Installation directory: ${prefix}")
message(STATUS " C compiler: ${CMAKE_C_COMPILER}")
message(STATUS " C++ compiler: ${CMAKE_CXX_COMPILER}")
message(STATUS "")
message(STATUS " Build shared libraries: ${BUILD_SHARED_LIBS}")
message(STATUS " Path delimiters: \"${path_delims}\"")
message(STATUS " File Manager: ${filemgr}")
message(STATUS " Mutex Manager: ${mutexmgr}")
message(STATUS " Transcoder: ${transcoder}")
message(STATUS " NetAccessor: ${netaccessor}")
message(STATUS " Message Loader: ${msgloader}")
message(STATUS " XMLCh type: ${xmlch_type}")