PORTNAME=	curl
PORTVERSION=	8.19.0
PORTREVISION=	2
CATEGORIES=	ftp net www
MASTER_SITES=	https://curl.se/download/ \
		https://github.com/curl/curl/releases/download/curl-${PORTVERSION:S|.|_|g}/

PATCH_SITES=	https://github.com/curl/curl/commit/
PATCHFILES=	53a3b2114a9b0652bb464437d38f5c8abffc708d.patch:-p1

MAINTAINER=	sunpoet@FreeBSD.org
COMMENT=	Command line tool and library for transferring data with URLs
WWW=		https://curl.se/ \
		https://github.com/curl/curl

LICENSE=	MIT
LICENSE_FILE=	${WRKSRC}/COPYING

USES=		cpe libtool localbase:ldflags perl5 shebangfix tar:xz
USE_PERL5=	build

CONFIGURE_ARGS=	--disable-unity \
		--disable-werror \
		--enable-dateparse \
		--enable-dnsshuffle \
		--enable-headers-api \
		--enable-hsts \
		--enable-http-auth \
		--enable-manual \
		--enable-mime \
		--enable-netrc \
		--enable-openssl-auto-load-config \
		--enable-progress-meter \
		--enable-ssls-export \
		--enable-typecheck \
		--with-ca-path=/etc/ssl/certs \
		--with-zsh-functions-dir=${LOCALBASE}/share/zsh/site-functions \
		--without-ca-bundle \
		--without-fish-functions-dir
CONFIGURE_ENV=	LOCALBASE=${LOCALBASE} \
		ac_cv_func_SSLv2_client_method=no
GNU_CONFIGURE=	yes
INSTALL_TARGET=	install-strip
TEST_TARGET=	test
USE_LDCONFIG=	yes

CPE_VENDOR=	haxx

