diff --git a/ports/gdal/pkgconfig.diff b/ports/gdal/pkgconfig.diff new file mode 100644 index 00000000000000..c4217297cfec69 --- /dev/null +++ b/ports/gdal/pkgconfig.diff @@ -0,0 +1,60 @@ +diff --git a/cmake/helpers/GdalGenerateConfig.cmake b/cmake/helpers/GdalGenerateConfig.cmake +index debddd7062..1ee07abf13 100644 +--- a/cmake/helpers/GdalGenerateConfig.cmake ++++ b/cmake/helpers/GdalGenerateConfig.cmake +@@ -204,14 +204,15 @@ function(gdal_split_library_to_lflags _lib_flag _path_flag _input) + string(FIND "${_name_we}" "${_prefix}" _pos) + else() + set(_pos 0) ++ set(_name_we "${_lib_name}") + endif() + if(_pos STREQUAL "0") + # Match + string(LENGTH "${_prefix}" _pos) + string(SUBSTRING "${_name_we}" "${_pos}" "-1" _lib_name) +- set(${_lib_flag} "${CMAKE_LINK_LIBRARY_FLAG}${_lib_name}" PARENT_SCOPE) ++ set(${_lib_flag} "-l${_lib_name}" PARENT_SCOPE) + if(_lib_dir AND NOT _lib_dir IN_LIST CMAKE_C_IMPLICIT_LINK_DIRECTORIES) +- set(${_path_flag} "${CMAKE_LIBRARY_PATH_FLAG}${_lib_dir}" PARENT_SCOPE) ++ set(${_path_flag} "-L${_lib_dir}" PARENT_SCOPE) + else() + set(${_path_flag} "" PARENT_SCOPE) + endif() +@@ -235,6 +236,7 @@ function(gdal_get_lflags _result) + gdal_flatten_link_libraries(_libs_in "${is_debug_build}" ${ARGN}) + + set(_libs_out "") ++ string(REPLACE "-framework;" "-framework " _libs_in "${_libs_in}") + foreach(_lib IN LISTS _libs_in) + if(TARGET "${_lib}") + get_property(_type TARGET ${_lib} PROPERTY TYPE) +@@ -260,12 +262,15 @@ function(gdal_get_lflags _result) + # use _lib + elseif(CMAKE_LINK_LIBRARY_FLAG STREQUAL "-l" AND _lib MATCHES "^-l") + # use _lib ++ elseif(_lib MATCHES "^-framework +([^ ]+)\$") ++ list(APPEND _libs_out "-framework" "${CMAKE_MATCH_1}") ++ continue() + elseif(EXISTS "${_lib}") + if(GDAL_SPLIT_EXPORTED_LIBS) + gdal_split_library_to_lflags(_lib _other "${_lib}") + endif() + else() +- set(_lib "${CMAKE_LINK_LIBRARY_FLAG}${_lib}") ++ set(_lib "-l${_lib}") + endif() + if(_other AND NOT _other IN_LIST _libs_out) + list(APPEND _libs_out "${_other}") +@@ -303,7 +308,11 @@ function(gdal_generate_config) + gdal_join_and_quote(CONFIG_CFLAGS) + + get_property(target_lib_name TARGET "${arg_TARGET}" PROPERTY OUTPUT_NAME) +- set(CONFIG_LIBS "${CMAKE_LINK_LIBRARY_FLAG}${target_lib_name}") ++ # Keep in sync with /gdal.cmake ++ if(MSVC AND arg_TARGET STREQUAL "GDAL" AND CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]") ++ string(APPEND target_lib_name "${GDAL_DEBUG_POSTFIX}") ++ endif() ++ set(CONFIG_LIBS "-l${target_lib_name}") + if(NOT CONFIG_PREFIX IN_LIST CMAKE_C_IMPLICIT_LINK_LIBRARIES) + list(INSERT CONFIG_LIBS 0 "${CMAKE_LIBRARY_PATH_FLAG}${CMAKE_INSTALL_FULL_LIBDIR}") + endif() diff --git a/ports/gdal/portfile.cmake b/ports/gdal/portfile.cmake index d1896bd76d5832..601d123d3586b3 100644 --- a/ports/gdal/portfile.cmake +++ b/ports/gdal/portfile.cmake @@ -10,6 +10,7 @@ vcpkg_from_github( libkml.patch sqlite3.diff target-is-valid.patch + pkgconfig.diff ) # `vcpkg clean` stumbles over one subdir file(REMOVE_RECURSE "${SOURCE_PATH}/autotest") @@ -88,6 +89,7 @@ vcpkg_cmake_configure( -DCMAKE_DISABLE_FIND_PACKAGE_Java=ON -DCMAKE_DISABLE_FIND_PACKAGE_JNI=ON -DCMAKE_DISABLE_FIND_PACKAGE_SWIG=ON + -DGDAL_SPLIT_EXPORTED_LIBS=ON -DGDAL_USE_INTERNAL_LIBS=OFF -DGDAL_USE_EXTERNAL_LIBS=OFF -DGDAL_BUILD_OPTIONAL_DRIVERS=ON diff --git a/ports/gdal/vcpkg.json b/ports/gdal/vcpkg.json index b90d8e30719d6d..36b962d8761bcf 100644 --- a/ports/gdal/vcpkg.json +++ b/ports/gdal/vcpkg.json @@ -189,6 +189,13 @@ "libspatialite": { "description": "Create or update SpatiaLite databases using libspatialite", "dependencies": [ + { + "name": "gdal", + "default-features": false, + "features": [ + "sqlite3" + ] + }, { "name": "libspatialite", "default-features": false diff --git a/scripts/test_ports/vcpkg-ci-gdal/portfile.cmake b/scripts/test_ports/vcpkg-ci-gdal/portfile.cmake index 065116c276adcf..62d16a08468054 100644 --- a/scripts/test_ports/vcpkg-ci-gdal/portfile.cmake +++ b/scripts/test_ports/vcpkg-ci-gdal/portfile.cmake @@ -1 +1,12 @@ set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +file(COPY_FILE "${CURRENT_INSTALLED_DIR}/lib/pkgconfig/gdal.pc" "${CURRENT_BUILDTREES_DIR}/gdal.pc.log") + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/scripts/test_ports/vcpkg-ci-gdal/project/CMakeLists.txt b/scripts/test_ports/vcpkg-ci-gdal/project/CMakeLists.txt new file mode 100644 index 00000000000000..5a0d70ec942a97 --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-gdal/project/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.30) +project(gdal-test C CXX) + +set(CMAKE_CXX_STANDARD 11) + +block(SCOPE_FOR VARIABLES) + find_package(GDAL CONFIG REQUIRED) + + add_executable(main-cmake main.cpp) + target_link_libraries(main-cmake PRIVATE GDAL::GDAL) +endblock() + +block(SCOPE_FOR VARIABLES) + find_package(PkgConfig REQUIRED) + pkg_check_modules(PC_GDAL gdal REQUIRED IMPORTED_TARGET) + + add_executable(main-pkgconfig main.cpp) + if(APPLE OR (WIN32 AND NOT MINGW)) + target_link_libraries(main-pkgconfig PRIVATE PkgConfig::PC_GDAL) + else() + # Use raw flags, avoid find_library + target_compile_options(main-pkgconfig PRIVATE ${PC_GDAL_CFLAGS}) + target_link_libraries(main-pkgconfig PRIVATE ${PC_GDAL_LDFLAGS}) + endif() +endblock() diff --git a/scripts/test_ports/vcpkg-ci-gdal/project/main.cpp b/scripts/test_ports/vcpkg-ci-gdal/project/main.cpp new file mode 100644 index 00000000000000..c24612f307168f --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-gdal/project/main.cpp @@ -0,0 +1,8 @@ +#include + +int main() +{ + GDALAllRegister(); + auto poDataset = GDALDatasetUniquePtr(GDALDataset::FromHandle(GDALOpen("test.gtif", GA_ReadOnly))); + return 0; +} diff --git a/scripts/test_ports/vcpkg-ci-gdal/vcpkg.json b/scripts/test_ports/vcpkg-ci-gdal/vcpkg.json index ee66c61cfa9cc7..ac7ed45dd38bb1 100644 --- a/scripts/test_ports/vcpkg-ci-gdal/vcpkg.json +++ b/scripts/test_ports/vcpkg-ci-gdal/vcpkg.json @@ -1,6 +1,6 @@ { "name": "vcpkg-ci-gdal", - "version-date": "2023-12-28", + "version-string": "ci", "description": "Port to force features of certain ports within CI", "homepage": "https://github.com/microsoft/vcpkg", "license": "MIT", @@ -59,6 +59,10 @@ "webp", "zstd" ] + }, + { + "name": "vcpkg-cmake", + "host": true } ] }