aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/gdal
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/gdal')
-rw-r--r--vcpkg/ports/gdal/cmake-project-include.cmake29
-rw-r--r--vcpkg/ports/gdal/find-link-libraries.patch109
-rw-r--r--vcpkg/ports/gdal/fix-gdal-target-interfaces.patch15
-rw-r--r--vcpkg/ports/gdal/libkml.patch46
-rw-r--r--vcpkg/ports/gdal/portfile.cmake177
-rw-r--r--vcpkg/ports/gdal/sqlite3.diff49
-rw-r--r--vcpkg/ports/gdal/target-is-valid.patch21
-rw-r--r--vcpkg/ports/gdal/usage4
-rw-r--r--vcpkg/ports/gdal/vcpkg-cmake-wrapper.cmake23
-rw-r--r--vcpkg/ports/gdal/vcpkg.json341
10 files changed, 814 insertions, 0 deletions
diff --git a/vcpkg/ports/gdal/cmake-project-include.cmake b/vcpkg/ports/gdal/cmake-project-include.cmake
new file mode 100644
index 0000000..107d100
--- /dev/null
+++ b/vcpkg/ports/gdal/cmake-project-include.cmake
@@ -0,0 +1,29 @@
+if(GDAL_USE_KEA)
+ find_package(Kealib CONFIG REQUIRED)
+ add_library(KEA::KEA ALIAS Kealib::Kealib)
+ set(GDAL_CHECK_PACKAGE_KEA_NAMES Kealib CACHE INTERNAL "vcpkg")
+ set(GDAL_CHECK_PACKAGE_KEA_TARGETS Kealib::Kealib CACHE INTERNAL "vcpkg")
+endif()
+
+if(GDAL_USE_WEBP)
+ find_package(WebP CONFIG REQUIRED)
+ add_library(WEBP::WebP ALIAS WebP::webp)
+ set(GDAL_CHECK_PACKAGE_WebP_NAMES WebP CACHE INTERNAL "vcpkg")
+ set(GDAL_CHECK_PACKAGE_WebP_TARGETS WebP::webp CACHE INTERNAL "vcpkg")
+endif()
+
+if(GDAL_USE_ARROW)
+ find_package(Arrow REQUIRED)
+ set(ARROW_USE_STATIC_LIBRARIES "${ARROW_BUILD_STATIC}" CACHE INTERNAL "")
+ set(GDAL_USE_ARROWDATASET "${ARROW_DATASET}" CACHE INTERNAL "")
+ set(GDAL_USE_ARROWCOMPUTE "${ARROW_COMPUTE}" CACHE INTERNAL "")
+endif()
+
+if(GDAL_USE_SQLITE3)
+ # CMake find module with vcpkg cmake wrapper
+ find_package(SQLite3 REQUIRED)
+ # .. and inject into GDAL's FindSQLite3.cmake
+ set(SQLite3_LIBRARY "${SQLite3_LIBRARIES}")
+ set(SQLite3_FOUND FALSE)
+ set(SQLITE3_FOUND FALSE)
+endif()
diff --git a/vcpkg/ports/gdal/find-link-libraries.patch b/vcpkg/ports/gdal/find-link-libraries.patch
new file mode 100644
index 0000000..a802e42
--- /dev/null
+++ b/vcpkg/ports/gdal/find-link-libraries.patch
@@ -0,0 +1,109 @@
+diff --git a/cmake/modules/packages/FindFreeXL.cmake b/cmake/modules/packages/FindFreeXL.cmake
+index 6c86fb8..0634412 100644
+--- a/cmake/modules/packages/FindFreeXL.cmake
++++ b/cmake/modules/packages/FindFreeXL.cmake
+@@ -37,7 +37,15 @@ include(SelectLibraryConfigurations)
+
+ find_package(PkgConfig QUIET)
+ if(PKG_CONFIG_FOUND)
+- pkg_check_modules(PC_FREEXL QUIET freexl)
++ pkg_check_modules(PC_FREEXL QUIET IMPORTED_TARGET freexl)
++endif()
++if(PC_FREEXL_FOUND)
++ set(FREEXL_INCLUDE_DIR "${PC_FREEXL_INCLUDE_DIRS}" CACHE STRING "")
++ set(FREEXL_LIBRARY "${PC_FREEXL_LIBRARIES}" CACHE STRING "")
++ if(NOT TARGET FREEXL::freexl)
++ add_library(FREEXL::freexl INTERFACE IMPORTED)
++ set_target_properties(FREEXL::freexl PROPERTIES INTERFACE_LINK_LIBRARIES PkgConfig::PC_FREEXL)
++ endif()
+ endif()
+
+ find_path(FREEXL_INCLUDE_DIR
+diff --git a/cmake/modules/packages/FindOpenJPEG.cmake b/cmake/modules/packages/FindOpenJPEG.cmake
+index c697484..6e83222 100644
+--- a/cmake/modules/packages/FindOpenJPEG.cmake
++++ b/cmake/modules/packages/FindOpenJPEG.cmake
+@@ -32,9 +32,18 @@ endfunction()
+
+ find_package(PkgConfig QUIET)
+ if(PKG_CONFIG_FOUND)
+- pkg_check_modules(PC_OPENJPEG QUIET libopenjp2)
++ pkg_check_modules(PC_OPENJPEG QUIET IMPORTED_TARGET libopenjp2)
+ set(OpenJPEG_VERSION_STRING ${PC_OPENJPEG_VERSION})
+ endif()
++if(PC_OPENJPEG_FOUND)
++ set(OPENJPEG_INCLUDE_DIR "${PC_OPENJPEG_INCLUDE_DIRS}" CACHE STRING "")
++ set(OPENJPEG_LIBRARY "${PC_OPENJPEG_LIBRARIES}" CACHE STRING "")
++ if(NOT TARGET OPENJPEG::OpenJPEG)
++ add_library(OPENJPEG::OpenJPEG INTERFACE IMPORTED)
++ set_target_properties(OPENJPEG::OpenJPEG PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PC_OPENJPEG_INCLUDE_DIRS}")
++ set_target_properties(OPENJPEG::OpenJPEG PROPERTIES INTERFACE_LINK_LIBRARIES PkgConfig::PC_OPENJPEG)
++ endif()
++endif()
+
+
+ find_path(OPENJPEG_INCLUDE_DIR opj_config.h
+diff --git a/cmake/modules/packages/FindPoppler.cmake b/cmake/modules/packages/FindPoppler.cmake
+index 3807ec0..8059eb4 100644
+--- a/cmake/modules/packages/FindPoppler.cmake
++++ b/cmake/modules/packages/FindPoppler.cmake
+@@ -42,11 +42,19 @@ This module defines the following variables:
+
+ find_package(PkgConfig QUIET)
+ if(PKG_CONFIG_FOUND)
+- pkg_check_modules(PC_Poppler QUIET poppler)
++ pkg_check_modules(PC_Poppler QUIET IMPORTED_TARGET poppler)
+ if(PC_Poppler_VERSION)
+ set(Poppler_VERSION_STRING ${PC_Poppler_VERSION})
+ endif()
+ endif()
++if(PC_Poppler_FOUND)
++ find_path(Poppler_INCLUDE_DIR NAMES Object.h PATHS ${PC_Poppler_INCLUDE_DIRS} NO_DEFAULT_PATH)
++ set(Poppler_LIBRARY "${PC_Poppler_LIBRARIES}" CACHE STRING "")
++ if(NOT TARGET Poppler::Poppler)
++ add_library(Poppler::Poppler INTERFACE IMPORTED)
++ set_target_properties(Poppler::Poppler PROPERTIES INTERFACE_LINK_LIBRARIES PkgConfig::PC_Poppler)
++ endif()
++endif()
+ find_path(Poppler_INCLUDE_DIR NAMES "poppler-config.h" "cpp/poppler-version.h" "qt5/poppler-qt5.h" "qt4/poppler-qt4.h"
+ "glib/poppler.h"
+ HINTS ${PC_Poppler_INCLUDE_DIRS}
+@@ -77,6 +85,15 @@ endforeach()
+ foreach(_comp IN LISTS Poppler_known_components)
+ list(FIND Poppler_FIND_COMPONENTS "${_comp}" _nextcomp)
+ if(_nextcomp GREATER -1)
++ pkg_check_modules(PC_Poppler_${_comp} QUIET IMPORTED_TARGET ${Poppler_${_comp}_pkg_config})
++ if(PC_Poppler_${_comp}_FOUND)
++ set(Poppler_${_comp}_INCLUDE_DIR "${PC_Poppler_${_comp}_INCLUDE_DIRS}" CACHE STRING "")
++ set(Poppler_${_comp}_LIBRARY "${PC_Poppler_${_comp}_LIBRARIES}" CACHE STRING "")
++ if(NOT TARGET Poppler::Poppler_${_comp})
++ add_library(Poppler::${_comp} INTERFACE IMPORTED)
++ set_target_properties(Poppler::${_comp} PROPERTIES INTERFACE_LINK_LIBRARIES PkgConfig::PC_Poppler_${_comp})
++ endif()
++ endif()
+ find_path(Poppler_${_comp}_INCLUDE_DIR
+ NAMES ${Poppler_${_comp}_header}
+ PATH_SUFFIXES poppler
+diff --git a/cmake/modules/packages/FindSPATIALITE.cmake b/cmake/modules/packages/FindSPATIALITE.cmake
+index 00612b0..6388719 100644
+--- a/cmake/modules/packages/FindSPATIALITE.cmake
++++ b/cmake/modules/packages/FindSPATIALITE.cmake
+@@ -38,9 +38,17 @@ endif()
+
+ find_package(PkgConfig QUIET)
+ if(PKG_CONFIG_FOUND)
+- pkg_check_modules(PC_SPATIALITE QUIET spatialite)
++ pkg_check_modules(PC_SPATIALITE QUIET IMPORTED_TARGET spatialite)
+ set(SPATIALITE_VERSION_STRING ${PC_SPATIALITE_VERSION})
+ endif()
++if(PC_SPATIALITE_FOUND)
++ set(SPATIALITE_INCLUDE_DIR "${PC_SPATIALITE_INCLUDE_DIRS}" CACHE STRING "")
++ set(SPATIALITE_LIBRARY "${PC_SPATIALITE_LIBRARIES}" CACHE STRING "")
++ if(NOT TARGET SPATIALITE::SPATIALITE)
++ add_library(SPATIALITE::SPATIALITE INTERFACE IMPORTED)
++ set_target_properties(SPATIALITE::SPATIALITE PROPERTIES INTERFACE_LINK_LIBRARIES PkgConfig::PC_SPATIALITE)
++ endif()
++endif()
+
+ find_path(SPATIALITE_INCLUDE_DIR
+ NAMES spatialite.h
diff --git a/vcpkg/ports/gdal/fix-gdal-target-interfaces.patch b/vcpkg/ports/gdal/fix-gdal-target-interfaces.patch
new file mode 100644
index 0000000..bf159fc
--- /dev/null
+++ b/vcpkg/ports/gdal/fix-gdal-target-interfaces.patch
@@ -0,0 +1,15 @@
+diff --git a/cmake/helpers/GdalDriverHelper.cmake b/cmake/helpers/GdalDriverHelper.cmake
+index 838f0fd..380e20d 100644
+--- a/cmake/helpers/GdalDriverHelper.cmake
++++ b/cmake/helpers/GdalDriverHelper.cmake
+@@ -248,6 +248,10 @@ function(gdal_target_interfaces _TARGET)
+ if (_res)
+ target_compile_options(${_TARGET} PRIVATE ${_res})
+ endif ()
++ get_property(_res TARGET ${_LIB} PROPERTY INTERFACE_LINK_LIBRARIES)
++ if (_res)
++ gdal_target_interfaces(${_TARGET} ${_res})
++ endif ()
+ endif ()
+ endforeach ()
+ endfunction()
diff --git a/vcpkg/ports/gdal/libkml.patch b/vcpkg/ports/gdal/libkml.patch
new file mode 100644
index 0000000..ef25d06
--- /dev/null
+++ b/vcpkg/ports/gdal/libkml.patch
@@ -0,0 +1,46 @@
+diff --git a/cmake/modules/packages/FindLibKML.cmake b/cmake/modules/packages/FindLibKML.cmake
+index 9418247..589b83d 100644
+--- a/cmake/modules/packages/FindLibKML.cmake
++++ b/cmake/modules/packages/FindLibKML.cmake
+@@ -56,6 +56,8 @@ find_library(LIBKML_BASE_LIBRARY
+ HINTS ${PC_LIBKML_LIBRARY_DIRS} )
+ mark_as_advanced(LIBKML_BASE_LIBRARY)
+
++cmake_policy(PUSH)
++cmake_policy(SET CMP0057 NEW)
+ set(libkml_known_components DOM CONVENIENCE ENGINE REGIONATOR)
+ foreach(_comp IN LISTS libkml_known_components)
+ if(${_comp} IN_LIST LibKML_FIND_COMPONENTS)
+@@ -99,21 +101,20 @@ find_package_handle_standard_args(LibKML
+ if(LIBKML_FOUND)
+ set(LIBKML_INCLUDE_DIRS "${LIBKML_INCLUDE_DIR}")
+ set(LIBKML_LIBRARIES "${LIBKML_BASE_LIBRARY}")
++ find_package(LibKML CONFIG REQUIRED)
+ if(NOT TARGET LIBKML::LibKML)
+- add_library(LIBKML::LibKML UNKNOWN IMPORTED)
++ add_library(LIBKML::LibKML INTERFACE IMPORTED)
+ set_target_properties(LIBKML::LibKML PROPERTIES
+- INTERFACE_INCLUDE_DIRECTORIES "${LIBKML_INCLUDE_DIR}"
+- IMPORTED_LINK_INTERFACE_LANGUAGES "C++"
+- IMPORTED_LOCATION "${LIBKML_BASE_LIBRARY}")
++ INTERFACE_LINK_LIBRARIES kmlbase)
+ endif()
+ foreach(_comp IN LISTS libkml_known_components)
+ if(${_comp} IN_LIST LibKML_FIND_COMPONENTS)
++ string(TOLOWER ${_comp} _name)
+ list(APPEND LIBKML_LIBRARIES "${LIBKML_${_comp}_LIBRARY}")
+ if(NOT TARGET LIBKML::${_comp})
+- add_library(LIBKML::${_comp} UNKNOWN IMPORTED)
++ add_library(LIBKML::${_comp} INTERFACE IMPORTED)
+ set_target_properties(LIBKML::${_comp} PROPERTIES
+- IMPORTED_LINK_INTERFACE_LANGUAGES "C++"
+- IMPORTED_LOCATION "${LIBKML_${_comp}_LIBRARY}")
++ INTERFACE_LINK_LIBRARIES kml${_name})
+ endif()
+ endif()
+ endforeach()
+@@ -129,3 +130,4 @@ if(LIBKML_FOUND)
+ endif()
+ endforeach()
+ endif()
++cmake_policy(POP)
diff --git a/vcpkg/ports/gdal/portfile.cmake b/vcpkg/ports/gdal/portfile.cmake
new file mode 100644
index 0000000..99b8518
--- /dev/null
+++ b/vcpkg/ports/gdal/portfile.cmake
@@ -0,0 +1,177 @@
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO OSGeo/gdal
+ REF "v${VERSION}"
+ SHA512 497e585479b01e0b046ab2343971644746305719f8c6be19764580b818c37b26284f16bdf463e22475f1a2ecb9bf22231f3d51b349458990e75d894c217ae68e
+ HEAD_REF master
+ PATCHES
+ find-link-libraries.patch
+ fix-gdal-target-interfaces.patch
+ libkml.patch
+ sqlite3.diff
+ target-is-valid.patch
+)
+# `vcpkg clean` stumbles over one subdir
+file(REMOVE_RECURSE "${SOURCE_PATH}/autotest")
+
+# Avoid abseil, no matter if vcpkg or system
+vcpkg_replace_string("${SOURCE_PATH}/ogr/ogrsf_frmts/flatgeobuf/flatbuffers/base.h" [[__has_include("absl/strings/string_view.h")]] "(0)")
+
+# Cf. cmake/helpers/CheckDependentLibraries.cmake
+# The default for all `GDAL_USE_<PKG>` dependencies is `OFF`.
+# Here, we explicitly control dependencies provided via vpcpkg.
+# "core" is used for a dependency which must be enabled to avoid vendored lib.
+vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+ FEATURES
+ arrow GDAL_USE_ARROW
+ arrow-adbc GDAL_USE_ADBCDRIVERMANAGER
+ archive GDAL_USE_ARCHIVE
+ cfitsio GDAL_USE_CFITSIO
+ curl GDAL_USE_CURL
+ expat GDAL_USE_EXPAT
+ freexl GDAL_USE_FREEXL
+ geos GDAL_USE_GEOS
+ core GDAL_USE_GEOTIFF
+ gif GDAL_USE_GIF
+ hdf5 GDAL_USE_HDF5
+ iconv GDAL_USE_ICONV
+ jpeg GDAL_USE_JPEG
+ core GDAL_USE_JSONC
+ kea GDAL_USE_KEA
+ lerc GDAL_USE_LERC
+ libkml GDAL_USE_LIBKML
+ lzma GDAL_USE_LIBLZMA
+ libxml2 GDAL_USE_LIBXML2
+ mysql-libmariadb GDAL_USE_MYSQL
+ netcdf GDAL_USE_NETCDF
+ odbc GDAL_USE_ODBC
+ openjpeg GDAL_USE_OPENJPEG
+ openssl GDAL_USE_OPENSSL
+ parquet GDAL_USE_PARQUET
+ pcre2 GDAL_USE_PCRE2
+ png GDAL_USE_PNG
+ poppler GDAL_USE_POPPLER
+ postgresql GDAL_USE_POSTGRESQL
+ qhull GDAL_USE_QHULL
+ #core GDAL_USE_SHAPELIB # https://github.com/OSGeo/gdal/issues/5711, https://github.com/microsoft/vcpkg/issues/16041
+ core GDAL_USE_SHAPELIB_INTERNAL
+ libspatialite GDAL_USE_SPATIALITE
+ sqlite3 GDAL_USE_SQLITE3
+ core GDAL_USE_TIFF
+ webp GDAL_USE_WEBP
+ core GDAL_USE_ZLIB
+ zstd GDAL_USE_ZSTD
+ tools BUILD_APPS
+ INVERTED_FEATURES
+ libspatialite CMAKE_DISABLE_FIND_PACKAGE_SPATIALITE
+)
+if(GDAL_USE_ICONV AND VCPKG_TARGET_IS_WINDOWS)
+ list(APPEND FEATURE_OPTIONS -D_ICONV_SECOND_ARGUMENT_IS_NOT_CONST=ON)
+endif()
+
+# Compatibility with older Android versions https://github.com/OSGeo/gdal/pull/5941
+if(VCPKG_TARGET_IS_ANDROID AND ANDROID_PLATFORM VERSION_LESS 24 AND (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "arm"))
+ list(APPEND FEATURE_OPTIONS -DBUILD_WITHOUT_64BIT_OFFSET=ON)
+endif()
+
+string(REPLACE "dynamic" "" qhull_target "Qhull::qhull${VCPKG_LIBRARY_LINKAGE}_r")
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ -DVCPKG_HOST_TRIPLET=${HOST_TRIPLET} # for host pkgconf in PATH
+ ${FEATURE_OPTIONS}
+ -DBUILD_DOCS=OFF
+ -DBUILD_PYTHON_BINDINGS=OFF
+ -DBUILD_TESTING=OFF
+ -DCMAKE_DISABLE_FIND_PACKAGE_CSharp=ON
+ -DCMAKE_DISABLE_FIND_PACKAGE_Java=ON
+ -DCMAKE_DISABLE_FIND_PACKAGE_JNI=ON
+ -DCMAKE_DISABLE_FIND_PACKAGE_SWIG=ON
+ -DGDAL_USE_INTERNAL_LIBS=OFF
+ -DGDAL_USE_EXTERNAL_LIBS=OFF
+ -DGDAL_BUILD_OPTIONAL_DRIVERS=ON
+ -DOGR_BUILD_OPTIONAL_DRIVERS=ON
+ -DFIND_PACKAGE2_KEA_ENABLED=OFF
+ -DGDAL_CHECK_PACKAGE_MySQL_NAMES=unofficial-libmariadb
+ -DGDAL_CHECK_PACKAGE_MySQL_TARGETS=unofficial::libmariadb
+ -DMYSQL_LIBRARIES=unofficial::libmariadb
+ -DGDAL_CHECK_PACKAGE_NetCDF_NAMES=netCDF
+ -DGDAL_CHECK_PACKAGE_NetCDF_TARGETS=netCDF::netcdf
+ -DGDAL_CHECK_PACKAGE_QHULL_NAMES=Qhull
+ "-DGDAL_CHECK_PACKAGE_QHULL_TARGETS=${qhull_target}"
+ "-DQHULL_LIBRARY=${qhull_target}"
+ "-DCMAKE_PROJECT_INCLUDE=${CMAKE_CURRENT_LIST_DIR}/cmake-project-include.cmake"
+ OPTIONS_DEBUG
+ -DBUILD_APPS=OFF
+ MAYBE_UNUSED_VARIABLES
+ QHULL_LIBRARY
+)
+vcpkg_cmake_install()
+vcpkg_copy_pdbs()
+vcpkg_fixup_pkgconfig()
+vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/gdal)
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/gdal/GDALConfig.cmake"
+ "include(CMakeFindDependencyMacro)"
+ "include(CMakeFindDependencyMacro)
+# gdal needs a pkg-config tool. A host dependency provides pkgconf.
+get_filename_component(vcpkg_host_prefix \"\${CMAKE_CURRENT_LIST_DIR}/../../../${HOST_TRIPLET}\" ABSOLUTE)
+list(APPEND CMAKE_PROGRAM_PATH \"\${vcpkg_host_prefix}/tools/pkgconf\")"
+)
+
+if (BUILD_APPS)
+ vcpkg_copy_tools(
+ TOOL_NAMES
+ gdal
+ gdal_contour
+ gdal_create
+ gdal_footprint
+ 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
+ sozip
+ AUTO_CLEAN
+ )
+endif()
+
+file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/debug/include"
+ "${CURRENT_PACKAGES_DIR}/debug/share"
+)
+
+file(REMOVE "${CURRENT_PACKAGES_DIR}/bin/gdal-config" "${CURRENT_PACKAGES_DIR}/debug/bin/gdal-config")
+
+file(GLOB bin_files "${CURRENT_PACKAGES_DIR}/bin/*")
+if(NOT bin_files)
+ file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/bin"
+ "${CURRENT_PACKAGES_DIR}/debug/bin"
+ )
+endif()
+
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/cpl_config.h" "#define GDAL_PREFIX \"${CURRENT_PACKAGES_DIR}\"" "")
+
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.TXT")
diff --git a/vcpkg/ports/gdal/sqlite3.diff b/vcpkg/ports/gdal/sqlite3.diff
new file mode 100644
index 0000000..daeea01
--- /dev/null
+++ b/vcpkg/ports/gdal/sqlite3.diff
@@ -0,0 +1,49 @@
+diff --git a/cmake/modules/packages/FindSQLite3.cmake b/cmake/modules/packages/FindSQLite3.cmake
+index 903465b3c9..5d3a067e50 100644
+--- a/cmake/modules/packages/FindSQLite3.cmake
++++ b/cmake/modules/packages/FindSQLite3.cmake
+@@ -77,7 +77,7 @@ if(SQLite3_INCLUDE_DIR AND SQLite3_LIBRARY)
+ cmake_push_check_state(RESET)
+ # check column metadata
+ set(CMAKE_REQUIRED_INCLUDES ${SQLite3_INCLUDE_DIR})
+- if( ${SQLite3_LIBRARY} MATCHES "libsqlite3.a")
++ if(0)
+ if(PC_SQLITE3_STATIC_LDFLAGS)
+ set(CMAKE_REQUIRED_LIBRARIES ${PC_SQLITE3_STATIC_LDFLAGS})
+ else()
+@@ -111,15 +111,10 @@ if(SQLite3_INCLUDE_DIR AND SQLite3_LIBRARY)
+ endif()
+ else()
+ set(CMAKE_REQUIRED_LIBRARIES ${SQLite3_LIBRARY})
++ list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES})
++ list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} "")
+ endif()
+
+- # Trick to force CMake to re-run if SQLite3_LIBRARY changes
+- # Useful in development situations when switching/refreshing the library
+- set_property(
+- DIRECTORY
+- APPEND
+- PROPERTY CMAKE_CONFIGURE_DEPENDS "${SQLite3_LIBRARY}"
+- )
+ # Invalidate cached variables if SQLite3_LIBRARY changes
+ file(TIMESTAMP "${SQLite3_LIBRARY}" SQLite3_LIBRARY_TIMESTAMP)
+ if( SQLite3_LIBRARY_TIMESTAMP_OLD_VAL AND
+@@ -179,6 +174,7 @@ if(SQLite3_FOUND)
+ INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIRS}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "${SQLite3_LIBRARY}")
++ endif()
+ if(SQLite3_HAS_COLUMN_METADATA)
+ set_property(TARGET SQLite::SQLite3 APPEND PROPERTY
+ INTERFACE_COMPILE_DEFINITIONS "SQLite3_HAS_COLUMN_METADATA")
+@@ -187,5 +183,9 @@ if(SQLite3_FOUND)
+ set_property(TARGET SQLite::SQLite3 APPEND PROPERTY
+ INTERFACE_COMPILE_DEFINITIONS "SQLite3_HAS_RTREE")
+ endif()
++ get_target_property(definitions SQLite::SQLite3 INTERFACE_COMPILE_DEFINITIONS)
++ if(definitions)
++ list(REMOVE_DUPLICATES definitions)
++ set_target_properties(SQLite::SQLite3 PROPERTIES INTERFACE_COMPILE_DEFINITIONS "${definitions}")
+ endif()
+ endif()
diff --git a/vcpkg/ports/gdal/target-is-valid.patch b/vcpkg/ports/gdal/target-is-valid.patch
new file mode 100644
index 0000000..10f3dcf
--- /dev/null
+++ b/vcpkg/ports/gdal/target-is-valid.patch
@@ -0,0 +1,21 @@
+diff --git a/cmake/helpers/CheckDependentLibrariesCommon.cmake b/cmake/helpers/CheckDependentLibrariesCommon.cmake
+index ebb3538..a4a6d69 100644
+--- a/cmake/helpers/CheckDependentLibrariesCommon.cmake
++++ b/cmake/helpers/CheckDependentLibrariesCommon.cmake
+@@ -41,6 +41,7 @@ endif()
+ # https://github.com/OSGeo/gdal/issues/5324
+ function (gdal_check_target_is_valid target res_var)
+ get_target_property(_interface_include_directories ${target} "INTERFACE_INCLUDE_DIRECTORIES")
++ get_target_property(_type ${target} "TYPE")
+ if(_interface_include_directories)
+ foreach(_dir IN LISTS _interface_include_directories)
+ if(NOT EXISTS "${_dir}")
+@@ -54,7 +55,7 @@ function (gdal_check_target_is_valid target res_var)
+ # property, but a GeoTIFF_INCLUDE_DIRS variable.
+ set_target_properties(${target} PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${GeoTIFF_INCLUDE_DIRS}")
+- else()
++ elseif(NOT _type STREQUAL "INTERFACE" AND _type STREQUAL "ALIAS")
+ message(WARNING "Target ${target} has no INTERFACE_INCLUDE_DIRECTORIES property. Ignoring that target.")
+ set(${res_var} FALSE PARENT_SCOPE)
+ return()
diff --git a/vcpkg/ports/gdal/usage b/vcpkg/ports/gdal/usage
new file mode 100644
index 0000000..6982a9a
--- /dev/null
+++ b/vcpkg/ports/gdal/usage
@@ -0,0 +1,4 @@
+The package GDAL provides CMake targets:
+
+ find_package(GDAL CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE GDAL::GDAL)
diff --git a/vcpkg/ports/gdal/vcpkg-cmake-wrapper.cmake b/vcpkg/ports/gdal/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 0000000..5b70b67
--- /dev/null
+++ b/vcpkg/ports/gdal/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,23 @@
+cmake_policy(PUSH)
+cmake_policy(SET CMP0012 NEW)
+cmake_policy(SET CMP0054 NEW)
+
+list(REMOVE_ITEM ARGS "NO_MODULE" "CONFIG" "MODULE")
+list(APPEND ARGS "CONFIG")
+# The current port version should satisfy GDAL 3.0 ... 3.5
+list(GET ARGS 1 vcpkg_gdal_maybe_version)
+if(vcpkg_gdal_maybe_version MATCHES "(^3\$|^3[.][0-5])")
+ list(REMOVE_AT ARGS "1")
+endif()
+unset(vcpkg_gdal_maybe_version)
+_find_package(${ARGS} CONFIG)
+if(GDAL_FOUND)
+ get_filename_component(vcpkg_gdal_prefix "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
+ set(GDAL_INCLUDE_DIR "${vcpkg_gdal_prefix}/include" CACHE INTERNAL "")
+ set(GDAL_INCLUDE_DIRS "${GDAL_INCLUDE_DIR}")
+ set(GDAL_LIBRARY GDAL::GDAL CACHE INTERNAL "")
+ set(GDAL_LIBRARIES "${GDAL_LIBRARY}")
+ unset(vcpkg_gdal_prefix)
+endif()
+
+cmake_policy(POP)
diff --git a/vcpkg/ports/gdal/vcpkg.json b/vcpkg/ports/gdal/vcpkg.json
new file mode 100644
index 0000000..d1313f0
--- /dev/null
+++ b/vcpkg/ports/gdal/vcpkg.json
@@ -0,0 +1,341 @@
+{
+ "name": "gdal",
+ "version-semver": "3.12.0",
+ "description": "The Geographic Data Abstraction Library for reading and writing geospatial raster and vector data",
+ "homepage": "https://gdal.org",
+ "license": null,
+ "supports": "!uwp",
+ "dependencies": [
+ "json-c",
+ "libgeotiff",
+ {
+ "name": "pkgconf",
+ "host": true
+ },
+ {
+ "name": "proj",
+ "default-features": false,
+ "features": [
+ "tiff"
+ ]
+ },
+ {
+ "name": "tiff",
+ "default-features": false
+ },
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ },
+ {
+ "name": "vcpkg-pkgconfig-get-modules",
+ "host": true
+ },
+ "zlib"
+ ],
+ "default-features": [
+ "gif",
+ {
+ "name": "hdf5",
+ "platform": "!uwp"
+ },
+ "iconv",
+ "libkml",
+ {
+ "name": "libspatialite",
+ "platform": "!uwp"
+ },
+ "libxml2",
+ "lzma",
+ {
+ "name": "netcdf",
+ "platform": "!android & !ios & !(windows & arm64) & !uwp"
+ },
+ "openjpeg",
+ "openssl",
+ "pcre2",
+ {
+ "name": "postgresql",
+ "platform": "!uwp"
+ },
+ "recommended-features",
+ "webp",
+ "zstd"
+ ],
+ "features": {
+ "archive": {
+ "description": "Enable libarchive support",
+ "dependencies": [
+ {
+ "name": "libarchive",
+ "default-features": false
+ }
+ ]
+ },
+ "arrow": {
+ "description": "Enable arrow support",
+ "dependencies": [
+ {
+ "name": "arrow",
+ "default-features": false
+ }
+ ]
+ },
+ "arrow-adbc": {
+ "description": "Arrow ADBC support",
+ "dependencies": [
+ "arrow-adbc"
+ ]
+ },
+ "aws-ec2-windows": {
+ "description": "Optimized detection of AWS EC2 Windows hosts",
+ "dependencies": [
+ "atl"
+ ]
+ },
+ "cfitsio": {
+ "description": "Enable cfitsio support",
+ "supports": "!(android & arm32)",
+ "dependencies": [
+ "cfitsio"
+ ]
+ },
+ "curl": {
+ "description": "Enable CURL network support",
+ "dependencies": [
+ {
+ "name": "curl",
+ "default-features": false
+ }
+ ]
+ },
+ "expat": {
+ "description": "Use EXPAT library",
+ "dependencies": [
+ "expat"
+ ]
+ },
+ "freexl": {
+ "description": "Enable FREEXL support",
+ "dependencies": [
+ "freexl"
+ ]
+ },
+ "geos": {
+ "description": "Enable GEOS support",
+ "dependencies": [
+ "geos"
+ ]
+ },
+ "gif": {
+ "description": "Enable GIF support",
+ "dependencies": [
+ "giflib"
+ ]
+ },
+ "hdf5": {
+ "description": "Enable HDF5 support",
+ "dependencies": [
+ {
+ "name": "hdf5",
+ "default-features": false,
+ "features": [
+ "cpp"
+ ]
+ }
+ ]
+ },
+ "iconv": {
+ "description": "Use iconv library",
+ "dependencies": [
+ "libiconv"
+ ]
+ },
+ "jpeg": {
+ "description": "Use JPEG compression library",
+ "dependencies": [
+ "libjpeg-turbo"
+ ]
+ },
+ "kea": {
+ "description": "Enable KEA driver",
+ "dependencies": [
+ {
+ "name": "gdal",
+ "default-features": false,
+ "features": [
+ "hdf5"
+ ]
+ },
+ "kealib"
+ ]
+ },
+ "lerc": {
+ "description": "Enable LERC support",
+ "dependencies": [
+ "lerc"
+ ]
+ },
+ "libkml": {
+ "description": "Enable the LibKML driver",
+ "dependencies": [
+ "libkml"
+ ]
+ },
+ "libspatialite": {
+ "description": "Create or update SpatiaLite databases using libspatialite",
+ "dependencies": [
+ {
+ "name": "libspatialite",
+ "default-features": false
+ }
+ ]
+ },
+ "libxml2": {
+ "description": "Use LibXML2 library",
+ "dependencies": [
+ {
+ "name": "libxml2",
+ "default-features": false
+ }
+ ]
+ },
+ "lzma": {
+ "description": "Use LZMA library",
+ "dependencies": [
+ "liblzma"
+ ]
+ },
+ "mysql-libmariadb": {
+ "description": "Add mysql support using libmariadb",
+ "dependencies": [
+ "libmariadb"
+ ]
+ },
+ "netcdf": {
+ "description": "Enable NetCDF support",
+ "dependencies": [
+ {
+ "name": "netcdf-c",
+ "default-features": false
+ }
+ ]
+ },
+ "openjpeg": {
+ "description": "Use OpenJPEG library",
+ "dependencies": [
+ "openjpeg"
+ ]
+ },
+ "openssl": {
+ "description": "Use OpenSSL library",
+ "dependencies": [
+ "openssl"
+ ]
+ },
+ "parquet": {
+ "description": "Enable parquet reading support. Combine with arrow[compute] or arrow[dataset] for additional capabilities.",
+ "dependencies": [
+ {
+ "name": "arrow",
+ "default-features": false,
+ "features": [
+ "parquet"
+ ]
+ },
+ {
+ "name": "gdal",
+ "default-features": false,
+ "features": [
+ "arrow"
+ ]
+ }
+ ]
+ },
+ "pcre2": {
+ "description": "Enable PCRE2 support for sqlite3",
+ "dependencies": [
+ "pcre2"
+ ]
+ },
+ "png": {
+ "description": "Use PNG compression library",
+ "dependencies": [
+ "libpng"
+ ]
+ },
+ "poppler": {
+ "description": "Enable PDF reading support via poppler",
+ "dependencies": [
+ {
+ "name": "poppler",
+ "default-features": false,
+ "features": [
+ "private-api"
+ ]
+ }
+ ]
+ },
+ "postgresql": {
+ "description": "Enable PostgreSQL support",
+ "dependencies": [
+ "libpq"
+ ]
+ },
+ "qhull": {
+ "description": "Use QHULL library",
+ "dependencies": [
+ "qhull"
+ ]
+ },
+ "recommended-features": {
+ "description": "Features that are explicity marked as recommended by GDAL.",
+ "dependencies": [
+ {
+ "name": "gdal",
+ "default-features": false,
+ "features": [
+ "curl",
+ "expat",
+ "geos",
+ "jpeg",
+ "lerc",
+ "png",
+ "qhull",
+ "sqlite3"
+ ]
+ }
+ ]
+ },
+ "sqlite3": {
+ "description": "Enable SQLite3 support",
+ "dependencies": [
+ {
+ "name": "sqlite3",
+ "features": [
+ "rtree"
+ ]
+ }
+ ]
+ },
+ "tools": {
+ "description": "Builds gdal and ogr executables"
+ },
+ "webp": {
+ "description": "Enable WEBP support",
+ "dependencies": [
+ "libwebp"
+ ]
+ },
+ "zstd": {
+ "description": "Use ZSTD library",
+ "dependencies": [
+ "zstd"
+ ]
+ }
+ }
+}