Fix parallel make srpm

When building srpm using make -j, each of the recursive makes invoked to
build srpm-{dkms,kmod,utils} will build the dist target. This is both
unnecessary, and also has a very good chance of breaking when they race
trying to build gitrev.

Fix this by make dist a prerequisite of srpm-{dkms,kmod,utils} instead
of srpm-common, so that it will be done once before invoking the
recursive makes.

Also, gitrev is not really required for make dist, so instead of adding
it to BUILT_SOURCES, just add it as a prerequisite of the all target.

Mark the individual package targets as PHONY.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Closes #10564
This commit is contained in:
Arvind Sankar 2020-07-13 17:24:07 -04:00 committed by Brian Behlendorf
parent 1743c737f5
commit e6c093dd94
4 changed files with 17 additions and 9 deletions

View File

@ -1,9 +1,5 @@
ACLOCAL_AMFLAGS = -I config ACLOCAL_AMFLAGS = -I config
include config/rpm.am
include config/deb.am
include config/tgz.am
SUBDIRS = include SUBDIRS = include
if BUILD_LINUX if BUILD_LINUX
SUBDIRS += rpm SUBDIRS += rpm
@ -54,6 +50,7 @@ EXTRA_DIST += module/zfs/THIRDPARTYLICENSE.cityhash.descrip
@CODE_COVERAGE_RULES@ @CODE_COVERAGE_RULES@
GITREV = include/zfs_gitrev.h GITREV = include/zfs_gitrev.h
CLEANFILES = $(GITREV)
PHONY = gitrev PHONY = gitrev
gitrev: gitrev:
@ -68,10 +65,7 @@ gitrev:
mv -f $(GITREV)~ $(GITREV); \ mv -f $(GITREV)~ $(GITREV); \
fi fi
$(GITREV): gitrev all: gitrev
BUILT_SOURCES = $(GITREV)
CLEANFILES = $(GITREV)
# Double-colon rules are allowed; there are multiple independent definitions. # Double-colon rules are allowed; there are multiple independent definitions.
distclean-local:: distclean-local::
@ -252,4 +246,8 @@ pkg-dkms: @DEFAULT_PACKAGE@-dkms
pkg-kmod: @DEFAULT_PACKAGE@-kmod pkg-kmod: @DEFAULT_PACKAGE@-kmod
pkg-utils: @DEFAULT_PACKAGE@-utils pkg-utils: @DEFAULT_PACKAGE@-utils
include config/rpm.am
include config/deb.am
include config/tgz.am
.PHONY: $(PHONY) .PHONY: $(PHONY)

View File

@ -1,3 +1,5 @@
PHONY += deb-kmod deb-dkms deb-utils deb deb-local
deb-local: deb-local:
@(if test "${HAVE_DPKGBUILD}" = "no"; then \ @(if test "${HAVE_DPKGBUILD}" = "no"; then \
echo -e "\n" \ echo -e "\n" \

View File

@ -6,6 +6,12 @@
# Build targets for RPM packages. # Build targets for RPM packages.
############################################################################### ###############################################################################
PHONY += srpm srpms srpm-kmod srpm-dkms srpm-utils
PHONY += rpm rpms rpm-kmod rpm-dkms rpm-utils
PHONY += srpm-common rpm-common rpm-local
srpm-kmod srpm-dkms srpm-utils: dist
srpm-kmod: srpm-kmod:
$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \
def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common
@ -54,7 +60,7 @@ rpm-local:
cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \ cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \
cp $(distdir).tar.gz $(rpmbuild)/SOURCES) cp $(distdir).tar.gz $(rpmbuild)/SOURCES)
srpm-common: dist srpm-common:
@(dist=`$(RPM) --eval %{?dist}`; \ @(dist=`$(RPM) --eval %{?dist}`; \
rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \
rpmspec=$(pkg).spec; \ rpmspec=$(pkg).spec; \

View File

@ -1,3 +1,5 @@
PHONY += tgz tgz-kmod tgz-utils tgz-local
tgz-local: tgz-local:
@(if test "${HAVE_ALIEN}" = "no"; then \ @(if test "${HAVE_ALIEN}" = "no"; then \
echo -e "\n" \ echo -e "\n" \