207 lines
7.6 KiB
CMake
207 lines
7.6 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
|
|
project(SwigPythonDistributions NONE)
|
|
|
|
set(default_build_type "Release")
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
|
|
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
|
|
STRING "Choose the type of build." FORCE)
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
|
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
|
|
endif()
|
|
|
|
enable_language(CXX)
|
|
include(ExternalProject)
|
|
|
|
include(swig_version.cmake)
|
|
|
|
set(_swig_cache_args)
|
|
set(_swig_build_flags)
|
|
|
|
if(WIN32)
|
|
set(_swig_build_flags "${_swig_build_flags} -static -static-libgcc -static-libstdc++")
|
|
if (SWIG VERSION_LESS 4.1.0)
|
|
# Building with Makefiles on Windows using MSYS is a royal pain
|
|
# Makefiles were trying to run using the git bash copy of sh.exe, but
|
|
# of course, those failed to run due to a SPACE in the path name
|
|
# because "Program Files"...
|
|
set(WIN_USE_PREBUILT ON)
|
|
endif()
|
|
endif()
|
|
|
|
|
|
|
|
function(tmp_ExternalProject_add_Empty prj deps)
|
|
set(deps_args)
|
|
if(NOT deps STREQUAL "")
|
|
set(deps_args DEPENDS ${deps})
|
|
endif()
|
|
ExternalProject_add(${prj}
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/${prj}
|
|
DOWNLOAD_COMMAND ""
|
|
UPDATE_COMMAND ""
|
|
CONFIGURE_COMMAND ""
|
|
BUILD_COMMAND ""
|
|
BUILD_IN_SOURCE 1
|
|
INSTALL_COMMAND ""
|
|
${deps_args}
|
|
)
|
|
endfunction()
|
|
|
|
# PCRE2
|
|
set(PCRE2_SOURCE_DIR ${CMAKE_BINARY_DIR}/PCRE2-src)
|
|
set(PCRE2_BINARY_DIR ${CMAKE_BINARY_DIR}/PCRE2-build)
|
|
set(PCRE2_INSTALL_DIR ${CMAKE_BINARY_DIR}/PCRE2-install)
|
|
|
|
# PCRE
|
|
set(PCRE_SOURCE_DIR ${CMAKE_BINARY_DIR}/PCRE-src)
|
|
set(PCRE_BINARY_DIR ${CMAKE_BINARY_DIR}/PCRE-build)
|
|
set(PCRE_INSTALL_DIR ${CMAKE_BINARY_DIR}/PCRE-install)
|
|
|
|
if(NOT WIN_USE_PREBUILT)
|
|
if(NOT SWIG_VERSION VERSION_LESS 4.1.0)
|
|
ExternalProject_add(PCRE2
|
|
SOURCE_DIR ${PCRE2_SOURCE_DIR}
|
|
BINARY_DIR ${PCRE2_BINARY_DIR}
|
|
INSTALL_DIR ${PCRE2_INSTALL_DIR}
|
|
URL "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.40/pcre2-10.40.zip"
|
|
URL_HASH "SHA256=b6ee01732f0e41296e60a00ce37fbed1c4955ae7e7625b1fd29a55605c9493b4"
|
|
CMAKE_CACHE_ARGS
|
|
-DCMAKE_BUILD_TYPE:STRING=${default_build_type}
|
|
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
|
-DCMAKE_INSTALL_LIBDIR:STRING=lib
|
|
-DCMAKE_C_STANDARD:STRING=99
|
|
"-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}"
|
|
)
|
|
list(APPEND _swig_cache_args
|
|
-DPCRE2_LIBRARY:FILEPATH=${PCRE2_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}pcre2-8${CMAKE_STATIC_LIBRARY_SUFFIX}
|
|
-DPCRE2_INCLUDE_DIR:PATH=${PCRE2_INSTALL_DIR}/include
|
|
)
|
|
else()
|
|
ExternalProject_add(PCRE
|
|
SOURCE_DIR ${PCRE_SOURCE_DIR}
|
|
BINARY_DIR ${PCRE_BINARY_DIR}
|
|
INSTALL_DIR ${PCRE_INSTALL_DIR}
|
|
URL "https://prdownloads.sourceforge.net/pcre/pcre-8.45.tar.gz"
|
|
URL_HASH "SHA256=4e6ce03e0336e8b4a3d6c2b70b1c5e18590a5673a98186da90d4f33c23defc09"
|
|
CMAKE_CACHE_ARGS
|
|
-DCMAKE_BUILD_TYPE:STRING=${default_build_type}
|
|
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
|
-DCMAKE_INSTALL_LIBDIR:STRING=lib
|
|
"-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}"
|
|
)
|
|
list(APPEND _swig_cache_args
|
|
-DPCRE_LIBRARY:FILEPATH=${PCRE_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}pcre${CMAKE_STATIC_LIBRARY_SUFFIX}
|
|
-DPCRE_INCLUDE_DIR:PATH=${PCRE_INSTALL_DIR}/include
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# Bison
|
|
find_package(BISON)
|
|
if(NOT BISON_FOUND AND NOT WIN_USE_PREBUILT)
|
|
set(BISON_SOURCE_DIR ${CMAKE_BINARY_DIR}/BISON-bin-src)
|
|
set(BISON_BINARY_DIR ${CMAKE_BINARY_DIR}/BISON-bin-build)
|
|
set(BISON_INSTALL_DIR ${CMAKE_BINARY_DIR}/BISON-bin-install)
|
|
set(BISON_BINARY_DIST_DIR ${CMAKE_BINARY_DIR}/BISON-bin-dist)
|
|
set(BISON_BINARY_DIST_ARCH_DIR ${CMAKE_BINARY_DIR}/BISON-bin-dist-arch)
|
|
if(WIN32)
|
|
# Easiest to just download a precompiled binary
|
|
# ExternalProject_add(BISON-bin
|
|
# SOURCE_DIR ${BISON_SOURCE_DIR}
|
|
# BINARY_DIR ${BISON_BINARY_DIR}
|
|
# URL "https://github.com/lexxmark/winflexbison/archive/v2.5.24.tar.gz"
|
|
# URL_HASH "SHA256=a49d6e310636e3487e1e066e411d908cfeae2d5b5fde1f3cf74fe1d6d4301062"
|
|
# CMAKE_CACHE_ARGS
|
|
# -DCMAKE_INSTALL_PREFIX:PATH=${BISON_INSTALL_DIR}
|
|
# INSTALL_DIR ${BISON_INSTALL_DIR}
|
|
# )
|
|
ExternalProject_add(BISON-bin
|
|
SOURCE_DIR ${BISON_BINARY_DIST_DIR}
|
|
URL "https://github.com/lexxmark/winflexbison/releases/download/v2.5.24/win_flex_bison-2.5.24.zip"
|
|
URL_HASH "SHA256=39c6086ce211d5415500acc5ed2d8939861ca1696aee48909c7f6daf5122b505"
|
|
DOWNLOAD_DIR ${BISON_SOURCE_DIR}
|
|
CONFIGURE_COMMAND ""
|
|
BUILD_COMMAND ""
|
|
BUILD_IN_SOURCE 1
|
|
INSTALL_COMMAND ""
|
|
)
|
|
list(APPEND _swig_cache_args
|
|
-DBISON_EXECUTABLE:FILEPATH=${BISON_BINARY_DIST_DIR}/win_bison${CMAKE_EXECUTABLE_SUFFIX}
|
|
)
|
|
else()
|
|
# Build from source on platforms that could reasonably already have autotools installed
|
|
ExternalProject_add(BISON-bin
|
|
SOURCE_DIR ${BISON_SOURCE_DIR}
|
|
INSTALL_DIR ${BISON_INSTALL_DIR}
|
|
URL "https://ftp.gnu.org/gnu/bison/bison-3.7.tar.gz"
|
|
URL_HASH "SHA256=492ad61202de893ca21a99b621d63fa5389da58804ad79d3f226b8d04b803998"
|
|
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
|
|
BUILD_COMMAND make
|
|
BUILD_IN_SOURCE 1
|
|
INSTALL_COMMAND make install
|
|
)
|
|
list(APPEND _swig_cache_args
|
|
-DBISON_EXECUTABLE:FILEPATH=${BISON_INSTALL_DIR}/bin/bison${CMAKE_EXECUTABLE_SUFFIX}
|
|
)
|
|
endif()
|
|
else()
|
|
tmp_ExternalProject_add_Empty(BISON-bin "")
|
|
endif()
|
|
|
|
# SWIG
|
|
set(SWIG_SOURCE_DIR ${CMAKE_BINARY_DIR}/SWIG-src)
|
|
set(SWIG_BINARY_DIR ${CMAKE_BINARY_DIR}/SWIG-build)
|
|
|
|
if(NOT WIN_USE_PREBUILT)
|
|
if(NOT SWIG_VERSION VERSION_LESS 4.1.0)
|
|
ExternalProject_add(SWIG
|
|
SOURCE_DIR ${SWIG_SOURCE_DIR}
|
|
BINARY_DIR ${SWIG_BINARY_DIR}
|
|
URL "https://github.com/swig/swig/archive/refs/tags/v${SWIG_VERSION}.tar.gz"
|
|
#URL "https://github.com/swig/swig/archive/master.tar.gz"
|
|
CMAKE_CACHE_ARGS
|
|
-DBUILD_TESTING:BOOL=OFF
|
|
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
|
|
"-DCMAKE_C_FLAGS:STRING=${_swig_build_flags}"
|
|
"-DCMAKE_CXX_FLAGS:STRING=${_swig_build_flags}"
|
|
"-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}"
|
|
${_swig_cache_args}
|
|
INSTALL_COMMAND ""
|
|
DEPENDS
|
|
PCRE2
|
|
BISON-bin
|
|
)
|
|
install(SCRIPT ${SWIG_BINARY_DIR}/cmake_install.cmake)
|
|
else()
|
|
set(SWIG_INSTALL_DIR ${CMAKE_BINARY_DIR}/SWIG-install)
|
|
ExternalProject_add(SWIG
|
|
SOURCE_DIR ${SWIG_SOURCE_DIR}
|
|
INSTALL_DIR ${SWIG_INSTALL_DIR}
|
|
URL "https://prdownloads.sourceforge.net/swig/swig-${SWIG_VERSION}.tar.gz"
|
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PCRE_CONFIG=${PCRE_INSTALL_DIR}/bin/pcre-config ${MSYSTEM} ${MSYS_CMD} ${MSYS_SHELL} ${WIN_MSYS_HERE} <SOURCE_DIR>/configure --prefix=
|
|
BUILD_COMMAND make -j
|
|
BUILD_IN_SOURCE ON
|
|
INSTALL_COMMAND make -j install DESTDIR=<INSTALL_DIR>
|
|
DEPENDS
|
|
PCRE
|
|
BISON-bin
|
|
)
|
|
install(PROGRAMS ${SWIG_INSTALL_DIR}/bin/ DESTINATION bin)
|
|
install(FILES ${SWIG_INSTALL_DIR}/share/ DESTINATION share)
|
|
endif()
|
|
else(NOT WIN_USE_PREBUILT)
|
|
# building on Windows with MinGW from Makefiles is a pain -- simply get precompiled Windows binaries instead
|
|
set(SWIG_INSTALL_DIR ${CMAKE_BINARY_DIR}/SWIG-install)
|
|
ExternalProject_add(SWIG
|
|
SOURCE_DIR ${SWIG_INSTALL_DIR}
|
|
URL "https://prdownloads.sourceforge.net/swig/swigwin-${SWIG_VERSION}.zip"
|
|
CONFIGURE_COMMAND ""
|
|
BUILD_COMMAND ""
|
|
INSTALL_COMMAND ""
|
|
)
|
|
install(PROGRAMS ${SWIG_INSTALL_DIR}/swig.exe DESTINATION bin)
|
|
install(FILES ${SWIG_INSTALL_DIR}/Lib/ DESTINATION share/swig/${SWIG_VERSION})
|
|
endif()
|