git: 274cd4df4dcc - main - Framework: Introduce bsd.sponsor.mk

From: Gleb Popov <arrowd_at_FreeBSD.org>
Date: Mon, 24 Jun 2024 18:38:37 UTC
The branch main has been updated by arrowd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=274cd4df4dcce0a9aa78da47bb6e35ab3dbcbf8c

commit 274cd4df4dcce0a9aa78da47bb6e35ab3dbcbf8c
Author:     Gleb Popov <arrowd@FreeBSD.org>
AuthorDate: 2024-03-17 09:04:33 +0000
Commit:     Gleb Popov <arrowd@FreeBSD.org>
CommitDate: 2024-06-24 18:37:42 +0000

    Framework: Introduce bsd.sponsor.mk
    
    Differential Revision:  https://reviews.freebsd.org/D44487
---
 Mk/bsd.port.mk       |   2 +
 Mk/bsd.sponsor.db.mk |   9 +++++
 Mk/bsd.sponsor.mk    | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 123 insertions(+)

diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
index 1604a1c7fd3d..c9b657230c25 100644
--- a/Mk/bsd.port.mk
+++ b/Mk/bsd.port.mk
@@ -1994,6 +1994,8 @@ ERROR+=	"Unknown USES=${f:C/\:.*//}"
 .      endif
 .    endif
 
+.include "${PORTSDIR}/Mk/bsd.sponsor.mk"
+
 .    if defined(USE_LOCALE)
 WRK_ENV+=	LANG=${USE_LOCALE} LC_ALL=${USE_LOCALE}
 .    endif
