1
0

rewrite scripts

try to provide better syntax and avoid using bash
This commit is contained in:
2024-10-29 05:12:06 +03:00
parent 1e13062902
commit eb2bdc81cb
24 changed files with 363 additions and 247 deletions

170
debian/rules.real vendored
View File

@@ -8,7 +8,6 @@
include /usr/share/dpkg/default.mk
SHELL := bash -e
MAINTAINER := $(shell sed -ne 's,^Maintainer: .[^<]*<\([^>]*\)>,\1,p' debian/control)
SOURCE_DATE_UTC_ISO := $(shell date -u -d '@$(SOURCE_DATE_EPOCH)' +%Y-%m-%d)
@@ -16,7 +15,7 @@ include debian/rules.defs
ifdef ARCH
ifneq ($(DEB_HOST_ARCH),$(ARCH))
$(error Attempting to build a $(ARCH) target but host architecture is $(DEB_HOST_ARCH). Use dpkg-architecture to override the host architecture)
$(error Attempting to build a $(ARCH) target but host architecture is $(DEB_HOST_ARCH). Use dpkg-architecture to override the host architecture)
endif
endif
@@ -28,26 +27,27 @@ export DEB_HOST_ARCH DEB_HOST_GNU_TYPE DEB_BUILD_ARCH
export DEB_BUILD_PATH = $(CURDIR)
export DEB_RULES_REQUIRES_ROOT ?= no
# Set LANG rather than LC_ALL because upstream wants to override
# specific categories and may undefine LC_ALL. To ensure that the
# build environment does not affect our locale, undefine all other
# locale variables.
export LANG = C.UTF-8
$(foreach var,LC_ALL LANGUAGE LC_ADDRESS LC_COLLATE LC_CTYPE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME,$(eval undefine $(var)))
stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@
cleanup_config = sed -E -e '/CONFIG_(BUILD_SALT|MODULE_SIG_(ALL|KEY)|SYSTEM_TRUSTED_KEYS)[ =]/d'
setup_env := env -u ABINAME -u ARCH -u FEATURESET -u FLAVOUR -u VERSION -u LOCALVERSION
# XXX: All the tools leak flags between host and build all the time, just don't care. See #1050991.
setup_env += -u KBUILD_HOSTCFLAGS -u HOSTCFLAGS -u KBUILD_HOSTLDFLAGS
setup_env += DISTRIBUTION_OFFICIAL_BUILD=1 DISTRIBUTOR="$(DEB_VENDOR)" DISTRIBUTION_VERSION="$(SOURCEVERSION)" KBUILD_BUILD_TIMESTAMP="@$(SOURCE_DATE_EPOCH)" KBUILD_BUILD_VERSION_TIMESTAMP="$(DEB_VENDOR) $(SOURCEVERSION) ($(SOURCE_DATE_UTC_ISO))" KBUILD_BUILD_USER="$(word 1,$(subst @, ,$(MAINTAINER)))" KBUILD_BUILD_HOST="$(word 2,$(subst @, ,$(MAINTAINER)))"
setup_env += KBUILD_VERBOSE=1
setup_env += DISTRIBUTION_OFFICIAL_BUILD=1
setup_env += DISTRIBUTOR="$(DEB_VENDOR)"
setup_env += DISTRIBUTION_VERSION="$(SOURCEVERSION)"
setup_env += KBUILD_BUILD_TIMESTAMP="@$(SOURCE_DATE_EPOCH)"
setup_env += KBUILD_BUILD_VERSION_TIMESTAMP="$(DEB_VENDOR) $(SOURCEVERSION) ($(SOURCE_DATE_UTC_ISO))"
setup_env += KBUILD_BUILD_USER="$(word 1,$(subst @, ,$(MAINTAINER)))"
setup_env += KBUILD_BUILD_HOST="$(word 2,$(subst @, ,$(MAINTAINER)))"
setup_env += KBUILD_VERBOSE=$(if $(filter verbose,$(DEB_BUILD_OPTIONS)),1,0)
MAKE_CLEAN = $(setup_env) $(MAKE) KCFLAGS=-fdebug-prefix-map=$(CURDIR)/= KAFLAGS=-fdebug-prefix-map=$(CURDIR)/=
MAKE_SELF := $(MAKE) -f debian/rules.real $(MAKEOVERRIDES)
MAKEOVERRIDES =
BUILDDEB_ARGS := -Zxz $(if $(filter pkg.linux.quick,$(DEB_BUILD_PROFILES)),-z0)
BUILDDEB_ARGS := -Zxz $(if $(filter pkg.linux.quick,$(DEB_BUILD_PROFILES)),-z1)
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
THREAD_COUNT = $(subst parallel=,,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
@@ -83,30 +83,34 @@ $(BUILD_DIR)/$(SOURCE_BASENAME)-source-$(UPSTREAMVERSION).tar.xz: $(STAMPS_DIR)/
rm -rf '$@' '$(DIR)'
$(call copy_source,$(DIR))
chmod -R u+rw,go=rX '$(DIR)'
find '$(DIR)' -depth -newermt '@$(SOURCE_DATE_EPOCH)' -print0 | \
xargs -0r touch --no-dereference --date='@$(SOURCE_DATE_EPOCH)'
cd '$(BUILD_DIR)'; \
find '$(SOURCE_BASENAME)-source-$(UPSTREAMVERSION)' \
-name '*.pyc' -prune -o \
-print0 | \
sort -z | \
tar --owner=root --group=root --numeric-owner \
--no-recursion --null -T - -c | xz -T$(THREAD_COUNT) > '$(SOURCE_BASENAME)-source-$(UPSTREAMVERSION).tar.xz'
find $(DIR)/ -name __pycache__ -type d -exec rm -rf {} +
find $(DIR)/ -name '*.pyc' -type f -exec rm -f {} +
find $(DIR)/ -depth -newermt '@$(SOURCE_DATE_EPOCH)' -print0 \
| xargs -0r touch --no-dereference --date='@$(SOURCE_DATE_EPOCH)'
n='$(SOURCE_BASENAME)-source-$(UPSTREAMVERSION)' ; \
cd $(BUILD_DIR) ; \
find $$n/ -print0 | sort -z \
| tar --owner=root --group=root --numeric-owner --no-recursion --null -T - -c \
| xz -T$(THREAD_COUNT) > $$n.tar.xz
rm -rf '$(DIR)'
$(BUILD_DIR)/linux-patch-$(UPSTREAMVERSION)-%.patch.xz: $(STAMPS_DIR)/source_none $(STAMPS_DIR)/source_%
set -o pipefail; \
(cd '$(BUILD_DIR)'; \
set +e; \
diff -urN -p -x debian -x .pc -x .git -x '*.pyc' source_none source_$*; \
test $$? -eq 1) | \
filterdiff --remove-timestamps --strip=1 --addoldprefix=a/ --addnewprefix=b/ | \
xz -c >$@ || \
(rm -f $@; exit 1)
( \
cd '$(BUILD_DIR)' ; \
set +e ; \
diff -urN -p -x debian -x .pc -x .git -x '*.pyc' source_none source_$* ; \
test $$? -eq 1 ; \
) \
| filterdiff --remove-timestamps --strip=1 --addoldprefix=a/ --addnewprefix=b/ \
| xz -c >$@ \
|| (rm -f $@ ; exit 1 ; )
$(STAMPS_DIR)/source:
test -d .pc
set +e; QUILT_PC=.pc quilt unapplied --quiltrc - >/dev/null && echo 'Patch series not fully applied'; test $$? -eq 1
set +e ; \
QUILT_PC=.pc quilt unapplied --quiltrc - >/dev/null \
&& echo 'Patch series not fully applied' ; \
test $$? -eq 1
@$(stamp)
$(STAMPS_DIR)/source_%: SOURCE_DIR=$(BUILD_DIR)/source
@@ -115,7 +119,8 @@ $(STAMPS_DIR)/source_%: $(STAMPS_DIR)/source
mkdir -p '$(BUILD_DIR)'
rm -rf '$(DIR)'
$(call copy_source,$(DIR))
cd '$(DIR)' && QUILT_PATCHES='$(CURDIR)/debian/patches-$*' QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0
cd '$(DIR)' \
&& QUILT_PATCHES='$(CURDIR)/debian/patches-$*' QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0
@$(stamp)
.PRECIOUS: $(STAMPS_DIR)/source_%
@@ -214,7 +219,7 @@ define dh_binary_post
dh_makeshlibs -Xvmlinux -Xvmlinuz
dh_shlibdeps $(DH_SHLIBDEPS_ARGS)
dh_installdeb
if command -v dh_movetousr >/dev/null; then dh_movetousr; fi
if command -v dh_movetousr >/dev/null ; then dh_movetousr ; fi
dh_gencontrol -- $(GENCONTROL_ARGS)
dh_md5sums
dh_builddeb -- $(BUILDDEB_ARGS)
@@ -235,19 +240,18 @@ binary_headers-common: DIR = $(DESTDIR)/$(BASE_DIR)
binary_headers-common: $(STAMPS_DIR)/source_$(FEATURESET)
$(dh_binary_pre)
set -o pipefail; \
cd $(SOURCE_DIR); \
cd '$(SOURCE_DIR)' ; \
( \
echo Makefile; \
for arch in $(ALL_KERNEL_ARCHES); do \
find arch/$$arch -maxdepth 1 -name 'Makefile*' -print; \
find arch/$$arch \( -name 'Kbuild.platforms' -o -name 'Platform' \) -print; \
find $$(find arch/$$arch \( -name include -o -name scripts \) -type d -print) -print; \
done; \
find include -print; \
echo Makefile ; \
for arch in $(ALL_KERNEL_ARCHES) ; do \
find "arch/$$arch/" -maxdepth 1 -name 'Makefile*' -print ; \
find "arch/$$arch/" \( -name 'Kbuild.platforms' -o -name 'Platform' \) -print ; \
find $$(find "arch/$$arch/" \( -name include -o -name scripts \) -type d -printf '%p/\n') -print ; \
done ; \
find include -print ; \
) \
| \
cpio -pd --preserve-modification-time '$(DIR)'
| sort -uV \
| cpio -pd --preserve-modification-time '$(DIR)'
dh_link /usr/lib/$(PACKAGE_NAME_KBUILD)/scripts $(BASE_DIR)/scripts
dh_link /usr/lib/$(PACKAGE_NAME_KBUILD)/tools $(BASE_DIR)/tools
@@ -268,13 +272,18 @@ binary_headers: $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
$(dh_binary_pre)
mkdir -p $(DIR)/arch/$(KERNEL_ARCH)/kernel
cp -a $(SOURCE_DIR)/{.config,.kernel*,Module.symvers,include} $(DIR)
{ \
cd $(SOURCE_DIR) ; \
tar -cf - .config .kernel* Module.symvers include ; \
} | tar -C $(DIR) -xf -
cp -a $(SOURCE_DIR)/arch/$(KERNEL_ARCH)/include $(DIR)/arch/$(KERNEL_ARCH)
find $(DIR) -name '*.cmd' -delete
if [ -f $(SOURCE_DIR)/arch/$(KERNEL_ARCH)/lib/crtsavres.o ]; then \
mkdir $(DIR)/arch/$(KERNEL_ARCH)/lib; \
cp -a $(SOURCE_DIR)/arch/$(KERNEL_ARCH)/lib/crtsavres.o $(DIR)/arch/$(KERNEL_ARCH)/lib; \
f='$(SOURCE_DIR)/arch/$(KERNEL_ARCH)/lib/crtsavres.o' ; \
d='$(DIR)/arch/$(KERNEL_ARCH)/lib' ; \
if [ -f "$$f" ] ; then \
mkdir -p "$$d" ; \
cp -a "$$f" "$$d/" ; \
fi
cp -a $(SOURCE_DIR)/scripts/module.lds $(DIR)/arch/$(KERNEL_ARCH)
@@ -294,9 +303,9 @@ $(STAMPS_DIR)/build_libc-dev: DIR=$(BUILD_DIR)/build_libc-dev
$(STAMPS_DIR)/build_libc-dev:
rm -rf '$(DIR)/output'
+$(foreach ARCH,$(ALL_LIBCDEV_KERNELARCHES), \
$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' headers_install ARCH=$(ARCH) INSTALL_HDR_PATH='output/usr'; \
mkdir -p '$(DIR)/output/usr/lib/linux/uapi/$(ARCH)'; \
mv '$(DIR)/output/usr/include/asm' '$(DIR)/output/usr/lib/linux/uapi/$(ARCH)/asm'; )
$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' headers_install ARCH=$(ARCH) INSTALL_HDR_PATH='output/usr' ; \
mkdir -p '$(DIR)/output/usr/lib/linux/uapi/$(ARCH)' ; \
mv '$(DIR)/output/usr/include/asm' '$(DIR)/output/usr/lib/linux/uapi/$(ARCH)/asm' ; )
@$(stamp)
build_libc-dev: $(STAMPS_DIR)/build_libc-dev
@@ -309,9 +318,10 @@ binary_libc-dev: $(STAMPS_DIR)/build_libc-dev
dh_install --all --sourcedir $(DIR) usr
# Generate symlink farms for every supported multiarch identifier
for spec in $(ALL_LIBCDEV_MULTIARCHES); do \
IFS=: read -r MULTIARCH KERNELARCH <<< "$$spec"; \
dh_link --all $$(find $(DIR)/usr/lib/linux/uapi/$$KERNELARCH/asm -type f -name '*.h' -printf "usr/lib/linux/uapi/$$KERNELARCH/asm/%P usr/include/$$MULTIARCH/asm/%P\\n"); \
for spec in $(ALL_LIBCDEV_MULTIARCHES) ; do \
MULTIARCH=$${spec%%:*} ; \
KERNELARCH=$${spec#*:} ; \
dh_link --all $$(find "$(DIR)/usr/lib/linux/uapi/$$KERNELARCH/asm/" -type f -name '*.h' -printf "usr/lib/linux/uapi/$$KERNELARCH/asm/%P usr/include/$$MULTIARCH/asm/%P\\n") ; \
done
$(dh_binary_post)
@@ -322,11 +332,11 @@ build_bpf-dev: $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
mkdir -p $(DIR)/tools/bpf/bpftool
+$(MAKE_CLEAN) -C '$(SOURCE_DIR)/tools/bpf/bpftool' O=$(CURDIR)/$(DIR)/tools/bpf/bpftool CROSS_COMPILE= FEATURE_TESTS= FEATURE_DISPLAY=
if grep -q CONFIG_DEBUG_INFO_BTF=y $(DIR)/.config; then \
$(DIR)/tools/bpf/bpftool/bpftool btf dump file $(DIR)/vmlinux format c > $(DIR)/vmlinux.h; \
if grep -Fxq CONFIG_DEBUG_INFO_BTF=y $(DIR)/.config ; then \
$(DIR)/tools/bpf/bpftool/bpftool btf dump file $(DIR)/vmlinux format c ; \
else \
echo '#error "Kernel build without CONFIG_DEBUG_INFO_BTF, no type info available"' > $(DIR)/vmlinux.h; \
fi
echo '#error "Kernel build without CONFIG_DEBUG_INFO_BTF, no type info available"' ; \
fi > $(DIR)/vmlinux.h
binary_bpf-dev: DH_INSTALL_ARGS = --sourcedir=$(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
binary_bpf-dev: build_bpf-dev
@@ -339,7 +349,7 @@ binary_support: PACKAGE_ROOT = /usr/share/$(PACKAGE_NAME)
binary_support:
$(dh_binary_pre)
dh_installdirs $(PACKAGE_ROOT)/lib/python/debian_linux $(PACKAGE_ROOT)/modules
cp debian/lib/python/debian_linux/*.py $(DESTDIR)$(PACKAGE_ROOT)/lib/python/debian_linux
cp debian/lib/python/debian_linux/*.py $(DESTDIR)$(PACKAGE_ROOT)/lib/python/debian_linux/
dh_python3
dh_link $(PACKAGE_ROOT) /usr/src/$(PACKAGE_NAME)
$(dh_binary_post)
@@ -362,15 +372,15 @@ binary_image:
ifneq ($(filter arm64 armel armhf mipsel mips64el mipsr6 mipsr6el mips64r6 mips64r6el riscv64,$(ARCH)),)
dh_install --sourcedir=$(DIR2) usr
endif
sed '/CONFIG_\(MODULE_SIG_\(ALL\|KEY\)\|SYSTEM_TRUSTED_KEYS\|BUILD_SALT\)[ =]/d' $(DIR)/.config > $(DESTDIR)/boot/config-$(REAL_VERSION)
$(cleanup_config) $(DIR)/.config > $(DESTDIR)/boot/config-$(REAL_VERSION)
xz -9k < $(DIR)/System.map > $(DESTDIR)/$(SYSTEM_MAP_PATH)
echo "ffffffffffffffff B The real System.map is compressed into /$(SYSTEM_MAP_PATH)" > $(DESTDIR)/boot/System.map-$(REAL_VERSION)
rm $(DESTDIR)/lib/firmware -rf
rm -rf $(DESTDIR)/lib/firmware
$(dh_binary_post)
build_source:
binary_source: BUILDDEB_ARGS = -Zxz -z0
binary_source: BUILDDEB_ARGS = -Zxz -z1
binary_source: $(BUILD_DIR)/$(SOURCE_BASENAME)-source-$(UPSTREAMVERSION).tar.xz $(foreach FEATURESET,$(filter-out none,$(ALL_FEATURESETS)),$(BUILD_DIR)/linux-patch-$(UPSTREAMVERSION)-$(FEATURESET).patch.xz)
$(dh_binary_pre)
dh_install $^ /usr/src
@@ -379,25 +389,37 @@ binary_source: $(BUILD_DIR)/$(SOURCE_BASENAME)-source-$(UPSTREAMVERSION).tar.xz
build_config:
binary_config: TRIPLETS = $(subst $(BUILD_DIR)/build_,,$(wildcard $(BUILD_DIR)/build_$(ARCH)_*_*))
binary_config: CONFDIR = usr/src/linux-config-$(UPSTREAMVERSION)
binary_config:
$(dh_binary_pre)
dh_installdirs /usr/src/linux-config-$(UPSTREAMVERSION)
dh_installdirs /$(CONFDIR)
# Fix the module signing configuration to work for custom kernels. Also delete
# CONFIG_BUILD_SALT which makes no sense for custom kernels.
for triplet in $(TRIPLETS); do \
sed '/CONFIG_\(MODULE_SIG_\(ALL\|KEY\)\|SYSTEM_TRUSTED_KEYS\|BUILD_SALT\)[ =]/d' $(BUILD_DIR)/build_$$triplet/.config | xz -c >debian/$(PACKAGE_NAME)/usr/src/linux-config-$(UPSTREAMVERSION)/config.$$triplet.xz; \
for i in $(TRIPLETS) ; do \
$(cleanup_config) $(BUILD_DIR)/build_$$i/.config \
| xz -c > debian/$(PACKAGE_NAME)/$(CONFDIR)/config.$$i.xz ; \
done
$(dh_binary_post)
define make-tools
+mkdir -p $(BUILD_DIR)/build-tools/$(1) && $(MAKE_CLEAN) -C $(BUILD_DIR)/build-tools/$(1) -f $(CURDIR)/debian/rules.d/$(1)/Makefile top_srcdir=$(CURDIR) top_rulesdir=$(CURDIR)/debian/rules.d OUTDIR=$(1) VERSION=$(VERSION) KERNEL_ARCH=$(KERNEL_ARCH)
+mkdir -p $(BUILD_DIR)/build-tools/$(1) \
&& $(MAKE_CLEAN) \
-C $(BUILD_DIR)/build-tools/$(1) \
-f $(CURDIR)/debian/rules.d/$(1)/Makefile \
top_srcdir=$(CURDIR) \
top_rulesdir=$(CURDIR)/debian/rules.d \
OUTDIR=$(1) \
VERSION=$(VERSION) \
KERNEL_ARCH=$(KERNEL_ARCH)
endef
$(STAMPS_DIR)/build-tools-headers:
mkdir -p $(BUILD_DIR)/build-tools/headers-tools
$(MAKE) ARCH=$(KERNEL_ARCH) O=$(BUILD_DIR)/build-tools/headers-tools \
INSTALL_HDR_PATH=$(CURDIR)/$(BUILD_DIR)/build-tools \
headers_install
$(MAKE) \
ARCH=$(KERNEL_ARCH) \
O=$(BUILD_DIR)/build-tools/headers-tools \
INSTALL_HDR_PATH=$(CURDIR)/$(BUILD_DIR)/build-tools \
headers_install
@$(stamp)
build_bpftool: $(STAMPS_DIR)/build-tools-headers
@@ -464,7 +486,7 @@ binary_perf: DH_SHLIBDEPS_ARGS = -Xperf-read-vdso
binary_perf: build_perf
$(dh_binary_pre)
$(call make-tools,tools/perf) install
# do not ship python2 script
: # do not ship python2 script
rm -f $(DIR)/usr/lib/perf-core/scripts/python/call-graph-from-sql.py
dh_perl /usr/lib/perf-core/scripts/perl/Perf-Trace-Util/lib/
dh_python3 /usr/lib/perf-core/scripts/python/Perf-Trace-Util/lib/
@@ -488,11 +510,11 @@ build_hyperv-daemons: $(STAMPS_DIR)/build-tools-headers
binary_hyperv-daemons: build_hyperv-daemons
$(dh_binary_pre)
$(call make-tools,tools/hv) install
for service in kvp vss; do \
dh_installsystemd --name hv-$$service-daemon --no-enable --no-start \
|| break; \
dh_installinit --name hv-$$service-daemon \
|| break; \
for i in kvp vss ; do \
dh_installsystemd --name hv-$$i-daemon --no-enable --no-start \
|| break ; \
dh_installinit --name hv-$$i-daemon \
|| break ; \
done
$(dh_binary_post)