Created attachment 11812 [details] Ошибка при генерации initrd При генерации initrd для firmware-linux-20221024-alt1 - ошибка (см. картинку)
Тоже столкнулся. 1: kernel-image-std-def-2:5.15.77-alt1 #################################################################################################### [ 50%] 2: kernel-modules-virtualbox-std-def-7.0.2-alt1.331597.1 #################################################################################################### [100%] /usr/share/make-initrd/features/luks/config.mk:10: /usr/share/make-initrd/features/usr/share/make-initrd/tools/kernel-compare/rules.mk: No such file or directory make[1]: *** No rule to make target '/usr/share/make-initrd/features/usr/share/make-initrd/tools/kernel-compare/rules.mk'. Stop.
*** Bug 44236 has been marked as a duplicate of this bug. ***
Проблема возникает после обновления make 4.3.0-alt1 -> 4.4.0-alt1
make-initrd-2.32.1-alt1 -> sisyphus: Tue Nov 08 2022 Alexey Gladkov <legion@altlinux.ru> 2.32.1-alt1 - New version (2.32.1). - mk: do not expand functions out of '$(call ...)' context (ALT#44226).
Для архива -- типовой вид исправления (аналогичное поймали в mkimage-profiles): --- -FSCK_RUNTIME_FILES := $(shell $(shell-export-vars) $(FEATURESDIR)/fsck/bin/find-files) +FSCK_RUNTIME_FILES := $(shell $(call shell-export-vars) $(FEATURESDIR)/fsck/bin/find-files) --- http://git.altlinux.org/gears/m/make-initrd.git?p=make-initrd.git;a=commitdiff;h=9ee3032082214223bea6b8f323c4b5fcae48a1c4 ...бишь _явный_ вызов функции как функции.
(Ответ для Michael Shigorin на комментарий #5) > Для архива -- типовой вид исправления (аналогичное поймали в > mkimage-profiles): > > --- > -FSCK_RUNTIME_FILES := $(shell $(shell-export-vars) > $(FEATURESDIR)/fsck/bin/find-files) > +FSCK_RUNTIME_FILES := $(shell $(call shell-export-vars) > $(FEATURESDIR)/fsck/bin/find-files) > --- > http://git.altlinux.org/gears/m/make-initrd.git?p=make-initrd.git; > a=commitdiff;h=9ee3032082214223bea6b8f323c4b5fcae48a1c4 > > ...бишь _явный_ вызов функции как функции. Суть этого не в этом. Из-за того, что происходит импорт определения функций, то make начинает их выполнять. В этом коммите у функций сделана проверка: ``` define if-success -$(if $(1),$(shell { $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)")) +$(if $(filter if-success,$(0)),$(if $(1),$(shell { $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)"))) endef ``` Проверка аргумента $0. Который согласно документации на функцию call[1] будет содержать имя самой функции. ``` $(call variable,param,param,…) When make expands this function, it assigns each param to temporary variables $(1), $(2), etc. The variable $(0) will contain variable. ``` Проблему можно решить другим способом используя :=. Например ``` define if-success := $(if $(1),$(shell { $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)")) endef ``` Но в этом случае внутри функции нельзя использовать переменные, которые будут дополняться и переопределяться. [1] https://www.gnu.org/software/make/manual/html_node/Call-Function.html#Call-Function
"Суть этого не в этом." -- это пять баллов! Промахнулся словом, а сколько глубины появилось! Суть исправления не в этом.