67adab492f
This subprofile is akin to THE_* variables family: the configuration bits and script hooks sitting there influence whatever chroot is declared to be the user facing one in the end, whether it comes from vm image or live subprofile. The services feature ought to be a changeset of its own which would be based on rootfs and become the base for ve/vm changes but I chose to just do it atomically; some pre-existing duplicates are pruned now.
130 lines
3.4 KiB
Makefile
130 lines
3.4 KiB
Makefile
# step 3: copy the needed features to $(BUILDDIR)
|
|
# (only regarding the needed subprofiles)
|
|
|
|
ifndef BUILDDIR
|
|
|
|
help/plus all: banner
|
|
@$(call grepper,'^+')
|
|
|
|
help/features: banner
|
|
@$(call grepper,'^use/')
|
|
|
|
banner:
|
|
@echo "** BUILDDIR not defined; available features:"
|
|
|
|
grepper = $(and $(1),$(grepper_body))
|
|
define grepper_body
|
|
@for dir in */; do \
|
|
out="`grep -h $(1) $$dir/config.mk \
|
|
| cut -f1 -d: \
|
|
| tr ' ' '\n\n' \
|
|
| grep $(1) \
|
|
| tr '\n' ' ' \
|
|
| sort -u`"; \
|
|
[ -z "$$out" ] || echo "$$dir: $$out"; \
|
|
done
|
|
endef
|
|
|
|
%:
|
|
$(error BUILDDIR not defined)
|
|
|
|
else
|
|
|
|
export BUILDDIR
|
|
|
|
include $(BUILDDIR)/distcfg.mk
|
|
|
|
# first rsync what's static, and make backups (*~) --
|
|
# these might signal of file clashes (or plain dirt);
|
|
# second, care for toplevel dirs;
|
|
# then handle feature generator scripts
|
|
#
|
|
# NB: some subprofiles will be specified as "src/dst"
|
|
# -- then both src/ and dst/ can hold the addons;
|
|
# still both pieces go into a single destination
|
|
|
|
### sorry for somewhat complicated and overly long lines
|
|
|
|
TARGETS := prep $(FEATURES) finalize
|
|
|
|
.PHONY: $(TARGETS)
|
|
all: | $(TARGETS)
|
|
|
|
prep:
|
|
@echo "** starting feature configuration"
|
|
@if [ -n "$(GLOBAL_DEBUG)" ]; then \
|
|
echo "** target subprofiles: $(SUBPROFILES)"; \
|
|
echo "** requested features: $(FEATURES)"; \
|
|
fi
|
|
|
|
# feat
|
|
# NB: this is somewhat complicated since it has to handle "$sub" like:
|
|
# - "/": copy feature's toplevel parts to the BUILDDIR toplevel
|
|
# - "stage1": copy feature's stage1 parts into stage1 subprofile
|
|
# - "stage2@live": copy feature's stage2 parts into live subprofile
|
|
# - "rootfs@/": copy feature's rootfs parts into BUILDDIR toplevel
|
|
$(FEATURES):
|
|
@feat=$@; \
|
|
if [ -n "$(GLOBAL_DEBUG)" ]; then \
|
|
echo "** adding $$feat feature"; \
|
|
fi; \
|
|
pushd "$$feat" >/dev/null && \
|
|
for sub in / $(SUBPROFILES); do \
|
|
if [ "$$sub" = / ]; then \
|
|
srcdirs="."; \
|
|
dst="."; \
|
|
else \
|
|
src="$${sub%@*}"; \
|
|
dst="$${sub#*@}"; \
|
|
if [ "$$src" = / ]; then \
|
|
echo "** src=/: you don't want this" >&2; \
|
|
exit 1; \
|
|
fi; \
|
|
if [ "$$dst" = / -o "$$dst" = "" ]; then \
|
|
dst="."; \
|
|
fi; \
|
|
srcdirs=; \
|
|
if [ -d "$$src" ]; then \
|
|
srcdirs="$$src"; \
|
|
fi; \
|
|
if [ -d "$$dst" -a "$$dst" != "$$src" ]; then \
|
|
srcdirs="$${srcdirs:+$$srcdirs }$$dst"; \
|
|
fi; \
|
|
: "why this overduplication was done? (still needed)"; \
|
|
for srcdir in $$srcdirs; do \
|
|
rsync -qab "$$srcdir/" "$(BUILDDIR)/$$dst/"; \
|
|
done; \
|
|
fi; \
|
|
if [ -n "$(GLOBAL_DEBUG)" ]; then \
|
|
echo "** src=[$$src] dst=[$$dst] srcdirs=[$$srcdirs]"; \
|
|
fi; \
|
|
for srcdir in $$srcdirs; do \
|
|
[ -d "$$srcdir" ] || continue; \
|
|
pushd "$$srcdir" >&/dev/null; \
|
|
for part in lib {image-,}scripts.d; do \
|
|
destdir="$(BUILDDIR)/$$dst/$$part"; \
|
|
[ -d "$$destdir" ] || continue; \
|
|
if [ "$$sub" = / -a -d "$$part" ]; then \
|
|
rsync -qab "$$part/" "$$destdir/"; \
|
|
fi; \
|
|
done; \
|
|
popd >&/dev/null; \
|
|
done; \
|
|
if [ -n "$$dst" -a "$$dst" != "." ]; then \
|
|
the="$$sub subprofile"; \
|
|
else \
|
|
the="toplevel"; \
|
|
fi; \
|
|
mp-commit "$(BUILDDIR)/$$dst/" "$$feat feature: $$the part added"; \
|
|
done; \
|
|
if [ -x "generate.sh" ]; then sh generate.sh; fi; \
|
|
if [ -s "generate.mk" ]; then $(MAKE) -f generate.mk; fi; \
|
|
mp-commit "$(BUILDDIR)" "$$feat feature generation complete"; \
|
|
popd >/dev/null
|
|
|
|
finalize:
|
|
@find "$(BUILDDIR)/" -name '*~' \
|
|
| sed "s,$(BUILDDIR)/,** warning: file clash: ," >&2
|
|
|
|
endif
|