simh-testsetgenerator/cmake/dep-locate.cmake
B. Scott Michel 30b74dbd73 appveyor.yml build, dep lib version number updates
- Give appveyor.yml some much needed attention. Specifically, work
  around the CMake build termination when the issuing the "CMake is too
  old to produce packages" warning message. There's something funky with
  how Appveyor's runtime interacts with PowerShell and
  warning/diagnostic output ends up terminating builds unexpectedly.
  Appveyor's technical support says to write the CI/CD script using the
  old DOS CMD interpreter, not PowerShell.

- Cut down the number of builds. Older Visual Studio VM images are still
  in the appveyor.yml matrix, just commented out.

- dep-locate.cmake: Update dependency library version numbers to reflect
  recent releases for libpng16, SDL and SDL_ttf. This affects the XP
  "legacy" CMake builds on Github CI/CD, Appveyor's VS 2017 and earlier
  VM images that build the minimal SIMH dependency library support
  (i.e., environments where vcpkg is known not to work.)
2023-07-15 17:20:26 -04:00

361 lines
13 KiB
CMake

##=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
## dep-locate.cmake
##
## Consolidated list of runtime dependencies for simh, probed/found via
## CMake's find_package() and pkg_check_modules() when 'pkgconfig' is
## available.
##=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
##-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
## Find packages:
##-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
if (WITH_REGEX)
if (PREFER_PCRE)
if (USING_VCPKG)
find_package(unofficial-pcre CONFIG)
else ()
## LEGACY strategy:
find_package(PCRE)
endif ()
else ()
find_package(PCRE2)
endif ()
endif ()
if (WITH_REGEX OR WITH_VIDEO)
set(ZLIB_USE_STATIC_LIBS ON)
find_package(ZLIB)
endif ()
if (WITH_VIDEO)
if (NOT USING_VCPKG)
## LEGACY strategy:
find_package(PNG)
find_package(Freetype)
find_package(SDL2 NAMES sdl2 SDL2)
find_package(SDL2_ttf NAMES sdl2_ttf SDL2_ttf)
else ()
## vcpkg strategy:
find_package(PNG REQUIRED)
find_package(SDL2 CONFIG)
find_package(SDL2_ttf CONFIG)
endif ()
endif ()
if (WITH_NETWORK)
if (WITH_VDE)
find_package(VDE)
endif ()
## pcap is special: Headers only and dynamically loaded.
if (WITH_PCAP)
find_package(PCAP)
endif (WITH_PCAP)
endif (WITH_NETWORK)
if (NOT WIN32 OR MINGW)
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
if (WITH_REGEX)
if (PREFER_PCRE AND NOT PCRE_FOUND)
pkg_check_modules(PCRE IMPORTED_TARGET libpcre)
elseif (NOT PREFER_PCRE AND NOT PCRE2_FOUND)
pkg_check_modules(PCRE IMPORTED_TARGET libpcre2-8)
endif ()
endif (WITH_REGEX)
if (WITH_REGEX OR WITH_VIDEO)
if (NOT ZLIB_FOUND)
pkg_check_modules(ZLIB IMPORTED_TARGET zlib)
endif ()
endif ()
if (WITH_VIDEO)
if (NOT PNG_FOUND)
pkg_check_modules(PNG IMPORTED_TARGET libpng16)
endif ()
if (NOT SDL2_FOUND)
pkg_check_modules(SDL2 IMPORTED_TARGET sdl2)
if (NOT SDL2_FOUND)
pkg_check_modules(SDL2 IMPORTED_TARGET SDL2)
endif ()
endif ()
if (NOT SDL2_ttf_FOUND)
pkg_check_modules(SDL2_ttf IMPORTED_TARGET SDL2_ttf)
if (NOT SDL2_ttf_FOUND)
pkg_check_modules(SDL2_ttf IMPORTED_TARGET sdl2_ttf)
endif ()
endif ()
endif (WITH_VIDEO)
if (WITH_NETWORK)
if (WITH_VDE AND NOT VDE_FOUND)
pkg_check_modules(VDE IMPORTED_TARGET vdeplug)
endif ()
endif (WITH_NETWORK)
endif ()
endif ()
##-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
## Add rules for the superbuild if dependencies need to be built:
##-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
if (NO_DEP_BUILD)
## Not going to build dependencies...
return ()
endif ()
include (ExternalProject)
# Source URLs (to make it easy to update versions):
set(ZLIB_SOURCE_URL "https://github.com/madler/zlib/archive/v1.2.13.zip")
set(PCRE2_SOURCE_URL "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.40/pcre2-10.40.zip")
## PCRE needs multiple URLs to chase a working SF mirror:
list(APPEND PCRE_SOURCE_URL
"https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.zip/download?use_mirror=cytranet"
"https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.zip/download?use_mirror=phoenixnap"
"https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.zip/download?use_mirror=versaweb"
"https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.zip/download?use_mirror=netactuate"
"https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.zip/download?use_mirror=cfhcable"
"https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.zip/download?use_mirror=freefr"
"https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.zip/download?use_mirror=master"
)
set(PNG_SOURCE_URL "https://github.com/glennrp/libpng/archive/refs/tags/v1.6.40.tar.gz")
## Freetype also needs multiple URLs to chase a working mirror:
list(APPEND FREETYPE_SOURCE_URL
"https://github.com/freetype/freetype/archive/refs/tags/VER-2-13-0.zip"
"https://sourceforge.net/projects/freetype/files/freetype2/2.13.1/ft2131.zip/download?use_mirror=cytranet"
"https://sourceforge.net/projects/freetype/files/freetype2/2.13.1/ft2131.zip/download?use_mirror=phoenixnap"
"https://sourceforge.net/projects/freetype/files/freetype2/2.13.1/ft2131.zip/download?use_mirror=versaweb"
"https://sourceforge.net/projects/freetype/files/freetype2/2.13.1/ft2131.zip/download?use_mirror=netactuate"
"https://sourceforge.net/projects/freetype/files/freetype2/2.13.1/ft2131.zip/download?use_mirror=cfhcable"
"https://sourceforge.net/projects/freetype/files/freetype2/2.13.1/ft2131.zip/download?use_mirror=freefr"
"https://sourceforge.net/projects/freetype/files/freetype2/2.13.1/ft2131.zip/download?use_mirror=master"
"https://download.savannah.gnu.org/releases/freetype/freetype-2.13.1.tar.xz"
"https://gitlab.freedesktop.org/freetype/freetype/-/archive/VER-2-13-0/freetype-VER-2-13-0.zip"
)
set(SDL2_SOURCE_URL "https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.28.1.zip")
set(SDL2_TTF_SOURCE_URL "https://github.com/libsdl-org/SDL_ttf/archive/refs/tags/release-2.20.2.zip")
## Need to build ZLIB for both PCRE and libpng16:
if ((WITH_REGEX OR WITH_VIDEO) AND NOT ZLIB_FOUND)
ExternalProject_Add(zlib-dep
URL ${ZLIB_SOURCE_URL}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
## These patches come from vcpkg so that only the static libraries are built and
## installed. If the patches don't apply cleanly (and there's a build error), that
## means a version number got bumped and need to see what patches, if any, are
## still applicable.
PATCH_COMMAND
git -c core.longpaths=true -c core.autocrlf=false --work-tree=. --git-dir=.git
apply
"${SIMH_DEP_PATCHES}/zlib/0001-Prevent-invalid-inclusions-when-HAVE_-is-set-to-0.patch"
"${SIMH_DEP_PATCHES}/zlib/0002-skip-building-examples.patch"
"${SIMH_DEP_PATCHES}/zlib/0003-build-static-or-shared-not-both.patch"
"${SIMH_DEP_PATCHES}/zlib/0004-android-and-mingw-fixes.patch"
--ignore-whitespace --whitespace=nowarn --verbose
)
BuildDepMatrix(zlib-dep zlib CMAKE_ARGS -DBUILD_SHARED_LIBS:Bool=${BUILD_SHARED_DEPS})
list(APPEND SIMH_BUILD_DEPS zlib)
list(APPEND SIMH_DEP_TARGETS zlib-dep)
message(STATUS "Building ZLIB from ${ZLIB_SOURCE_URL}.")
set(ZLIB_PKG_STATUS "ZLIB source build")
endif ()
IF (WITH_REGEX AND NOT (PCRE_FOUND OR PCRE2_FOUND OR TARGET unofficial::pcre::pcre))
set(PCRE_DEPS)
IF (TARGET zlib-dep)
list(APPEND PCRE_DEPS zlib-dep)
ENDIF (TARGET zlib-dep)
set(PCRE_CMAKE_ARGS -DBUILD_SHARED_LIBS:Bool=${BUILD_SHARED_DEPS})
if (NOT PREFER_PCRE)
set(PCRE_URL ${PCRE2_SOURCE_URL})
list(APPEND PCRE_CMAKE_ARGS
-DPCRE2_BUILD_PCREGREP:Bool=Off
-DPCRE2_SUPPORT_LIBEDIT:Bool=Off
-DPCRE2_SUPPORT_LIBREADLINE:Bool=Off
)
# IF(MSVC)
# list(APPEND PCRE_CMAKE_ARGS -DINSTALL_MSVC_PDB=On)
# ENDIF(MSVC)
message(STATUS "Building PCRE2 from ${PCRE_URL}")
set(PCRE_PKG_STATUS "pcre2 source build")
ELSE ()
set(PCRE_URL ${PCRE_SOURCE_URL})
list(APPEND PCRE_CMAKE_ARGS
-DPCRE_BUILD_PCREGREP:Bool=Off
-DPCRE_SUPPORT_LIBEDIT:Bool=Off
-DPCRE_SUPPORT_LIBREADLINE:Bool=Off
)
if (WIN32)
list(APPEND PCRE_CMAKE_ARGS
-DBUILD_SHARED_LIBS:Bool=Off
-DPCRE_STATIC_RUNTIME:Bool=On
)
endif ()
message(STATUS "Building PCRE from ${PCRE_URL}")
set(PCRE_PKG_STATUS "pcre source build")
ENDIF ()
ExternalProject_Add(pcre-ext
URL
${PCRE_URL}
DEPENDS
${PCRE_DEPS}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
BuildDepMatrix(pcre-ext pcre CMAKE_ARGS ${PCRE_CMAKE_ARGS})
list(APPEND SIMH_BUILD_DEPS pcre)
list(APPEND SIMH_DEP_TARGETS pcre-ext)
ELSE ()
set(PCRE_PKG_STATUS "regular expressions disabled")
ENDIF ()
set(BUILD_WITH_VIDEO FALSE)
IF (WITH_VIDEO)
IF (NOT PNG_FOUND)
set(PNG_DEPS)
if (NOT ZLIB_FOUND)
list(APPEND PNG_DEPS zlib-dep)
endif (NOT ZLIB_FOUND)
ExternalProject_Add(png-dep
URL
${PNG_SOURCE_URL}
DEPENDS
${PNG_DEPS}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
## Work around the GCC 8.1.0 SEH index regression.
set(PNG_CMAKE_BUILD_TYPE_RELEASE "Release")
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND
CMAKE_C_COMPILER_VERSION VERSION_EQUAL "8.1" AND
NOT CMAKE_BUILD_VERSION)
message(STATUS "PNG: Build using MinSizeRel CMAKE_BUILD_TYPE with GCC 8.1")
set(PNG_CMAKE_BUILD_TYPE_RELEASE "MinSizeRel")
endif()
BuildDepMatrix(png-dep libpng
CMAKE_ARGS
-DPNG_SHARED:Bool=${BUILD_SHARED_DEPS}
-DPNG_STATUS:Bool=On
-DPNG_EXECUTABLES:Bool=Off
-DPNG_TESTS:Bool=Off
RELEASE_BUILD ${PNG_CMAKE_BUILD_TYPE_RELEASE}
)
list(APPEND SIMH_BUILD_DEPS "png")
list(APPEND SIMH_DEP_TARGETS "png-dep")
message(STATUS "Building PNG from ${PNG_SOURCE_URL}")
list(APPEND VIDEO_PKG_STATUS "PNG source build")
ENDIF (NOT PNG_FOUND)
IF (NOT SDL2_FOUND)
ExternalProject_Add(sdl2-dep
URL ${SDL2_SOURCE_URL}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
BuildDepMatrix(sdl2-dep SDL2 CMAKE_ARGS "-DBUILD_SHARED_LIBS:Bool=${BUILD_SHARED_DEPS}")
list(APPEND SIMH_BUILD_DEPS "SDL2")
list(APPEND SIMH_DEP_TARGETS "sdl2-dep")
message(STATUS "Building SDL2 from ${SDL2_SOURCE_URL}.")
list(APPEND VIDEO_PKG_STATUS "SDL2 source build")
ENDIF (NOT SDL2_FOUND)
IF (NOT FREETYPE_FOUND)
set(FREETYPE_DEPS)
if (TARGET zlib-dep)
list(APPEND FREETYPE_DEPS zlib-dep)
endif ()
if (TARGET png-dep)
list(APPEND FREETYPE_DEPS png-dep)
endif ()
ExternalProject_Add(freetype-dep
URL
${FREETYPE_SOURCE_URL}
DEPENDS
${FREETYPE_DEPS}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
BuildDepMatrix(freetype-dep Freetype
CMAKE_ARGS
"-DBUILD_SHARED_LIBS:Bool=${BUILD_SHARED_DEPS}"
"-DFT_DISABLE_BZIP2:Bool=TRUE"
"-DFT_DISABLE_HARFBUZZ:Bool=TRUE"
"-DFT_DISABLE_BROTLI:Bool=TRUE"
)
list(APPEND SIMH_BUILD_DEPS "Freetype")
list(APPEND SIMH_DEP_TARGETS freetype-dep)
message(STATUS "Building Freetype from ${FREETYPE_SOURCE_URL}.")
ENDIF ()
IF (NOT SDL2_ttf_FOUND)
set(SDL2_ttf_DEPS)
if (TARGET sdl2-dep)
list(APPEND SDL2_ttf_DEPS sdl2-dep)
endif (TARGET sdl2-dep)
if (TARGET freetype-dep)
list(APPEND SDL2_ttf_DEPS freetype-dep)
endif ()
ExternalProject_Add(sdl2-ttf-dep
URL
${SDL2_TTF_SOURCE_URL}
DEPENDS
${SDL2_ttf_DEPS}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
PATCH_COMMAND
git -c core.longpaths=true -c core.autocrlf=false --work-tree=. --git-dir=.git
apply
"${SIMH_DEP_PATCHES}/SDL_ttf/fix-pkgconfig.patch"
--ignore-whitespace --whitespace=nowarn --verbose
)
set(sdl2_ttf_cmake_args)
list(APPEND sdl2_ttf_cmake_args
"-DBUILD_SHARED_LIBS:Bool=${BUILD_SHARED_DEPS}"
"-DSDL2TTF_SAMPLES:Bool=Off"
"-DSDL2TTF_VENDORED:Bool=Off"
"-DSDL2TTF_HARFBUZZ:Bool=Off"
)
BuildDepMatrix(sdl2-ttf-dep SDL2_ttf CMAKE_ARGS ${sdl2_ttf_cmake_args})
list(APPEND SIMH_BUILD_DEPS "SDL2_ttf")
list(APPEND SIMH_DEP_TARGETS "sdl2-ttf-dep")
message(STATUS "Building SDL2_ttf from https://www.libsdl.org/release/SDL2_ttf-2.0.15.zip.")
list(APPEND VIDEO_PKG_STATUS "SDL2_ttf source build")
ENDIF (NOT SDL2_ttf_FOUND)
set(BUILD_WITH_VIDEO TRUE)
ELSE ()
set(VIDEO_PKG_STATUS "video support disabled")
ENDIF(WITH_VIDEO)