Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[duckdb] new port #43717

Merged
merged 6 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions ports/duckdb/bigobj.patch
Original file line number Diff line number Diff line change
@@ -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)
72 changes: 72 additions & 0 deletions ports/duckdb/portfile.cmake
Original file line number Diff line number Diff line change
@@ -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")
62 changes: 62 additions & 0 deletions ports/duckdb/unvendor_icu_and_find_dependency.patch
Original file line number Diff line number Diff line change
@@ -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<FunctionData> 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());
4 changes: 4 additions & 0 deletions ports/duckdb/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The package DuckDB provides CMake targets:

find_package(DuckDB CONFIG REQUIRED)
target_link_libraries(main PRIVATE $<IF:$<TARGET_EXISTS:duckdb>,duckdb,duckdb_static>)
47 changes: 47 additions & 0 deletions ports/duckdb/vcpkg.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
}
4 changes: 4 additions & 0 deletions versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions versions/d-/duckdb.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"versions": [
{
m-kuhn marked this conversation as resolved.
Show resolved Hide resolved
"git-tree": "02e6c406fafcd36a23c51998c14c1e95653b2254",
"version": "1.2.0",
"port-version": 0
}
]
}