# Helper for regenerating BAZEL_DISTFILES and BAZEL_NPM_DISTFILES in the port
# Makefile after an update.
#
# Usage:
#   make -f Makefile.bazel-cache
#
# This configures the port without the Bazel distfiles, lets Bazel analyse
# ${ALL_TARGET} with an empty repository cache and downloads enabled and prints
# the archives Bazel downloaded as BAZEL_DISTFILES and BAZEL_NPM_DISTFILES
# (also saved in ${BAZEL_DISTFILES_MK}). Replace them in the Makefile and run
# "make makesum". Run "make make-crates" first when the Cargo.lock files
# changed, crates are not part of these lists.
#
# WRKDIRPREFIX and DISTDIR are intentionally not set here.  The sub-make that
# reads the real port Makefile will pick them up from /etc/make.conf or from the
# command line, the same as any other port build.

PORTDIR?=	${.CURDIR}
BATCH?=		yes

PORT_MAKE=	${MAKE} -C ${PORTDIR} \
		BATCH=${BATCH}

.for var in ALL_TARGET BAZEL BAZEL_ARGS BAZEL_DISTFILES BAZEL_ENV \
	BAZEL_NPM_DISTFILES BAZEL_REGISTRY_WRKSRC BAZEL_STARTUP_ARGS \
	DISTINFO_FILE FILESDIR MKDIR PYTHON_CMD RM SETENV WRKDIR WRKSRC
${var}!=	${PORT_MAKE} -V ${var}
.endfor

BAZEL_DISTFILES_ROOT=	${WRKDIR}/bazel-distfiles
BAZEL_DISTFILES_CACHE=	${BAZEL_DISTFILES_ROOT}/repository-cache
BAZEL_DISTFILES_OUTPUT=	${BAZEL_DISTFILES_ROOT}/output
BAZEL_DISTFILES_MK=	${BAZEL_DISTFILES_ROOT}/bazel-distfiles.mk
BAZEL_DISTFILES_STARTUP_ARGS=	${BAZEL_STARTUP_ARGS:N--output_user_root=*} \
				--output_user_root=${BAZEL_DISTFILES_OUTPUT}
# Without the canonical ids Bazel stores no id- files, which bazel-distfiles.py
# uses to recognise download URLs.
BAZEL_DISTFILES_ARGS=	${BAZEL_ARGS:N--repository_disable_download:N--repository_cache=*:N--repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=*} \
			--repository_cache=${BAZEL_DISTFILES_CACHE}

.PHONY: all bazel-distfiles print-bazel-distfiles clean-bazel-distfiles

all: bazel-distfiles

bazel-distfiles:
	${PORT_MAKE} BAZEL_DISTFILES= BAZEL_NPM_DISTFILES= configure
	${RM} -r ${BAZEL_DISTFILES_ROOT}
	${MKDIR} ${BAZEL_DISTFILES_CACHE}
	cd ${WRKSRC} && ${SETENV} ${BAZEL_ENV} ${BAZEL} ${BAZEL_DISTFILES_STARTUP_ARGS} \
		build --nobuild ${BAZEL_DISTFILES_ARGS} ${ALL_TARGET}
	${MAKE} -f ${.CURDIR}/Makefile.bazel-cache print-bazel-distfiles

print-bazel-distfiles:
	${PYTHON_CMD} ${FILESDIR}/bazel-distfiles.py ${BAZEL_DISTFILES_CACHE} \
		${BAZEL_REGISTRY_WRKSRC} ${DISTINFO_FILE} \
		${WRKSRC} ${BAZEL_DISTFILES_OUTPUT} \
		-- "${BAZEL_DISTFILES}" "${BAZEL_NPM_DISTFILES}" > ${BAZEL_DISTFILES_MK}
	@cat ${BAZEL_DISTFILES_MK}

clean-bazel-distfiles:
	${RM} -r ${BAZEL_DISTFILES_ROOT}