SHEBANG_FILES=	*/*.pl

OPTIONS_DEFINE=	ALTSVC COOKIES DEBUG DOCS EXAMPLES IDN IPV6 LIBUV NTLM PROXY PSL STATIC TLS_SRP
OPTIONS_GROUP=	COMPRESSION PROTOCOL
OPTIONS_RADIO=	SSL
OPTIONS_SINGLE=	GSSAPI RESOLV
OPTIONS_GROUP_COMPRESSION=	BROTLI ZSTD
OPTIONS_GROUP_PROTOCOL=	DICT FTP GOPHER HTTP HTTP2 IMAP IPFS LDAP LDAPS LIBSSH LIBSSH2 MQTT POP3 RTSP SMB SMTP TELNET TFTP WEBSOCKET
OPTIONS_RADIO_SSL=	GNUTLS OPENSSL WOLFSSL
OPTIONS_SINGLE_GSSAPI=	GSSAPI_BASE GSSAPI_MIT GSSAPI_NONE
OPTIONS_SINGLE_RESOLV=	CARES THREADED_RESOLVER
#OPTIONS_DEFAULT=ALTSVC BROTLI COOKIES DICT FTP GOPHER HTTP HTTP2 IDN IMAP IPFS LIBSSH2 MQTT NTLM OPENSSL POP3 PROXY PSL RTSP SMB SMTP STATIC TELNET TFTP THREADED_RESOLVER TLS_SRP WEBSOCKET ZSTD
OPTIONS_DEFAULT=ALTSVC BROTLI COOKIES DICT FTP GOPHER HTTP HTTP2 IDN IMAP IPFS MQTT NTLM POP3 PROXY PSL RTSP SMB SMTP STATIC TELNET TFTP THREADED_RESOLVER WEBSOCKET ZSTD ${OPTIONS_DEFAULT_${OSREL:R}}
OPTIONS_DEFAULT_13=	GSSAPI_NONE WOLFSSL
OPTIONS_DEFAULT_14=	GSSAPI_NONE LIBSSH2 OPENSSL TLS_SRP
OPTIONS_DEFAULT_15=	GSSAPI_${${SSL_DEFAULT} == base :?BASE :NONE} LIBSSH2 OPENSSL TLS_SRP
OPTIONS_DEFAULT_16=	GSSAPI_${${SSL_DEFAULT} == base :?BASE :NONE} LIBSSH2 OPENSSL TLS_SRP
OPTIONS_SUB=	yes
ALTSVC_DESC=	HTTP Alternative Services support
COMPRESSION_DESC=	Compression methods
COOKIES_DESC=	Cookies support
DICT_DESC=	DICT (RFC 2229) support
HTTP_DESC=	HTTP/HTTPS support
HTTP2_DESC=	HTTP/2 support (requires HTTP)
HTTP2_IMPLIES=	HTTP
IMAP_DESC=	IMAP/IMAPS support
IPFS_DESC=	IPFS support
LDAPS_IMPLIES=	LDAP
LDAPS_DESC=	LDAP protocol over SSL support (requires GNUTLS/OPENSSL/WOLFSSL)
LIBSSH_DESC=	SCP/SFTP support via libssh (requires OPENSSL)
LIBSSH_IMPLIES=	OPENSSL
LIBSSH2_DESC=	SCP/SFTP support via libssh2 (requires OPENSSL)
LIBSSH2_IMPLIES=OPENSSL
LIBUV_DESC=	Event-based tests
LIBUV_IMPLIES=	DEBUG
MQTT_DESC=	MQTT support
POP3_DESC=	POP3/POP3S support
PROTOCOL_DESC=	Transmission protocols
PROXY_IMPLIES=	HTTP
RESOLV_DESC=	DNS resolving options
RTSP_IMPLIES=	HTTP
SMB_DESC=	SMB/CIFS support
SMTP_DESC=	SMTP/SMTPS support
THREADED_RESOLVER_DESC=	Threaded DNS resolver
TLS_SRP_DESC=	TLS-SRP (Secure Remote Password) support

ALTSVC_CONFIGURE_ENABLE=alt-svc
BROTLI_CONFIGURE_WITH=	brotli
BROTLI_LIB_DEPENDS=	libbrotlidec.so:archivers/brotli
CARES_CONFIGURE_ENABLE=	ares
CARES_LIB_DEPENDS=	libcares.so:dns/c-ares
CARES_USES=		pkgconfig
COOKIES_CONFIGURE_ENABLE=	cookies
DEBUG_CONFIGURE_ENABLE=	debug
DICT_CONFIGURE_ENABLE=	dict
FTP_CONFIGURE_ENABLE=	ftp
GNUTLS_CONFIGURE_WITH=	gnutls
GNUTLS_LIB_DEPENDS=	libgnutls.so:security/gnutls \
			libnettle.so:security/nettle
GOPHER_CONFIGURE_ENABLE=gopher
GSSAPI_BASE_CONFIGURE_ON=	--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
GSSAPI_BASE_CPPFLAGS=	${GSSAPICPPFLAGS}
GSSAPI_BASE_LDFLAGS=	${GSSAPILDFLAGS}
GSSAPI_BASE_LIBS=	${GSSAPILIBS}
GSSAPI_BASE_USES=	gssapi
GSSAPI_MIT_CONFIGURE_ON=--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
GSSAPI_MIT_CPPFLAGS=	${GSSAPICPPFLAGS}
GSSAPI_MIT_LDFLAGS=	${GSSAPILDFLAGS}
GSSAPI_MIT_LIBS=	${GSSAPILIBS}
GSSAPI_MIT_USES=	gssapi:mit
GSSAPI_NONE_CONFIGURE_ON=	--without-gssapi
HTTP_CONFIGURE_ENABLE=	http
HTTP2_CONFIGURE_WITH=	nghttp2
HTTP2_LIB_DEPENDS=	libnghttp2.so:www/libnghttp2
HTTP2_USES=		pkgconfig
IDN_CONFIGURE_WITH=	libidn2
IDN_LIB_DEPENDS=	libidn2.so:dns/libidn2
IMAP_CONFIGURE_ENABLE=	imap
IPFS_CONFIGURE_ENABLE=	ipfs
IPV6_CONFIGURE_ENABLE=	ipv6
LDAP_CONFIGURE_ENABLE=	ldap
LDAP_USES=		ldap
LDAPS_CONFIGURE_ENABLE=	ldaps
LIBSSH_CONFIGURE_WITH=	libssh
LIBSSH_LIB_DEPENDS=	libssh.so:security/libssh
LIBSSH2_CONFIGURE_WITH=	libssh2
LIBSSH2_LIB_DEPENDS=	libssh2.so:security/libssh2
LIBUV_CONFIGURE_WITH=	libuv
LIBUV_LIB_DEPENDS=	libuv.so:devel/libuv
MQTT_CONFIGURE_ENABLE=	mqtt
NTLM_CONFIGURE_ENABLE=	ntlm
OPENSSL_CONFIGURE_WITH=	openssl=${OPENSSLBASE}
OPENSSL_CPPFLAGS=	-I${OPENSSLINC}
OPENSSL_LDFLAGS=	-L${OPENSSLLIB}
OPENSSL_USES=		ssl
POP3_CONFIGURE_ENABLE=	pop3
PROXY_CONFIGURE_ENABLE=	proxy
PSL_CONFIGURE_WITH=	libpsl
PSL_LIB_DEPENDS=	libpsl.so:dns/libpsl
RTSP_CONFIGURE_ENABLE=	rtsp
SMB_CONFIGURE_ENABLE=	smb
SMTP_CONFIGURE_ENABLE=	smtp
STATIC_CONFIGURE_ENABLE=static
TELNET_CONFIGURE_ENABLE=telnet
TFTP_CONFIGURE_ENABLE=	tftp
THREADED_RESOLVER_CONFIGURE_ENABLE=	threaded-resolver
TLS_SRP_CONFIGURE_ENABLE=	tls-srp
WEBSOCKET_CONFIGURE_ENABLE=	websockets
WOLFSSL_CONFIGURE_WITH=	wolfssl
WOLFSSL_LIB_DEPENDS=	libwolfssl.so:security/wolfssl
ZSTD_CONFIGURE_WITH=	zstd
ZSTD_LIB_DEPENDS=	libzstd.so:archivers/zstd

.include <bsd.port.pre.mk>

.if ${OSVERSION} < 1500050 && ${PORT_OPTIONS:MGSSAPI_BASE}
IGNORE=		FreeBSD only provides MIT implementation of Kerberos in the base system since 15.0
.endif

.if ((!${PORT_OPTIONS:MGNUTLS} && !${PORT_OPTIONS:MOPENSSL}) || (${PORT_OPTIONS:MOPENSSL} && ${SSL_DEFAULT:Mlibressl*})) && ${PORT_OPTIONS:MTLS_SRP}
IGNORE=		only supports TLS-SRP with either OpenSSL or GnuTLS
.endif

.if ${PORT_OPTIONS:MLDAPS} && !${PORT_OPTIONS:MGNUTLS} && !${PORT_OPTIONS:MOPENSSL} && !${PORT_OPTIONS:MWOLFSSL}
IGNORE=		only supports LDAPS with GNUTLS/OPENSSL/WOLFSSL enabled
.endif

post-install:
	${INSTALL_DATA} ${WRKSRC}/docs/libcurl/libcurl.m4 ${STAGEDIR}${PREFIX}/share/aclocal/

post-install-DOCS-on:
	${MKDIR} ${STAGEDIR}${DOCSDIR}/ ${STAGEDIR}${DOCSDIR}/internals/ ${STAGEDIR}${DOCSDIR}/libcurl/
	cd ${WRKSRC}/docs/ && ${INSTALL_DATA} THANKS options-in-versions *.md ${STAGEDIR}${DOCSDIR}/
	${INSTALL_DATA} ${WRKSRC}/docs/internals/*.md ${STAGEDIR}${DOCSDIR}/internals/
	cd ${WRKSRC}/docs/libcurl/ && ${INSTALL_DATA} ABI.md libcurl.m4 *.pl symbols-in-versions ${STAGEDIR}${DOCSDIR}/libcurl/

post-install-EXAMPLES-on:
	${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/
	cd ${WRKSRC}/docs/examples/ && ${INSTALL_DATA} Makefile.example README.md *.c *.cpp ${STAGEDIR}${EXAMPLESDIR}/

.include <bsd.port.post.mk>
