Viewing: Makefile.pkg-deb

# SPDX-License-Identifier: GPL-2.0

#
# This file is part of Lustre, http://www.lustre.org/
#

debs_common:
	@export SRC_GIT_HASH=$$(git log --oneline | head -1 | cut -d' ' -f1)
	rm -f /usr/src/lustre-$${SRC_GIT_HASH}.tar.bz2
	if test -f /usr/src/lustre-$${SRC_GIT_HASH}.tar.bz2; then
		echo "************************************************************"
		echo "WARNING: move or remove /usr/src/lustre-$${SRC_GIT_HASH}.tar.bz2"
		echo "************************************************************"
		exit 1
	fi

#
# In the debs target, first make sure what's in the changelog reflects
# the software version.
#

debs: debs_common
	@cp -v debian/changelog.in debian/changelog
	export SRC_GIT_HASH=$$(git log --oneline | head -1 | cut -d' ' -f1)
	lversion=$$(echo $(VERSION) | tr '_' '-')
	cversion=$$(sed -ne '1s/^lustre (\(.*\)-[0-9][0-9]*).*$$/\1/p' debian/changelog)
	if [ "$$lversion" != "$$cversion" ]; then
		echo -e "1i\nlustre ($$lversion-1) unstable; urgency=low\n\n  * Automated changelog entry update\n\n -- Andreas Dilger <adilger@thelustrecollective.com>  $$(date -R)\n\n.\nwq" | ed debian/changelog
	fi
	rm -rf debs
	if test "x$(ENABLE_SERVER)" = "xyes"; then
		DEB_BUILD_PROFILES="server"
	else
		DEB_BUILD_PROFILES="client"
	fi
	if test "x$(ENABLE_LDISKFS)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} ldiskfs"
	fi
	if test "x$(ENABLE_ZFS)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} zfs"
		export SPL_SRC="$(SPL)"
		export ZFS_SRC="$(ZFS)"
		echo "ZFS support is enabled. Will expect pre-compiled SPL and ZFS sources in:"
		echo "SPL: $${SPL_SRC}"
		echo "ZFS: $${ZFS_SRC}"
	fi
	if test "x$(ENABLE_MULTIPLE_LNDS)" != "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} multiple-lnds"
	fi
	if test "x$(ENABLE_GNI)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} gnilnd"
	fi
	if test "x$(KFILND)" = "xkfilnd"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} kfilnd"
	fi
	if test "x$(DPKG_EXT_O2IB)" != "x"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} ext_o2ib"
		export O2IB_SRC="$(EXT_O2IBPATH)"
	fi
	if test "x$(DPKG_INT_O2IB)" != "x"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} int_o2ib"
	fi
	if test "x$(EFALND)" != "x"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} efalnd"
	fi
	if test "x$(CONFIG_CACHE_FILE)" != "x"; then
		export CONFIG_CACHE_FILE="$(CONFIG_CACHE_FILE)"
	fi
	debiantmp=$$(mktemp -t $${BUILDDIR:+-p $$BUILDDIR} -d debbuild-$$USER-XXXXXXXX)
	cp debian/control.main $$debiantmp/control.main.bkp
	cp debian/control.modules.in $$debiantmp/control.modules.in.bkp
	if test "x$(ENABLE_GSS)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} gss"
		sed -i "s+^\(Build-Depends: .*\)$$+\1, libkrb5-dev, libssl-dev+" debian/control.main
		awk 'BEGIN{change=0} $$1 == "Package:" {if (($$2 == "lustre-client-utils") || ($$2 == "lustre-server-utils")) change=1; else change=0; fi } {if (($$1 == "Depends:") && change) print $$0 ", libgssapi-krb5-2, libkrb5-3, libssl1.1|libssl3"; else print; fi}' debian/control.main > $$debiantmp/control.main && mv $$debiantmp/control.main debian/control.main
		sed -i "s+^\(Build-Depends: .*\)$$+\1, libkrb5-dev, libssl-dev+" debian/control.modules.in
	elif test "x$(ENABLE_GSS)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nogss"
	fi
	if test "x$(ENABLE_MPITESTS)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} mpitests"
	elif test "x$(ENABLE_MPITESTS)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nompitests"
		sed -i -e 's/mpi-default-dev,//' -e 's/mpi-default-bin,//' debian/control.main
	fi
	if test "x$(ENABLE_TESTS)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} tests"
	elif test "x$(ENABLE_TESTS)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} notests"
		sed -i -e 's/mpi-default-dev,//' -e 's/mpi-default-bin,//' debian/control.main
	fi
	if test "x$(ENABLE_COVERAGE)" = "xy"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} coverage"
	fi
	if test "x$(ENABLE_IOKIT)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} iokit"
	elif test "x$(ENABLE_IOKIT)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} noiokit"
	fi
	if test "x$(ENABLE_UTILS)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} utils"
	elif test "x$(ENABLE_UTILS)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} noutils"
	fi
	if test "x$(ENABLE_CRYPTO)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} crypto"
	elif test "x$(ENABLE_CRYPTO)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nocrypto"
	fi
	if test "x$(systemdsystemunitdir)" != "x"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} systemd"
		export SYSTEMD_OPTIONS="--with-systemdsystemunitdir=$(systemdsystemunitdir)"
	fi
	if test "x$(ENABLE_PINGER)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} pinger"
	elif test "x$(ENABLE_PINGER)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nopinger"
	fi
	if test "x$(ENABLE_CHECKSUM)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} checksum"
	elif test "x$(ENABLE_CHECKSUM)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nochecksum"
	fi
	if test "x$(ENABLE_FLOCK)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} flock"
	elif test "x$(ENABLE_FLOCK)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} noflock"
	fi
	if test "x$(ENABLE_LRU_RESIZE)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} lru-resize"
	elif test "x$(ENABLE_LRU_RESIZE)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nolru-resize"
	fi
	if test "x$(ENABLE_MINDF)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} mindf"
	elif test "x$(ENABLE_MINDF)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nomindf"
	fi
	if test "x$(ENABLE_FAIL_ALLOC)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} fail-alloc"
	elif test "x$(ENABLE_FAIL_ALLOC)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nofail-alloc"
	fi
	if test "x$(ENABLE_INVARIANTS)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} invariants"
	elif test "x$(ENABLE_INVARIANTS)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} noinvariants"
	fi
	if test "x$(ENABLE_LU_REF)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} lu_ref"
	elif test "x$(ENABLE_LU_REF)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nolu_ref"
	fi
	if test "x$(ENABLE_PGSTAT_TRACK)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} pgstate-track"
	elif test "x$(ENABLE_PGSTAT_TRACK)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nopgstate-track"
	fi
	if test "x$(ENABLE_LIBCFS_CDEBUG)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} libcfs-cdebug"
	elif test "x$(ENABLE_LIBCFS_CDEBUG)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nolibcfs-cdebug"
	fi
	if test "x$(ENABLE_LIBCFS_TRACE)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} libcfs-trace"
	elif test "x$(ENABLE_LIBCFS_TRACE)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nolibcfs-trace"
	fi
	if test "x$(ENABLE_LIBCFS_ASSERT)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} libcfs-assert"
	elif test "x$(ENABLE_LIBCFS_ASSERT)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nolibcfs-assert"
	fi
	if test "x$(ENABLE_PANIC_DUMPLOG)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} panic_dumplog"
	elif test "x$(ENABLE_PANIC_DUMPLOG)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nopanic_dumplog"
	fi
	if test "x$(ENABLE_READLINE)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} readline"
	elif test "x$(ENABLE_READLINE)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} noreadline"
	fi
	if test "x$(ENABLE_LIBPTHREAD)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} libpthread"
	elif test "x$(ENABLE_LIBPTHREAD)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nolibpthread"
	fi
	if test "x$(ENABLE_BACKOFF)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} backoff"
	elif test "x$(ENABLE_BACKOFF)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} nobackoff"
	fi
	if test "x$(ENABLE_EFENCE)" = "xyes"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} efence"
	elif test "x$(ENABLE_EFENCE)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} noefence"
	fi
	if test "x$(ENABLE_TESTS)" = "xno"; then
		export DEB_BUILD_PROFILES="$${DEB_BUILD_PROFILES} notests"
	fi
	export KERNEL_OBJ="$(LINUX_OBJ)"
	export KERNEL_SRC="$(LINUX)"
	echo "Enabled Build Profiles: $${DEB_BUILD_PROFILES}"
	echo "Kernel Source: $${KERNEL_SRC}"
	echo "Kernel Object: $${KERNEL_OBJ}"
	if test "x$(ENABLEO2IB)" = "xno"; then
		export IB_OPTIONS="--with-o2ib=no"
	else
		if test "x$(ENABLEO2IB)" != "xyes" && \
		   test -n "$(EXT_O2IBPATH)"; then
			export IB_OPTIONS="--with-o2ib=$(EXT_O2IBPATH)"
		else
			export IB_OPTIONS="--with-o2ib=yes"
		fi
	fi
	cp -v debian/control.main debian/control
	sed "s/_KVERS_/$(LINUXRELEASE)/g" debian/lustre-tests.install.in \
		> debian/lustre-tests.install
	tmpprofiles=`tr ' ' ',' <<< $$DEB_BUILD_PROFILES`
	ignores="-I -I.git"
	if test -s .gitignore; then
		ignores+=$$(grep -E -v "^#|^$$" .gitignore | sed -e 's/^/ -I/')
	fi
	ignores+=" -I.\*.cmd -Iconftest.\* -IKbuild -I\*.[adios] -I\*.[kls][ao] "
	ignores+=" -I\*.mod -I.\*.d -I\*.tar.gz -I\*.out[0-9]\* -I\*.sw[opq] "
	dpkg-buildpackage -us -uc $$ignores -P$$tmpprofiles || {
		rc=$${PIPESTATUS[0]}
		cp $$debiantmp/control.main.bkp debian/control.main || true
		cp $$debiantmp/control.modules.in.bkp debian/control.modules.in || true
		[ $${rc} -gt 1 ] && exit $${rc}
		exit 0
	}
	cp $$debiantmp/control.main.bkp debian/control.main || true &&
	cp $$debiantmp/control.modules.in.bkp debian/control.modules.in || true &&
	export KPKG_DEST_DIR="$$(pwd)/.." &&
	version=$$(sed -ne '1s/^lustre (\(.*\)).*$$/\1/p' debian/changelog) &&
	rm -rf debian/tmp/modules-deb &&
	mkdir debian/tmp/modules-deb &&
	pushd debian/tmp/modules-deb &&
	dpkg -x ../../../../lustre-source_$${version}_all.deb $$(pwd) &&
	mkdir usr_src/ &&
	tar -C usr_src/ -xjf usr/src/lustre-$${SRC_GIT_HASH}.tar.bz2 &&
	chmod 755 usr_src/modules/lustre/debian/rules &&
	mkdir -p usr_share_modass &&
	ln -s /usr/share/modass/include/ usr_share_modass/ &&
	ln -s /usr/share/modass/packages/ usr_share_modass/ &&
	echo "lustre" > usr_share_modass/compliant.list &&
	export MA_DIR=$$(pwd)/usr_share_modass &&
	KVERS=$${KVERS:-$(LINUXRELEASE)} &&
	export KSRC_TREE=$(LINUX) &&
	KSRC=$${KSRC:-$(LINUX_OBJ)} &&
	TARBALL=$$(realpath usr/src/lustre-$${SRC_GIT_HASH}.tar.bz2) \
	CC=$(CC) RELAX_CC_CHECK=$(CC) \
	m-a build $${KSRC:+-k $$KSRC} $${KVERS:+-l $$KVERS} -i -u $$(pwd) lustre &&
	popd &&
	VER=$$(sed -ne '1s/^lustre (\(.*-[0-9][0-9]*\)).*$$/\1/p' debian/changelog) &&
	if test "x$(ENABLE_SERVER)" = "xyes"; then
		DEB_SERVER_PKG="../lustre-resource-agents_$${VER}_*.deb"
	fi &&
	MULTILNDPKGS= &&
	if test "x$(ENABLE_MULTIPLE_LNDS)" != "xno"; then
		debian/repackage-multiple-lnds.sh $${KVERS} $${VER} ../lustre-*-modules-$${KVERS}_$${VER}_*.deb
		MULTILNDPKGS="../lustre-lnet-module-*-$${KVERS}_$${VER}_*.deb"
	fi &&
	mkdir -p debs &&
	mv ../lustre-dev_$${VER}_*.deb ../lustre-source_$${VER}_all.deb \
	   ../lustre-iokit_$${VER}_*.deb ../lustre-tests_$${VER}_*.deb \
	   ../lustre-coverage_$${VER}_*.deb \
	   ../lustre-*-utils_$${VER}_*.deb $${DEB_SERVER_PKG} $${MULTILNDPKGS} \
	   ../lustre_$${VER}.dsc ../lustre_$${VER}_*.changes \
	   ../lustre_$${VER}.tar.gz ../lustre-*-modules-$${KVERS}_$${VER}_*.deb \
	   ../lustre-*-dbgsym_$${VER}_*.ddeb ../lustre_$${VER}_*.buildinfo \
	   ../lustre-*-dbgsym_$${VER}_*.deb \
	   debs/ 2> /dev/null || true