Skip to content

Commit 8779c20

Browse files
committed
feat: add cpr and curl dependency for REST catalog
1 parent 3b945a0 commit 8779c20

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed

cmake_modules/IcebergThirdpartyToolchain.cmake

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,197 @@ function(resolve_zlib_dependency)
430430

431431
endfunction()
432432

433+
# ----------------------------------------------------------------------
434+
# CURL
435+
436+
function(resolve_curl_dependency)
437+
prepare_fetchcontent()
438+
439+
set(BUILD_CURL_EXE
440+
OFF
441+
CACHE BOOL "" FORCE)
442+
set(BUILD_TESTING
443+
OFF
444+
CACHE BOOL "" FORCE)
445+
set(CURL_ENABLE_EXPORT_TARGET
446+
OFF
447+
CACHE BOOL "" FORCE)
448+
set(BUILD_SHARED_LIBS
449+
OFF
450+
CACHE BOOL "" FORCE)
451+
set(CURL_STATICLIB
452+
ON
453+
CACHE BOOL "" FORCE)
454+
set(HTTP_ONLY
455+
ON
456+
CACHE BOOL "" FORCE)
457+
set(CURL_DISABLE_LDAP
458+
ON
459+
CACHE BOOL "" FORCE)
460+
set(CURL_DISABLE_LDAPS
461+
ON
462+
CACHE BOOL "" FORCE)
463+
set(CURL_DISABLE_RTSP
464+
ON
465+
CACHE BOOL "" FORCE)
466+
set(CURL_DISABLE_FTP
467+
ON
468+
CACHE BOOL "" FORCE)
469+
set(CURL_DISABLE_FILE
470+
ON
471+
CACHE BOOL "" FORCE)
472+
set(CURL_DISABLE_TELNET
473+
ON
474+
CACHE BOOL "" FORCE)
475+
set(CURL_DISABLE_DICT
476+
ON
477+
CACHE BOOL "" FORCE)
478+
set(CURL_DISABLE_TFTP
479+
ON
480+
CACHE BOOL "" FORCE)
481+
set(CURL_DISABLE_GOPHER
482+
ON
483+
CACHE BOOL "" FORCE)
484+
set(CURL_DISABLE_POP3
485+
ON
486+
CACHE BOOL "" FORCE)
487+
set(CURL_DISABLE_IMAP
488+
ON
489+
CACHE BOOL "" FORCE)
490+
set(CURL_DISABLE_SMTP
491+
ON
492+
CACHE BOOL "" FORCE)
493+
set(CURL_DISABLE_SMB
494+
ON
495+
CACHE BOOL "" FORCE)
496+
set(CURL_CA_BUNDLE
497+
"auto"
498+
CACHE STRING "" FORCE)
499+
set(USE_LIBIDN2
500+
OFF
501+
CACHE BOOL "" FORCE)
502+
503+
fetchcontent_declare(CURL
504+
${FC_DECLARE_COMMON_OPTIONS}
505+
GIT_REPOSITORY https://github.com/curl/curl.git
506+
GIT_TAG curl-8_11_0
507+
FIND_PACKAGE_ARGS
508+
NAMES
509+
CURL
510+
CONFIG)
511+
512+
fetchcontent_makeavailable(CURL)
513+
514+
if(curl_SOURCE_DIR)
515+
if(NOT TARGET CURL::libcurl)
516+
add_library(CURL::libcurl INTERFACE IMPORTED)
517+
target_link_libraries(CURL::libcurl INTERFACE libcurl_static)
518+
target_include_directories(CURL::libcurl INTERFACE ${curl_BINARY_DIR}/include
519+
${curl_SOURCE_DIR}/include)
520+
endif()
521+
522+
set(CURL_VENDORED TRUE)
523+
set_target_properties(libcurl_static PROPERTIES OUTPUT_NAME "iceberg_vendored_curl"
524+
POSITION_INDEPENDENT_CODE ON)
525+
add_library(Iceberg::libcurl_static ALIAS libcurl_static)
526+
install(TARGETS libcurl_static
527+
EXPORT iceberg_targets
528+
RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR}"
529+
ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR}"
530+
LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR}")
531+
message(STATUS "Use vendored CURL")
532+
else()
533+
set(CURL_VENDORED FALSE)
534+
list(APPEND ICEBERG_SYSTEM_DEPENDENCIES CURL)
535+
message(STATUS "Use system CURL")
536+
endif()
537+
538+
set(ICEBERG_SYSTEM_DEPENDENCIES
539+
${ICEBERG_SYSTEM_DEPENDENCIES}
540+
PARENT_SCOPE)
541+
set(CURL_VENDORED
542+
${CURL_VENDORED}
543+
PARENT_SCOPE)
544+
endfunction()
545+
546+
# ----------------------------------------------------------------------
547+
# cpr
548+
549+
function(resolve_cpr_dependency)
550+
prepare_fetchcontent()
551+
552+
set(CPR_BUILD_TESTS
553+
OFF
554+
CACHE BOOL "" FORCE)
555+
set(CPR_BUILD_TESTS_SSL
556+
OFF
557+
CACHE BOOL "" FORCE)
558+
set(CPR_ENABLE_SSL
559+
ON
560+
CACHE BOOL "" FORCE)
561+
set(CPR_USE_SYSTEM_CURL
562+
ON
563+
CACHE BOOL "" FORCE)
564+
set(CPR_CURL_NOSIGNAL
565+
ON
566+
CACHE BOOL "" FORCE)
567+
568+
set(CURL_VERSION_STRING
569+
"8.11.0"
570+
CACHE STRING "" FORCE)
571+
set(CURL_LIB
572+
"CURL::libcurl"
573+
CACHE STRING "" FORCE)
574+
575+
fetchcontent_declare(cpr
576+
${FC_DECLARE_COMMON_OPTIONS}
577+
GIT_REPOSITORY https://github.com/libcpr/cpr.git
578+
GIT_TAG 1.11.0
579+
FIND_PACKAGE_ARGS
580+
NAMES
581+
cpr
582+
CONFIG)
583+
584+
# Create a custom install command that does nothing
585+
# function(install)
586+
# # Do nothing - effectively disables install
587+
# endfunction()
588+
589+
fetchcontent_makeavailable(cpr)
590+
591+
# Restore the original install function
592+
# unset(install)
593+
594+
if(cpr_SOURCE_DIR)
595+
if(NOT TARGET cpr::cpr)
596+
add_library(cpr::cpr INTERFACE IMPORTED)
597+
target_link_libraries(cpr::cpr INTERFACE cpr)
598+
target_include_directories(cpr::cpr INTERFACE ${cpr_BINARY_DIR}
599+
${cpr_SOURCE_DIR}/include)
600+
endif()
601+
602+
set(CPR_VENDORED TRUE)
603+
set_target_properties(cpr PROPERTIES OUTPUT_NAME "iceberg_vendored_cpr"
604+
POSITION_INDEPENDENT_CODE ON)
605+
add_library(Iceberg::cpr ALIAS cpr)
606+
install(TARGETS cpr
607+
EXPORT iceberg_targets
608+
RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR}"
609+
ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR}"
610+
LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR}")
611+
else()
612+
set(CPR_VENDORED FALSE)
613+
list(APPEND ICEBERG_SYSTEM_DEPENDENCIES cpr)
614+
endif()
615+
616+
set(ICEBERG_SYSTEM_DEPENDENCIES
617+
${ICEBERG_SYSTEM_DEPENDENCIES}
618+
PARENT_SCOPE)
619+
set(CPR_VENDORED
620+
${CPR_VENDORED}
621+
PARENT_SCOPE)
622+
endfunction()
623+
433624
# ----------------------------------------------------------------------
434625
# Zstd
435626

