COMMENT =	curl modified to impersonate common web browsers

V =		2.0.0rc5
GH_ACCOUNT =	lexiforest
GH_PROJECT =	curl-impersonate
GH_TAGNAME =	v$V
EXTRACT_ONLY =	${GH_DISTFILE}

CATEGORIES =	net

# Use a complete email address with a real name, e.g., "MAINTAINER = John Doe <doe57@machine.somewhere.org>".
# ^^^ (or leave as ports@)
#MAINTAINER = anoduck

# brotli, curl, ng*: MIT
# zlib: zlib license (permissive)
# zstd: BSD
# boringssl: Apache 2.0
PERMIT_PACKAGE = Yes

WANTLIB += ${COMPILER_LIBCXX} c m

# *_VERSION/*_COMMIT copied from ${WRKSRC}/CMakeLists.txt
BROTLI_VERSION =	1.2.0
BORINGSSL_COMMIT =	156c7b75ae9b8c3b3f847acf264f17594c3859fb
NGHTTP2_VERSION =	1.63.0
NGTCP2_VERSION =	1.20.0
NGHTTP3_VERSION =	1.15.0
ZLIB_VERSION =		1.3.1
ZSTD_VERSION =		1.5.7
CURL_VERSION =		curl-8_21_0

# DEPS copied from URLs in ${WRKSRC}/CMakeLists.txt
DEPS =	zlib https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz \
	zstd https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz \
	brotli https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz \
	boringssl https://github.com/google/boringssl/archive/${BORINGSSL_COMMIT}.zip \
	nghttp2 https://github.com/nghttp2/nghttp2/releases/download/v${NGHTTP2_VERSION}/nghttp2-${NGHTTP2_VERSION}.tar.bz2 \
	ngtcp2 https://github.com/ngtcp2/ngtcp2/releases/download/v${NGTCP2_VERSION}/ngtcp2-${NGTCP2_VERSION}.tar.bz2 \
	nghttp3 https://github.com/ngtcp2/nghttp3/releases/download/v${NGHTTP3_VERSION}/nghttp3-${NGHTTP3_VERSION}.tar.bz2 \
	curl https://github.com/curl/curl/archive/${CURL_VERSION}.tar.gz

DIST_SUBDIR =	curl-impersonate
SITES.gh =	https://github.com/
.for d u in ${DEPS}
# filename{url}suffix
DISTFILES.gh +=	${u:C!^.*/!!}{${u:S!^https://github.com/!!}}
.endfor

# place source archives in the default location for cmake to find them.
# done in pre-configure so "make clean=build" doesn't break things.
pre-configure:
.for d u in ${DEPS}
	mkdir -p ${WRKBUILD}/$d-prefix/src
	cp ${FULLDISTDIR}/${u:C!^.*/!!} ${WRKBUILD}/$d-prefix/src/
.endfor

# OpenBSD clang has some issue with the patches to add avx512 code
# to curl's ws.c
COMPILER =	ports-gcc

MODULES =	devel/cmake
MAKE_ENV =	VERBOSE=1

BUILD_DEPENDS =	devel/gpatch

# upstream build files try to use cc to link an executable that pulls in
# C++ code from libraries. so far it has resisted my attempts to fix this
# properly, but patches/patch-patches_curl_patch (somehow) prevents it
# from actually trying to build the executable in the main build, avoiding
# an error there, and this mess recreates the normal link command...
post-build:
	cd ${WRKBUILD}/deps/build/curl && ${WRKDIR}/bin/c++ \
		-I${WRKBUILD}/deps/install/include ${CXXFLAGS} -DNDEBUG \
		src/CMakeFiles/curl-impersonate.dir/config2setopts.c.o \
		src/CMakeFiles/curl-impersonate.dir/slist_wc.c.o \
		src/CMakeFiles/curl-impersonate.dir/terminal.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cb_dbg.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cb_hdr.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cb_prg.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cb_rea.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cb_see.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cb_soc.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cb_wrt.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_cfgable.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_dirhie.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_doswin.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_easysrc.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_filetime.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_findfile.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_formparse.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_getparam.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_getpass.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_help.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_helpers.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_ipfs.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_libinfo.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_listhelp.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_main.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_msgs.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_operate.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_operhlp.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_paramhlp.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_parsecfg.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_progress.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_setopt.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_ssls.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_stderr.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_urlglob.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_util.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_vms.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_writeout.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_writeout_json.c.o \
		src/CMakeFiles/curl-impersonate.dir/tool_xattr.c.o \
		src/CMakeFiles/curl-impersonate.dir/var.c.o \
		src/CMakeFiles/curl-impersonate.dir/toolx/tool_time.c.o \
		-o src/curl-impersonate lib/libcurl-impersonate.a \
		${WRKBUILD}/deps/install/lib/libssl.a \
		${WRKBUILD}/deps/install/lib/libcrypto.a \
		${WRKBUILD}/deps/install/lib/libz.a \
		${WRKBUILD}/deps/install/lib/libbrotlidec.a \
		${WRKBUILD}/deps/install/lib/libbrotlicommon.a \
		${WRKBUILD}/deps/install/lib/libzstd.a \
		${WRKBUILD}/deps/install/lib/libnghttp2.a \
		${WRKBUILD}/deps/install/lib/libngtcp2.a \
		${WRKBUILD}/deps/install/lib/libngtcp2_crypto_boringssl.a \
		${WRKBUILD}/deps/install/lib/libnghttp3.a \
		-lpthread ${WRKBUILD}/deps/install/lib/libcrypto.a \
		${WRKBUILD}/deps/install/lib/libz.a -Wl,-rpath-link,/usr/X11R6/lib

post-install:
	find ${PREFIX}/lib/CMakeFiles -type d -delete
	mv ${PREFIX}/include/curl ${PREFIX}/include/curl-impersonate # or just rm?

.include <bsd.port.mk>