diff --git a/Mk/bsd.sponsor.db.mk b/Mk/bsd.sponsor.db.mk
new file mode 100644
index 000000000000..bf8ac051db2a
--- /dev/null
+++ b/Mk/bsd.sponsor.db.mk
@@ -0,0 +1,9 @@
+Sponsor_db_Include_MAINTAINER=         portmgr@FreeBSD.org
+
+#
+# bsd.sponsor.db.mk - Sponsorship info database for FreeBSD Ports commiters
+#
+# Please keep descriptions sorted alphabetically by variable name.
+
+arrowd_at_freebsd_org_SPONSORSHIP_PLATFORMS=	CARDANO
+arrowd_at_freebsd_org_CARDANO_SPONSOR_HANDLE=	addr1qy95v6rlgjchrqc7cae9g7vtrmsevdaty8hnl9p5kv0xtajpts7278jw0y9nh9n26y0dfa97j0zkjxxnut8ahg3hs02sth533h
diff --git a/Mk/bsd.sponsor.mk b/Mk/bsd.sponsor.mk
new file mode 100644
index 000000000000..9fa916ecb894
--- /dev/null
+++ b/Mk/bsd.sponsor.mk
@@ -0,0 +1,112 @@
+# These variables are used in Ports framework to define the ways to support
+# port maintainers.
+#
+# SPONSORSHIP_PLATFORMS		- List of ways to endorse the port's maintainer
+#				Currently supported values are:
+#				BOOSTY
+#				CARDANO
+#				GITHUB
+#				OPENCOLLECTIVE
+#				PATREON
+#
+#				Each platform may have ":upstream" suffix to allow
+#				sponsoring project's upstream instead of a
+#				downstream maintainer.
+#
+#				To define an additional platform the following
+#				vars should be defined:
+# ${plat}_SPONSOR_HANDLE	- Account name or some other handle for the
+#				  given platform
+# ${plat}_UPSTREAM_SPONSOR_HANDLE	- The same as ${plat}_SPONSOR_HANDLE for
+#					  the ":upstream" case.
+# ${plat}_SPONSOR_URL		- URL leading to the site that allows to make
+#				  to make a donation
+#
+# Variables listed above may be either put into a port's Makefile directly or
+# set automatically based on the MAINTAINER knob value and the data from
+# bsd.sponsor.db.mk
+#
+# An auxiliary "make sponsor" target points the user to appropriate web page.
+# An auxiliary "make sponsor-describe" target prints a machine-readable description
+# of the sponsorship data.
+
+.if !defined(SPONSORMKINCLUDED)
+SPONSORMKINCLUDED=	bsd.sponsor.mk
+
+BOOSTY_SPONSOR_URL=	https://boosty.to/%%HANDLE%%
+CARDANO_SPONSOR_URL=	https://cexplorer.io/address/%%HANDLE%%
+GITHUB_SPONSOR_URL=	https://github.com/sponsors/%%HANDLE%%
+OPENCOLLECTIVE_SPONSOR_URL=	https://opencollective.com/%%HANDLE%%
+PATREON_SPONSOR_URL=	https://www.patreon.com/%%HANDLE%%
+
+GITHUB_SPONSOR_HANDLE?=			${GH_PROJECT}
+GITHUB_UPSTREAM_SPONSOR_HANDLE?=	${GH_PROJECT}
+
+.include "${PORTSDIR}/Mk/bsd.sponsor.db.mk"
+_MAINTAINER_KEY=	${MAINTAINER:S/@FreeBSD.org/_at_freebsd_org/:S/@freebsd.org/_at_freebsd_org/}
+.  if defined(${_MAINTAINER_KEY}_SPONSORSHIP_PLATFORMS)
+SPONSORSHIP_PLATFORMS+=	${${_MAINTAINER_KEY}_SPONSORSHIP_PLATFORMS}
+.    for plat in ${SPONSORSHIP_PLATFORMS}
+.      if defined(${_MAINTAINER_KEY}_${plat}_SPONSOR_HANDLE)
+${plat}_SPONSOR_HANDLE=	${${_MAINTAINER_KEY}_${plat}_SPONSOR_HANDLE}
+.      endif
+.    endfor
+.  endif
+
+.  for plat in ${SPONSORSHIP_PLATFORMS}
+.    for plat_w_u plat_wo_u in ${plat:S/:upstream/_UPSTREAM/} ${plat:S/:upstream//}
+.      if !defined(${plat_w_u}_SPONSOR_HANDLE) || empty(${plat_w_u}_SPONSOR_HANDLE)
+.error Missing ${plat_w_u}_SPONSOR_HANDLE value
+.      endif
+.      if !defined(${plat_wo_u}_SPONSOR_URL) || empty(${plat_wo_u}_SPONSOR_URL)
+.error Missing ${plat_wo_u}_SPONSOR_URL value
+.      endif
+.    endfor
+.  endfor
+
+SPONSOR_DIALOG=	${DIALOG} --backtitle "Sponsorship options" \
+		--menu "Support options for ${PORTNAME}" 0 0 0
+
+.  for plat in ${SPONSORSHIP_PLATFORMS}
+.    for plat_w_u plat_wo_u in ${plat:S/:upstream/_UPSTREAM/} ${plat:S/:upstream//}
+SPONSOR_DIALOG_ARGS+=	${plat_w_u} "${${plat_wo_u}_SPONSOR_URL:S/%%HANDLE%%/${${plat_w_u}_SPONSOR_HANDLE}/}"
+PKG_NOTE_sponsor+=	${plat_w_u:tl}=${${plat_wo_u}_SPONSOR_URL:S/%%HANDLE%%/${${plat_w_u}_SPONSOR_HANDLE}/}
+.    endfor
+.  endfor
+
+.  if exists(${LOCALBASE}/bin/xdg-open)
+SPONSOR_CMD=	${LOCALBASE}/bin/xdg-open %%URL%%
+.  else
+SPONSOR_CMD=	${ECHO_CMD} To sponsor the ${PORTNAME} project visit %%URL%%
+.  endif
+
+.  if !empty(SPONSORSHIP_PLATFORMS)
+PKG_NOTES+=	sponsor
+
+sponsor:
+	@(_selected_platform_w_u=$$( { ${SPONSOR_DIALOG} ${SPONSOR_DIALOG_ARGS} 2>&1 >&3; } 3>&2 ) 2>&1 ;\
+	_selected_platform_wo_u=$$(${ECHO_CMD} $$_selected_platform_w_u | sed 's/_UPSTREAM//') ;\
+	_url=$$(${MAKE} -C ${.CURDIR} -v $${_selected_platform_wo_u}_SPONSOR_URL) ;\
+	_handle=$$(${MAKE} -C ${.CURDIR} -v $${_selected_platform_w_u}_SPONSOR_HANDLE) ;\
+	_url=$$(${ECHO_CMD} $$_url | sed "s|%%HANDLE%%|$$_handle|") ;\
+	`${ECHO_CMD} ${SPONSOR_CMD} | sed "s|%%URL%%|$$_url|"` ;\
+	)
+.  else
+sponsor:
+	@${ECHO_CMD} No sponsorship platforms defined for ${PORTNAME} maintainer
+	@${FALSE}
+.  endif
+
+# The format is
+# distribution-name|maintainer|sponsorship_platform|sponsorship_type|sponsorship_url
+sponsor-describe: ${SPONSORSHIP_PLATFORMS:tl:S/:upstream/-upstream/:S/^/sponsor-describe-/}
+	@${DO_NADA}
+
+.  for plat in ${SPONSORSHIP_PLATFORMS}
+.    for plat_w_u plat_wo_u in ${plat:S/:upstream/_UPSTREAM/} ${plat:S/:upstream//}
+sponsor-describe-${plat:tl:S/:upstream/-upstream/}:
+	@${ECHO_CMD} "${PKGNAME}|${MAINTAINER}|${plat_wo_u}|${"${plat_w_u:M*_UPSTREAM}":?Upstream:Maintainer}|${${plat_wo_u}_SPONSOR_URL:S/%%HANDLE%%/${${plat_w_u}_SPONSOR_HANDLE}/}"
+.    endfor
+.  endfor
+
+.endif