diff --git a/CMakeLists.txt b/CMakeLists.txt index a61284c3a..3de5669b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,38 +42,8 @@ set(ANTLR4_WITH_STATIC_CRT OFF) # This is a more recent commit than 4.13.2 that addresses a missing # include directive needed in more recent Visual Studio releases set(ANTLR4_TAG df4d68c09cdef73e023b8838a8bc7ca4dff1d1de) -include(ExternalAntlr4Cpp) - - -if (DEFINED ENV{FORCE_BUILD_LIBXML2}) - set(BUILD_STATIC_LIBXML2 TRUE) -else() - FIND_PACKAGE(LibXml2) - if (${LibXml2_FOUND}) - set(BUILD_STATIC_LIBXML2 FALSE) - elseif (DEFINED ENV{FORCE_SYSTEM_LIBXML2}) - message(FATAL_ERROR "FORCE_SYSTEM_LIBXML2 set but LibXML2 not found") - else() - set(BUILD_STATIC_LIBXML2 TRUE) - endif() -endif() - -if (${BUILD_STATIC_LIBXML2}) - message(STATUS "LibXML2 not found or overridden -- will download and statically link") - set(LIBXML2_TAG tags/v2.9.13) - include(ExternalLibXML2) - include_directories(${LIBXML2_STATIC_INCLUDE_DIR}) - set(NEED_LIBXML2_DEPEND TRUE) - if (WIN32) - set(CHOSEN_LIBXML2_LIBRARY ${LIBXML2_WIN_LIBRARIES}) - else() - set(CHOSEN_LIBXML2_LIBRARY ${LIBXML2_NONWIN_LIBRARIES}) - endif() -else() - include_directories(${LIBXML2_INCLUDE_DIR}) - set(NEED_LIBXML2_DEPEND FALSE) - set(CHOSEN_LIBXML2_LIBRARY ${LIBXML2_LIBRARY}) -endif() +set(LIBXML2_TAG tags/v2.9.13) +add_subdirectory(third_party) # sanitizer support # work around https://github.com/pypa/setuptools/issues/1928 with environment diff --git a/c/makeotf/lib/cffread/CMakeLists.txt b/c/makeotf/lib/cffread/CMakeLists.txt index 2990035f9..550e6d833 100644 --- a/c/makeotf/lib/cffread/CMakeLists.txt +++ b/c/makeotf/lib/cffread/CMakeLists.txt @@ -2,12 +2,8 @@ add_library(makeotf_cffread STATIC cffread.c) target_include_directories(makeotf_cffread PRIVATE AFTER $<$:${ANTLR4_INCLUDE_DIRS}>) -target_link_libraries(makeotf_cffread PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) +target_link_libraries(makeotf_cffread PUBLIC LibXml2::LibXml2) -if (${NEED_LIBXML2_DEPEND}) - add_dependencies(makeotf_cffread ${LIBXML2_TARGET}) -endif() - -target_link_libraries(makeotf_cffread PUBLIC antlr4_static) +target_link_libraries(makeotf_cffread PUBLIC afdko::antlr4) target_compile_definitions(makeotf_cffread PRIVATE $<$:CFF_DEBUG=1> CFF_T13_SUPPORT=0) diff --git a/c/makeotf/lib/hotconv/CMakeLists.txt b/c/makeotf/lib/hotconv/CMakeLists.txt index 60e49458a..b2aa66bb8 100644 --- a/c/makeotf/lib/hotconv/CMakeLists.txt +++ b/c/makeotf/lib/hotconv/CMakeLists.txt @@ -70,13 +70,9 @@ add_library(hotconv STATIC set_property(TARGET hotconv PROPERTY C_STANDARD 99) set_property(TARGET hotconv PROPERTY CXX_STANDARD 17) target_include_directories(hotconv PRIVATE AFTER $<$:${ANTLR4_INCLUDE_DIRS}>) -target_link_libraries(hotconv PUBLIC antlr4_static) +target_link_libraries(hotconv PUBLIC afdko::antlr4) -target_link_libraries(hotconv PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) - -if (${NEED_LIBXML2_DEPEND}) - add_dependencies(hotconv ${LIBXML2_TARGET}) -endif() +target_link_libraries(hotconv PUBLIC LibXml2::LibXml2) if ( CMAKE_COMPILER_IS_GNUCC ) target_compile_options(hotconv PRIVATE -Wall -Wno-attributes) diff --git a/c/makeotf/lib/pstoken/CMakeLists.txt b/c/makeotf/lib/pstoken/CMakeLists.txt index f7038c6b3..381045701 100644 --- a/c/makeotf/lib/pstoken/CMakeLists.txt +++ b/c/makeotf/lib/pstoken/CMakeLists.txt @@ -1,9 +1,5 @@ add_library(makeotf_pstoken STATIC pstoken.c) -target_link_libraries(makeotf_pstoken PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) - -if (${NEED_LIBXML2_DEPEND}) - add_dependencies(makeotf_pstoken ${LIBXML2_TARGET}) -endif() +target_link_libraries(makeotf_pstoken PUBLIC LibXml2::LibXml2) target_compile_definitions(makeotf_pstoken PRIVATE PSTOKEN_DEBUG=1 CFF_DEBUG=1 CFF_T13_SUPPORT=0) diff --git a/c/makeotf/lib/typecomp/CMakeLists.txt b/c/makeotf/lib/typecomp/CMakeLists.txt index 887322ad4..f27dae359 100644 --- a/c/makeotf/lib/typecomp/CMakeLists.txt +++ b/c/makeotf/lib/typecomp/CMakeLists.txt @@ -45,10 +45,7 @@ add_library(typecomp STATIC tc.c ) -target_link_libraries(typecomp PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) -if (${NEED_LIBXML2_DEPEND}) - add_dependencies(typecomp ${LIBXML2_TARGET}) -endif() +target_link_libraries(typecomp PUBLIC LibXml2::LibXml2) target_compile_definitions(typecomp PRIVATE TC_HINT_CHECK=1 diff --git a/c/makeotf/source/CMakeLists.txt b/c/makeotf/source/CMakeLists.txt index cd97cab52..82c8f9eba 100644 --- a/c/makeotf/source/CMakeLists.txt +++ b/c/makeotf/source/CMakeLists.txt @@ -27,7 +27,7 @@ if (HAVE_M_LIB) target_link_libraries(makeotfexe PRIVATE m) endif () -target_link_libraries(makeotfexe PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) +target_link_libraries(makeotfexe PUBLIC LibXml2::LibXml2) target_compile_definitions(makeotfexe PRIVATE MAKEOTFLIB_EXPORTS=1) diff --git a/c/mergefonts/source/CMakeLists.txt b/c/mergefonts/source/CMakeLists.txt index 8028974c6..c2941ae10 100644 --- a/c/mergefonts/source/CMakeLists.txt +++ b/c/mergefonts/source/CMakeLists.txt @@ -8,7 +8,7 @@ add_executable(mergefonts target_include_directories(mergefonts PRIVATE ../../shared/include ../../shared/resource ../../shared/source/tx_shared) target_link_libraries(mergefonts PUBLIC tx_shared) -target_link_libraries(mergefonts PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) +target_link_libraries(mergefonts PUBLIC LibXml2::LibXml2) if (${NEED_LIBXML_DEPEND}) add_dependencies(mergefonts ${LIBXML2_TARGET}) diff --git a/c/rotatefont/source/CMakeLists.txt b/c/rotatefont/source/CMakeLists.txt index 2f83fbd62..5de2886ff 100644 --- a/c/rotatefont/source/CMakeLists.txt +++ b/c/rotatefont/source/CMakeLists.txt @@ -9,11 +9,6 @@ target_include_directories(rotatefont PRIVATE ../../shared/include ../../shared/ target_link_libraries(rotatefont PUBLIC tx_shared) -target_link_libraries(rotatefont PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) - -if (${NEED_LIBXML2_DEPEND}) - add_dependencies(rotatefont ${LIBXML2_TARGET}) - target_compile_definitions(rotatefont PUBLIC -DLIBXML_STATIC) -endif() +target_link_libraries(rotatefont PUBLIC LibXml2::LibXml2) install(TARGETS rotatefont DESTINATION bin) diff --git a/c/shared/source/CMakeLists.txt b/c/shared/source/CMakeLists.txt index 275b3c36b..9c84afd7e 100644 --- a/c/shared/source/CMakeLists.txt +++ b/c/shared/source/CMakeLists.txt @@ -3,9 +3,7 @@ include_directories(../include ../resource) MACRO(ADD_AFDKOLIB lm) file(GLOB sl_sources "${lm}/*") add_library(${lm} STATIC ${sl_sources}) - if(${NEED_LIBXML2_DEPEND}) - add_dependencies(${lm} ${LIBXML2_TARGET}) - endif(${NEED_LIBXML2_DEPEND}) + target_link_libraries(${lm} PRIVATE LibXml2::LibXml2) ENDMACRO(ADD_AFDKOLIB) ADD_AFDKOLIB(absfont) @@ -47,11 +45,7 @@ target_compile_definitions(t1write PRIVATE $<$:T1W_DEBUG=1>) target_compile_definitions(ttread PRIVATE $<$:TTR_DEBUG=1>) target_compile_definitions(tx_shared PRIVATE $<$:CFW_DEBUG=1>) -target_link_libraries(tx_shared PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) - -if (${NEED_LIBXML2_DEPEND}) - target_compile_definitions(tx_shared PUBLIC -DLIBXML_STATIC) -endif() +target_link_libraries(tx_shared PUBLIC LibXml2::LibXml2) # These libraries are partially ordered diff --git a/c/tx/source/CMakeLists.txt b/c/tx/source/CMakeLists.txt index 018a79837..1698a2fe2 100644 --- a/c/tx/source/CMakeLists.txt +++ b/c/tx/source/CMakeLists.txt @@ -8,10 +8,6 @@ add_executable(tx target_include_directories(tx PRIVATE ../../shared/include ../../shared/resource ../../shared/source/tx_shared) target_link_libraries(tx PUBLIC tx_shared) -target_link_libraries(tx PUBLIC ${CHOSEN_LIBXML2_LIBRARY}) -if (${NEED_LIBXML2_DEPEND}) - add_dependencies(tx ${LIBXML2_TARGET}) - target_compile_definitions(tx PUBLIC -DLIBXML_STATIC) -endif() +target_link_libraries(tx PUBLIC LibXml2::LibXml2) install(TARGETS tx DESTINATION bin) diff --git a/cmake/ExternalAntlr4Cpp.cmake b/cmake/ExternalAntlr4Cpp.cmake deleted file mode 100644 index 9f2a83f06..000000000 --- a/cmake/ExternalAntlr4Cpp.cmake +++ /dev/null @@ -1,165 +0,0 @@ -include(ExternalProject) -cmake_policy(SET CMP0114 NEW) # Added by iterumllc - -# Edits below are for path length or (in the zip download) correctness - -set(ANTLR4_ROOT ${CMAKE_CURRENT_BINARY_DIR}/a4/src/a4) # Edited by iterumllc -set(ANTLR4_INCLUDE_DIRS ${ANTLR4_ROOT}/runtime/Cpp/runtime/src) -set(ANTLR4_GIT_REPOSITORY https://github.com/antlr/antlr4.git) -if(NOT DEFINED ANTLR4_TAG) - # Set to branch name to keep library updated at the cost of needing to rebuild after 'clean' - # Set to commit hash to keep the build stable and does not need to rebuild after 'clean' - set(ANTLR4_TAG master) -endif() - -if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") - set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/runtime/$(Configuration)) -elseif(${CMAKE_GENERATOR} MATCHES "Xcode.*") - set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/runtime) -else() - set(ANTLR4_OUTPUT_DIR ${ANTLR4_ROOT}/runtime/Cpp/runtime) -endif() - -if(MSVC) - set(ANTLR4_STATIC_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/antlr4-runtime-static.lib) - set(ANTLR4_SHARED_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/antlr4-runtime.lib) - set(ANTLR4_RUNTIME_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/antlr4-runtime.dll) -else() - set(ANTLR4_STATIC_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/libantlr4-runtime.a) - if(MINGW) - set(ANTLR4_SHARED_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/libantlr4-runtime.dll.a) - set(ANTLR4_RUNTIME_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/libantlr4-runtime.dll) - elseif(CYGWIN) - set(ANTLR4_SHARED_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/libantlr4-runtime.dll.a) - set(ANTLR4_RUNTIME_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/cygantlr4-runtime-4.9.2.dll) - elseif(APPLE) - set(ANTLR4_RUNTIME_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/libantlr4-runtime.dylib) - else() - set(ANTLR4_RUNTIME_LIBRARIES - ${ANTLR4_OUTPUT_DIR}/libantlr4-runtime.so) - endif() -endif() - -if(${CMAKE_GENERATOR} MATCHES ".* Makefiles") - # This avoids - # 'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.' - set(ANTLR4_BUILD_COMMAND $(MAKE)) -elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") - set(ANTLR4_BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $(Configuration) - --target) -elseif(${CMAKE_GENERATOR} MATCHES "Xcode.*") - set(ANTLR4_BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $(CONFIGURATION) - --target) -else() - set(ANTLR4_BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --target) -endif() - -if(NOT DEFINED ANTLR4_WITH_STATIC_CRT) - set(ANTLR4_WITH_STATIC_CRT ON) -endif() - -if(ANTLR4_ZIP_REPOSITORY) - ExternalProject_Add( - antlr4_runtime - PREFIX a4 # Edited by iterumllc - URL ${ANTLR4_ZIP_REPOSITORY} - DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} - BUILD_COMMAND "" - BUILD_IN_SOURCE 1 - SOURCE_DIR ${ANTLR4_ROOT}/runtime/Cpp # Edited by iterumllc - # SOURCE_SUBDIR runtime/Cpp # Commented out by iterumllc - CMAKE_CACHE_ARGS - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON - -DANTLR_BUILD_CPP_TESTS:BOOL=OFF - # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard - # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project - INSTALL_COMMAND "" - EXCLUDE_FROM_ALL 1) -else() - ExternalProject_Add( - antlr4_runtime - PREFIX a4 # Edited by iterumllc - GIT_REPOSITORY ${ANTLR4_GIT_REPOSITORY} - GIT_TAG ${ANTLR4_TAG} - DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} - BUILD_COMMAND "" - BUILD_IN_SOURCE 1 - SOURCE_DIR ${ANTLR4_ROOT} - SOURCE_SUBDIR runtime/Cpp - CMAKE_CACHE_ARGS - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DWITH_STATIC_CRT:BOOL=${ANTLR4_WITH_STATIC_CRT} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON - -DANTLR_BUILD_CPP_TESTS:BOOL=OFF - # -DCMAKE_CXX_STANDARD:STRING=17 # if desired, compile the runtime with a different C++ standard - # -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD} # alternatively, compile the runtime with the same C++ standard as the outer project - INSTALL_COMMAND "" - EXCLUDE_FROM_ALL 1) -endif() - -# Separate build step as rarely people want both -set(ANTLR4_BUILD_DIR ${ANTLR4_ROOT}) -if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14.0") - # CMake 3.14 builds in above's SOURCE_SUBDIR when BUILD_IN_SOURCE is true - set(ANTLR4_BUILD_DIR ${ANTLR4_ROOT}/runtime/Cpp) -endif() - -ExternalProject_Add_Step( - antlr4_runtime - build_static - COMMAND ${ANTLR4_BUILD_COMMAND} antlr4_static - # Depend on target instead of step (a custom command) - # to avoid running dependent steps concurrently - DEPENDS antlr4_runtime - BYPRODUCTS ${ANTLR4_STATIC_LIBRARIES} - EXCLUDE_FROM_MAIN 1 - WORKING_DIRECTORY ${ANTLR4_BUILD_DIR}) -ExternalProject_Add_StepTargets(antlr4_runtime build_static) - -add_library(antlr4_static STATIC IMPORTED) -add_dependencies(antlr4_static antlr4_runtime-build_static) -set_target_properties(antlr4_static PROPERTIES - IMPORTED_LOCATION ${ANTLR4_STATIC_LIBRARIES}) - -ExternalProject_Add_Step( - antlr4_runtime - build_shared - COMMAND ${ANTLR4_BUILD_COMMAND} antlr4_shared - # Depend on target instead of step (a custom command) - # to avoid running dependent steps concurrently - DEPENDS antlr4_runtime - BYPRODUCTS ${ANTLR4_SHARED_LIBRARIES} ${ANTLR4_RUNTIME_LIBRARIES} - EXCLUDE_FROM_MAIN 1 - WORKING_DIRECTORY ${ANTLR4_BUILD_DIR}) -ExternalProject_Add_StepTargets(antlr4_runtime build_shared) - -add_library(antlr4_shared SHARED IMPORTED) -add_dependencies(antlr4_shared antlr4_runtime-build_shared) -set_target_properties(antlr4_shared PROPERTIES - IMPORTED_LOCATION ${ANTLR4_RUNTIME_LIBRARIES}) -if(ANTLR4_SHARED_LIBRARIES) - set_target_properties(antlr4_shared PROPERTIES - IMPORTED_IMPLIB ${ANTLR4_SHARED_LIBRARIES}) -endif() diff --git a/cmake/ExternalLibXML2.cmake b/cmake/ExternalLibXML2.cmake deleted file mode 100644 index 4aaa0d90c..000000000 --- a/cmake/ExternalLibXML2.cmake +++ /dev/null @@ -1,51 +0,0 @@ -include (ExternalProject) -cmake_policy(SET CMP0114 NEW) - -set(LIBXML2_TARGET external.libxml2) - -set(LIBXML2_GIT_REPOSITORY https://gitlab.gnome.org/GNOME/libxml2.git) -if(NOT DEFINED LIBXML2_TAG) - set(LIBXML2_TAG master) -endif() - -if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") - set(LIBXML2_OUTPUT_DIR ${LIBXML2_TARGET}/bin/${CMAKE_BUILD_TYPE}) -else() - set(LIBXML2_OUTPUT_DIR ${LIBXML2_TARGET}/bin) -endif() - -if(WIN32) - set(LIBXML2_LIBNAME libxml2s.lib) -else() - set(LIBXML2_LIBNAME libxml2.a) -endif() - -ExternalProject_Add(${LIBXML2_TARGET} - GIT_REPOSITORY ${LIBXML2_GIT_REPOSITORY} - GIT_TAG ${LIBXML2_TAG} - GIT_SHALLOW 1 - BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${LIBXML2_OUTPUT_DIR}/${LIBXML2_LIBNAME} - SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/${LIBXML2_TARGET}/src - BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${LIBXML2_TARGET}/bin - CMAKE_ARGS -D BUILD_SHARED_LIBS=OFF -D CMAKE_BUILD_TYPE=Release -D LIBXML2_WITH_ICONV=OFF -D LIBXML2_WITH_LZMA=OFF -D LIBXML2_WITH_ZLIB=OFF -D LIBXML2_WITH_PYTHON=OFF -D CMAKE_VERBOSE_MAKEFILE:BOOL=ON - INSTALL_COMMAND "" -) - -ExternalProject_Get_Property(${LIBXML2_TARGET} BINARY_DIR) -ExternalProject_Get_Property(${LIBXML2_TARGET} SOURCE_DIR) - -file(MAKE_DIRECTORY ${SOURCE_DIR}/include) - -add_library(libxml2 STATIC IMPORTED GLOBAL) - -add_dependencies(libxml2 ${LIBXML2_TARGET}) -set_target_properties(libxml2 PROPERTIES - IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${LIBXML2_OUTPUT_DIR}/${LIBXML2_LIBNAME} - INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include) -target_include_directories(libxml2 INTERFACE ${SOURCE_DIR}/include INTERFACE ${BINARY_DIR}) - -set(LIBXML2_STATIC_INCLUDE_DIR ${SOURCE_DIR}/include ${BINARY_DIR}) - -set(LIBXML2_WIN_LIBRARIES wsock32 ws2_32 libxml2) - -set(LIBXML2_NONWIN_LIBRARIES libxml2) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt new file mode 100644 index 000000000..cb703f7bf --- /dev/null +++ b/third_party/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(antlr4cpp) +add_subdirectory(LibXml2) diff --git a/third_party/LibXml2/CMakeLists.txt b/third_party/LibXml2/CMakeLists.txt new file mode 100644 index 000000000..8c3f88d91 --- /dev/null +++ b/third_party/LibXml2/CMakeLists.txt @@ -0,0 +1,38 @@ +include(FetchContent) + +if(NOT DEFINED LIBXML2_TAG) + set(LIBXML2_TAG master) +endif() + +set(fetch_content_args) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24 AND NOT DEFINED ENV{FORCE_BUILD_LIBXML2}) + list(APPEND fetch_content_args FIND_PACKAGE_ARGS CONFIG) +endif() +FetchContent_Declare(LibXml2 + GIT_REPOSITORY https://gitlab.gnome.org/GNOME/libxml2.git + GIT_TAG ${LIBXML2_TAG} +) + +option(AFDKO_BUILD_LIBXML2_SHARED_LIB + "Whether to use the shared library of afdko" OFF) +if(AFDKO_BUILD_LIBXML2_SHARED_LIB) + set(BUILD_SHARED_LIBS ON) +else() + set(BUILD_SHARED_LIBS OFF) +endif() +option(LIBXML2_WITH_DEBUG "Override: afdko" OFF) +option(LIBXML2_WITH_DOCS "Override: afdko" OFF) +option(LIBXML2_WITH_TESTS "Override: afdko" OFF) +option(LIBXML2_WITH_PYTHON "Override: afdko" OFF) +option(LIBXML2_WITH_ICONV "Override: afdko" OFF) +option(LIBXML2_WITH_LZMA "Override: afdko" OFF) +option(LIBXML2_WITH_ZLIB "Override: afdko" OFF) + +if(CMAKE_VERSION VERSION_LESS 3.24 AND DEFINED ENV{FORCE_SYSTEM_LIBXML2}) + find_package(LibXml2 REQUIRED CONFIG) +else() + if(DEFINED ENV{FORCE_SYSTEM_LIBXML2}) + set(CMAKE_REQUIRE_FIND_PACKAGE_LibXml2 ON) + endif() + FetchContent_MakeAvailable(LibXml2) +endif() diff --git a/third_party/antlr4cpp/CMakeLists.txt b/third_party/antlr4cpp/CMakeLists.txt new file mode 100644 index 000000000..87dd15d2e --- /dev/null +++ b/third_party/antlr4cpp/CMakeLists.txt @@ -0,0 +1,33 @@ +include(FetchContent) + +if(NOT DEFINED ANTLR4_TAG) + # Set to branch name to keep library updated at the cost of needing to rebuild after 'clean' + # Set to commit hash to keep the build stable and does not need to rebuild after 'clean' + set(ANTLR4_TAG dev) +endif() + +if(ANTLR4_ZIP_REPOSITORY) + set(fetch_content_args + URL ${ANTLR4_ZIP_REPOSITORY} + ) +else() + set(fetch_content_args + GIT_REPOSITORY https://github.com/antlr/antlr4.git + GIT_TAG ${ANTLR4_TAG} + ) +endif() +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24) + list(APPEND fetch_content_args FIND_PACKAGE_ARGS CONFIG) +endif() +FetchContent_Declare(antlr4-runtime + SOURCE_SUBDIR runtime/Cpp + ${fetch_content_args} +) + +option(ANTLR_BUILD_CPP_TESTS "Override: afdko" OFF) +option(ANTLR_BUILD_SHARED "Override: afdko" OFF) +option(ANTLR_BUILD_STATIC "Override: afdko" ON) + +set(CMAKE_CXX_STANDARD 17) +FetchContent_MakeAvailable(antlr4-runtime) +add_library(afdko::antlr4 ALIAS antlr4_static)