# SPDX-License-Identifier: CDDL-1.0
###############################################################################
# Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC.
# Copyright (C) 2007 The Regents of the University of California.
# Written by Brian Behlendorf <behlendorf1@llnl.gov>.
###############################################################################
# Build targets for RPM packages.
###############################################################################

PHONY += srpm srpms srpm-kmod srpm-dkms srpm-utils
PHONY += rpm rpms rpm-kmod rpm-dkms rpm-utils rpm-utils-initramfs
PHONY += srpm-common rpm-common rpm-local

srpm-kmod srpm-dkms srpm-utils: dist

srpm-kmod:
	$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \
		def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common

srpm-dkms:
	$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \
		def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_DKMS}' srpm-common

srpm-utils:
	$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \
		def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_UTIL}' srpm-common

srpm: srpm-kmod srpm-dkms srpm-utils
srpms: srpm-kmod srpm-dkms srpm-utils

rpm-kmod: srpm-kmod
	$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \
		def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_KMOD}' rpm-common

rpm-dkms: srpm-dkms
	$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \
		def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_DKMS}' rpm-common

# The rpm-utils and rpm-utils-initramfs targets are identical except for the
# zfs-initramfs package: rpm-utils never includes it, rpm-utils-initramfs
# includes it if detected at configure time. The zfs-initramfs package does
# not work on any known RPM-based distribution and the resulting RPM is only
# used to create a Debian package. The rpm-utils-initramfs target is not
# intended to be specified by the user directly, it is provided as a
# dependency of the deb-utils target.

rpm-utils: srpm-utils
	$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \
		def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_UTIL}' rpm-common

rpm-utils-initramfs: srpm-utils
	$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \
		def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_UTIL} ${RPM_DEFINE_INITRAMFS}' rpm-common

rpm: rpm-kmod rpm-dkms rpm-utils
rpms: rpm-kmod rpm-dkms rpm-utils

rpm-local:
	@(if test "${HAVE_RPMBUILD}" = "no"; then \
		echo -e "\n" \
	"*** Required util ${RPMBUILD} missing.  Please install the\n" \
	"*** package for your distribution which provides ${RPMBUILD},\n" \
	"*** re-run configure, and try again.\n"; \
		exit 1; \
	fi; \
	mkdir -p $(rpmbuild)/TMP && \
	mkdir -p $(rpmbuild)/BUILD && \
	mkdir -p $(rpmbuild)/RPMS && \
	mkdir -p $(rpmbuild)/SRPMS && \
	mkdir -p $(rpmbuild)/SPECS && \
	cp ${RPM_SPEC_DIR}/$(rpmspec) $(rpmbuild)/SPECS && \
	mkdir -p $(rpmbuild)/SOURCES && \
	cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \
	cp $(distdir).tar.gz $(rpmbuild)/SOURCES)

srpm-common:
	@(dist=`$(RPM) --eval %{?dist}`; \
	rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \
	rpmspec=$(pkg).spec; \
	rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
	$(MAKE) $(AM_MAKEFLAGS) \
		rpmbuild="$$rpmbuild" \
		rpmspec="$$rpmspec" \
		rpm-local || exit 1; \
	LANG=C $(RPMBUILD) \
		--define "_tmppath $$rpmbuild/TMP" \
		--define "_builddir $$rpmbuild/BUILD" \
		--define "_rpmdir $$rpmbuild/RPMS" \
		--define "_srcrpmdir $$rpmbuild/SRPMS" \
		--define "_specdir $$rpmbuild/SPECS" \
		--define "_sourcedir $$rpmbuild/SOURCES" \
		--define "_topdir $$rpmbuild" \
		$(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \
	cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \
	rm -R $$rpmbuild)

rpm-common: 
	@(dist=`$(RPM) --eval %{?dist}`; \
	rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \
	rpmspec=$(pkg).spec; \
	rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
	$(MAKE) $(AM_MAKEFLAGS) \
		rpmbuild="$$rpmbuild" \
		rpmspec="$$rpmspec" \
		rpm-local || exit 1; \
	LANG=C ${RPMBUILD} \
		--define "_tmppath $$rpmbuild/TMP" \
		--define "_builddir $$rpmbuild/BUILD" \
		--define "_rpmdir $$rpmbuild/RPMS" \
		--define "_srcrpmdir $$rpmbuild/SRPMS" \
		--define "_specdir $$rpmbuild/SPECS" \
		--define "_sourcedir $$rpmbuild/SOURCES" \
		--define "_topdir $$rpmbuild" \
		$(def) --rebuild $$rpmpkg || exit 1; \
	cp $$rpmbuild/RPMS/*/* . || exit 1; \
	rm -R $$rpmbuild)
