X-Git-Url: https://git.distorted.org.uk/~mdw/distorted-chroot/blobdiff_plain/a98c9dba94d44ada3a7e7f3b4ce8b6df6911a2d2..refs/heads/deploy:/Makefile diff --git a/Makefile b/Makefile index 6870ddc..1a25369 100644 --- a/Makefile +++ b/Makefile @@ -24,10 +24,11 @@ ### Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ### USA. -all:: +all: clean:: check:: -.PHONY: all clean check +help:: +.PHONY: all clean check help .SECONDEXPANSION: #sorry ###-------------------------------------------------------------------------- @@ -35,16 +36,24 @@ check:: CONFIG_VARS = +help:: + @echo "Configuration variables" + +## Make verbosity. +V = 0 +help::; @echo " V build verbosity" + ## Level of pickiness to aspire to. NOTIFY_FATAL = 1 - -## Path to this working tree. -CONFIG_VARS += HERE -HERE = $(abspath .) +help:: + @echo " NOTIFY_FATAL report fatal error on ..." && \ + echo " 1 = error" && \ + echo " 2 = warning" && \ + echo " 3 = info" ## Volume group from which to allocate chroot volumes and snapshots. CONFIG_VARS += VG LVPREFIX -VG = vg-$(shell hostname) +VG := vg-$(shell hostname) LVPREFIX = ## Logical volume size, as an LVM option. @@ -68,7 +77,7 @@ APTCONF = $(notdir $(wildcard etc/apt-conf.d/[0-9]*[!~])) ## Proxy setting. CONFIG_VARS += PROXY -PROXY := $(shell \ +PROXY = $(shell \ eval $$(apt-config $(foreach a,$(APTCONF),-cetc/apt-conf.d/$a) \ shell proxy Acquire::http::proxy); \ case $${proxy+t} in (t) echo "$$proxy" ;; (*) echo nil ;; esac) @@ -76,12 +85,12 @@ PROXY := $(shell \ ## Debian distributions to support. CONFIG_VARS += PRIMARY_DIST DISTS PRIMARY_DIST = stretch -DISTS = $(PRIMARY_DIST) buster bullseye sid +DISTS = $(PRIMARY_DIST) buster bullseye bookworm sid ## Host's native architecture(s). CONFIG_VARS += MYARCH NATIVE_ARCHS -MYARCH = $(shell dpkg --print-architecture) -OTHERARCHS = $(shell dpkg --print-foreign-architectures) +MYARCH := $(shell dpkg --print-architecture) +OTHERARCHS := $(shell dpkg --print-foreign-architectures) NATIVE_ARCHS = $(MYARCH) $(OTHERARCHS) ## Foreign (emulated) architectures to support. @@ -138,7 +147,7 @@ CROSS_PATHS += \ sha256sum sha384sum sha512sum shred shuf sort split stat \ stdbuf sum tac tail tee test timeout tr truncate tsort tty \ unexpand uniq unlink users wc who whoami yes) \ - /usr/lib/MULTI/coreutils/ \ + ?/usr/lib/MULTI/coreutils/ \ $(addprefix /lib/MULTI/, \ libnsl.so.* libnss_*.so.*) \ /usr/bin/gpgv \ @@ -159,7 +168,8 @@ CROSS_PATHS += \ $(addprefix /usr/bin/$a-, \ cpp gcc g++ gcov gcov-dump gcov-tool gprof \ gcc-ar gcc-nm gcc-ranlib) \ - /usr/lib/gcc-cross/$a/) + /usr/lib/gcc-cross/$a/ \ + /usr/$a/include/c++) ## Local packages to be compiled and installed in chroots. Archives can be ## found in `pkg/'. @@ -182,6 +192,10 @@ arm64_QEMUHOST = $(64BIT_QEMUHOST) i386_QEMUHOST = $(32BIT_QEMUHOST) amd64_QEMUHOST = $(64BIT_QEMUHOST) +## Which distribution of Qemu to use. +CONFIG_VARS += $(foreach d,$(DISTS),$d_QEMUDIST) +stretch_QEMUDIST = buster + ## Qemu architecture names. These tell us which Qemu binary to use for a ## particular Debian architecture. CONFIG_VARS += $(foreach a,$(FOREIGN_ARCHS),$a_QEMUARCH) @@ -205,11 +219,14 @@ TOOLSARCH = $(MYARCH) ## A directory in which we can maintain private files and state. CONFIG_VARS += STATE STATE = state +help::; @echo " STATE directory for state files" ## A directory which will be spliced into chroots as `/usr/local.schroot/'. ## This will be our primary point of contact with the chroot. -CONFIG_VARS += LOCAL +CONFIG_VARS += LOCAL ABSLOCAL LOCAL = local.schroot +ABSLOCAL = $(abspath $(LOCAL)) +help::; @echo " LOCAL directory for chroot /usr/local" ## How to run a command as a privileged user. CONFIG_VARS += ROOTLY @@ -234,6 +251,15 @@ FOREIGN_GNUARCHS := $(foreach a,$(FOREIGN_ARCHS),\ -qDEB_TARGET_GNU_TYPE)) ###-------------------------------------------------------------------------- +### Basic help. + +help:: + @echo "Basic targets" && \ + echo " all build and install the infrastructure" && \ + echo " clean delete build files" && \ + echo " check verify correct installation" + +###-------------------------------------------------------------------------- ### Utilities. ## Hack to force rebuilding. @@ -244,7 +270,6 @@ _force: comma = , ## Silent-rules machinery. -V = 0 V_AT = $(V_AT_$V) V_AT_0 = @ v_print = $(call v_print_$V,$1,$2) @@ -263,6 +288,24 @@ CLEANFILES += log/*.log SILENCE_LVM = \ LVM_SUPPRESS_FD_WARNINGS=1; export LVM_SUPPRESS_FD_WARNINGS +## $(call file-name,PATH) +## +## Strip any trailing `/' from the PATH. +file-name = $(1:/=) + +## $(call base-name,PATH) +## +## Expand to the last component of PATH, whether or not it's a directory +## name with a trailing `/'. +base-name = $(notdir $(call file-name,$1)) + +## $(call parent-dir,PATH) +## +## Expand to the parent directory of PATH, whether or not it's a directory +## name with a trailing `/'. +## `/'. +parent-dir = $(dir $(call file-name,$1)) + ## $(call definedp,VAR) ## ## Expand non-empty if and only if VAR is defined (but possibly empty). @@ -277,7 +320,8 @@ throwrc = { $1; echo $$? >&4; } ## $(call squote,TXT) ## ## Single-quote TXT. -squote = '$(subst ','\\'',$1)' +squote = '$(subst ','\'',$1)' +#' ## $(call chroot-dist,D-A) -> D ## $(call chroot-arch,D-A) -> A @@ -385,6 +429,11 @@ check-mountpoint = $(call check,$1,"\`$2' is not a mount point", \ check-symlink = $(call check,$1,"\`$2' is not a link to \`$3'", \ [ -L "$2" ] && [ "$$(readlink "$2")" = "$3" ]) +## DIR/ +## +## Make a directory. Use as an order-only dependency. +%/:; $(V_AT)mkdir -p $@ + ###-------------------------------------------------------------------------- ### Python extensions. @@ -408,28 +457,24 @@ PYEXT_ALLSRC = $(foreach x,$(PYEXTS),\ $(call c-source,$($x_SOURCES))) PYEXT_ALLOBJ = $(foreach x,$(PYEXTS),\ $(call c-object,$($x_SOURCES))) -$(PYEXT_ALLOBJ): $(STATE)/obj/%.o: src/%.c - $(V_AT)mkdir -p $(dir $@) +$(PYEXT_ALLOBJ): $(STATE)/obj/%.o: src/%.c | $$(dir $$@) $(call v_tag,CC)$(CC) -c $(CFLAGS) $(PYEXT_CFLAGS) -o$@ $< PYMODULES = $(foreach x,$(PYEXTS),$(STATE)/lib/python/$x.so) -all:: $(PYMODULES) -$(PYMODULES): $(STATE)/lib/python/%.so: $$(call c-object,$$($$*_SOURCES)) - $(V_AT)mkdir -p $(dir $@) +all: $(PYMODULES) +$(PYMODULES): $(STATE)/lib/python/%.so: \ + $$(call c-object,$$($$*_SOURCES)) | $$(dir $$@) $(call v_tag,LD)$(LD) $(LDFLAGS) $(PYEXT_LDFLAGS) -o$@ $^ ###-------------------------------------------------------------------------- ### Scripts. SCRIPTS += chroot-maint -SCRIPTS += mkbuildchroot SCRIPTS += mkchrootconf -SCRIPTS += install-cross-tools update-cross-tools SUBST_SCRIPTS = $(addprefix $(STATE)/bin/,$(SCRIPTS)) -all:: $(SUBST_SCRIPTS) -$(SUBST_SCRIPTS): $(STATE)/bin/%: bin/% $(STATE)/config.sh - $(V_AT)mkdir -p $(dir $@) +all: $(SUBST_SCRIPTS) +$(SUBST_SCRIPTS): $(STATE)/bin/%: bin/% $(STATE)/config.sh | $$(dir $$@) $(call v_tag,SUBST){ \ sed \ -e '2i### GENERATED by distorted-chroot: do not edit' \ @@ -445,10 +490,10 @@ $(SUBST_SCRIPTS): $(STATE)/bin/%: bin/% $(STATE)/config.sh ## In a chroot, `/etc/apt/sources.list' links to ## `/usr/local.schroot/etc/apt/sources.$d' for the appropriate distribution. APT_SOURCES = $(foreach d,$(DISTS),$(LOCAL)/etc/apt/sources.$d) -all:: $(APT_SOURCES) +all: $(APT_SOURCES) -$(foreach d,$(DISTS),$(STATE)/etc/apt/aptsrc.$d): $(STATE)/etc/apt/aptsrc.%: - $(V_AT)mkdir -p $(dir $@) +$(foreach d,$(DISTS),$(STATE)/etc/apt/aptsrc.$d): \ + $(STATE)/etc/apt/aptsrc.%: | $$(dir $$@) $(call v_tag,GEN){ \ echo "### -*-conf-*- GENERATED by distorted-chroot: do not edit"; \ echo "subscribe"; \ @@ -456,8 +501,8 @@ $(foreach d,$(DISTS),$(STATE)/etc/apt/aptsrc.$d): $(STATE)/etc/apt/aptsrc.%: } >$@.new && mv $@.new $@ $(APT_SOURCES): $(LOCAL)/etc/apt/sources.%: \ - $$(APTSRC) $$($$*_APTSRC) $$(STATE)/etc/apt/aptsrc.$$* - $(V_AT)mkdir -p $(dir $@) + $$(APTSRC) $$($$*_APTSRC) $$(STATE)/etc/apt/aptsrc.$$* \ + | $$(dir $$@) $(call v_tag,GEN)bin/mkaptsrc \ $(APTSRC) $($*_APTSRC) $(STATE)/etc/apt/aptsrc.$* \ >$@.new && mv $@.new $@ @@ -466,10 +511,9 @@ CLEANFILES += $(APT_SOURCES) ## In a chroot, a link `/etc/apt/apt.conf.d/FOO' is created for each file in ## `/usr/local.schroot/etc/apt/apt.conf.d/FOO'. APT_CONFIGS = $(addprefix $(LOCAL)/etc/apt/apt.conf.d/,$(APTCONF)) -all:: $(APT_CONFIGS) +all: $(APT_CONFIGS) $(APT_CONFIGS): $(LOCAL)/etc/apt/apt.conf.d/%: \ - $$(or $$(_$$*_APTCONFSRC) etc/apt-conf.d/$$*) - $(V_AT)mkdir -p $(dir $@) + $$(or $$(_$$*_APTCONFSRC) etc/apt-conf.d/$$*) | $$(dir $$@) $(call v_tag,COPY)cp $< $@.new && mv $@.new $@ clean::; rm -f $(APT_CONFIGS) @@ -480,26 +524,25 @@ check::; $(call check-executable,ERR,/usr/bin/eatmydata) EATMYDATA_HACKS += apt-get aptitude dpkg SYMLINK_EATMYDATA_HACKS = $(addprefix $(LOCAL)/hacks/,$(EATMYDATA_HACKS)) -all:: $(SYMLINK_EATMYDATA_HACKS) +all: $(SYMLINK_EATMYDATA_HACKS) $(SYMLINK_EATMYDATA_HACKS): $(LOCAL)/hacks/%: \ - $$(if $$(call symlink-ok-p,$$@,/usr/bin/eatmydata),,_force) - $(V_AT)mkdir -p $(dir $@) + $$(if $$(call symlink-ok-p,$$@,/usr/bin/eatmydata),,_force) \ + | $$(dir $$@) $(call v_tag,SYMLINK)ln -sf /usr/bin/eatmydata $@.new && mv $@.new $@ clean::; rm -f $(SYMLINK_EATMYDATA_HACKS) SCRIPT_HACKS += buildwrap COPY_SCRIPT_HACKS = $(addprefix $(LOCAL)/hacks/,$(SCRIPT_HACKS)) -all:: $(COPY_SCRIPT_HACKS) -$(COPY_SCRIPT_HACKS): $(LOCAL)/hacks/%: bin/% - $(V_AT)mkdir -p $(dir $@) +all: $(COPY_SCRIPT_HACKS) +$(COPY_SCRIPT_HACKS): $(LOCAL)/hacks/%: bin/% | $$(dir $$@) $(call v_tag,COPY)cp $< $@.new && mv $@.new $@ clean::; rm -f $(COPY_SCRIPT_HACKS) ###-------------------------------------------------------------------------- ### `schroot' and `sbuild' configuration. -all:: schroot-config -schroot-config:: +all: schroot-config +schroot-config: .PHONY: schroot-config check::; $(call check-mountpoint,WARN,/var/lib/sbuild/build) @@ -515,124 +558,123 @@ schroot-config_HASH := \ $(shell $(call %print-varlist,$(CONFIG_VARS)) | \ sha256sum | cut -c1-32) schroot-config_FILE = $(STATE)/config.sh-$(schroot-config_HASH) -$(schroot-config_FILE): - $(V_AT)mkdir -p $(STATE) +$(schroot-config_FILE): | $(STATE)/ $(V_AT)rm -f $(STATE)/config.sh-* $(call v_tag,GEN)$(call %print-varlist,$(CONFIG_VARS)) \ >$@.new && mv $@.new $@ -schroot-config:: $(STATE)/config.sh +schroot-config: $(STATE)/config.sh $(STATE)/config.sh: $(schroot-config_FILE) - $(call v_tag,SYMLINK)ln -sf $(notdir $<) $@ + $(call v_tag,SYMLINK)ln -sf $(call base-name,$<) $@ -schroot-config:: $(LOCAL)/etc/schroot/sbuild.schroot -$(LOCAL)/etc/schroot/sbuild.schroot: $(STATE)/bin/mkchrootconf - $(V_AT)mkdir -p $(dir $@) +schroot-config: $(LOCAL)/etc/schroot/sbuild.schroot +$(LOCAL)/etc/schroot/sbuild.schroot: $(STATE)/bin/mkchrootconf | $$(dir $$@) $(call v_tag,GEN)$(STATE)/bin/mkchrootconf >$@.new && \ $(ROOTLY) chown root:root $@.new && mv $@.new $@ CLEANFILES += $(LOCAL)/etc/schroot/sbuild.schroot -check::; $(call check-symlink,WARN,/etc/schroot/chroot.d/sbuild,$(HERE)/$(LOCAL)/etc/schroot/sbuild.schroot) +check::; $(call check-symlink,WARN,/etc/schroot/chroot.d/sbuild,$(ABSLOCAL)/etc/schroot/sbuild.schroot) -schroot-config:: $(LOCAL)/etc/schroot/sbuild.profile/copyfiles -$(LOCAL)/etc/schroot/sbuild.profile/copyfiles: $(schroot-config_STAMP) - $(V_AT)mkdir -p $(dir $@) +schroot-config: $(LOCAL)/etc/schroot/sbuild.profile/copyfiles +$(LOCAL)/etc/schroot/sbuild.profile/copyfiles: \ + $(schroot-config_STAMP) | $$(dir $$@) $(call v_tag,GEN){ \ echo "### -*-conf-*- GENERATED by distorted-chroot: do not edit"; \ for i in $(SCHROOT_COPYFILES); do echo "$$i"; done; \ } >$@.new && mv $@.new $@ CLEANFILES += $(LOCAL)/etc/schroot/sbuild.profile/copyfiles -schroot-config:: $(LOCAL)/etc/schroot/sbuild.profile/nssdatabases -$(LOCAL)/etc/schroot/sbuild.profile/nssdatabases: $(schroot-config_STAMP) - $(V_AT)mkdir -p $(dir $@) +schroot-config: $(LOCAL)/etc/schroot/sbuild.profile/nssdatabases +$(LOCAL)/etc/schroot/sbuild.profile/nssdatabases: \ + $(schroot-config_STAMP) | $$(dir $$@) $(call v_tag,GEN){ \ echo "### -*-conf-*- GENERATED by distorted-chroot: do not edit"; \ for i in $(SCHROOT_NSSDATABASES); do echo "$$i"; done; \ } >$@.new && mv $@.new $@ CLEANFILES += $(LOCAL)/etc/schroot/sbuild.profile/nssdatabases -schroot-config:: $(LOCAL)/etc/schroot/sbuild.profile/fstab +schroot-config: $(LOCAL)/etc/schroot/sbuild.profile/fstab $(LOCAL)/etc/schroot/sbuild.profile/fstab: \ - etc/sbuild.fstab.in $(schroot-config_STAMP) - $(V_AT)mkdir -p $(dir $@) + etc/sbuild.fstab.in $(schroot-config_STAMP) | $$(dir $$@) $(call v_tag,SUBST)$(call subst-file,### -*-conf-*-) \ <$< >$@.new && mv $@.new $@ CLEANFILES += $(LOCAL)/etc/schroot/sbuild.profile/fstab -check::; $(call check-symlink,WARN,/etc/schroot/sbuild,$(HERE)/$(LOCAL)/etc/schroot/sbuild.profile) +check::; $(call check-symlink,WARN,/etc/schroot/sbuild,$(ABSLOCAL)/etc/schroot/sbuild.profile) -schroot-config:: $(LOCAL)/etc/sbuild.conf -$(LOCAL)/etc/sbuild.conf: etc/sbuild.conf.in $(schroot-config_STAMP) - $(V_AT)mkdir -p $(dir $@) +schroot-config: $(LOCAL)/etc/sbuild.conf +$(LOCAL)/etc/sbuild.conf: etc/sbuild.conf.in \ + $(schroot-config_STAMP) | $$(dir $$@) $(call v_tag,SUBST)$(call subst-file,### -*-perl-*-) \ <$< >$@.new && mv $@.new $@ CLEANFILES += $(LOCAL)/etc/sbuild.conf -check::; $(call check-symlink,WARN,/etc/sbuild/sbuild.conf,$(HERE)/$(LOCAL)/etc/sbuild.conf) +check::; $(call check-symlink,WARN,/etc/sbuild/sbuild.conf,$(ABSLOCAL)/etc/sbuild.conf) check::; $(call check-executable,WARN,/usr/local.schroot/hacks/apt-get) SCHROOT_SCRIPTS += 11private SCHROOT_SCRIPTS += 15binfmt SCHROOT_SCRIPTS += 51chrootenv COPY_SCHROOT_SCRIPTS = $(addprefix $(LOCAL)/etc/schroot/setup.d/,$(SCHROOT_SCRIPTS)) -schroot-config:: $(COPY_SCHROOT_SCRIPTS) +schroot-config: $(COPY_SCHROOT_SCRIPTS) $(COPY_SCHROOT_SCRIPTS): \ - $(LOCAL)/etc/schroot/setup.d/%: etc/schroot-scripts/% - $(V_AT)mkdir -p $(dir $@) + $(LOCAL)/etc/schroot/setup.d/%: etc/schroot-scripts/% \ + | $$(dir $$@) $(call v_tag,COPY)cp $< $@.new && mv $@.new $@ CLEANFILES += $(COPY_SCHROOT_SCRIPTS) CHECK_SCHROOT_SCRIPTS = $(addprefix check-script/,$(SCHROOT_SCRIPTS)) check:: $(CHECK_SCHROOT_SCRIPTS) $(CHECK_SCHROOT_SCRIPTS): check-script/%: - $(call check-symlink,WARN,/etc/schroot/setup.d/$*,$(HERE)/$(LOCAL)/etc/schroot/setup.d/$*) + $(call check-symlink,WARN,/etc/schroot/setup.d/$*,$(ABSLOCAL)/etc/schroot/setup.d/$*) .PHONY: $(addprefix check-script/,$(SCHROOT_SCRIPTS)) ###-------------------------------------------------------------------------- +### Ccache setup. + +CCACHE_CONFIGS = $(foreach r,$(ALL_CHROOTS), \ + /var/lib/sbuild/build/.ccache/$(LVPREFIX)$r/ccache.conf) +all: $(CCACHE_CONFIGS) +$(CCACHE_CONFIGS): /var/lib/sbuild/build/.ccache/$(LVPREFIX)%/ccache.conf: \ + etc/ccache.conf | $$(dir $$@) + $(call v_tag,COPY)cp $< $@.new && mv $@.new $@ + +###-------------------------------------------------------------------------- ### `/usr/local/' structure. LOCAL_COMMON_DIRS = share/ src/ LOCAL_EXTRA_DIRS = share/man/ -all:: $(foreach d,$(LOCAL_COMMON_DIRS) $(LOCAL_EXTRA_DIRS),$(LOCAL)/$d) -$(foreach d,$(LOCAL_COMMON_DIRS) $(LOCAL_EXTRA_DIRS),$(LOCAL)/$d): - $(V_AT)mkdir -p $(dir $(patsubst %/,%,$@)) - $(call v_tag,MKDIR)mkdir $@ +all: $(foreach d,$(LOCAL_COMMON_DIRS) $(LOCAL_EXTRA_DIRS),$(LOCAL)/$d) -LOCAL_ARCH_DIRS = bin/ etc/ games/ include/ lib/ libexec/ sbin/ +LOCAL_ARCH_DIRS = bin/ etc/ games/ include/ include.aside/ +LOCAL_ARCH_DIRS += lib/ libexec/ sbin/ LOCAL_ARCH_LINKS = man man_LINKDEST = share/man -all:: $(foreach a,$(ALL_ARCHS),\ +all: $(foreach a,$(ALL_ARCHS),\ $(LOCAL)/$a/ \ $(foreach d,$(LOCAL_ARCH_DIRS),$(LOCAL)/$a/$d) \ $(foreach d,$(LOCAL_ARCH_LINKS),$(LOCAL)/$a/$d) \ $(foreach d,$(LOCAL_COMMON_DIRS),$(LOCAL)/$a/$d)) -$(foreach a,$(ALL_ARCHS),$(LOCAL)/$a/): - $(call v_tag,MKDIR)mkdir $@ -$(foreach a,$(ALL_ARCHS),\ - $(foreach d,$(LOCAL_ARCH_DIRS),$(LOCAL)/$a/$d)): - $(V_AT)mkdir -p $(dir $(patsubst %/,%,$@)) - $(call v_tag,MKDIR)mkdir $@ $(foreach a,$(ALL_ARCHS),\ $(foreach d,$(LOCAL_ARCH_LINKS),$(LOCAL)/$a/$d)): \ - $$(if $$(call symlink-ok-p,$$@,$$($$(notdir $$@)_LINKDEST)),,_force) - $(V_AT)mkdir -p $(notdir $@) - $(call v_tag,SYMLINK)ln -sf $($(notdir $@)_LINKDEST) $@ + $$(if $$(call symlink-ok-p,$$@,$$($$(call base-name,$$@)_LINKDEST)),,_force) \ + | $$(dir $$@) + $(call v_tag,SYMLINK)ln -sf $($(call base-name,$@)_LINKDEST) $@ $(foreach a,$(ALL_ARCHS),\ $(foreach d,$(LOCAL_COMMON_DIRS),$(LOCAL)/$a/$d)): \ - $$(if $$(call symlink-ok-p,$$@,../$$(notdir $$(patsubst %/,%,$$@))),,_force) - $(V_AT)mkdir -p $(dir $(patsubst %/,%,$@)) - $(call v_tag,SYMLINK)ln -sf ../$(notdir $(patsubst %/,%,$@)) $(patsubst %/,%,$@) + $$(if $$(call symlink-ok-p,$$@,../$$(call base-name,$$@)),,_force) \ + | $$(call parent-dir,$$@) + $(call v_tag,SYMLINK)ln -sf ../$(call base-name,$@) $(call file-name,$@) ###-------------------------------------------------------------------------- ### Main chroot maintenance. OPTS = -FRESH = create +FRESH = 1w JOBS = chroot cross-tools pkg-build MAINTQ_ = -q MAINTQ_0 = -q -MAINT = +$(call v_tag,RUN)\ +MAINT = +$(call v_tag,MAINT)\ PYTHONPATH=$(STATE)/lib/python $(STATE)/bin/chroot-maint \ $(MAINTQ_$V) $(OPTS) @@ -640,6 +682,34 @@ maint: all check $(MAINT) -f$(FRESH) $(JOBS) .PHONY: maint +help:: + @echo "Maintenance targets" && \ + echo " maint run chroot maintenance" && \ + echo "Maintenance variables" && \ + echo " FRESH max time between updates" && \ + echo " N[smhdw] | create | force" && \ + echo " JOBS maintenance jobs to run" && \ + echo " ACT[.PAT,...][/FRESH]" && \ + echo " OPTS additional options (bin/chroot-maint --help)" && \ + echo "Maintenance actions" && \ + echo " chroot create and populate chroot" && \ + echo " cross-tools build cross-compilation toolchains" && \ + echo " pkg-source download and unpack local utilities" && \ + echo " pkg-build compile and install local utilities" + +###-------------------------------------------------------------------------- +### Running random commands. + +CMD = echo %d %a +subst-command = $(subst %d,$(call chroot-dist,$1), \ + $(subst %a,$(call chroot-arch,$1), \ + $(subst %r,$1, $(CMD)))) + +run: $(foreach c,$(ALL_CHROOTS),run/$c) +$(foreach c,$(ALL_CHROOTS),run/$c): run/%: + $(V_AT)$(call v_print,RUN,$(call subst-command,$*))\ + $(call subst-command,$*) + ###-------------------------------------------------------------------------- ### Other maintenance targets.