Use duckdb custom port

This commit is contained in:
Martin Raiber 2025-07-12 13:45:11 +02:00
parent ab2b76af91
commit c86b432469
10 changed files with 270 additions and 40 deletions

View File

@ -27,31 +27,6 @@ set(APIGEN_SCHEMAS
SessionCheckResp # Must be last
)
# Checkout https://github.com/duckdb/duckdb-ui at revision 6cbef805772b2cc974b86ab01da3906a0d365fdb into subdir duckdb-ui, don't run CMake on it
set(DUCKDB_UI_REVISION "6cbef805772b2cc974b86ab01da3906a0d365fdb")
include(FetchContent)
FetchContent_Declare(
duckdb-ui
GIT_REPOSITORY https://github.com/duckdb/duckdb-ui.git
GIT_TAG ${DUCKDB_UI_REVISION}
SOURCE_DIR ${CMAKE_SOURCE_DIR}/duckdb-ui
SOURCE_SUBDIR "does-not-exist"
)
FetchContent_MakeAvailable(duckdb-ui)
set(DUCKDB_SRCS "duckdb-ui/src/event_dispatcher.cpp"
"duckdb-ui/src/http_server.cpp"
"duckdb-ui/src/settings.cpp"
"duckdb-ui/src/state.cpp"
"duckdb-ui/src/ui_extension.cpp"
"duckdb-ui/src/watcher.cpp"
"duckdb-ui/src/utils/encoding.cpp"
"duckdb-ui/src/utils/env.cpp"
"duckdb-ui/src/utils/helpers.cpp"
"duckdb-ui/src/utils/md_helpers.cpp"
"duckdb-ui/src/utils/serialization.cpp"
)
add_custom_target(apigen)
foreach(SCHEMA ${APIGEN_SCHEMAS})
@ -127,7 +102,7 @@ add_executable(hs5
wwwgen/www_files.cpp
src/DuckDbFs.cpp
${SCHEMA_SOURCES}
${DUCKDB_SRCS})
)
set_property(TARGET hs5 PROPERTY CXX_STANDARD 20)
@ -151,11 +126,7 @@ find_path(TCLAP_INCLUDE_DIRS "tclap/Arg.h")
target_include_directories(hs5 PRIVATE ${TCLAP_INCLUDE_DIRS})
target_link_libraries(hs5 PRIVATE $<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static> Folly::folly Folly::folly_deps Folly::follybenchmark Folly::folly_test_util
proxygen::proxygen proxygen::proxygencurl proxygen::proxygenhttpserver expat::expat unofficial-sodium::sodium SqliteCppGen::SqliteCppGen nlohmann_json::nlohmann_json fmt::fmt
$<IF:$<TARGET_EXISTS:duckdb>,duckdb,duckdb_static>)
# DuckDB UI
target_compile_definitions(hs5 PRIVATE UI_EXTENSION_SEQ_NUM="1" UI_EXTENSION_GIT_SHA="${DUCKDB_UI_REVISION}")
target_include_directories(hs5 PRIVATE ${CMAKE_SOURCE_DIR}/duckdb-ui/src/include ${CMAKE_SOURCE_DIR}/duckdb-ui/third_party/httplib)
$<IF:$<TARGET_EXISTS:duckdb>,duckdb,duckdb_static> )
target_compile_features(hs5 PUBLIC cxx_std_20)

View File

