git: 0e1860be09ea - main - ftp/curl-impersonate: New port: Curl with impersonation
Yuri Victorovich <[email protected]> Sun, 02 Aug 2026 00:26:14 +0000
| Newsgroups | gmane.os.freebsd.devel.cvs.ports |
|---|---|
| Message-ID | <[email protected]> |
The branch main has been updated by yuri: URL: https://cgit.FreeBSD.org/ports/commit/?id=0e1860be09eab548118f8e582a3f4e725beafd66 commit 0e1860be09eab548118f8e582a3f4e725beafd66 Author: Yuri Victorovich <[email protected]> AuthorDate: 2026-08-02 00:12:23 +0000 Commit: Yuri Victorovich <[email protected]> CommitDate: 2026-08-02 00:25:50 +0000 ftp/curl-impersonate: New port: Curl with impersonation --- ftp/Makefile | 1 + ftp/curl-impersonate/Makefile | 68 ++++++++++++++++++++++ ftp/curl-impersonate/distinfo | 19 ++++++ ftp/curl-impersonate/files/patch-CMakeLists.txt | 63 ++++++++++++++++++++ .../files/patch-patches_curl.patch | 31 ++++++++++ ftp/curl-impersonate/pkg-descr | 7 +++ ftp/curl-impersonate/pkg-plist | 54 +++++++++++++++++ 7 files changed, 243 insertions(+) diff --git a/ftp/Makefile b/ftp/Makefile index 5c00b9b9cda3..0bd724eeb5b3 100644 --- a/ftp/Makefile +++ b/ftp/Makefile @@ -10,6 +10,7 @@ SUBDIR += cmdftp SUBDIR += coeurl SUBDIR += curl + SUBDIR += curl-impersonate SUBDIR += curlie SUBDIR += curlpp SUBDIR += dmachine diff --git a/ftp/curl-impersonate/Makefile b/ftp/curl-impersonate/Makefile new file mode 100644 index 000000000000..a5ee0f9fcbaf --- /dev/null +++ b/ftp/curl-impersonate/Makefile @@ -0,0 +1,68 @@ +PORTNAME= curl-impersonate +DISTVERSIONPREFIX= v +DISTVERSION= 2.0.0 +CATEGORIES= ftp +MASTER_SITES= https://github.com/google/boringssl/archive/:boringssl \ + https://github.com/google/brotli/archive/refs/tags/:brotli \ + https://github.com/curl/curl/archive/:curl \ + https://github.com/nghttp2/nghttp2/releases/download/v1.63.0/:nghttp2 \ + https://github.com/ngtcp2/ngtcp2/releases/download/v1.20.0/:ngtcp2 \ + https://github.com/ngtcp2/nghttp3/releases/download/v1.15.0/:nghttp3 \ + https://github.com/madler/zlib/releases/download/v1.3.1/:zlib \ + https://github.com/facebook/zstd/releases/download/v1.5.7/:zstd +DISTFILES= ${BORING_SSL_COMMIT}.zip:boringssl \ + curl-8_21_0.tar.gz:curl \ + v1.2.0.tar.gz:brotli \ + nghttp2-1.63.0.tar.bz2:nghttp2 \ + ngtcp2-1.20.0.tar.bz2:ngtcp2 \ + nghttp3-1.15.0.tar.bz2:nghttp3 \ + zlib-1.3.1.tar.gz:zlib \ + zstd-1.5.7.tar.gz:zstd +DIST_SUBDIR= ${PORTNAME} +EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} + +MAINTAINER= [email protected] +COMMENT= Curl with impersonation +WWW= https://curl-impersonate.readthedocs.io/en/latest/ \ + https://github.com/lexiforest/curl-impersonate + +LICENSE= MIT +LICENSE_FILE= ${WRKSRC}/LICENSE + +USES= cmake localbase:ldflags pkgconfig ssl + +USE_GITHUB= yes +GH_ACCOUNT= lexiforest + +BORING_SSL_COMMIT= 156c7b75ae9b8c3b3f847acf264f17594c3859fb + +USE_LDCONFIG= yes + +MAKE_JOBS_UNSAFE= yes + +post-patch: + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/${BORING_SSL_COMMIT}.zip ${WRKSRC}/${BORING_SSL_COMMIT}.zip + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/v1.2.0.tar.gz ${WRKSRC}/brotli-1.2.0.tar.gz + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/curl-8_21_0.tar.gz ${WRKSRC}/curl-8_21_0.tar.gz + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/nghttp2-1.63.0.tar.bz2 ${WRKSRC}/nghttp2-1.63.0.tar.bz2 + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/ngtcp2-1.20.0.tar.bz2 ${WRKSRC}/ngtcp2-1.20.0.tar.bz2 + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/nghttp3-1.15.0.tar.bz2 ${WRKSRC}/nghttp3-1.15.0.tar.bz2 + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/zlib-1.3.1.tar.gz ${WRKSRC}/zlib-1.3.1.tar.gz + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/zstd-1.5.7.tar.gz ${WRKSRC}/zstd-1.5.7.tar.gz + +pre-configure: + @${REINPLACE_CMD} \ + -e 's|https://github.com/madler/zlib/releases/download/v$${ZLIB_VERSION}/zlib-$${ZLIB_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/zlib-$${ZLIB_VERSION}.tar.gz|' \ + -e 's|https://github.com/facebook/zstd/releases/download/v$${ZSTD_VERSION}/zstd-$${ZSTD_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/zstd-$${ZSTD_VERSION}.tar.gz|' \ + -e 's|https://github.com/google/brotli/archive/refs/tags/v$${BROTLI_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/brotli-$${BROTLI_VERSION}.tar.gz|' \ + -e 's|https://github.com/google/boringssl/archive/$${BORINGSSL_COMMIT}.zip|file://$${CMAKE_SOURCE_DIR}/$${BORINGSSL_COMMIT}.zip|' \ + -e 's|https://github.com/nghttp2/nghttp2/releases/download/v$${NGHTTP2_VERSION}/nghttp2-$${NGHTTP2_VERSION}.tar.bz2|file://$${CMAKE_SOURCE_DIR}/nghttp2-$${NGHTTP2_VERSION}.tar.bz2|' \ + -e 's|https://github.com/ngtcp2/ngtcp2/releases/download/v$${NGTCP2_VERSION}/ngtcp2-$${NGTCP2_VERSION}.tar.bz2|file://$${CMAKE_SOURCE_DIR}/ngtcp2-$${NGTCP2_VERSION}.tar.bz2|' \ + -e 's|https://github.com/ngtcp2/nghttp3/releases/download/v$${NGHTTP3_VERSION}/nghttp3-$${NGHTTP3_VERSION}.tar.bz2|file://$${CMAKE_SOURCE_DIR}/nghttp3-$${NGHTTP3_VERSION}.tar.bz2|' \ + -e 's|https://github.com/curl/curl/archive/$${CURL_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/$${CURL_VERSION}.tar.gz|' \ + ${WRKSRC}/CMakeLists.txt + +post-install: + @${RM} -r ${STAGEDIR}${PREFIX}/lib/CMakeFiles + +.include <bsd.port.mk> diff --git a/ftp/curl-impersonate/distinfo b/ftp/curl-impersonate/distinfo new file mode 100644 index 000000000000..6efb15b9754b --- /dev/null +++ b/ftp/curl-impersonate/distinfo @@ -0,0 +1,19 @@ +TIMESTAMP = 1785626016 +SHA256 (curl-impersonate/156c7b75ae9b8c3b3f847acf264f17594c3859fb.zip) = 450e169b284697c6eafe523cb7679f4221fbe1a0993f773a566c33b188762844 +SIZE (curl-impersonate/156c7b75ae9b8c3b3f847acf264f17594c3859fb.zip) = 80313844 +SHA256 (curl-impersonate/curl-8_21_0.tar.gz) = ec753aa6f408a3ca9f0d6d5f7a77417aecd1544db13c03ae5d443612bf367364 +SIZE (curl-impersonate/curl-8_21_0.tar.gz) = 3592963 +SHA256 (curl-impersonate/v1.2.0.tar.gz) = 816c96e8e8f193b40151dad7e8ff37b1221d019dbcb9c35cd3fadbfe6477dfec +SIZE (curl-impersonate/v1.2.0.tar.gz) = 646315 +SHA256 (curl-impersonate/nghttp2-1.63.0.tar.bz2) = 607b174554d22a828bc532d1d734fe0f729b5d5ed207f2f12e96a62e83f29c55 +SIZE (curl-impersonate/nghttp2-1.63.0.tar.bz2) = 2012107 +SHA256 (curl-impersonate/ngtcp2-1.20.0.tar.bz2) = 871ec97ad86803cf312901b0c393b0ee70163e25a87c9b2894d1234341ce4e97 +SIZE (curl-impersonate/ngtcp2-1.20.0.tar.bz2) = 898205 +SHA256 (curl-impersonate/nghttp3-1.15.0.tar.bz2) = c6c491a52804814098e446630e6efc459afc0d3da7952ffe6cbdc0b3f99b2b62 +SIZE (curl-impersonate/nghttp3-1.15.0.tar.bz2) = 519681 +SHA256 (curl-impersonate/zlib-1.3.1.tar.gz) = 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23 +SIZE (curl-impersonate/zlib-1.3.1.tar.gz) = 1512791 +SHA256 (curl-impersonate/zstd-1.5.7.tar.gz) = eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 +SIZE (curl-impersonate/zstd-1.5.7.tar.gz) = 2434947 +SHA256 (curl-impersonate/lexiforest-curl-impersonate-v2.0.0_GH0.tar.gz) = a9827cfce8246e78b86e26f012ae9fcb9bc05822009cd7ce4c9e130af6bdfb6f +SIZE (curl-impersonate/lexiforest-curl-impersonate-v2.0.0_GH0.tar.gz) = 207780 diff --git a/ftp/curl-impersonate/files/patch-CMakeLists.txt b/ftp/curl-impersonate/files/patch-CMakeLists.txt new file mode 100644 index 000000000000..b6ea06fe17c4 --- /dev/null +++ b/ftp/curl-impersonate/files/patch-CMakeLists.txt @@ -0,0 +1,63 @@ +--- CMakeLists.txt.orig 2026-08-01 23:39:17 UTC ++++ CMakeLists.txt +@@ -195,6 +195,7 @@ ExternalProject_Add(zlib + -DBUILD_SHARED_LIBS=OFF + -DZLIB_BUILD_EXAMPLES=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} + ) + + # zstd +@@ -214,6 +215,7 @@ ExternalProject_Add(zstd + -DZSTD_BUILD_CONTRIB=OFF + -DZSTD_BUILD_TESTS=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} + ) + + # brotli +@@ -234,7 +236,7 @@ ExternalProject_Add(brotli + -DBROTLI_BUILD_TOOLS=OFF + -DCMAKE_MACOSX_BUNDLE=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} + ) + + # boringssl +@@ -270,7 +272,7 @@ ExternalProject_Add(boringssl + PATCH_COMMAND ${PATCH_EXE} -p1 -i "${_boringssl_patch_file}" + CMAKE_ARGS ${_boringssl_cmake_args} + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target ssl crypto --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} + ) + + ExternalProject_Get_Property(boringssl source_dir binary_dir) +@@ -308,7 +310,7 @@ ExternalProject_Add(nghttp2 + -DENABLE_DOC=OFF + -DBUILD_TESTING=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} + ) + + # nghttp3 +@@ -330,7 +332,7 @@ ExternalProject_Add(nghttp3 + -DBUILD_TESTING=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --parallel ${SUBJOBS} + INSTALL_COMMAND +- ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} ++ ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} + COMMAND ${CMAKE_COMMAND} -E copy_if_different + <SOURCE_DIR>/lib/includes/nghttp3/nghttp3.h + <INSTALL_DIR>/include/nghttp3/nghttp3.h +@@ -370,7 +372,7 @@ ExternalProject_Add(ngtcp2 + -DBORINGSSL_INCLUDE_DIR=${BORINGSSL_INCLUDE_DIR} + ${_ngtcp2_boringssl_libs_arg} + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release --target install --parallel ${SUBJOBS} + ) + + # libidn2 diff --git a/ftp/curl-impersonate/files/patch-patches_curl.patch b/ftp/curl-impersonate/files/patch-patches_curl.patch new file mode 100644 index 000000000000..a689e1bc5896 --- /dev/null +++ b/ftp/curl-impersonate/files/patch-patches_curl.patch @@ -0,0 +1,31 @@ +--- patches/curl.patch.orig 2026-08-01 23:27:43 UTC ++++ patches/curl.patch +@@ -11817,3 +11817,28 @@ + NV1(CURLOPT_TLS_STATUS_REQUEST, 1), + NV1(CURLOPT_TCP_NODELAY, 1), + NV1(CURLOPT_PROXY_SSL_VERIFYPEER, 1), + NV1(CURLOPT_PROXY_SSL_VERIFYHOST, 1), ++diff --git a/CMakeLists.txt b/CMakeLists.txt ++index c96af1dc7b..d8e8474f82 100644 ++--- a/CMakeLists.txt +++++ b/CMakeLists.txt ++@@ -824,6 +824,20 @@ if(CURL_USE_OPENSSL) ++ ++ # Depend on OpenSSL via imported targets. This allows our dependents to ++ # get our dependencies transitively. +++ +++ # Create OpenSSL::SSL and OpenSSL::Crypto targets manually if they don't exist (for BoringSSL) +++ if(NOT TARGET OpenSSL::SSL) +++ add_library(OpenSSL::SSL UNKNOWN IMPORTED) +++ set_target_properties(OpenSSL::SSL PROPERTIES +++ IMPORTED_LOCATION "${OPENSSL_SSL_LIBRARY}" +++ INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") +++ endif() +++ if(NOT TARGET OpenSSL::Crypto) +++ add_library(OpenSSL::Crypto UNKNOWN IMPORTED) +++ set_target_properties(OpenSSL::Crypto PROPERTIES +++ IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}" +++ INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") +++ endif() ++ list(APPEND CURL_LIBS OpenSSL::SSL OpenSSL::Crypto) ++ ++ if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "openssl") diff --git a/ftp/curl-impersonate/pkg-descr b/ftp/curl-impersonate/pkg-descr new file mode 100644 index 000000000000..6bc3319f7584 --- /dev/null +++ b/ftp/curl-impersonate/pkg-descr @@ -0,0 +1,7 @@ +curl-impersonate is a special build of curl that can impersonate the four major +browsers: Chrome, Edge, Safari & Firefox. curl-impersonate is able to perform +TLS and HTTP handshakes that are identical to that of a real browser. + +curl-impersonate can be used either as a command line tool, similar to the +regular curl, or as a library that can be integrated instead of the regular +libcurl. diff --git a/ftp/curl-impersonate/pkg-plist b/ftp/curl-impersonate/pkg-plist new file mode 100644 index 000000000000..cd316e1cf669 --- /dev/null +++ b/ftp/curl-impersonate/pkg-plist @@ -0,0 +1,54 @@ +bin/curl-impersonate +bin/curl_chrome100 +bin/curl_chrome101 +bin/curl_chrome104 +bin/curl_chrome107 +bin/curl_chrome110 +bin/curl_chrome116 +bin/curl_chrome119 +bin/curl_chrome120 +bin/curl_chrome123 +bin/curl_chrome124 +bin/curl_chrome131 +bin/curl_chrome131_android +bin/curl_chrome133a +bin/curl_chrome136 +bin/curl_chrome142 +bin/curl_chrome145 +bin/curl_chrome146 +bin/curl_chrome99 +bin/curl_chrome99_android +bin/curl_edge101 +bin/curl_edge99 +bin/curl_firefox133 +bin/curl_firefox135 +bin/curl_firefox144 +bin/curl_firefox147 +bin/curl_safari153 +bin/curl_safari155 +bin/curl_safari170 +bin/curl_safari172_ios +bin/curl_safari180 +bin/curl_safari180_ios +bin/curl_safari184 +bin/curl_safari184_ios +bin/curl_safari260 +bin/curl_safari2601 +bin/curl_safari260_ios +bin/curl_tor145 +include/curl/curl.h +include/curl/curlver.h +include/curl/easy.h +include/curl/header.h +include/curl/mprintf.h +include/curl/multi.h +include/curl/options.h +include/curl/stdcheaders.h +include/curl/system.h +include/curl/typecheck-gcc.h +include/curl/urlapi.h +include/curl/websockets.h +lib/libcurl-impersonate.a +lib/libcurl-impersonate.so +lib/libcurl-impersonate.so.4 +lib/libcurl-impersonate.so.4.8.0