e8306860f1
This was asked for by Leo-sp50 and torabora, and seems quite reasonable: let's provide means to keep at least some distribution configurations a bit apart, so that these can be considered more standalone in terms of hard warranted functionality but at the same time enjoying the common infrastructure. Considering lib/distro.mk: it's now experimentally pulled apart so that parallel development of different distro families can go on without major merge hassles. *Please* don't abuse with massive copy-paste. And before you ask: this might get extended to allow for "private" out-of-tree configurations being included since apparently there are goals with no meaning outside of some very particular context... but otherwise I'd like to encourage getting reusable bits in-tree.
64 lines
2.0 KiB
Makefile
64 lines
2.0 KiB
Makefile
# steps to build a distribution image:
|
|
# --- here
|
|
# 1. initialize new profile (BUILDDIR) as a copy of image.in/
|
|
# 2. configure distro
|
|
# 3. copy the needed bits from metaprofile to a new profile
|
|
# --- in BUILDDIR
|
|
# 4. build subprofiles and subsequently an image
|
|
|
|
MKIMAGE_PROFILES = $(dir $(lastword $(MAKEFILE_LIST)))
|
|
|
|
# only process the first target (inter-target cleanup is tricky)
|
|
IMAGE_TARGET := $(firstword $(MAKECMDGOALS))# distro/server-base.iso
|
|
IMAGE_CONF := $(basename $(MAKECMDGOALS))# distro/server-base
|
|
IMAGE_CLASS := $(dir $(IMAGE_TARGET))# distro/ (let's fix it)
|
|
IMAGE_CLASS := $(IMAGE_CLASS:%/=%)# distro
|
|
IMAGE_FILE := $(notdir $(IMAGE_TARGET))# server-base.iso
|
|
IMAGE_NAME := $(basename $(IMAGE_FILE))# server-base
|
|
IMAGE_TYPE := $(suffix $(IMAGE_FILE))# .iso (fix this too)
|
|
IMAGE_TYPE := $(IMAGE_TYPE:.%=%)# iso
|
|
|
|
# most of the actual work done elsewhere
|
|
include lib/*.mk
|
|
include conf.d/*.mk
|
|
include features.in/*/config.mk
|
|
|
|
DISTRO_TARGETS := $(shell sed -n 's,^\(distro/[^:.]\+\):.*$$,\1,p' \
|
|
lib/distro.mk $(wildcard conf.d/*.mk) | sort)
|
|
VE_TARGETS := $(shell sed -n 's,^\(ve/[^:.]\+\):.*$$,\1,p' \
|
|
lib/ve.mk $(wildcard conf.d/*.mk) | sort)
|
|
DISTROS := $(call addsuffices,$(DISTRO_EXTS),$(DISTRO_TARGETS))
|
|
VES := $(call addsuffices,$(VE_EXTS),$(VE_TARGETS))
|
|
IMAGES := $(DISTROS) $(VES)
|
|
|
|
.PHONY: $(IMAGES) $(DISTRO_TARGETS) $(VE_TARGETS)
|
|
|
|
help:
|
|
@echo '** available distribution targets:'
|
|
@echo $(DISTROS) | fmt -sw"$$((COLUMNS>>1))" | column -t
|
|
@echo
|
|
@echo '** available virtual environment targets:'
|
|
@echo $(VES) | fmt -sw"$$((COLUMNS>>1))" | column -t
|
|
|
|
### suboptimal but at least clear, reliable and convenient
|
|
all:
|
|
@for i in $(DISTROS); do \
|
|
echo "** building $$i:"; \
|
|
$(MAKE) --no-print-directory BUILDDIR=$(BUILDDIR) $$i; \
|
|
echo; \
|
|
done
|
|
|
|
$(IMAGES): debug \
|
|
config/with/$(IMAGE_CONF) \
|
|
config/like/$(IMAGE_CLASS) \
|
|
config/name/$(IMAGE_NAME) \
|
|
config/pack/$(IMAGE_TYPE) \
|
|
build; @:
|
|
|
|
debug:
|
|
ifeq (2,$(DEBUG))
|
|
@$(foreach v,\
|
|
$(filter IMAGE_%,$(sort $(.VARIABLES))),\
|
|
$(warning $v = $($v)))
|
|
endif
|