@ -0,0 +1,25 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 981de80..64e6298 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@ if (EMSCRIPTEN)
endif()
# Dependencies from VCPKG
-find_package(EXPAT REQUIRED)
+find_package(expat REQUIRED)
find_package(ZLIB REQUIRED)
find_package(minizip-ng CONFIG REQUIRED)
@@ -30,9 +30,9 @@ set(PARAMETERS "-warnings")
build_loadable_extension(${TARGET_NAME} ${PARAMETERS} ${EXTENSION_SOURCES}
${NUMFORMAT_OBJECT_FILES})
-target_link_libraries(${EXTENSION_NAME} EXPAT::EXPAT MINIZIP::minizip-ng
+target_link_libraries(${EXTENSION_NAME} expat::expat MINIZIP::minizip-ng
ZLIB::ZLIB)
-target_link_libraries(${LOADABLE_EXTENSION_NAME} EXPAT::EXPAT
+target_link_libraries(${LOADABLE_EXTENSION_NAME} expat::expat
MINIZIP::minizip-ng ZLIB::ZLIB)
install(

View File

@ -0,0 +1,54 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a8c5ecd0a4..9450804eb5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1295,7 +1295,29 @@ endforeach()
# Load extensions passed through cmake config var
foreach(EXT IN LISTS BUILD_EXTENSIONS)
if(NOT "${EXT}" STREQUAL "")
- duckdb_extension_load(${EXT})
+ if("${EXT}" STREQUAL "httpfs")
+ duckdb_extension_load(${EXT}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/httpfs
+ INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/httpfs/extension/httpfs/include
+ )
+ elseif("${EXT}" STREQUAL "excel")
+ duckdb_extension_load(${EXT}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/excel
+ INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/excel/src/excel/include
+ )
+ elseif("${EXT}" STREQUAL "ui")
+ duckdb_extension_load(${EXT}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/ui
+ INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/ui/src/include
+ )
+ elseif("${EXT}" STREQUAL "ducklake")
+ duckdb_extension_load(${EXT}
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/ducklake
+ INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extension/ducklake/src/include
+ )
+ else()
+ duckdb_extension_load(${EXT})
+ endif()
endif()
endforeach()
diff --git a/DuckDBConfig.cmake.in b/DuckDBConfig.cmake.in
index 7c5ce31106..efb9ec3c5a 100644
--- a/DuckDBConfig.cmake.in
+++ b/DuckDBConfig.cmake.in
@@ -10,6 +10,14 @@ if(NOT @WITH_INTERNAL_ICU@)
find_dependency(ICU COMPONENTS i18n uc data)
endif()
+set(EXTENSION_LIST "@BUILD_EXTENSIONS@")
+list(FIND EXTENSION_LIST "excel" EXCEL_INDEX)
+
+if(EXCEL_INDEX GREATER_EQUAL 0)
+ find_dependency(expat CONFIG)
+ find_dependency(minizip-ng CONFIG)
+endif()
+
# Compute paths
get_filename_component(DuckDB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
set(DuckDB_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")

View File

@ -0,0 +1,117 @@
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO duckdb/duckdb
REF v${VERSION}
SHA512 8e725d94cfd81989d4f6d206728188e5b290ce3a7f71d89adc6beed91957f965180d34d69d9099d04e35fc402b389de56184875397b29286789bd9c5655595c5
HEAD_REF main
PATCHES
extensions.patch
)
# 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"
)
if("excel" IN_LIST FEATURES)
vcpkg_from_github(
OUT_SOURCE_PATH DUCKDB_EXCCEL_SOURCE_PATH
REPO duckdb/duckdb-excel
REF 0f1df3b14ad6458b90b52c5f625b409a44648c05
SHA512 9a2ea6e14438aaeda812fe52156401b44293cd25ddede2b79753ca67f1a57e72e54aabb41d811e44444686de1f5b45d367aa5ebb7ded5991a6db8650edf05416
HEAD_REF main
PATCHES
excel-libname.patch
)
file(RENAME "${DUCKDB_EXCCEL_SOURCE_PATH}" "${SOURCE_PATH}/extension/excel")
endif()
if("httpfs" IN_LIST FEATURES)
vcpkg_from_github(
OUT_SOURCE_PATH DUCKDB_HTTPFS_SOURCE_PATH
REPO duckdb/duckdb_httpfs
REF b17b647ea893c3dd9c7e57f66d249aa48e3d4c3f
SHA512 4c8f70e6cfa482b9ebea955f0c63a1a738f4daa6ebba54171ef17a756b84aa051fd6b888fe86c38d1078ee23e39a3678fedeab35f1da84a80f52192753c5ad3b
HEAD_REF main
)
file(RENAME "${DUCKDB_HTTPFS_SOURCE_PATH}" "${SOURCE_PATH}/extension/httpfs")
endif()
if("ui" IN_LIST FEATURES)
vcpkg_from_github(
OUT_SOURCE_PATH DUCKDB_UI_SOURCE_PATH
REPO duckdb/duckdb-ui
REF aab29c57f4133873f9ce70cdc3a34b0f5ab989b4
SHA512 a20b6a21701eafeba46acba376d7cf1d218e1534d710915eac4eef44e08f453ce2543dc0b12bcd642e81efece376145538728373cebdae20baadc8b09508a16b
HEAD_REF main
)
file(RENAME "${DUCKDB_UI_SOURCE_PATH}" "${SOURCE_PATH}/extension/ui")
endif()
if("ducklake" IN_LIST FEATURES)
vcpkg_from_github(
OUT_SOURCE_PATH DUCKDB_LAKE_SOURCE_PATH
REPO duckdb/ducklake
REF 6865d6951569a34bd992be894e08be5af6af0a85
SHA512 321f54aef0126dccd9fec6e16bf746649bc967630c8a5877c543efd7fc25c3568668e63d50ae02bfdf88ce9546ebae3c661eb94a94ab814a0299ef097272a457
HEAD_REF main
)
file(RENAME "${DUCKDB_LAKE_SOURCE_PATH}" "${SOURCE_PATH}/extension/ducklake")
endif()
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" DUCKDB_BUILD_STATIC)
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" DUCKDB_BUILD_DYNAMIC)
set(EXTENSION_LIST "autocomplete;excel;httpfs;icu;json;tpcds;tpch;ui;ducklake")
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")

View File

@ -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>)

View File

@ -0,0 +1,60 @@
{
"name": "duckdb-custom",
"version": "1.3.2",
"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"
},
"excel": {
"description": "Statically link the excel extension into DuckDB",
"dependencies": [
"expat",
"minizip-ng"
]
},
"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"
},
"ui": {
"description": "Statically link the duckdb-ui extension into DuckDB"
},
"ducklake": {
"description": "Statically link the ducklake extension into DuckDB"
}
}
}

