From 37b6d58a234edbdb787a83441ab4364f6a88ed36 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Tue, 11 Nov 2025 03:05:38 +0100 Subject: [PATCH] [duckdb] Sanitize (#48180) --- ports/duckdb/extensions.patch | 16 -- ports/duckdb/library-linkage-excel.diff | 15 ++ ports/duckdb/library-linkage-httpfs.diff | 15 ++ ports/duckdb/library-linkage.diff | 206 ++++++++++++++++++ ports/duckdb/portfile.cmake | 138 ++++++++---- ports/duckdb/usage | 6 +- ports/duckdb/vcpkg.json | 21 +- scripts/ci.baseline.txt | 13 ++ .../test_ports/vcpkg-ci-duckdb/portfile.cmake | 20 ++ .../vcpkg-ci-duckdb/project/CMakeLists.txt | 13 ++ .../test_ports/vcpkg-ci-duckdb/project/main.c | 33 +++ scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json | 6 +- versions/baseline.json | 2 +- versions/d-/duckdb.json | 5 + 14 files changed, 445 insertions(+), 64 deletions(-) delete mode 100644 ports/duckdb/extensions.patch create mode 100644 ports/duckdb/library-linkage-excel.diff create mode 100644 ports/duckdb/library-linkage-httpfs.diff create mode 100644 ports/duckdb/library-linkage.diff create mode 100644 scripts/test_ports/vcpkg-ci-duckdb/project/CMakeLists.txt create mode 100644 scripts/test_ports/vcpkg-ci-duckdb/project/main.c diff --git a/ports/duckdb/extensions.patch b/ports/duckdb/extensions.patch deleted file mode 100644 index 097003af23..0000000000 --- a/ports/duckdb/extensions.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 1300ab8..038c03b 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -1277,7 +1277,10 @@ endif() - # Load extensions passed through cmake config var - foreach(EXT IN LISTS BUILD_EXTENSIONS) - if(NOT "${EXT}" STREQUAL "") -- if (EXISTS "${EXTENSION_CONFIG_BASE_DIR}/${EXT}.cmake") -+ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/extension/${EXT}/extension_config.cmake") -+ # out-of-tree extension -+ include("${CMAKE_CURRENT_SOURCE_DIR}/extension/${EXT}/extension_config.cmake") -+ elseif (EXISTS "${EXTENSION_CONFIG_BASE_DIR}/${EXT}.cmake") - # out-of-tree extension: load cmake file - include("${EXTENSION_CONFIG_BASE_DIR}/${EXT}.cmake") - else() diff --git a/ports/duckdb/library-linkage-excel.diff b/ports/duckdb/library-linkage-excel.diff new file mode 100644 index 0000000000..c96358b6bf --- /dev/null +++ b/ports/duckdb/library-linkage-excel.diff @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 981de80..65aa1da 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -35,6 +35,10 @@ target_link_libraries(${EXTENSION_NAME} EXPAT::EXPAT MINIZIP::minizip-ng + target_link_libraries(${LOADABLE_EXTENSION_NAME} EXPAT::EXPAT + MINIZIP::minizip-ng ZLIB::ZLIB) + ++set_target_properties(${LOADABLE_EXTENSION_NAME} PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS ${EXTENSION_NAME} + EXPORT "${DUCKDB_EXPORT_SET}" diff --git a/ports/duckdb/library-linkage-httpfs.diff b/ports/duckdb/library-linkage-httpfs.diff new file mode 100644 index 0000000000..99daec9470 --- /dev/null +++ b/ports/duckdb/library-linkage-httpfs.diff @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 40a19e8..8b75d40 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -49,6 +49,10 @@ else() + endif() + + ++set_target_properties(httpfs_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS httpfs_extension + EXPORT "${DUCKDB_EXPORT_SET}" diff --git a/ports/duckdb/library-linkage.diff b/ports/duckdb/library-linkage.diff new file mode 100644 index 0000000000..5d94429e3f --- /dev/null +++ b/ports/duckdb/library-linkage.diff @@ -0,0 +1,206 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4e9d498..70414b4 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -410,7 +410,6 @@ option(EXTENSION_STATIC_BUILD + FALSE) + + if(WIN32 OR ZOS) +- set(EXTENSION_STATIC_BUILD TRUE) + add_definitions(-D_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1) + endif() + +@@ -857,6 +856,7 @@ if (NOT EXTENSION_CONFIG_BUILD AND NOT ${EXTENSION_TESTS_ONLY} AND NOT CLANG_TID + message(STATUS "Extensions will be deployed to: ${LOCAL_EXTENSION_REPO_DIR}") + endif() + endif() ++set_target_properties(duckdb_local_extension_repo PROPERTIES EXCLUDE_FROM_ALL 1) + + function(build_loadable_extension_directory NAME ABI_TYPE OUTPUT_DIRECTORY EXTENSION_VERSION CAPI_VERSION PARAMETERS) + set(TARGET_NAME ${NAME}_loadable_extension) +@@ -875,6 +875,8 @@ function(build_loadable_extension_directory NAME ABI_TYPE OUTPUT_DIRECTORY EXTEN + + if(EMSCRIPTEN) + add_library(${TARGET_NAME} STATIC ${FILES}) ++ elseif(WIN32) ++ add_library(${TARGET_NAME} MODULE ${FILES}) + else() + add_library(${TARGET_NAME} SHARED ${FILES}) + endif() +diff --git a/DuckDBConfig.cmake.in b/DuckDBConfig.cmake.in +index 7c5ce31..dcf5ada 100644 +--- a/DuckDBConfig.cmake.in ++++ b/DuckDBConfig.cmake.in +@@ -9,6 +9,22 @@ find_dependency(Threads) + if(NOT @WITH_INTERNAL_ICU@) + find_dependency(ICU COMPONENTS i18n uc data) + endif() ++if(NOT "@BUILD_SHARED_LIBS@") ++ set(z_vcpkg_duckdb_extensions_names "@DUCKDB_EXTENSION_NAMES@") ++ if("excel" IN_LIST z_vcpkg_duckdb_extensions_names) ++ find_dependency(EXPAT) ++ find_dependency(ZLIB) ++ find_dependency(minizip-ng CONFIG) ++ endif() ++ if("httpfs" IN_LIST z_vcpkg_duckdb_extensions_names) ++ find_dependency(CURL) ++ find_dependency(OpenSSL) ++ if(MINGW) ++ find_dependency(ZLIB) ++ endif() ++ endif() ++ unset(z_vcpkg_duckdb_extensions_names) ++endif() + + # Compute paths + get_filename_component(DuckDB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +@@ -18,7 +34,7 @@ if(NOT TARGET duckdb AND NOT DuckDB_BINARY_DIR) + include("${DuckDB_CMAKE_DIR}/DuckDBExports.cmake") + endif() + +-if(DuckDB_USE_STATIC_LIBS) ++if(NOT "@BUILD_SHARED_LIBS@") + set(DuckDB_LIBRARIES duckdb_static) + else() + set(DuckDB_LIBRARIES duckdb) +diff --git a/extension/autocomplete/CMakeLists.txt b/extension/autocomplete/CMakeLists.txt +index 544e65a..a8e1e43 100644 +--- a/extension/autocomplete/CMakeLists.txt ++++ b/extension/autocomplete/CMakeLists.txt +@@ -13,6 +13,10 @@ set(PARAMETERS "-warnings") + build_loadable_extension(autocomplete ${PARAMETERS} + ${AUTOCOMPLETE_EXTENSION_FILES}) + ++set_target_properties(autocomplete_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS autocomplete_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/extension/core_functions/CMakeLists.txt b/extension/core_functions/CMakeLists.txt +index c97cd77..0827683 100644 +--- a/extension/core_functions/CMakeLists.txt ++++ b/extension/core_functions/CMakeLists.txt +@@ -14,6 +14,10 @@ set(PARAMETERS "-warnings") + build_loadable_extension(core_functions ${PARAMETERS} ${CORE_FUNCTION_FILES}) + target_link_libraries(core_functions_loadable_extension duckdb_skiplistlib) + ++set_target_properties(core_functions_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS core_functions_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/extension/icu/CMakeLists.txt b/extension/icu/CMakeLists.txt +index a5bb58a..8edff2b 100644 +--- a/extension/icu/CMakeLists.txt ++++ b/extension/icu/CMakeLists.txt +@@ -42,6 +42,11 @@ build_loadable_extension(icu ${PARAMETERS} ${ICU_EXTENSION_FILES}) + if(NOT WITH_INTERNAL_ICU) + target_link_libraries(icu_loadable_extension ICU::i18n ICU::uc ICU::data) + endif() ++ ++set_target_properties(icu_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS icu_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/extension/jemalloc/CMakeLists.txt b/extension/jemalloc/CMakeLists.txt +index 38be497..75cb8fb 100644 +--- a/extension/jemalloc/CMakeLists.txt ++++ b/extension/jemalloc/CMakeLists.txt +@@ -12,6 +12,9 @@ set(JEMALLOC_EXTENSION_FILES jemalloc_extension.cpp ${JEMALLOC_OBJECT_FILES}) + build_static_extension(jemalloc ${JEMALLOC_EXTENSION_FILES}) + # we do not do build_loadable_extension here because jemalloc is static-only + ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS jemalloc_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/extension/json/CMakeLists.txt b/extension/json/CMakeLists.txt +index 80b4af4..81055de 100644 +--- a/extension/json/CMakeLists.txt ++++ b/extension/json/CMakeLists.txt +@@ -41,6 +41,10 @@ set(PARAMETERS "-warnings") + build_loadable_extension(json ${PARAMETERS} ${JSON_EXTENSION_FILES}) + target_link_libraries(json_loadable_extension duckdb_yyjson) + ++set_target_properties(json_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS json_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/extension/parquet/CMakeLists.txt b/extension/parquet/CMakeLists.txt +index a8335d8..ef2ea3f 100644 +--- a/extension/parquet/CMakeLists.txt ++++ b/extension/parquet/CMakeLists.txt +@@ -82,6 +82,10 @@ set(PARAMETERS "-warnings") + build_loadable_extension(parquet ${PARAMETERS} ${PARQUET_EXTENSION_FILES}) + target_link_libraries(parquet_loadable_extension duckdb_mbedtls duckdb_zstd) + ++set_target_properties(parquet_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS parquet_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/extension/tpcds/CMakeLists.txt b/extension/tpcds/CMakeLists.txt +index 6ec4cb8..db51141 100644 +--- a/extension/tpcds/CMakeLists.txt ++++ b/extension/tpcds/CMakeLists.txt +@@ -11,6 +11,10 @@ set(PARAMETERS "-warnings") + build_loadable_extension(tpcds ${PARAMETERS} tpcds_extension.cpp + ${DSDGEN_OBJECT_FILES}) + ++set_target_properties(tpcds_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS tpcds_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/extension/tpch/CMakeLists.txt b/extension/tpch/CMakeLists.txt +index 46dcb12..46b9950 100644 +--- a/extension/tpch/CMakeLists.txt ++++ b/extension/tpch/CMakeLists.txt +@@ -11,6 +11,10 @@ set(PARAMETERS "-warnings") + build_loadable_extension(tpch ${PARAMETERS} tpch_extension.cpp + ${DBGEN_OBJECT_FILES}) + ++set_target_properties(tpch_loadable_extension PROPERTIES EXCLUDE_FROM_ALL 1) ++if(BUILD_SHARED_LIBS) ++ return() ++endif() + install( + TARGETS tpch_extension + EXPORT "${DUCKDB_EXPORT_SET}" +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 1915e92..83da5f4 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -172,8 +172,15 @@ else() + + endif() + ++if(BUILD_SHARED_LIBS) ++ set(INSTALL_TARGET duckdb) ++ set_target_properties(duckdb_static PROPERTIES EXCLUDE_FROM_ALL 1) ++else() ++ set(INSTALL_TARGET duckdb_static) ++ set_target_properties(duckdb PROPERTIES EXCLUDE_FROM_ALL 1) ++endif() + install( +- TARGETS duckdb duckdb_static ++ TARGETS ${INSTALL_TARGET} + EXPORT "${DUCKDB_EXPORT_SET}" + LIBRARY DESTINATION "${INSTALL_LIB_DIR}" + ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" diff --git a/ports/duckdb/portfile.cmake b/ports/duckdb/portfile.cmake index fdc5ec52eb..cb8a16af71 100644 --- a/ports/duckdb/portfile.cmake +++ b/ports/duckdb/portfile.cmake @@ -5,26 +5,36 @@ vcpkg_from_github( SHA512 4965071888bfd791ddc81ed9eb53cedcd0248b159e6db3492bf5d17557b0f7516aed0840408ff46a06e9a0989a42d7b2a7452fdaf619c8ca44de43e5d1c338b8 HEAD_REF main PATCHES - extensions.patch + library-linkage.diff ) - -# Remove vendored dependencies which are not properly namespaced +# Remove vendored dependencies which are optional or not properly namespaced file(REMOVE_RECURSE + "${SOURCE_PATH}/extension/third_party/icu" "${SOURCE_PATH}/third_party/catch" "${SOURCE_PATH}/third_party/imdb" "${SOURCE_PATH}/third_party/snowball" "${SOURCE_PATH}/third_party/tpce-tool" ) +set(extension_dirs "") + if("excel" IN_LIST FEATURES) vcpkg_from_github( - OUT_SOURCE_PATH DUCKDB_EXCCEL_SOURCE_PATH + OUT_SOURCE_PATH DUCKDB_EXCEL_SOURCE_PATH REPO duckdb/duckdb-excel REF 8504be9ec8183e4082141f9359b53a64d3a440b7 SHA512 295bfe67c2902c09b584bee623dee7db69aad272a00e6bd4038ec65e2d8a977d1ace7261af8f67863c2fae709acc414e290e40f0bad43bae679c0a8639a0d6b5 HEAD_REF main + PATCHES + library-linkage-excel.diff ) - file(RENAME "${DUCKDB_EXCCEL_SOURCE_PATH}" "${SOURCE_PATH}/extension/excel") + list(APPEND extension_dirs "${DUCKDB_EXCEL_SOURCE_PATH}") + file(WRITE "${SOURCE_PATH}/.github/config/extensions/excel.cmake" " +duckdb_extension_load(excel + SOURCE_DIR \"${DUCKDB_EXCEL_SOURCE_PATH}\" + INCLUDE_DIR \"${DUCKDB_EXCEL_SOURCE_PATH}/src/excel/include\" +) +") endif() if("httpfs" IN_LIST FEATURES) @@ -34,71 +44,123 @@ if("httpfs" IN_LIST FEATURES) REF 0989823e43554e8a00b31959a853e29ab9bd07f9 SHA512 71461d522aa5338df81931f937ed538b453b274d22e91ad7e0f1a92e4437a29cc869a0f5be3bd5a9abf0045dfd4681a787923ee32374be471483909c0a60a21f HEAD_REF main + PATCHES + library-linkage-httpfs.diff ) - file(RENAME "${DUCKDB_HTTPFS_SOURCE_PATH}" "${SOURCE_PATH}/extension/httpfs") + list(APPEND extension_dirs "${DUCKDB_HTTPFS_SOURCE_PATH}") + file(WRITE "${SOURCE_PATH}/.github/config/extensions/httpfs.cmake" " +duckdb_extension_load(httpfs + SOURCE_DIR \"${DUCKDB_HTTPFS_SOURCE_PATH}\" + INCLUDE_DIR \"${DUCKDB_HTTPFS_SOURCE_PATH}/extension/httpfs/include\" +) +") endif() if("iceberg" IN_LIST FEATURES) vcpkg_from_github( - OUT_SOURCE_PATH DUCKDB_HTTPFS_SOURCE_PATH + OUT_SOURCE_PATH DUCKDB_ICEBERG_SOURCE_PATH REPO duckdb/duckdb-iceberg REF 6b636bff44aeeccf6f6d5b54de6edf280274beea SHA512 f8ce593117dd5423fd5445b6fa6c1f3b11ee7c8a2fdb988c3c0208a59d5ed980b941116866f7cb1d0597662e98c03687da071cbc5617c71086eb112621e31748 HEAD_REF main ) - file(RENAME "${DUCKDB_HTTPFS_SOURCE_PATH}" "${SOURCE_PATH}/extension/iceberg") + list(APPEND extension_dirs "${DUCKDB_ICEBERG_SOURCE_PATH}") + file(WRITE "${SOURCE_PATH}/.github/config/extensions/iceberg.cmake" " +duckdb_extension_load(iceberg + SOURCE_DIR \"${DUCKDB_ICEBERG_SOURCE_PATH}\" + INCLUDE_DIR \"${DUCKDB_ICEBERG_SOURCE_PATH}/src/include\" +) +") endif() -string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" DUCKDB_BUILD_STATIC) -string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" DUCKDB_BUILD_DYNAMIC) +set(BUILD_EXTENSIONS "${FEATURES}") +list(FILTER BUILD_EXTENSIONS INCLUDE REGEX "^(autocomplete|excel|httpfs|icu|json|tpcds|tpch)\$") -set(EXTENSION_LIST "autocomplete;excel;httpfs;icu;json;tpcds;tpch") -set(BUILD_EXTENSIONS "") -foreach(EXT ${EXTENSION_LIST}) - if(${EXT} IN_LIST FEATURES) - list(APPEND BUILD_EXTENSIONS ${EXT}) +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" EXTENSION_STATIC_BUILD) + +if(VCPKG_CROSSCOMPILING AND NOT DEFINED DUCKDB_EXPLICIT_PLATFORM) + set(DUCKDB_EXPLICIT_PLATFORM "") + if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(DUCKDB_EXPLICIT_PLATFORM "arm64") + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(DUCKDB_EXPLICIT_PLATFORM "amd64") + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(DUCKDB_EXPLICIT_PLATFORM "i686") + endif() + if(DUCKDB_EXPLICIT_PLATFORM) + if(VCPKG_TARGET_IS_ANDROID) + string(APPEND DUCKDB_EXPLICIT_PLATFORM "-linux_android") + elseif(VCPKG_TARGET_IS_FREEBSD) + string(APPEND DUCKDB_EXPLICIT_PLATFORM "-freebsd") + elseif(VCPKG_TARGET_IS_LINUX) + string(APPEND DUCKDB_EXPLICIT_PLATFORM "-linux") + elseif(VCPKG_TARGET_IS_OSX) + string(APPEND DUCKDB_EXPLICIT_PLATFORM "-osx") + elseif(VCPKG_TARGET_IS_WINDOWS) + string(APPEND DUCKDB_EXPLICIT_PLATFORM "-windows") + if(VCPKG_TARGET_IS_MINGW) + string(APPEND DUCKDB_EXPLICIT_PLATFORM "_mingw") + endif() + elseif() + set(DUCKDB_EXPLICIT_PLATFORM "") # unknown. override in triplet file. + endif() endif() -endforeach() -if(NOT "${BUILD_EXTENSIONS}" STREQUAL "") - set(BUILD_EXTENSIONS_FLAG "-DBUILD_EXTENSIONS='${BUILD_EXTENSIONS}'") endif() vcpkg_cmake_configure( SOURCE_PATH ${SOURCE_PATH} OPTIONS -DOVERRIDE_GIT_DESCRIBE=v${VERSION}-0-g0123456789 + -DDUCKDB_EXPLICIT_PLATFORM=${DUCKDB_EXPLICIT_PLATFORM} -DDUCKDB_EXPLICIT_VERSION=v${VERSION} - -DBUILD_UNITTESTS=OFF + "-DBUILD_EXTENSIONS=${BUILD_EXTENSIONS}" -DBUILD_SHELL=FALSE - "${BUILD_EXTENSIONS_FLAG}" - -DENABLE_EXTENSION_AUTOLOADING=1 + -DBUILD_UNITTESTS=OFF + -DCMAKE_JOB_POOL_LINK=console # Serialize linking to avoid OOM -DENABLE_EXTENSION_AUTOINSTALL=1 - -DWITH_INTERNAL_ICU=OFF + -DENABLE_EXTENSION_AUTOLOADING=1 -DENABLE_SANITIZER=OFF -DENABLE_THREAD_SANITIZER=OFF -DENABLE_UBSAN=OFF + "-DEXTENSION_CONFIG_BASE_DIR=${SOURCE_PATH}/OUT_OF_TREE" + "-DEXTENSION_STATIC_BUILD=${EXTENSION_STATIC_BUILD}" + "-DINSTALL_CMAKE_DIR:STRING=share/${PORT}" + -DWITH_INTERNAL_ICU=OFF ) - vcpkg_cmake_install() +vcpkg_cmake_config_fixup() -if(EXISTS "${CURRENT_PACKAGES_DIR}/CMake") - vcpkg_cmake_config_fixup(CONFIG_PATH CMake) -elseif(EXISTS "${CURRENT_PACKAGES_DIR}/lib/cmake/DuckDB") - vcpkg_cmake_config_fixup(CONFIG_PATH "lib/cmake/DuckDB") -elseif(EXISTS "${CURRENT_PACKAGES_DIR}/lib/cmake/${PORT}") - vcpkg_cmake_config_fixup(CONFIG_PATH "lib/cmake/${PORT}") +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + foreach(path IN ITEMS duckdb.h duckdb/common/winapi.hpp) + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/${path}" "#ifdef DUCKDB_STATIC_BUILD" "#if 1") + endforeach() endif() -if(VCPKG_LIBRARY_LINKAGE STREQUAL static) - file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin") -endif() - -file(REMOVE_RECURSE - "${CURRENT_PACKAGES_DIR}/include/duckdb/main/capi/header_generation" -) - file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") +# empty dirs +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/duckdb/main/capi/header_generation") file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/duckdb/storage/serialization") + file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") -vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") + +set(third_party_licenses "") +file(COPY_FILE "${SOURCE_PATH}/third_party/thrift/thrift/LICENSE" "${SOURCE_PATH}/third_party/thrift/LICENSE") +file(GLOB third_party_files "${SOURCE_PATH}/third_party/*") +foreach(maybe_directory IN LISTS extension_dirs third_party_files) + if(IS_DIRECTORY "${maybe_directory}") + cmake_path(GET maybe_directory FILENAME package) + set(license_file "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/## ${package} license") + file(COPY_FILE "${maybe_directory}/LICENSE" "${license_file}") + list(APPEND third_party_licenses "${license_file}") + endif() +endforeach() +vcpkg_install_copyright( + COMMENT [[ +Duckdb contains copyies of many third-party packages which are subject to +separate license terms. +]] + FILE_LIST + "${SOURCE_PATH}/LICENSE" + ${third_party_licenses} +) diff --git a/ports/duckdb/usage b/ports/duckdb/usage index 97870d4d2a..d014b05396 100644 --- a/ports/duckdb/usage +++ b/ports/duckdb/usage @@ -1,4 +1,4 @@ -The package DuckDB provides CMake targets: +duckdb provides CMake targets: - find_package(DuckDB CONFIG REQUIRED) - target_link_libraries(main PRIVATE $,duckdb,duckdb_static>) + find_package(DuckDB CONFIG REQUIRED) + target_link_libraries(main PRIVATE $,duckdb,duckdb_static>) diff --git a/ports/duckdb/vcpkg.json b/ports/duckdb/vcpkg.json index df1ca3a966..10623e5994 100644 --- a/ports/duckdb/vcpkg.json +++ b/ports/duckdb/vcpkg.json @@ -1,10 +1,11 @@ { "name": "duckdb", "version": "1.4.1", + "port-version": 1, "description": "High-performance in-process analytical database system", "homepage": "https://duckdb.org", - "license": "MIT", - "supports": "!(uwp | android | (windows & arm64))", + "license": null, + "supports": "!uwp", "dependencies": [ { "name": "vcpkg-cmake", @@ -23,14 +24,24 @@ "description": "Statically link the excel extension into DuckDB", "dependencies": [ "expat", - "minizip-ng" + { + "name": "minizip-ng", + "default-features": false + } ] }, "httpfs": { "description": "Statically link the httpfs extension into DuckDB", "dependencies": [ - "curl", - "openssl" + { + "name": "curl", + "default-features": false + }, + "openssl", + { + "name": "zlib", + "platform": "mingw" + } ] }, "iceberg": { diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 10660bdb15..c30606a437 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -945,6 +945,19 @@ vcpkg-ci-curl:x64-windows-static-md=pass vcpkg-ci-curl:x64-windows-static=pass vcpkg-ci-curl:x64-windows=pass vcpkg-ci-curl:x86-windows=pass +vcpkg-ci-duckdb:arm-neon-android=pass +vcpkg-ci-duckdb:arm64-android=pass +vcpkg-ci-duckdb:arm64-osx=pass +vcpkg-ci-duckdb:arm64-windows-static-md=pass +vcpkg-ci-duckdb:arm64-windows=pass +vcpkg-ci-duckdb:x64-android=pass +vcpkg-ci-duckdb:x64-linux=pass +vcpkg-ci-duckdb:x64-osx=pass +vcpkg-ci-duckdb:x64-windows-release=pass +vcpkg-ci-duckdb:x64-windows-static-md=pass +vcpkg-ci-duckdb:x64-windows-static=pass +vcpkg-ci-duckdb:x64-windows=pass +vcpkg-ci-duckdb:x86-windows=pass vcpkg-ci-ffmpeg:arm-neon-android=pass vcpkg-ci-ffmpeg:arm64-android=pass vcpkg-ci-ffmpeg:arm64-osx=pass diff --git a/scripts/test_ports/vcpkg-ci-duckdb/portfile.cmake b/scripts/test_ports/vcpkg-ci-duckdb/portfile.cmake index 065116c276..74858033ab 100644 --- a/scripts/test_ports/vcpkg-ci-duckdb/portfile.cmake +++ b/scripts/test_ports/vcpkg-ci-duckdb/portfile.cmake @@ -1 +1,21 @@ set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_install() + +if(NOT VCPKG_CROSSCOMPILING) + if(CMAKE_HOST_WIN32) + vcpkg_host_path_list(PREPEND ENV{PATH} "${CURRENT_INSTALLED_DIR}/bin") + elseif(CMAKE_HOST_APPLE) + vcpkg_host_path_list(PREPEND ENV{DYLD_LIBRARY_PATH} "${CURRENT_INSTALLED_DIR}/lib") + else() + vcpkg_host_path_list(PREPEND ENV{LD_LIBRARY_PATH} "${CURRENT_INSTALLED_DIR}/lib") + endif() + vcpkg_execute_required_process( + COMMAND "${CURRENT_PACKAGES_DIR}/bin/${PORT}/main" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME release-test + ) +endif() diff --git a/scripts/test_ports/vcpkg-ci-duckdb/project/CMakeLists.txt b/scripts/test_ports/vcpkg-ci-duckdb/project/CMakeLists.txt new file mode 100644 index 0000000000..3c51fa26e5 --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-duckdb/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.16) +project(duckdb-test C CXX) + +add_executable(main main.c) + +find_package(DuckDB CONFIG REQUIRED) +if(BUILD_SHARED_LIBS) + add_library(imported::duckdb ALIAS duckdb) +else() + add_library(imported::duckdb ALIAS duckdb_static) +endif() +target_link_libraries(main PRIVATE imported::duckdb) +install(TARGETS main RUNTIME DESTINATION bin/vcpkg-ci-duckdb) diff --git a/scripts/test_ports/vcpkg-ci-duckdb/project/main.c b/scripts/test_ports/vcpkg-ci-duckdb/project/main.c new file mode 100644 index 0000000000..6dfa22b662 --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-duckdb/project/main.c @@ -0,0 +1,33 @@ +#include +#include + +int main() +{ + duckdb_database db; + if (duckdb_open(NULL, &db) == DuckDBError) { + printf("open failed\n"); + return 1; + } + duckdb_connection con; + if (duckdb_connect(db, &con) == DuckDBError) { + printf("connect failed\n"); + return 2; + } + const char* query_icu = + "LOAD icu;" + "SELECT current_localtime();" + "PRAGMA collations;" + "SELECT list(collname) FROM pragma_collations();" + ; + duckdb_result result; + if (duckdb_query(con, query_icu, &result) == DuckDBError) { + printf("icu query failed: %s\n", duckdb_result_error(&result)); + return 3; + } + else { + printf("success\n"); + } + duckdb_disconnect(&con); + duckdb_close(&db); + return 0; +} diff --git a/scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json b/scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json index 15263611eb..6c113d7bd4 100644 --- a/scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json +++ b/scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json @@ -1,6 +1,6 @@ { "name": "vcpkg-ci-duckdb", - "version": "0.0.1", + "version-string": "ci", "description": "Test the icu feature", "license": "BSD-3-Clause", "dependencies": [ @@ -9,6 +9,10 @@ "features": [ "icu" ] + }, + { + "name": "vcpkg-cmake", + "host": true } ] } diff --git a/versions/baseline.json b/versions/baseline.json index 58c461b09b..f12de00e0b 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -2558,7 +2558,7 @@ }, "duckdb": { "baseline": "1.4.1", - "port-version": 0 + "port-version": 1 }, "duckx": { "baseline": "1.2.2", diff --git a/versions/d-/duckdb.json b/versions/d-/duckdb.json index 3a03f6217a..45fc64bc82 100644 --- a/versions/d-/duckdb.json +++ b/versions/d-/duckdb.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "15682ca51a866ca6a25748b525a2880f02d69d8d", + "version": "1.4.1", + "port-version": 1 + }, { "git-tree": "e6c697b0852430ffdff41e631a0ccd9144dc6845", "version": "1.4.1",