diff --git a/ports/duckdb/bigobj.patch b/ports/duckdb/bigobj.patch new file mode 100644 index 00000000000000..e81bb2d34e34a7 --- /dev/null +++ b/ports/duckdb/bigobj.patch @@ -0,0 +1,14 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 2624479..4496860 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -727,6 +727,9 @@ function(add_library_unity NAME MODE) + enable_unity_build(${NAME} SRCS) + endif() + add_library(${NAME} OBJECT ${SRCS}) ++ if(MSVC) ++ target_compile_options(${NAME} PRIVATE /bigobj) ++ endif() + endfunction() + + function(disable_target_warnings NAME) diff --git a/ports/duckdb/portfile.cmake b/ports/duckdb/portfile.cmake new file mode 100644 index 00000000000000..5e687193e59b10 --- /dev/null +++ b/ports/duckdb/portfile.cmake @@ -0,0 +1,72 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO duckdb/duckdb + REF v${VERSION} + SHA512 f5bca7a3b6f763b4b1a1f39e53c6f818925584fb44886e291ac3546fe50de545e80d16b4120f0126020e44b601a1b9193f4faad7a3dc8799cda843b1965038f2 + HEAD_REF master + PATCHES + bigobj.patch + unvendor_icu_and_find_dependency.patch # https://github.com/duckdb/duckdb/pull/16176 + https://github.com/duckdb/duckdb/pull/16197 +) + +# Remove vendored dependencies which are not properly namespaced +file(REMOVE_RECURSE + "${SOURCE_PATH}/third_party/catch" + "${SOURCE_PATH}/third_party/imdb" + "${SOURCE_PATH}/third_party/snowball" + "${SOURCE_PATH}/third_party/tpce-tool" +) + +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" DUCKDB_BUILD_STATIC) +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" DUCKDB_BUILD_DYNAMIC) + +set(EXTENSION_LIST "autocomplete;httpfs;icu;json;tpcds;tpch") +set(BUILD_EXTENSIONS "") +foreach(EXT ${EXTENSION_LIST}) + if(${EXT} IN_LIST FEATURES) + list(APPEND BUILD_EXTENSIONS ${EXT}) + 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} + -DDUCKDB_EXPLICIT_VERSION=v${VERSION} + -DBUILD_UNITTESTS=OFF + -DBUILD_SHELL=FALSE + "${BUILD_EXTENSIONS_FLAG}" + -DENABLE_EXTENSION_AUTOLOADING=1 + -DENABLE_EXTENSION_AUTOINSTALL=1 + -DWITH_INTERNAL_ICU=OFF + -DENABLE_SANITIZER=OFF + -DENABLE_THREAD_SANITIZER=OFF + -DENABLE_UBSAN=OFF +) + +vcpkg_cmake_install() + +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}") +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") +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") diff --git a/ports/duckdb/unvendor_icu_and_find_dependency.patch b/ports/duckdb/unvendor_icu_and_find_dependency.patch new file mode 100644 index 00000000000000..204015b048d8b6 --- /dev/null +++ b/ports/duckdb/unvendor_icu_and_find_dependency.patch @@ -0,0 +1,62 @@ +diff --git a/DuckDBConfig.cmake.in b/DuckDBConfig.cmake.in +index ef61b6b..2e5270e 100644 +--- a/DuckDBConfig.cmake.in ++++ b/DuckDBConfig.cmake.in +@@ -4,6 +4,12 @@ + # DuckDB_INCLUDE_DIRS - include directories for DuckDB + # DuckDB_LIBRARIES - libraries to link against + ++include(CMakeFindDependencyMacro) ++find_dependency(Threads) ++if(NOT @WITH_INTERNAL_ICU@) ++ find_dependency(ICU COMPONENTS i18n uc) ++endif() ++ + # Compute paths + get_filename_component(DuckDB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + set(DuckDB_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@") +diff --git a/extension/icu/CMakeLists.txt b/extension/icu/CMakeLists.txt +index 65cbe38..6a38f93 100644 +--- a/extension/icu/CMakeLists.txt ++++ b/extension/icu/CMakeLists.txt +@@ -3,10 +3,13 @@ cmake_minimum_required(VERSION 2.8.12...3.29) + project(ICUExtension) + + include_directories(include) +-include_directories(third_party/icu/common) +-include_directories(third_party/icu/i18n) ++option(WITH_INTERNAL_ICU "Use vendored copy of icu" TRUE) ++if(WITH_INTERNAL_ICU) ++ include_directories(third_party/icu/common) ++ include_directories(third_party/icu/i18n) + +-add_subdirectory(third_party) ++ add_subdirectory(third_party) ++endif() + + set(ICU_EXTENSION_FILES + ${ICU_LIBRARY_FILES} +@@ -26,6 +29,10 @@ set(ICU_EXTENSION_FILES + + build_static_extension(icu ${ICU_EXTENSION_FILES}) + link_threads(icu_extension) ++if(NOT WITH_INTERNAL_ICU) ++ find_package(ICU COMPONENTS i18n uc REQUIRED) ++ target_link_libraries(icu_extension ICU::i18n ICU::uc) ++endif() + disable_target_warnings(icu_extension) + set(PARAMETERS "-no-warnings") + build_loadable_extension(icu ${PARAMETERS} ${ICU_EXTENSION_FILES}) +diff --git a/extension/icu/icu-datefunc.cpp b/extension/icu/icu-datefunc.cpp +index 995f594..a8092b6 100644 +--- a/extension/icu/icu-datefunc.cpp ++++ b/extension/icu/icu-datefunc.cpp +@@ -72,7 +72,7 @@ unique_ptr ICUDateFunc::Bind(ClientContext &context, ScalarFunctio + } + + void ICUDateFunc::SetTimeZone(icu::Calendar *calendar, const string_t &tz_id) { +- auto tz = icu_66::TimeZone::createTimeZone(icu::UnicodeString::fromUTF8(icu::StringPiece(tz_id.GetString()))); ++ auto tz = icu::TimeZone::createTimeZone(icu::UnicodeString::fromUTF8(icu::StringPiece(tz_id.GetString()))); + if (*tz == icu::TimeZone::getUnknown()) { + delete tz; + throw NotImplementedException("Unknown TimeZone '%s'", tz_id.GetString()); diff --git a/ports/duckdb/usage b/ports/duckdb/usage new file mode 100644 index 00000000000000..97870d4d2ad1d9 --- /dev/null +++ b/ports/duckdb/usage @@ -0,0 +1,4 @@ +The package DuckDB provides CMake targets: + + 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 new file mode 100644 index 00000000000000..0ebab7d1069af9 --- /dev/null +++ b/ports/duckdb/vcpkg.json @@ -0,0 +1,47 @@ +{ + "name": "duckdb", + "version": "1.2.0", + "description": "High-performance in-process analytical database system", + "homepage": "https://duckdb.org", + "license": "MIT", + "supports": "!(uwp | android | (windows & arm64))", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "features": { + "autocomplete": { + "description": "Statically link the autocomplete extension into DuckDB" + }, + "httpfs": { + "description": "Statically link the httpfs extension into DuckDB", + "dependencies": [ + "openssl" + ] + }, + "icu": { + "description": "Statically link the icu extension into DuckDB", + "dependencies": [ + { + "name": "icu", + "default-features": false + } + ] + }, + "json": { + "description": "Statically link the json extension into DuckDB" + }, + "tpcds": { + "description": "Statically link the tpcds extension into DuckDB" + }, + "tpch": { + "description": "Statically link the tpch extension into DuckDB" + } + } +} diff --git a/versions/baseline.json b/versions/baseline.json index 02c3f6475ba282..cf75d96ac03f60 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -2412,6 +2412,10 @@ "baseline": "1.21", "port-version": 0 }, + "duckdb": { + "baseline": "1.2.0", + "port-version": 0 + }, "duckx": { "baseline": "1.2.2", "port-version": 1 diff --git a/versions/d-/duckdb.json b/versions/d-/duckdb.json new file mode 100644 index 00000000000000..faf6ece81d9546 --- /dev/null +++ b/versions/d-/duckdb.json @@ -0,0 +1,9 @@ +{ + "versions": [ + { + "git-tree": "02e6c406fafcd36a23c51998c14c1e95653b2254", + "version": "1.2.0", + "port-version": 0 + } + ] +}