View File

@ -219,7 +219,7 @@ bool DuckDbFs::ListFiles(const std::string &directory, const std::function<void(
}
for (const auto &file : glob_res) {
callback(file, false);
callback(file.path, false);
}
return true;
@ -287,7 +287,7 @@ ParsedHs5Url DuckDbFs::Hs5UrlParse(std::string url)
return {prefix, bucket, key};
}
duckdb::vector<std::string> DuckDbFs::Glob(const std::string &glob_pattern, duckdb::FileOpener *opener)
duckdb::vector<duckdb::OpenFileInfo> DuckDbFs::Glob(const std::string &glob_pattern, duckdb::FileOpener *opener)
{
const auto parsedUrl = Hs5UrlParse(glob_pattern);
@ -320,7 +320,7 @@ duckdb::vector<std::string> DuckDbFs::Glob(const std::string &glob_pattern, duck
std::string lastOutputKeyStr;
duckdb::vector<std::string> ret;
duckdb::vector<duckdb::OpenFileInfo> ret;
while(true)
{

View File

@ -86,7 +86,7 @@ public:
duckdb::FileOpener *opener) override;
duckdb::vector<std::string> Glob(const std::string &glob_pattern, duckdb::FileOpener *opener) override;
duckdb::vector<duckdb::OpenFileInfo> Glob(const std::string &glob_pattern, duckdb::FileOpener *opener) override;
static ParsedHs5Url Hs5UrlParse(std::string url);

View File

@ -32,7 +32,6 @@
#include "config.h"
#include "StaticHandler.h"
#include "DuckDbFs.h"
#include "ui_extension.hpp"
duckdb::DuckDB& getDuckDb()
{
@ -234,8 +233,6 @@ int realMain(int argc, char* argv[])
auto& fs =(getDuckDb().instance)->GetFileSystem();
fs.RegisterSubSystem(duckdb::make_uniq<DuckDbFs>(sfs, FLAGS_bucket_versioning));
getDuckDb().LoadExtension<duckdb::UiExtension>();
auto res = con.Query("SET ui_local_port = "+std::to_string(FLAGS_duckdb_port));
if(res->HasError())
{

View File

@ -15,7 +15,9 @@
"fmt",
"argon2",
"tclap",
"duckdb"
{
"name": "duckdb-custom",
"features": ["autocomplete", "excel", "httpfs", "icu", "json", "tpcds", "tpch","ui","ducklake"]
}
]
}