Merge pull request #329 from libexpat/cmake-option-namespace

CMake option namespace prefix EXPAT_
This commit is contained in:
Sebastian Pipping 2019-08-31 02:22:22 +02:00 committed by GitHub
commit 5dfac7036d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 211 additions and 125 deletions

View file

@ -24,7 +24,7 @@ matrix:
- os: linux
env: MODE=clang-format
- os: linux
env: MODE=cmake-oos CMAKE_ARGS="-DXML_ATTR_INFO=ON -DBUILD_fuzzers=ON -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++"
env: MODE=cmake-oos CMAKE_ARGS="-DEXPAT_ATTR_INFO=ON -DEXPAT_BUILD_FUZZERS=ON -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++"
- os: linux
env: MODE=qa-sh QA_COMPILER=clang CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CONFIGURE_ARGS=--enable-xml-attr-info
- os: linux

View file

@ -164,7 +164,7 @@ environment:
before_build:
- echo Running cmake...
- cd c:\projects\libexpat
- cmake -DWARNINGS_AS_ERRORS=ON -G"%GENERATOR%" expat
- cmake -DEXPAT_WARNINGS_AS_ERRORS=ON -G"%GENERATOR%" expat
build:
parallel: true # enable MSBuild parallel builds

View file

@ -23,103 +23,94 @@ include(GNUInstallDirs)
# Configuration defaults
#
if(WINCE)
set(BUILD_tools_default OFF)
set(_EXPAT_BUILD_TOOLS_DEFAULT OFF)
else()
set(BUILD_tools_default ON)
set(_EXPAT_BUILD_TOOLS_DEFAULT ON)
endif()
if(MSVC OR NOT BUILD_tools_default)
set(BUILD_doc_default OFF)
if(MSVC OR NOT _EXPAT_BUILD_TOOLS_DEFAULT)
set(_EXPAT_BUILD_DOCS_DEFAULT OFF)
else()
find_program(DOCBOOK_TO_MAN NAMES docbook2x-man db2x_docbook2man docbook2man docbook-to-man)
if(DOCBOOK_TO_MAN)
set(BUILD_doc_default ON)
set(_EXPAT_BUILD_DOCS_DEFAULT ON)
else()
set(BUILD_doc_default OFF)
set(_EXPAT_BUILD_DOCS_DEFAULT OFF)
endif()
endif()
#
# Configuration
#
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(BUILD_fuzzers "build fuzzers for the expat library" OFF)
option(USE_libbsd "utilize libbsd (for arc4random_buf)" OFF)
option(INSTALL "install expat files in cmake install target" ON)
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)
option(WARNINGS_AS_ERRORS "Treat all compiler warnings as errors" OFF)
if(NOT WIN32)
option(XML_DEV_URANDOM "Define to include code reading entropy from `/dev/urandom'." ON)
set(USE_GETRANDOM "AUTO" CACHE STRING
option(EXPAT_BUILD_TOOLS "build the xmlwf tool for expat library" ${_EXPAT_BUILD_TOOLS_DEFAULT})
option(EXPAT_BUILD_EXAMPLES "build the examples for expat library" ON)
option(EXPAT_BUILD_TESTS "build the tests for expat library" ON)
option(EXPAT_SHARED_LIBS "build a shared expat library" ON)
option(EXPAT_BUILD_DOCS "build man page for xmlwf" ${_EXPAT_BUILD_DOCS_DEFAULT})
option(EXPAT_BUILD_FUZZERS "build fuzzers for the expat library" OFF)
option(EXPAT_WITH_LIBBSD "utilize libbsd (for arc4random_buf)" OFF)
option(EXPAT_ENABLE_INSTALL "install expat files in cmake install target" ON)
set(EXPAT_CONTEXT_BYTES 1024 CACHE STRING "Define to specify how much context to retain around the current parse point")
mark_as_advanced(EXPAT_CONTEXT_BYTES)
option(EXPAT_DTD "Define to make parameter entity parsing functionality available" ON)
mark_as_advanced(EXPAT_DTD)
option(EXPAT_NS "Define to make XML Namespaces functionality available" ON)
mark_as_advanced(EXPAT_NS)
option(EXPAT_WARNINGS_AS_ERRORS "Treat all compiler warnings as errors" OFF)
if(NOT WIN32 OR _EXPAT_HELP)
option(EXPAT_DEV_URANDOM "Define to include code reading entropy from `/dev/urandom'." ON)
set(EXPAT_WITH_GETRANDOM "AUTO" CACHE STRING
"Make use of getrandom function (ON|OFF|AUTO) [default=AUTO]")
set(USE_SYS_GETRANDOM "AUTO" CACHE STRING
set(EXPAT_WITH_SYS_GETRANDOM "AUTO" CACHE STRING
"Make use of syscall SYS_getrandom (ON|OFF|AUTO) [default=AUTO]")
mark_as_advanced(EXPAT_DEV_URANDOM)
endif()
option(XML_UNICODE "Use UTF-16 encoded chars (two bytes) instead of UTF-8" OFF)
option(XML_UNICODE_WCHAR_T "Use wchar_t to represent UTF-16 instead of unsigned short" OFF)
option(XML_ATTR_INFO "Define to allow retrieving the byte offsets for attribute names and values" OFF)
option(XML_LARGE_SIZE "Make XML_GetCurrent* functions return <(unsigned) long long> rather than <(unsigned) long>" OFF)
option(XML_MIN_SIZE "Get a smaller (but slower) parser (in particular avoid multiple copies of the tokenizer)" OFF)
if(MSVC)
set(MSVC_USE_STATIC_CRT OFF CACHE BOOL "Use /MT flag (static CRT) when compiling in MSVC")
option(EXPAT_UNICODE "Use UTF-16 encoded chars (two bytes) instead of UTF-8" OFF)
option(EXPAT_UNICODE_WCHAR_T "Use wchar_t to represent UTF-16 instead of unsigned short" OFF)
option(EXPAT_ATTR_INFO "Define to allow retrieving the byte offsets for attribute names and values" OFF)
mark_as_advanced(EXPAT_ATTR_INFO)
option(EXPAT_LARGE_SIZE "Make XML_GetCurrent* functions return <(unsigned) long long> rather than <(unsigned) long>" OFF)
mark_as_advanced(EXPAT_LARGE_SIZE)
option(EXPAT_MIN_SIZE "Get a smaller (but slower) parser (in particular avoid multiple copies of the tokenizer)" OFF)
mark_as_advanced(EXPAT_MIN_SIZE)
if(MSVC OR _EXPAT_HELP)
set(EXPAT_MSVC_STATIC_CRT OFF CACHE BOOL "Use /MT flag (static CRT) when compiling in MSVC")
endif()
#
# Environment checks
#
if(USE_libbsd)
if(EXPAT_WITH_LIBBSD)
find_library(LIB_BSD NAMES bsd)
if(NOT LIB_BSD)
message(SEND_ERROR "USE_libbsd option is enabled, but libbsd was not found")
message(SEND_ERROR "EXPAT_WITH_LIBBSD option is enabled, but libbsd was not found")
else()
set(HAVE_LIBBSD TRUE)
endif()
endif()
if(NOT WIN32)
if(XML_DEV_URANDOM)
set(XML_DEV_URANDOM 1)
else(XML_DEV_URANDOM)
set(XML_DEV_URANDOM 0)
endif(XML_DEV_URANDOM)
endif()
macro(expat_bool_to_int var_ref)
if(${var_ref})
set(${var_ref} 1)
macro(_expat_copy_bool_int source_ref dest_ref)
if(${source_ref})
set(${dest_ref} 1)
else()
set(${var_ref} 0)
set(${dest_ref} 0)
endif()
endmacro()
expat_bool_to_int(XML_ATTR_INFO)
expat_bool_to_int(XML_DTD)
expat_bool_to_int(XML_LARGE_SIZE)
expat_bool_to_int(XML_MIN_SIZE)
expat_bool_to_int(XML_NS)
expat_bool_to_int(XML_UNICODE)
expat_bool_to_int(XML_UNICODE_WCHAR_T)
if(XML_LARGE_SIZE)
if(EXPAT_LARGE_SIZE)
add_definitions(-DXML_LARGE_SIZE)
endif()
if(XML_MIN_SIZE)
if(EXPAT_MIN_SIZE)
add_definitions(-DXML_MIN_SIZE)
endif()
if(XML_UNICODE_WCHAR_T AND NOT XML_UNICODE)
message(SEND_ERROR "Option XML_UNICODE_WCHAR_T=ON may not be used without XML_UNICODE=ON.")
set(XML_UNICODE 1)
endif(XML_UNICODE_WCHAR_T AND NOT XML_UNICODE)
if(EXPAT_UNICODE_WCHAR_T AND NOT EXPAT_UNICODE)
message(SEND_ERROR "Option EXPAT_UNICODE_WCHAR_T=ON may not be used without EXPAT_UNICODE=ON.")
set(EXPAT_UNICODE ON)
endif(EXPAT_UNICODE_WCHAR_T AND NOT EXPAT_UNICODE)
if(BUILD_tools AND (XML_UNICODE AND NOT XML_UNICODE_WCHAR_T))
message(SEND_ERROR "The xmlwf tool can not be built with option XML_UNICODE_WCHAR_T=OFF and XML_UNICODE=ON. Either set XML_UNICODE_WCHAR_T=ON or BUILD_tools=OFF.")
if(EXPAT_BUILD_TOOLS AND (EXPAT_UNICODE AND NOT EXPAT_UNICODE_WCHAR_T))
message(SEND_ERROR "The xmlwf tool can not be built with option EXPAT_UNICODE_WCHAR_T=OFF and EXPAT_UNICODE=ON. Either set EXPAT_UNICODE_WCHAR_T=ON or EXPAT_BUILD_TOOLS=OFF.")
endif()
include(${CMAKE_CURRENT_LIST_DIR}/ConfigureChecks.cmake)
@ -135,12 +126,24 @@ macro(evaluate_detection_results use_ref have_ref thing_lower thing_title)
endmacro()
if(NOT WIN32)
evaluate_detection_results(USE_GETRANDOM HAVE_GETRANDOM "function getrandom" "Function getrandom")
evaluate_detection_results(USE_SYS_GETRANDOM HAVE_SYSCALL_GETRANDOM "syscall SYS_getrandom" "Syscall SYS_getrandom")
evaluate_detection_results(EXPAT_WITH_GETRANDOM HAVE_GETRANDOM "function getrandom" "Function getrandom")
evaluate_detection_results(EXPAT_WITH_SYS_GETRANDOM HAVE_SYSCALL_GETRANDOM "syscall SYS_getrandom" "Syscall SYS_getrandom")
endif()
_expat_copy_bool_int(EXPAT_ATTR_INFO XML_ATTR_INFO)
_expat_copy_bool_int(EXPAT_DTD XML_DTD)
_expat_copy_bool_int(EXPAT_LARGE_SIZE XML_LARGE_SIZE)
_expat_copy_bool_int(EXPAT_MIN_SIZE XML_MIN_SIZE)
_expat_copy_bool_int(EXPAT_NS XML_NS)
_expat_copy_bool_int(EXPAT_UNICODE XML_UNICODE)
_expat_copy_bool_int(EXPAT_UNICODE_WCHAR_T XML_UNICODE_WCHAR_T)
if(NOT WIN32)
_expat_copy_bool_int(EXPAT_DEV_URANDOM XML_DEV_URANDOM)
endif()
set(XML_CONTEXT_BYTES ${EXPAT_CONTEXT_BYTES})
macro(expat_install)
if(INSTALL)
if(EXPAT_ENABLE_INSTALL)
install(${ARGN})
endif()
endmacro()
@ -158,19 +161,19 @@ if(FLAG_VISIBILITY)
add_definitions(-DXML_ENABLE_VISIBILITY=1)
set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -fvisibility=hidden")
endif(FLAG_VISIBILITY)
if (WARNINGS_AS_ERRORS)
if (EXPAT_WARNINGS_AS_ERRORS)
if(MSVC)
add_definitions(/WX)
else(MSVC)
set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -Werror")
endif(MSVC)
endif(WARNINGS_AS_ERRORS)
endif(EXPAT_WARNINGS_AS_ERRORS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_COMPILE_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_COMPILE_FLAGS}")
if (MSVC)
if (MSVC_USE_STATIC_CRT)
message("-- Using static CRT ${MSVC_USE_STATIC_CRT}")
if (EXPAT_MSVC_STATIC_CRT)
message("-- Using static CRT ${EXPAT_MSVC_STATIC_CRT}")
foreach(flag_var
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
@ -191,12 +194,12 @@ if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS -wd4996)
endif(MSVC)
if(WIN32)
if(XML_UNICODE_WCHAR_T)
if(EXPAT_UNICODE_WCHAR_T)
set(_POSTFIX_WIDE "w")
endif()
if(NOT BUILD_shared)
if(MSVC_USE_STATIC_CRT)
if(NOT EXPAT_SHARED_LIBS)
if(EXPAT_MSVC_STATIC_CRT)
set(_POSTFIX_CRT "MT")
else()
set(_POSTFIX_CRT "MD")
@ -230,20 +233,20 @@ set(expat_SRCS
lib/xmltok_ns.c
)
if(BUILD_shared)
if(EXPAT_SHARED_LIBS)
set(_SHARED SHARED)
if(MSVC)
set(expat_SRCS ${expat_SRCS} lib/libexpat.def)
endif(MSVC)
else(BUILD_shared)
else(EXPAT_SHARED_LIBS)
set(_SHARED STATIC)
if(WIN32)
add_definitions(-DXML_STATIC)
endif(WIN32)
endif(BUILD_shared)
endif(EXPAT_SHARED_LIBS)
add_library(expat ${_SHARED} ${expat_SRCS})
if(USE_libbsd)
if(EXPAT_WITH_LIBBSD)
target_link_libraries(expat ${LIB_BSD})
endif()
@ -278,7 +281,7 @@ expat_install(FILES ${CMAKE_CURRENT_BINARY_DIR}/expat.pc DESTINATION ${CMAKE_INS
#
# C command line tool xmlwf
#
if(BUILD_tools)
if(EXPAT_BUILD_TOOLS)
set(xmlwf_SRCS
xmlwf/xmlwf.c
xmlwf/xmlfile.c
@ -290,7 +293,7 @@ if(BUILD_tools)
set_property(TARGET xmlwf PROPERTY RUNTIME_OUTPUT_DIRECTORY xmlwf)
target_link_libraries(xmlwf expat)
expat_install(TARGETS xmlwf DESTINATION ${CMAKE_INSTALL_BINDIR})
if(BUILD_doc)
if(EXPAT_BUILD_DOCS)
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/doc)
add_custom_command(TARGET expat PRE_BUILD COMMAND "${DOCBOOK_TO_MAN}" "${PROJECT_SOURCE_DIR}/doc/xmlwf.xml" && mv "XMLWF.1" "${PROJECT_BINARY_DIR}/doc/xmlwf.1")
expat_install(FILES "${PROJECT_BINARY_DIR}/doc/xmlwf.1" DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
@ -300,7 +303,7 @@ endif()
#
# C code examples
#
if(BUILD_examples)
if(EXPAT_BUILD_EXAMPLES)
add_executable(elements examples/elements.c)
set_property(TARGET elements PROPERTY RUNTIME_OUTPUT_DIRECTORY examples)
target_link_libraries(elements expat)
@ -308,12 +311,12 @@ if(BUILD_examples)
add_executable(outline examples/outline.c)
set_property(TARGET outline PROPERTY RUNTIME_OUTPUT_DIRECTORY examples)
target_link_libraries(outline expat)
endif(BUILD_examples)
endif(EXPAT_BUILD_EXAMPLES)
#
# C/C++ test runners
#
if(BUILD_tests)
if(EXPAT_BUILD_TESTS)
## these are unittests that can be run on any platform
enable_language(CXX)
enable_testing()
@ -334,9 +337,9 @@ if(BUILD_tests)
set_property(TARGET runtestspp PROPERTY RUNTIME_OUTPUT_DIRECTORY tests)
target_link_libraries(runtestspp expat)
add_test(runtestspp tests/runtestspp)
endif(BUILD_tests)
endif(EXPAT_BUILD_TESTS)
if(BUILD_fuzzers)
if(EXPAT_BUILD_FUZZERS)
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
message(SEND_ERROR
"Building fuzz targets without Clang (but ${CMAKE_C_COMPILER_ID}) "
@ -371,7 +374,7 @@ if(BUILD_fuzzers)
TARGET ${target_name} PROPERTY RUNTIME_OUTPUT_DIRECTORY fuzz)
endforeach()
endforeach()
endif(BUILD_fuzzers)
endif(EXPAT_BUILD_FUZZERS)
#
# Documentation
@ -422,8 +425,8 @@ expat_install(
#
# Summary
#
if(XML_UNICODE)
if(XML_UNICODE_WCHAR_T)
if(EXPAT_UNICODE)
if(EXPAT_UNICODE_WCHAR_T)
set(_EXPAT_CHAR_TYPE "wchar_t")
else()
set(_EXPAT_CHAR_TYPE "unsigned short")
@ -438,28 +441,30 @@ message(STATUS "")
message(STATUS "Configuration")
message(STATUS " Prefix ..................... ${CMAKE_INSTALL_PREFIX}")
message(STATUS " Build type ................. ${CMAKE_BUILD_TYPE}")
message(STATUS " Shared libraries ........... ${BUILD_shared}")
message(STATUS " Shared libraries ........... ${EXPAT_SHARED_LIBS}")
if(WIN32)
message(STATUS " Static CRT ................. ${MSVC_USE_STATIC_CRT}")
message(STATUS " Static CRT ................. ${EXPAT_MSVC_STATIC_CRT}")
endif()
message(STATUS " Character type ............. ${_EXPAT_CHAR_TYPE}")
if(WIN32)
message(STATUS " Binary postfix ............. ${CMAKE_${_EXPAT_BUILD_TYPE_UPPER}_POSTFIX}")
endif()
message(STATUS "")
message(STATUS " Build documentation ........ ${BUILD_doc}")
message(STATUS " Build examples ............. ${BUILD_examples}")
message(STATUS " Build fuzzers .............. ${BUILD_fuzzers}")
message(STATUS " Build tests ................ ${BUILD_tests}")
message(STATUS " Build tools (xmlwf) ........ ${BUILD_tools}")
message(STATUS " Install files .............. ${INSTALL}")
message(STATUS " Build documentation ........ ${EXPAT_BUILD_DOCS}")
message(STATUS " Build examples ............. ${EXPAT_BUILD_EXAMPLES}")
message(STATUS " Build fuzzers .............. ${EXPAT_BUILD_FUZZERS}")
message(STATUS " Build tests ................ ${EXPAT_BUILD_TESTS}")
message(STATUS " Build tools (xmlwf) ........ ${EXPAT_BUILD_TOOLS}")
message(STATUS " Install files .............. ${EXPAT_ENABLE_INSTALL}")
message(STATUS "")
message(STATUS " Features")
message(STATUS " Attributes info .......... ${XML_ATTR_INFO}")
message(STATUS " Context bytes ............ ${XML_CONTEXT_BYTES}")
message(STATUS " DTD support .............. ${XML_DTD}")
message(STATUS " Large size ............... ${XML_LARGE_SIZE}")
message(STATUS " Namespace support ........ ${XML_NS}")
message(STATUS " // Advanced options, changes not advised")
message(STATUS " Attributes info .......... ${EXPAT_ATTR_INFO}")
message(STATUS " Context bytes ............ ${EXPAT_CONTEXT_BYTES}")
message(STATUS " DTD support .............. ${EXPAT_DTD}")
message(STATUS " Large size ............... ${EXPAT_LARGE_SIZE}")
message(STATUS " Minimum size ............. ${EXPAT_MIN_SIZE}")
message(STATUS " Namespace support ........ ${EXPAT_NS}")
message(STATUS "")
message(STATUS " Entropy sources")
if(WIN32)
@ -467,17 +472,17 @@ if(WIN32)
else()
message(STATUS " getrandom ................ ${HAVE_GETRANDOM}")
message(STATUS " syscall SYS_getrandom .... ${HAVE_SYSCALL_GETRANDOM}")
message(STATUS " libbsd ................... ${USE_libbsd}")
message(STATUS " /dev/random .............. ${XML_DEV_URANDOM}")
message(STATUS " libbsd ................... ${EXPAT_WITH_LIBBSD}")
message(STATUS " /dev/random .............. ${EXPAT_DEV_URANDOM}")
endif()
message(STATUS "")
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
message(STATUS "Continue with")
message(STATUS " make")
if(BUILD_tests)
if(EXPAT_BUILD_TESTS)
message(STATUS " make test")
endif()
if(INSTALL)
if(EXPAT_ENABLE_INSTALL)
message(STATUS " sudo make install")
endif()
message(STATUS "")

View file

@ -23,12 +23,33 @@ Release x.x.x xxx xxx xx xxxx
--with-sys-getrandom
--without-sys-getrandom
Autotools: Fix "make run-xmltest" for out-of-source builds
#244 #264 CMake: Add argument -DXML_ATTR_INFO=(ON|OFF), default OFF
#326 CMake: Add argument -DXML_LARGE_SIZE=(ON|OFF), default OFF
#326 CMake: Add argument -DXML_MIN_SIZE=(ON|OFF), default OFF
CMake: Pull all options from Expat <=2.2.7 into namespace
prefix EXPAT_ with the exception of DOCBOOK_TO_MAN:
- BUILD_doc -> EXPAT_BUILD_DOCS (plural)
- BUILD_examples -> EXPAT_BUILD_EXAMPLES
- BUILD_shared -> EXPAT_SHARED_LIBS
- BUILD_tests -> EXPAT_BUILD_TESTS
- BUILD_tools -> EXPAT_BUILD_TOOLS
- DOCBOOK_TO_MAN -> DOCBOOK_TO_MAN (unchanged)
- INSTALL -> EXPAT_ENABLE_INSTALL
- MSVC_USE_STATIC_CRT -> EXPAT_MSVC_STATIC_CRT
- USE_libbsd -> EXPAT_WITH_LIBBSD
- WARNINGS_AS_ERRORS -> EXPAT_WARNINGS_AS_ERRORS
- XML_CONTEXT_BYTES -> EXPAT_CONTEXT_BYTES
- XML_DEV_URANDOM -> EXPAT_DEV_URANDOM
- XML_DTD -> EXPAT_DTD
- XML_NS -> EXPAT_NS
- XML_UNICODE -> EXPAT_UNICODE
- XML_UNICODE_WCHAR_T -> EXPAT_UNICODE_WCHAR_T
#244 #264 CMake: Add argument -DEXPAT_ATTR_INFO=(ON|OFF),
default OFF
#326 CMake: Add argument -DEXPAT_LARGE_SIZE=(ON|OFF),
default OFF
#328 CMake: Add argument -DEXPAT_MIN_SIZE=(ON|OFF),
default OFF
#239 #277 CMake: Add arguments
-DUSE_GETRANDOM=(ON|OFF|AUTO), default AUTO
-DUSE_SYS_GETRANDOM=(ON|OFF|AUTO), default AUTO
-DEXPAT_WITH_GETRANDOM=(ON|OFF|AUTO), default AUTO
-DEXPAT_WITH_SYS_GETRANDOM=(ON|OFF|AUTO), default AUTO
#326 CMake: Install expat_config.h to include directory
#326 CMake: Generate and install configuration files for
future find_package(expat [..] CONFIG [..])
@ -39,7 +60,8 @@ Release x.x.x xxx xxx xx xxxx
Old: expat[d].lib
New: expat[w][d][MD|MT].lib
CMake: Migrate files from Windows to Unix line endings
#308 CMake: Integrate OSS-Fuzz fuzzers
#308 CMake: Integrate OSS-Fuzz fuzzers, option
-DEXPAT_BUILD_FUZZERS=(ON|OFF), default OFF
#299 #302 Windows: Replace LoadLibrary hack to access
unofficial API function SystemFunction036 (RtlGenRandom)
by using official API function rand_s (needs WinXP+)

View file

@ -21,7 +21,7 @@ check_symbol_exists("getpagesize" "unistd.h" HAVE_GETPAGESIZE)
check_symbol_exists("mmap" "sys/mman.h" HAVE_MMAP)
check_symbol_exists("getrandom" "sys/random.h" HAVE_GETRANDOM)
if(USE_libbsd)
if(EXPAT_WITH_LIBBSD)
set(CMAKE_REQUIRED_LIBRARIES "${LIB_BSD}")
set(_bsd "bsd/")
else()

View file

@ -130,3 +130,62 @@ information.
A reference manual is available in the file `doc/reference.html` in this
distribution.
The CMake build system is still *experimental* and will replace the primary
build system based on GNU Autotools at some point when its ready.
For an idea of the available (non-advanced) options for building with CMake:
```console
# rm -f CMakeCache.txt ; cmake -D_EXPAT_HELP=ON -LH . | grep -B1 ':.*='
// Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ...
CMAKE_BUILD_TYPE:STRING=
--
// Install path prefix, prepended onto install directories.
CMAKE_INSTALL_PREFIX:PATH=/usr/local
--
// Path to a program.
DOCBOOK_TO_MAN:FILEPATH=/usr/bin/docbook2x-man
--
// build man page for xmlwf
EXPAT_BUILD_DOCS:BOOL=ON
--
// build the examples for expat library
EXPAT_BUILD_EXAMPLES:BOOL=ON
--
// build fuzzers for the expat library
EXPAT_BUILD_FUZZERS:BOOL=OFF
--
// build the tests for expat library
EXPAT_BUILD_TESTS:BOOL=ON
--
// build the xmlwf tool for expat library
EXPAT_BUILD_TOOLS:BOOL=ON
--
// install expat files in cmake install target
EXPAT_ENABLE_INSTALL:BOOL=ON
--
// Use /MT flag (static CRT) when compiling in MSVC
EXPAT_MSVC_STATIC_CRT:BOOL=OFF
--
// build a shared expat library
EXPAT_SHARED_LIBS:BOOL=ON
--
// Use UTF-16 encoded chars (two bytes) instead of UTF-8
EXPAT_UNICODE:BOOL=OFF
--
// Use wchar_t to represent UTF-16 instead of unsigned short
EXPAT_UNICODE_WCHAR_T:BOOL=OFF
--
// Treat all compiler warnings as errors
EXPAT_WARNINGS_AS_ERRORS:BOOL=OFF
--
// Make use of getrandom function (ON|OFF|AUTO) [default=AUTO]
EXPAT_WITH_GETRANDOM:STRING=AUTO
--
// utilize libbsd (for arc4random_buf)
EXPAT_WITH_LIBBSD:BOOL=OFF
--
// Make use of syscall SYS_getrandom (ON|OFF|AUTO) [default=AUTO]
EXPAT_WITH_SYS_GETRANDOM:STRING=AUTO
```

View file

@ -43,18 +43,18 @@ macro(_register_component _NAME _AVAILABE)
set(expat_${_NAME}_FOUND ${_AVAILABE})
endmacro()
_register_component(attr_info @XML_ATTR_INFO@)
if(@XML_CONTEXT_BYTES@)
_register_component(context_bytes 1)
_register_component(attr_info @EXPAT_ATTR_INFO@)
if(@EXPAT_CONTEXT_BYTES@)
_register_component(context_bytes ON)
else()
_register_component(context_bytes 0)
_register_component(context_bytes OFF)
endif()
_register_component(dtd @XML_DTD@)
_register_component(large_size @XML_LARGE_SIZE@)
_register_component(min_size @XML_MIN_SIZE@)
_register_component(ns @XML_NS@)
_register_component(unicode @XML_UNICODE@)
_register_component(unicode_wchar_t @XML_UNICODE_WCHAR_T@)
_register_component(dtd @EXPAT_DTD@)
_register_component(large_size @EXPAT_LARGE_SIZE@)
_register_component(min_size @EXPAT_MIN_SIZE@)
_register_component(ns @EXPAT_NS@)
_register_component(unicode @EXPAT_UNICODE@)
_register_component(unicode_wchar_t @EXPAT_UNICODE_WCHAR_T@)
check_required_components(expat)

View file

@ -46,9 +46,9 @@ Expat can be built on Windows in two ways:
The "w" indicates the UTF-16 version of the library.
Versions that are statically linking with the multi-threaded run-time library
can be built with -DMSVC_USE_STATIC_CRT=ON.
can be built with -DEXPAT_MSVC_STATIC_CRT=ON.
Static Linking: (through -DBUILD_shared=OFF)
Static Linking: (through -DEXPAT_SHARED_LIBS=OFF)
The libraries should be named like this:
Multi-threaded: libexpat(w)MT.lib

View file

@ -43,7 +43,7 @@ MD %BINDIR% || EXIT /b 1
MD build_shared_char || EXIT /b 1
CD build_shared_char || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DMSVC_USE_STATIC_CRT=ON -DBUILD_examples=OFF -DBUILD_tests=OFF -DBUILD_tools=OFF .. || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DEXPAT_MSVC_STATIC_CRT=ON -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF .. || EXIT /b 1
msbuild /m expat.sln || EXIT /b 1
DIR %CONFIGURATION% || EXIT /b 1
CD .. || EXIT /b 1
@ -53,7 +53,7 @@ COPY build_shared_char\%CONFIGURATION%\expat.lib %BINDIR%\ || EXIT /b 1
MD build_static_char || EXIT /b 1
CD build_static_char || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DMSVC_USE_STATIC_CRT=ON -DBUILD_examples=OFF -DBUILD_tests=OFF -DBUILD_shared=OFF .. || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DEXPAT_MSVC_STATIC_CRT=ON -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_SHARED_LIBS=OFF .. || EXIT /b 1
msbuild /m expat.sln || EXIT /b 1
DIR %CONFIGURATION% || EXIT /b 1
CD .. || EXIT /b 1
@ -63,7 +63,7 @@ COPY build_static_char\xmlwf\%CONFIGURATION%\xmlwf.exe %BINDIR%\ || EXIT /b 1
MD build_shared_wchar_t || EXIT /b 1
CD build_shared_wchar_t || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DMSVC_USE_STATIC_CRT=ON -DBUILD_examples=OFF -DBUILD_tests=OFF -DBUILD_tools=OFF -DXML_UNICODE=ON -DXML_UNICODE_WCHAR_T=ON .. || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DEXPAT_MSVC_STATIC_CRT=ON -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF -DEXPAT_UNICODE=ON -DEXPAT_UNICODE_WCHAR_T=ON .. || EXIT /b 1
msbuild /m expat.sln || EXIT /b 1
DIR %CONFIGURATION% || EXIT /b 1
CD .. || EXIT /b 1
@ -73,7 +73,7 @@ COPY build_shared_wchar_t\%CONFIGURATION%\expatw.lib %BINDIR%\ || EXIT /b 1
MD build_static_wchar_t || EXIT /b 1
CD build_static_wchar_t || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DMSVC_USE_STATIC_CRT=ON -DBUILD_examples=OFF -DBUILD_tests=OFF -DBUILD_tools=OFF -DBUILD_shared=OFF -DXML_UNICODE=ON -DXML_UNICODE_WCHAR_T=ON .. || EXIT /b 1
cmake -G"%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DEXPAT_MSVC_STATIC_CRT=ON -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF -DEXPAT_SHARED_LIBS=OFF -DEXPAT_UNICODE=ON -DEXPAT_UNICODE_WCHAR_T=ON .. || EXIT /b 1
msbuild /m expat.sln || EXIT /b 1
DIR %CONFIGURATION% || EXIT /b 1
CD .. || EXIT /b 1