diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index afdf7a7..99515f8 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -57,7 +57,7 @@ jobs: - name: 🌋 Build run: | - .\vcpkg\vcpkg.exe install --overlay-ports="${{ github.workspace }}/ports" --triplet=${{ matrix.triplet }} --x-buildtrees-root=C:/vcpkg-build py-pyqt6 py-pyyaml py-numpy + .\vcpkg\vcpkg.exe install --overlay-ports="${{ github.workspace }}/ports" --triplet=${{ matrix.triplet }} --x-buildtrees-root=C:/vcpkg-build py-pyqt6 py-pyyaml py-numpy gdal[python] - name: 📑 Upload logs uses: actions/upload-artifact@v4 diff --git a/ports/gdal/cmake-project-include.cmake b/ports/gdal/cmake-project-include.cmake new file mode 100644 index 0000000..409b7b1 --- /dev/null +++ b/ports/gdal/cmake-project-include.cmake @@ -0,0 +1,13 @@ +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() diff --git a/ports/gdal/find-link-libraries.patch b/ports/gdal/find-link-libraries.patch new file mode 100644 index 0000000..8e9c163 --- /dev/null +++ b/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/ports/gdal/fix-gdal-target-interfaces.patch b/ports/gdal/fix-gdal-target-interfaces.patch new file mode 100644 index 0000000..bf159fc --- /dev/null +++ b/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/ports/gdal/libkml.patch b/ports/gdal/libkml.patch new file mode 100644 index 0000000..ef25d06 --- /dev/null +++ b/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/ports/gdal/portfile.cmake b/ports/gdal/portfile.cmake new file mode 100644 index 0000000..966d34c --- /dev/null +++ b/ports/gdal/portfile.cmake @@ -0,0 +1,190 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO OSGeo/gdal + REF "v${VERSION}" + SHA512 764490362968b05c0edc1c73c3b51b9a517689f95f0e3e3af141da8ef81614111859bbbf2a1571f047acfbd6ba50a16320ba15ed238cbd73732a960c718d5d50 + HEAD_REF master + PATCHES + find-link-libraries.patch + fix-gdal-target-interfaces.patch + libkml.patch + 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_` 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 + 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 + 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 + python BUILD_PYTHON_BINDINGS + 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 ANRDOID_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_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 + -DCMAKE_DISABLE_FIND_PACKAGE_Arrow=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}" + "-DSWIG_DIR=${CURRENT_HOST_INSTALLED_DIR}/tools/swig" + "-DSWIG_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/swig/swig${VCPKG_HOST_EXECUTABLE_SUFFIX}" + "-DCMAKE_PROJECT_INCLUDE=${CMAKE_CURRENT_LIST_DIR}/cmake-project-include.cmake" + OPTIONS_DEBUG + -DBUILD_APPS=OFF + "-DGDAL_DEBUG_POSTFIX=" + 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_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() + +if("python" IN_LIST FEATURES) + file(REMOVE_RECURSE + "${CURRENT_PACKAGES_DIR}/debug/Lib" + "${CURRENT_PACKAGES_DIR}/debug/Scripts" + ) + file(COPY "${CURRENT_PACKAGES_DIR}/Lib/site-packages/" DESTINATION "${CURRENT_PACKAGES_DIR}/${PYTHON3_SITE}") + # TODO: Generalize for non windows + file(COPY "${CURRENT_PACKAGES_DIR}/Scripts" DESTINATION "${CURRENT_PACKAGES_DIR}/${PYTHON3_SITE}/../../Scripts") + file(REMOVE_RECURSE + "${CURRENT_PACKAGES_DIR}/Lib/site-packages" + "${CURRENT_PACKAGES_DIR}/Scripts" + ) + vcpkg_python_test_import(MODULE "osgeo.gdal") +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/ports/gdal/target-is-valid.patch b/ports/gdal/target-is-valid.patch new file mode 100644 index 0000000..c7acf73 --- /dev/null +++ b/ports/gdal/target-is-valid.patch @@ -0,0 +1,21 @@ +diff --git a/cmake/helpers/CheckDependentLibraries.cmake b/cmake/helpers/CheckDependentLibraries.cmake +index f5c920a..53494c9 100644 +--- a/cmake/helpers/CheckDependentLibraries.cmake ++++ b/cmake/helpers/CheckDependentLibraries.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/ports/gdal/usage b/ports/gdal/usage new file mode 100644 index 0000000..59eea89 --- /dev/null +++ b/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/ports/gdal/vcpkg-cmake-wrapper.cmake b/ports/gdal/vcpkg-cmake-wrapper.cmake new file mode 100644 index 0000000..f51e7cb --- /dev/null +++ b/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/ports/gdal/vcpkg.json b/ports/gdal/vcpkg.json new file mode 100644 index 0000000..0ec788a --- /dev/null +++ b/ports/gdal/vcpkg.json @@ -0,0 +1,338 @@ +{ + "name": "gdal", + "version-semver": "3.8.4", + "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": [ + "default-features" + ], + "features": { + "python": { + "description": "Build python bindings", + "dependencies": [ + "python3", + { + "name": "swig", + "host": true + }, + { + "name": "py-setuptools", + "host": true + }, + { + "name": "vcpkg-python-scripts", + "host": true + } + ] + }, + "aws-ec2-windows": { + "description": "Optimized detection of AWS EC2 Windows hosts", + "dependencies": [ + "atlmfc" + ] + }, + "cfitsio": { + "description": "Enable cfitsio support", + "dependencies": [ + "cfitsio" + ] + }, + "curl": { + "description": "Enable CURL network support", + "dependencies": [ + { + "name": "curl", + "default-features": false + } + ] + }, + "default-features": { + "description": "Default set of features, including recommended features", + "dependencies": [ + { + "name": "gdal", + "default-features": false, + "features": [ + "gif", + "iconv", + "libkml", + "libxml2", + "lzma", + "openjpeg", + "openssl", + "pcre2", + "recommended-features", + "webp", + "zstd" + ] + }, + { + "name": "gdal", + "default-features": false, + "features": [ + "libspatialite", + "postgresql" + ], + "platform": "!uwp" + }, + { + "name": "gdal", + "default-features": false, + "features": [ + "hdf5", + "netcdf" + ], + "platform": "!uwp & !(windows & arm64) & !android & !ios" + } + ] + }, + "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": [ + "libspatialite" + ] + }, + "libxml2": { + "description": "Use LibXML2 library", + "dependencies": [ + "libxml2" + ] + }, + "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" + ] + }, + "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" + ] + } + ] + }, + "supported-default-features": { + "description": "This feature is an alias for default-features. It is retained for compatibility.", + "dependencies": [ + { + "name": "gdal", + "features": [ + "default-features" + ] + } + ] + }, + "system-libraries": { + "$supports": "!windows", + "description": "This feature does nothing. It is retained for compatibility." + }, + "tools": { + "description": "Builds gdal and ogr executables" + }, + "webp": { + "description": "Enable WEBP support", + "dependencies": [ + "libwebp" + ] + }, + "zstd": { + "description": "Use ZSTD library", + "dependencies": [ + "zstd" + ] + } + } +} diff --git a/ports/swig/portfile.cmake b/ports/swig/portfile.cmake new file mode 100644 index 0000000..d19d1a3 --- /dev/null +++ b/ports/swig/portfile.cmake @@ -0,0 +1,30 @@ +set(VCPKG_BUILD_TYPE release) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO swig/swig + REF "v${VERSION}" + SHA512 5d653333f73356d4d5ba8b615882e49f33f188bc68d8204352116bc4aca7946ec01ce2e02524c5ce805b98c2219ed05e664120485bf18095c5c0785436487074 + HEAD_REF master +) + +vcpkg_find_acquire_program(BISON) + +list(APPEND OPTIONS "-D BISON_EXECUTABLE=${BISON}") + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + ${OPTIONS} +) + +vcpkg_cmake_install() +vcpkg_copy_pdbs() +vcpkg_fixup_pkgconfig() + +vcpkg_copy_tools(TOOL_NAMES swig) +file(COPY "${CURRENT_PACKAGES_DIR}/bin/" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/swig") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin") + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") +set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) \ No newline at end of file diff --git a/ports/swig/vcpkg.json b/ports/swig/vcpkg.json new file mode 100644 index 0000000..e8b511a --- /dev/null +++ b/ports/swig/vcpkg.json @@ -0,0 +1,19 @@ +{ + "name": "swig", + "version": "4.2.1", + "description": "SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.", + "homepage": "http://www.swig.org/", + "dependencies": + [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + }, + "pcre2" + ] +} + diff --git a/ports/vcpkg-python-scripts/import_test.py.in b/ports/vcpkg-python-scripts/import_test.py.in index 4cb4b34..807ea11 100644 --- a/ports/vcpkg-python-scripts/import_test.py.in +++ b/ports/vcpkg-python-scripts/import_test.py.in @@ -1,4 +1,14 @@ import os -os.add_dll_directory('@DLL_DIR@') if os.name == 'nt' else None +import sys -from @arg_MODULE@ import * \ No newline at end of file +# On windows: make sure we can load dlls from CURRENT_INSTALLED_DIR/bin and CURRENT_PACKAGES_DIR/bin +if os.name == 'nt': + if os.path.isdir('@PACKAGE_DLL_DIR@'): + os.add_dll_directory('@PACKAGE_DLL_DIR@') + os.add_dll_directory('@INSTALLED_DLL_DIR@') + +# Make sure site_packages from CURRENT_INSTALLED_DIR and CURRENT_PACKAGES_DIR are on pythonpath +sys.path.append('@PACKAGE_SITE_PACKAGES_DIR@') +sys.path.append('@PYTHON3_SITEPACKAGES@') + +from @arg_MODULE@ import * diff --git a/ports/vcpkg-python-scripts/vcpkg.json b/ports/vcpkg-python-scripts/vcpkg.json index 89c1cf8..92bf92c 100644 --- a/ports/vcpkg-python-scripts/vcpkg.json +++ b/ports/vcpkg-python-scripts/vcpkg.json @@ -1,6 +1,7 @@ { "name": "vcpkg-python-scripts", "version-date": "2024-05-12", + "port-version": 1, "documentation": "https://vcpkg.io/en/docs/README.html", "license": "MIT", "supports": "native", diff --git a/ports/vcpkg-python-scripts/vcpkg_python_functions.cmake b/ports/vcpkg-python-scripts/vcpkg_python_functions.cmake index cc97e26..6c468f0 100644 --- a/ports/vcpkg-python-scripts/vcpkg_python_functions.cmake +++ b/ports/vcpkg-python-scripts/vcpkg_python_functions.cmake @@ -147,13 +147,15 @@ function(vcpkg_python_test_import) ) message(STATUS "Testing package!") + + set(RELATIVE_SITE_PACKAGES_DIR "${PYTHON3_SITEPACKAGES}") + cmake_path(RELATIVE_PATH RELATIVE_SITE_PACKAGES_DIR BASE_DIRECTORY "${CURRENT_INSTALLED_DIR}") - set(DLL_DIR "${CURRENT_INSTALLED_DIR}/bin") + set(INSTALLED_DLL_DIR "${CURRENT_INSTALLED_DIR}/bin") + set(PACKAGE_DLL_DIR "${CURRENT_PACKAGES_DIR}/bin") + set(PACKAGE_SITE_PACKAGES_DIR "${CURRENT_PACKAGES_DIR}/${RELATIVE_SITE_PACKAGES_DIR}") configure_file("${CURRENT_HOST_INSTALLED_DIR}/share/vcpkg-python-scripts/import_test.py.in" "${CURRENT_BUILDTREES_DIR}/import_test.py" @ONLY) - message(STATUS "Site packages: ${PYTHON3_SITEPACKAGES}") - set(ENV{PYTHONPATH} "${PYTHON3_SITEPACKAGES}") - vcpkg_execute_required_process(COMMAND "${PYTHON3}" "${CURRENT_BUILDTREES_DIR}/import_test.py" LOGNAME "python-test-import-${TARGET_TRIPLET}" WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"