blob: a0081e6905ac4558ba47e49b548f834e4a9c525a [file] [log] [blame]
# 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.
cmake_minimum_required( VERSION 3.3 )
project( xerces-c )
set( ${PROJECT_NAME}_VERSION 3.1.4 )
set( ${PROJECT_NAME}_SHA265 c98eedac4cf8a73b09366ad349cb3ef30640e7a3089d360d40a3dde93f66ecf6 )
set( ${PROJECT_NAME}_URL "http://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${${PROJECT_NAME}_VERSION}.tar.gz" )
set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
set ( ${PROJECT_NAME}_CFLAGS "${${PROJECT_NAME}_CFLAGS} ${CFLAGS_ARCH}" )
set ( ${PROJECT_NAME}_CXXFLAGS "${${PROJECT_NAME}_CXXFLAGS} ${CXXFLAGS_ARCH} ${CXXFLAGS_C++}" )
if (MSVC_VERSION GREATER 14)
# Only have project files for VS14 and older
set(MSVC_VERSION 14)
endiF()
if (WIN32)
if (64 EQUAL ${BUILD_BITS})
set( _PLATFORM x64 )
set( _BUILD_DIR Build/Win64/VC${MSVC_VERSION}/${_DEBUG_OR_RELEASE} )
else()
set( _PLATFORM win32 )
set( _BUILD_DIR Build/Win32/VC${MSVC_VERSION}/${_DEBUG_OR_RELEASE} )
endif()
set ( _CONFIGURE_COMMAND "" )
set ( _BUILD_COMMAND ${MSBUILD} projects\\Win32\\VC${MSVC_VERSION}\\xerces-all\\xerces-all.sln /m /p:Configuration=${_DEBUG_OR_RELEASE} /p:Platform=${_PLATFORM} )
set ( _INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${_BUILD_DIR}/xerces-c_3_1$<$<CONFIG:Debug>:D>.dll <INSTALL_DIR>/bin/xerces-c_3_1$<$<CONFIG:Debug>:D>.dll
COMMAND ${CMAKE_COMMAND} -E copy ${_BUILD_DIR}/xerces-c_3$<$<CONFIG:Debug>:D>.lib <INSTALL_DIR>/lib/xerces-c_3$<$<CONFIG:Debug>:D>.lib
#TODO cleanup includes?
COMMAND ${CMAKE_COMMAND} -E copy_directory src <INSTALL_DIR>/include )
else()
set ( _CONFIGURE_COMMAND ${CONFIGURE} $<$<CONFIG:Debug>:--with-debug> --libdir=<INSTALL_DIR>/lib --without-curl --with-pic "CFLAGS=${${PROJECT_NAME}_CFLAGS}" "CXXFLAGS=${${PROJECT_NAME}_CXXFLAGS}" "MAKE=$(MAKE)" )
set ( _BUILD_COMMAND $(MAKE) all )
set ( _INSTALL_COMMAND $(MAKE) install )
endif()
include(ExternalProject)
ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
URL ${${PROJECT_NAME}_URL}
URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
#TODO prefix - directory length too long for windows
UPDATE_COMMAND ""
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
BUILD_COMMAND "${_BUILD_COMMAND}"
INSTALL_COMMAND "${_INSTALL_COMMAND}"
)
ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
if (${WIN32})
#TODO find better way to handle import lib on windows
set(CMAKE_SHARED_LIBRARY_SUFFIX _3$<$<CONFIG:Debug>:D>.lib)
endif()
add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
$<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
)
target_link_libraries(${PROJECT_NAME} INTERFACE
${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}xerces-c${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_LIBRARY_DIR ${${PROJECT_NAME}_INSTALL_DIR}/lib)
set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_RUNTIME_DIR ${${PROJECT_NAME}_INSTALL_DIR}/bin)