@@ -450,6 +641,9 @@ resolve_croaring_dependency()
450641
resolve_nlohmann_json_dependency()
451642
resolve_spdlog_dependency()
452643

644+
resolve_curl_dependency()
645+
resolve_cpr_dependency()
646+
453647
if(ICEBERG_BUILD_BUNDLE)
454648
resolve_arrow_dependency()
455649
resolve_avro_dependency()

src/iceberg/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,17 @@ if(ICEBERG_BUILD_BUNDLE)
133133
list(APPEND
134134
ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS
135135
"$<IF:$<TARGET_EXISTS:iceberg_static>,iceberg_static,iceberg_shared>"
136+
"$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>"
137+
"$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>"
136138
"$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>"
137139
"$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>"
138140
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>"
139141
)
140142
list(APPEND
141143
ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS
142144
"$<IF:$<TARGET_EXISTS:iceberg_shared>,iceberg_shared,iceberg_static>"
145+
"$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>"
146+
"$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>"
143147
"$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>"
144148
"$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>"
145149
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>"
@@ -148,13 +152,17 @@ if(ICEBERG_BUILD_BUNDLE)
148152
list(APPEND
149153
ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS
150154
"$<IF:$<TARGET_EXISTS:Iceberg::iceberg_static>,Iceberg::iceberg_static,Iceberg::iceberg_shared>"
155+
"$<IF:$<BOOL:${CURL_VENDORED}>,Iceberg::libcurl_static,$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>>"
156+
"$<IF:$<BOOL:${CPR_VENDORED}>,Iceberg::cpr,$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>>"
151157
"$<IF:$<BOOL:${ARROW_VENDORED}>,Iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>>"
152158
"$<IF:$<BOOL:${ARROW_VENDORED}>,Iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>>"
153159
"$<IF:$<BOOL:${AVRO_VENDORED}>,Iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>>"
154160
)
155161
list(APPEND
156162
ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS
157163
"$<IF:$<TARGET_EXISTS:Iceberg::iceberg_shared>,Iceberg::iceberg_shared,Iceberg::iceberg_static>"
164+
"$<IF:$<BOOL:${CURL_VENDORED}>,Iceberg::libcurl_static,$<IF:$<TARGET_EXISTS:CURL::libcurl>,CURL::libcurl,CURL::libcurl>>"
165+
"$<IF:$<BOOL:${CPR_VENDORED}>,Iceberg::cpr,$<IF:$<TARGET_EXISTS:cpr::cpr>,cpr::cpr,cpr::cpr>>"
158166
"$<IF:$<BOOL:${ARROW_VENDORED}>,Iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>>"
159167
"$<IF:$<BOOL:${ARROW_VENDORED}>,Iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>>"
160168
"$<IF:$<BOOL:${AVRO_VENDORED}>,Iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>>"

0 commit comments

Comments
 (0)