yuzu/externals/vcpkg/ports/gdal/portfile.cmake
2022-07-23 03:01:36 +02:00

376 lines
13 KiB
CMake
Executable File

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO OSGeo/gdal
REF v3.4.3
SHA512 702bcb220abc7cf978e8f70a1b2835a20ce5abe405014b9690cab311c00837e57555bb371ff5e2655f9eed63cfd461d6cec5e654001b276dd79a6d2ec0c21f0b
HEAD_REF master
PATCHES
0001-Fix-debug-crt-flags.patch
0002-Fix-build.patch
0004-Fix-cfitsio.patch
0005-Fix-configure.patch
0006-Fix-mingw-dllexport.patch
0007-Control-tools.patch
0008-Fix-absl-string_view.patch
0009-atlbase.patch
0010-symprefix.patch
)
# `vcpkg clean` stumbles over one subdir
file(REMOVE_RECURSE "${SOURCE_PATH}/autotest")
set(extra_exports "")
if (VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
if (VCPKG_CRT_LINKAGE STREQUAL "static")
set(LINKAGE_FLAGS "/MT")
else()
set(LINKAGE_FLAGS "/MD")
endif()
set(NMAKE_OPTIONS
"DATADIR=${CURRENT_PACKAGES_DIR}/share/gdal"
"HTMLDIR=${CURRENT_PACKAGES_DIR}/share/gdal/html"
"MSVC_VER=1900"
)
set(NMAKE_OPTIONS_REL
"GDAL_HOME=${CURRENT_PACKAGES_DIR}"
"CXX_CRT_FLAGS=${LINKAGE_FLAGS}"
)
set(NMAKE_OPTIONS_DBG
"GDAL_HOME=${CURRENT_PACKAGES_DIR}/debug"
"CXX_CRT_FLAGS=${LINKAGE_FLAGS}d"
DEBUG=1
)
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
list(APPEND NMAKE_OPTIONS "WIN64=YES")
endif()
if(VCPKG_TARGET_IS_UWP)
list(APPEND NMAKE_OPTIONS "SYM_PREFIX=" "EXTRA_LINKER_FLAGS=/APPCONTAINER WindowsApp.lib")
endif()
if(NOT "aws-ec2-windows" IN_LIST FEATURES)
list(APPEND NMAKE_OPTIONS "HAVE_ATLBASE_H=NO")
endif()
if(VCPKG_TARGET_ARCHITECTURE MATCHES "^arm")
list(APPEND NMAKE_OPTIONS "SSEFLAGS=/DNO_SSSE" "AVXFLAGS=/DNO_AVX")
endif()
if (VCPKG_LIBRARY_LINKAGE STREQUAL "static")
list(APPEND NMAKE_OPTIONS "DLLBUILD=0")
else()
list(APPEND NMAKE_OPTIONS "DLLBUILD=1" "WITH_PDB=1")
endif()
include("${CMAKE_CURRENT_LIST_DIR}/dependency_win.cmake")
find_dependency_win()
if("tools" IN_LIST FEATURES)
list(APPEND NMAKE_OPTIONS_REL "BUILD_TOOLS=1")
else()
list(APPEND NMAKE_OPTIONS_REL "BUILD_TOOLS=0")
endif()
list(APPEND NMAKE_OPTIONS_DBG "BUILD_TOOLS=0")
# Begin build process
vcpkg_install_nmake(
SOURCE_PATH "${SOURCE_PATH}/gdal"
TARGET devinstall
OPTIONS
${NMAKE_OPTIONS}
OPTIONS_RELEASE
${NMAKE_OPTIONS_REL}
OPTIONS_DEBUG
${NMAKE_OPTIONS_DBG}
)
if("tools" IN_LIST FEATURES)
set(GDAL_EXES
gdal_contour
gdal_create
gdal_grid
gdal_rasterize
gdal_translate
gdal_viewshed
gdaladdo
gdalbuildvrt
gdaldem
gdalenhance
gdalinfo
gdallocationinfo
gdalmanage
gdalmdiminfo
gdalmdimtranslate
gdalsrsinfo
gdaltindex
gdaltransform
gdalwarp
gnmanalyse
gnmmanage
nearblack
ogr2ogr
ogrinfo
ogrlineref
ogrtindex
)
# vcpkg_copy_tools removes the bin directories for us so no need to remove again
vcpkg_copy_tools(TOOL_NAMES ${GDAL_EXES} AUTO_CLEAN)
elseif(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin")
endif()
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include" "${CURRENT_PACKAGES_DIR}/share/gdal/html")
vcpkg_copy_pdbs()
if(NOT VCPKG_LIBRARY_LINKAGE STREQUAL "static")
file(REMOVE "${CURRENT_PACKAGES_DIR}/lib/gdal204.pdb")
endif()
else()
# See https://github.com/microsoft/vcpkg/issues/16990
file(TOUCH "${SOURCE_PATH}/gdal/config.rpath")
set(CONF_OPTS
--with-gnm=yes
--with-hide-internal-symbols=yes
--with-java=no
--with-perl=no
--with-python=no
)
set(CONF_CHECKS "")
function(add_config option check)
list(APPEND CONF_OPTS "${option}")
set(CONF_OPTS "${CONF_OPTS}" PARENT_SCOPE)
list(APPEND CONF_CHECKS "${check}")
set(CONF_CHECKS "${CONF_CHECKS}" PARENT_SCOPE)
endfunction()
# parameters in the same order as the dependencies in vcpkg.json
add_config("--with-curl=yes" "cURL support .wms/wcs/....:yes")
add_config("--with-expat=yes" "Expat support: yes")
add_config("--with-geos=yes" "GEOS support: yes")
add_config("--with-gif=yes" "LIBGIF support: external")
add_config("--with-libjson=yes" "checking for JSONC... yes")
add_config("--with-geotiff=yes" "LIBGEOTIFF support: external")
add_config("--with-jpeg=yes" "LIBJPEG support: external")
add_config("--with-liblzma=yes" "LIBLZMA support: yes")
add_config("--with-png=yes" "LIBPNG support: external")
add_config("--with-webp=yes" "WebP support: yes")
add_config("--with-xml2=yes" "libxml2 support: yes")
add_config("--with-openjpeg=yes" "OpenJPEG support: yes")
add_config("--with-proj=yes" "PROJ >= 6: yes")
add_config("--with-sqlite3=yes" "SQLite support: yes")
add_config("--with-libtiff=yes" "LIBTIFF support: external")
add_config("--with-libz=yes" "LIBZ support: external")
add_config("--with-zstd=yes" "ZSTD support: yes")
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
list(APPEND CONF_OPTS --without-libtool --without-ld-shared)
endif()
if("system-libraries" IN_LIST FEATURES)
set(DISABLE_SYSTEM_LIBRARIES OFF)
else()
set(DISABLE_SYSTEM_LIBRARIES ON)
endif()
if ("libspatialite" IN_LIST FEATURES)
add_config("--with-spatialite=yes" "SpatiaLite support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-spatialite=no" "SpatiaLite support: no")
endif()
if ("poppler" IN_LIST FEATURES)
add_config("--with-poppler=yes" "Poppler support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-poppler=no" "Poppler support: no")
endif()
if ("postgresql" IN_LIST FEATURES)
add_config("--with-pg=yes" "PostgreSQL support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-pg=no" "PostgreSQL support: no")
endif()
if ("mysql-libmariadb" IN_LIST FEATURES)
add_config("--with-mysql=yes" "MySQL support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-mysql=no" "MySQL support: no")
endif()
if ("cfitsio" IN_LIST FEATURES)
add_config("--with-cfitsio=yes" "CFITSIO support: external")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-cfitsio=no" "CFITSIO support: no")
endif()
if ("hdf5" IN_LIST FEATURES)
add_config("--with-hdf5=yes" "HDF5 support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-hdf5=no" "HDF5 support: no")
endif()
if ("netcdf" IN_LIST FEATURES)
add_config("--with-netcdf=yes" "NetCDF support: yes")
elseif(DISABLE_SYSTEM_LIBRARIES)
add_config("--with-netcdf=no" "NetCDF support: no")
endif()
if(DISABLE_SYSTEM_LIBRARIES)
list(APPEND CONF_OPTS
# Too much: --disable-all-optional-drivers
# alphabetical order
--with-armadillo=no
--with-blosc=no
--with-brunsli=no
--with-charls=no
--with-crypto=no
--with-cryptopp=no
--with-dds=no
--with-dods-root=no
--with-ecw=no
--with-epsilon=no
--with-exr=no
--with-fgdb=no
--with-fme=no
--with-freexl=no
--with-grass=no
--with-gta=no
--with-hdf4=no
--with-hdfs=no
--with-heif=no
--with-idb=no
--with-ingres=no
--with-jp2lura=no
--with-jp2mrsid=no
--with-jasper=no
--with-jxl=no
--with-kakadu=no
--with-kea=no
--with-lerc=no
--with-libdeflate=no
--with-libgrass=no
--with-libkml=no
--with-lz4=no
--with-mdb=no
--with-mongocxx=no
--with-mongocxxv3=no
--with-mrsid=no
--with-mrsid_lidar=no
--with-msg=no
--with-null=no
--with-oci=no
--with-odbc=no
--with-ogdi=no
--with-opencl=no
--with-pcidsk=no
--with-pcraster=no
--with-pcre=no
--with-pcre2=no
--with-pdfium=no
--with-podofo=no
--with-qhull=no
--with-rasdaman=no
--with-rasterlite2=no
--with-rdb=no
--with-sfcgal=no
--with-sosi=no
--with-teigha=no
--with-tiledb=no
--with-xerces=no
)
endif()
x_vcpkg_pkgconfig_get_modules(PREFIX PROJ MODULES proj LIBS)
if("tools" IN_LIST FEATURES)
list(APPEND CONF_OPTS "--with-tools=yes")
else()
list(APPEND CONF_OPTS "--with-tools=no")
endif()
if(VCPKG_TARGET_IS_ANDROID AND (VCPKG_TARGET_ARCHITECTURE MATCHES "x86" OR VCPKG_TARGET_ARCHITECTURE MATCHES "arm"))
list(APPEND CONF_OPTS --with-unix-stdio-64=no)
endif()
vcpkg_configure_make(
SOURCE_PATH "${SOURCE_PATH}/gdal"
AUTOCONFIG
COPY_SOURCE
OPTIONS
${CONF_OPTS}
OPTIONS_RELEASE
"--with-proj-extra-lib-for-test=${PROJ_LIBS_RELEASE}"
OPTIONS_DEBUG
--enable-debug
--with-tools=no
"--with-proj-extra-lib-for-test=${PROJ_LIBS_DEBUG}"
)
# Verify configuration results (tightly coupled to vcpkg_configure_make)
function(check_config logfile)
set(failed_checks "")
file(READ "${logfile}" log)
foreach(check IN LISTS CONF_CHECKS)
if(NOT log MATCHES "${check}")
string(APPEND failed_checks "\n ${check}")
endif()
endforeach()
if(failed_checks)
get_filename_component(file "${logfile}" NAME_WE)
message(FATAL_ERROR "${file}: Configuration failed for ${failed_checks}")
endif()
endfunction()
foreach(suffix IN ITEMS rel dbg)
set(log "${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-${suffix}-out.log")
if(EXISTS "${log}")
check_config("${log}")
endif()
endforeach()
vcpkg_install_make(MAKEFILE GNUmakefile)
file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/lib/gdalplugins"
"${CURRENT_PACKAGES_DIR}/debug/lib/gdalplugins"
"${CURRENT_PACKAGES_DIR}/debug/share"
)
vcpkg_fixup_pkgconfig()
set(pc_file_debug "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/gdal.pc")
if(EXISTS "${pc_file_debug}")
vcpkg_replace_string("${pc_file_debug}" "\${prefix}/../../include" "\${prefix}/../include")
vcpkg_replace_string("${pc_file_debug}" "\${exec_prefix}/include" "\${prefix}/../include")
endif()
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/tools/gdal/bin/gdal-config" "${CURRENT_INSTALLED_DIR}" "`dirname $0`/../../..")
if(NOT VCPKG_BUILD_TYPE)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/tools/gdal/debug/bin/gdal-config" "${CURRENT_INSTALLED_DIR}" "`dirname $0`/../../../..")
endif()
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/cpl_config.h" "#define GDAL_PREFIX \"${CURRENT_INSTALLED_DIR}\"" "")
if("libspatialite" IN_LIST FEATURES)
list(APPEND extra_exports SPATIALITE)
x_vcpkg_pkgconfig_get_modules(
PREFIX SPATIALITE
MODULES spatialite
LIBS
)
endif()
endif()
string(COMPARE NOTEQUAL "${NMAKE_OPTIONS}" "" NMAKE_BUILD)
set(GDAL_EXTRA_LIBS_DEBUG "")
set(GDAL_EXTRA_LIBS_RELEASE "")
foreach(prefix IN LISTS extra_exports)
string(REPLACE "${CURRENT_INSTALLED_DIR}/" "\${CMAKE_CURRENT_LIST_DIR}/../../" libs "${${prefix}_LIBS_DEBUG}")
string(APPEND GDAL_EXTRA_LIBS_DEBUG " ${libs}")
string(REPLACE "${CURRENT_INSTALLED_DIR}/" "\${CMAKE_CURRENT_LIST_DIR}/../../" libs "${${prefix}_LIBS_RELEASE}")
string(APPEND GDAL_EXTRA_LIBS_RELEASE " ${libs}")
endforeach()
string(REPLACE "/lib/pkgconfig/../.." "" GDAL_EXTRA_LIBS_DEBUG "${GDAL_EXTRA_LIBS_DEBUG}")
string(REPLACE "/lib/pkgconfig/../.." "" GDAL_EXTRA_LIBS_RELEASE "${GDAL_EXTRA_LIBS_RELEASE}")
configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${SOURCE_PATH}/gdal/LICENSE.TXT" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)