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