764f79bc04
Figure out if the option should be enabled or disabled by default, but unconditionally use it if it is set.
191 lines
6.0 KiB
CMake
191 lines
6.0 KiB
CMake
# This file is copyrighted under the BSD-license for buildsystem files of KDE
|
|
# copyright 2010, Patrick Spendrin <ps_ml@gmx.de>
|
|
|
|
project(expat)
|
|
|
|
cmake_minimum_required(VERSION 2.6)
|
|
set(PACKAGE_BUGREPORT "expat-bugs@libexpat.org")
|
|
set(PACKAGE_NAME "expat")
|
|
set(PACKAGE_VERSION "2.2.3")
|
|
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
|
|
set(PACKAGE_TARNAME "${PACKAGE_NAME}")
|
|
|
|
if(WINCE)
|
|
set(BUILD_tools_default OFF)
|
|
else()
|
|
set(BUILD_tools_default ON)
|
|
endif()
|
|
if(MSVC OR NOT BUILD_tools_default)
|
|
set(BUILD_doc_default OFF)
|
|
else()
|
|
find_program(DOCBOOK_TO_MAN NAMES docbook2x-man)
|
|
if(DOCBOOK_TO_MAN)
|
|
set(BUILD_doc_default ON)
|
|
else()
|
|
set(BUILD_doc_default OFF)
|
|
endif()
|
|
endif()
|
|
|
|
option(BUILD_tools "build the xmlwf tool for expat library" ${BUILD_tools_default})
|
|
option(BUILD_examples "build the examples for expat library" ON)
|
|
option(BUILD_tests "build the tests for expat library" ON)
|
|
option(BUILD_shared "build a shared expat library" ON)
|
|
option(BUILD_doc "build man page for xmlwf" ${BUILD_doc_default})
|
|
option(USE_libbsd "utilize libbsd (for arc4random_buf)" OFF)
|
|
option(INSTALL "install expat files in cmake install target" ON)
|
|
|
|
if(USE_libbsd)
|
|
find_library(LIB_BSD NAMES bsd)
|
|
if(NOT LIB_BSD)
|
|
message(FATAL_ERROR "USE_libbsd option is enabled, but libbsd was not found")
|
|
else()
|
|
set(HAVE_LIBBSD TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
# configuration options
|
|
set(XML_CONTEXT_BYTES 1024 CACHE STRING "Define to specify how much context to retain around the current parse point")
|
|
option(XML_DTD "Define to make parameter entity parsing functionality available" ON)
|
|
option(XML_NS "Define to make XML Namespaces functionality available" ON)
|
|
if(NOT WIN32)
|
|
option(XML_DEV_URANDOM "Define to include code reading entropy from `/dev/urandom'." ON)
|
|
if(XML_DEV_URANDOM)
|
|
add_definitions(-DXML_DEV_URANDOM)
|
|
endif()
|
|
endif()
|
|
|
|
if(XML_DTD)
|
|
set(XML_DTD 1)
|
|
else(XML_DTD)
|
|
set(XML_DTD 0)
|
|
endif(XML_DTD)
|
|
if(XML_NS)
|
|
set(XML_NS 1)
|
|
else(XML_NS)
|
|
set(XML_NS 0)
|
|
endif(XML_NS)
|
|
|
|
if(BUILD_tests)
|
|
enable_testing()
|
|
endif(BUILD_tests)
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/ConfigureChecks.cmake)
|
|
|
|
set(EXTRA_COMPILE_FLAGS)
|
|
if(FLAG_NO_STRICT_ALIASING)
|
|
set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -fno-strict-aliasing")
|
|
endif()
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_COMPILE_FLAGS}")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_COMPILE_FLAGS}")
|
|
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/lib)
|
|
if(MSVC)
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS -wd4996)
|
|
endif(MSVC)
|
|
if(WIN32)
|
|
set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Add a suffix, usually d on Windows")
|
|
endif(WIN32)
|
|
|
|
set(expat_SRCS
|
|
lib/loadlibrary.c
|
|
lib/xmlparse.c
|
|
lib/xmlrole.c
|
|
lib/xmltok.c
|
|
lib/xmltok_impl.c
|
|
lib/xmltok_ns.c
|
|
)
|
|
|
|
if(BUILD_shared)
|
|
set(_SHARED SHARED)
|
|
if(WIN32)
|
|
set(expat_SRCS ${expat_SRCS} lib/libexpat.def)
|
|
endif(WIN32)
|
|
else(BUILD_shared)
|
|
set(_SHARED STATIC)
|
|
if(WIN32)
|
|
add_definitions(-DXML_STATIC)
|
|
endif(WIN32)
|
|
endif(BUILD_shared)
|
|
|
|
add_library(expat ${_SHARED} ${expat_SRCS})
|
|
if(USE_libbsd)
|
|
target_link_libraries(expat ${LIB_BSD})
|
|
endif()
|
|
|
|
set(LIBCURRENT 7) # sync
|
|
set(LIBREVISION 5) # with
|
|
set(LIBAGE 6) # configure.ac!
|
|
math(EXPR LIBCURRENT_MINUS_AGE "${LIBCURRENT} - ${LIBAGE}")
|
|
|
|
if(NOT WIN32)
|
|
set_property(TARGET expat PROPERTY VERSION ${LIBCURRENT_MINUS_AGE}.${LIBAGE}.${LIBREVISION})
|
|
set_property(TARGET expat PROPERTY SOVERSION ${LIBCURRENT_MINUS_AGE})
|
|
set_property(TARGET expat PROPERTY NO_SONAME ${NO_SONAME})
|
|
endif(NOT WIN32)
|
|
|
|
macro(expat_install)
|
|
if(INSTALL)
|
|
install(${ARGN})
|
|
endif()
|
|
endmacro()
|
|
|
|
expat_install(TARGETS expat RUNTIME DESTINATION bin
|
|
LIBRARY DESTINATION lib
|
|
ARCHIVE DESTINATION lib)
|
|
|
|
set(prefix ${CMAKE_INSTALL_PREFIX})
|
|
set(exec_prefix "\${prefix}/bin")
|
|
set(libdir "\${prefix}/lib")
|
|
set(includedir "\${prefix}/include")
|
|
configure_file(expat.pc.in ${CMAKE_CURRENT_BINARY_DIR}/expat.pc)
|
|
|
|
expat_install(FILES lib/expat.h lib/expat_external.h DESTINATION include)
|
|
expat_install(FILES ${CMAKE_CURRENT_BINARY_DIR}/expat.pc DESTINATION lib/pkgconfig)
|
|
|
|
if(BUILD_tools)
|
|
set(xmlwf_SRCS
|
|
xmlwf/xmlwf.c
|
|
xmlwf/xmlfile.c
|
|
xmlwf/codepage.c
|
|
xmlwf/readfilemap.c
|
|
)
|
|
|
|
add_executable(xmlwf ${xmlwf_SRCS})
|
|
set_property(TARGET xmlwf PROPERTY RUNTIME_OUTPUT_DIRECTORY xmlwf)
|
|
target_link_libraries(xmlwf expat)
|
|
expat_install(TARGETS xmlwf DESTINATION bin)
|
|
if(BUILD_doc)
|
|
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
|
|
set(make_command "$(MAKE)")
|
|
else()
|
|
set(make_command "make")
|
|
endif()
|
|
|
|
add_custom_command(TARGET expat PRE_BUILD COMMAND "${make_command}" -C "${PROJECT_SOURCE_DIR}/doc" xmlwf.1 "DOCBOOK_TO_MAN=${DOCBOOK_TO_MAN}")
|
|
expat_install(FILES "${PROJECT_SOURCE_DIR}/doc/xmlwf.1" DESTINATION share/man/man1)
|
|
endif()
|
|
endif()
|
|
|
|
if(BUILD_examples)
|
|
add_executable(elements examples/elements.c)
|
|
set_property(TARGET elements PROPERTY RUNTIME_OUTPUT_DIRECTORY examples)
|
|
target_link_libraries(elements expat)
|
|
|
|
add_executable(outline examples/outline.c)
|
|
set_property(TARGET outline PROPERTY RUNTIME_OUTPUT_DIRECTORY examples)
|
|
target_link_libraries(outline expat)
|
|
endif(BUILD_examples)
|
|
|
|
if(BUILD_tests)
|
|
## these are unittests that can be run on any platform
|
|
add_executable(runtests tests/runtests.c tests/chardata.c tests/minicheck.c tests/memcheck.c)
|
|
set_property(TARGET runtests PROPERTY RUNTIME_OUTPUT_DIRECTORY tests)
|
|
target_link_libraries(runtests expat)
|
|
add_test(runtests tests/runtests)
|
|
|
|
add_executable(runtestspp tests/runtestspp.cpp tests/chardata.c tests/minicheck.c tests/memcheck.c)
|
|
set_property(TARGET runtestspp PROPERTY RUNTIME_OUTPUT_DIRECTORY tests)
|
|
target_link_libraries(runtestspp expat)
|
|
add_test(runtestspp tests/runtestspp)
|
|
endif(BUILD_tests)
|