pkg.in/lists: archdep suffices for pkglists
This is an initial implementation of architecture dependent contents handling for package lists more or less in the vein of mkimage-profiles-desktop's one *but* using suffix part to filter words in or out *not* prefix part to replace it with a comment marker (thus filtering out lines). The syntax should be pretty obvious: a b@i586 c@x86_64 will get "a b" given ARCH=i586 and "a c" given ARCH=x86_64; please see doc/archdep.txt for a more elaborate description and a conversion script.
This commit is contained in:
parent
f6d2790423
commit
ac5dbb4bba
46
doc/archdep.txt
Normal file
46
doc/archdep.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
== Архитектурно-зависимые фрагменты ==
|
||||||
|
|
||||||
|
=== Makefile ===
|
||||||
|
|
||||||
|
Достаточно воспользоваться ifeq/ifneq, сравнивая $(ARCH) с нужным:
|
||||||
|
|
||||||
|
ifeq (x86_64,$(ARCH))
|
||||||
|
EFI_LISTS := $(call tags,base efi)
|
||||||
|
endif
|
||||||
|
|
||||||
|
При необходимости сравнить со списком ("любой x86") можно сделать так:
|
||||||
|
|
||||||
|
ifeq (,$(filter-out i586 x86_64,$(ARCH)))
|
||||||
|
use/x11/xorg: use/x11 use/x11/intel use/firmware
|
||||||
|
else
|
||||||
|
use/x11/xorg: use/x11
|
||||||
|
endif
|
||||||
|
|
||||||
|
В рецептах (shell-часть Makefile) используйте $(ARCH) или $$ARCH.
|
||||||
|
|
||||||
|
=== скрипты ===
|
||||||
|
|
||||||
|
В скриптовых хуках ({image-,}scripts.d/*) проверяйте $GLOBAL_ARCH.
|
||||||
|
|
||||||
|
=== списки пакетов ===
|
||||||
|
|
||||||
|
Бывает так, что в списке пакетов есть смысл упоминать какой-либо из них
|
||||||
|
только для определённой архитектуры (например, wine или steam); в таких
|
||||||
|
случаях можно воспользоваться механизмом подстановки, который пословно
|
||||||
|
обрабатывает списки и в случае наличия суффикса @ARCH оставляет только
|
||||||
|
слова, в которых этот суффикс соответствует заданной архитектуре сборки.
|
||||||
|
|
||||||
|
Например, для Simply Linux в mkimage-profiles-desktop есть строчки:
|
||||||
|
|
||||||
|
@I586_ONLY@haspd
|
||||||
|
@X86_64_ONLY@i586-haspd
|
||||||
|
|
||||||
|
В случае mkimage-profiles они должны выглядеть так:
|
||||||
|
|
||||||
|
haspd@i586
|
||||||
|
i586-haspd@x86_64
|
||||||
|
|
||||||
|
Для преобразования можно воспользоваться следующей командой:
|
||||||
|
|
||||||
|
sed -r -e 's/@I586_ONLY@([^\t ]+)/\1@i586/g' \
|
||||||
|
-e 's/@X86_64_ONLY@([^\t ]+)/\1@x86_64/g'
|
@ -42,6 +42,8 @@ include::features.txt[]
|
|||||||
|
|
||||||
include::pkglists.txt[]
|
include::pkglists.txt[]
|
||||||
|
|
||||||
|
include::archdep.txt[]
|
||||||
|
|
||||||
= Каталоги =
|
= Каталоги =
|
||||||
|
|
||||||
include::../conf.d/README[]
|
include::../conf.d/README[]
|
||||||
|
@ -98,6 +98,7 @@ profile/bare: profile/init
|
|||||||
ifeq (,$(REPO:altlinux%=))
|
ifeq (,$(REPO:altlinux%=))
|
||||||
@$(call set,IMAGE_INIT_LIST,+branding-$$(BRANDING)-release)
|
@$(call set,IMAGE_INIT_LIST,+branding-$$(BRANDING)-release)
|
||||||
endif
|
endif
|
||||||
|
@$(call xport,ARCH)
|
||||||
@mp-commit "$(BUILDDIR)" "image configuration defaults set"
|
@mp-commit "$(BUILDDIR)" "image configuration defaults set"
|
||||||
|
|
||||||
# put the derived SUBPROFILE_DIRS here to get it logged in clear text by the way
|
# put the derived SUBPROFILE_DIRS here to get it logged in clear text by the way
|
||||||
|
@ -18,7 +18,7 @@ include $(BUILDDIR)/distcfg.mk
|
|||||||
SUFFIX := pkg/lists
|
SUFFIX := pkg/lists
|
||||||
TARGET := $(BUILDDIR)/$(SUFFIX)
|
TARGET := $(BUILDDIR)/$(SUFFIX)
|
||||||
|
|
||||||
all: $(TARGET) $(GLOBAL_DEBUG) $(DOTBASE) copy-lists copy-groups
|
all: | $(TARGET) $(GLOBAL_DEBUG) $(DOTBASE) copy-lists copy-groups grep-archdep
|
||||||
@mp-commit "$(TARGET)" "requested $(SUFFIX) copied over"
|
@mp-commit "$(TARGET)" "requested $(SUFFIX) copied over"
|
||||||
|
|
||||||
# env | sort -u | grep _LISTS | xargs -r cp -t
|
# env | sort -u | grep _LISTS | xargs -r cp -t
|
||||||
@ -33,6 +33,15 @@ copy-groups:
|
|||||||
cp -at $(TARGET) -- $(THE_GROUPS) $(MAIN_GROUPS); \
|
cp -at $(TARGET) -- $(THE_GROUPS) $(MAIN_GROUPS); \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
grep-archdep: a = $(ARCH)
|
||||||
|
grep-archdep: s = [:space:]
|
||||||
|
grep-archdep:
|
||||||
|
# xargs -L 1024 -n 1024 ? -- breaks -I
|
||||||
|
@find $(TARGET) -type f \
|
||||||
|
| xargs -I '__' sh -c '\
|
||||||
|
sed -rni "s/\\<([^@ ]*)\\>|\\<([^@ ]*)@$a\\>/\\1\\2/pg" __; \
|
||||||
|
sed -i -r "s/\\<([^@ ]*)@[^@ ]+\\> *//g" __'
|
||||||
|
|
||||||
# do beforehand as foreach gets expanded before recipe execution
|
# do beforehand as foreach gets expanded before recipe execution
|
||||||
$(TARGET):
|
$(TARGET):
|
||||||
@mkdir -p $(TARGET)
|
@mkdir -p $(TARGET)
|
||||||
|
Loading…
Reference in New Issue
Block a user