1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
ifeq (,$(MKIMAGE_PROFILES))
$(error this makefile is designed to be included in toplevel one)
endif
ifneq (,$(filter-out $(DIRECT_TARGETS),$(MAKECMDGOALS)))
# this could have come from env; or could be symlinked; or is made anew
# (the reuse rationale is avoiding extra tmpdir lookups)
# NB: immediate assignment matters
ifeq (,$(BUILDDIR))
BUILDLINK := $(realpath $(SYMLINK))
BUILDDIR := $(shell \
if [ -s "$(SYMLINK)" -a "$(NUM_TARGETS)" = 1 ] && \
[ -n "$(findstring $(BUILDDIR_PREFIX).,$(BUILDLINK))" ]; \
then \
echo "$(BUILDLINK)"; \
else \
mktmpdir $(BUILDDIR_PREFIX) || exit 200; \
fi; )
endif
ifeq (,$(BUILDDIR))
$(error suitable BUILDDIR unavailable)
endif
endif
# even smart caching only hurts when every build goes from scratch
NO_CACHE ?= 1
export BUILDDIR NO_CACHE
CONFIG := $(BUILDDIR)/distcfg.mk
RC = $(HOME)/.mkimage/profiles.mk
# step 1: initialize the off-tree mkimage profile (BUILDDIR)
# NB: our output MUST go into stderr to escape POSTPROC
profile/init: $(shell [ -L $(BUILDDIR) ] || echo distclean)
@{ \
if [ "`realpath "$(BUILDDIR)/"`" = / ]; then \
echo "$(TIME) ERROR: invalid BUILDDIR: \`$(BUILDDIR)'"; \
exit 128; \
fi; \
if [ -z "$(QUIET)" ]; then \
echo -n "$(TIME) initializing BUILDDIR: "; \
fi; \
rsync -qaxH --delete-after image.in/ "$(BUILDDIR)"/; \
mkdir "$(BUILDDIR)"/.mki; \
} >&2
@$(call put,ifndef DISTCFG_MK)
@$(call put,DISTCFG_MK = 1)
@{ \
mp-showref $(LOG); \
{ \
APTCONF="$(wildcard $(APTCONF))"; \
echo "** using $${APTCONF:-system apt configuration}:"; \
eval `apt-config shell $${APTCONF:+-c=$$APTCONF} \
SOURCELIST Dir::Etc::sourcelist/f \
SOURCEPARTS Dir::Etc::sourceparts/d`; \
find "$$SOURCEPARTS" -mindepth 1 -maxdepth 1 -name '*.list' \
| xargs grep -E -hv -e '^#|^[[:blank:]]*$$' -- "$$SOURCELIST" \
| tee $(BUILDDIR)/sources.list; \
echo; \
} $(LOG); \
if ! grep -q "\<$(ARCH)\>" $(BUILDDIR)/sources.list; then \
if grep -q " noarch " $(BUILDDIR)/sources.list; then \
echo -n "requested arch '$$ARCH' unavailable" >&2; \
if [ -z "$(APTCONF)" ]; then \
echo " (no APTCONF)"; \
else \
echo; \
fi >&2; \
[ "$(CHECK)" = 0 ] || exit 1; \
fi; \
fi; \
if type -t git >&/dev/null && [ -d .git ]; then \
git show -s --format=%H > "$(BUILDDIR)"/commit; \
fi; \
mp-commit -i "$(BUILDDIR)" "derivative profile initialized"; \
if [ -w . -a ! -L "$(BUILDDIR)" ]; then \
rm -f "$(SYMLINK)" && \
ln -s "$(BUILDDIR)" "$(SYMLINK)" && \
if [ -z "$(QUIET)" ]; then \
echo "$(SYMLINK)/"; \
fi; \
else \
if [ -z "$(QUIET)" ]; then \
echo "$(BUILDDIR)/"; \
fi; \
fi $(SHORTEN); \
} >&2
profile/bare: profile/init use/pkgpriorities
@{ \
NOTE="$${GLOBAL_VERBOSE:+: $(CONFIG)}"; \
if [ -z "$(QUIET)" ]; then \
echo "$(TIME) preparing distro config$$NOTE" $(SHORTEN); \
fi; \
} >&2
@$(call try,MKIMAGE_PREFIX,/usr/share/mkimage)
@$(call try,GLOBAL_PREFIX,$(MKIMAGE_PREFIX))
@$(call try,GLOBAL_VERBOSE,)
@$(call try,IMAGEDIR,$(wildcard $(IMAGEDIR)))
@$(call try,LOGDIR,$(wildcard $(LOGDIR)))
ifeq (sisyphus,$(BRANCH))
@$(call try,BRANDING,alt-sisyphus)
else
@$(call try,BRANDING,alt-starterkit)
endif
@$(call set,GLOBAL_HSH_PROC,1)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-alterator:Essential)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-bootsplash:Essential)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-bootloader:Essential)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-graphics:Essential)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-indexhtml:Essential)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-notes:Essential)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-release:Essential)
@$(call add,PINNED_PACKAGES,branding-$$(BRANDING)-slideshow:Essential)
@$(call set,PACKAGES_REQUIRED_INITROOT,basesystem branding-$$(BRANDING)-release)
@$(call xport,ARCH)
@mp-commit "$(BUILDDIR)" "image configuration defaults set"
# put the derived SUBPROFILE_DIRS here to get it logged in clear text by the way
profile/finalize:
@$(call put,SUBPROFILE_DIRS = $$(notdir $$(subst @,/,$$(SUBPROFILES))))
@if [ -s "$(RC)" ]; then $(call put,-include $(value RC)); fi
@$(call put,endif)
@mp-commit "$(BUILDDIR)" "image configuration finalized"
# requires already formed distcfg.mk for useful output
profile/dump-vars:
@if [ -s "$(SYMLINK)" ]; then \
$(MAKE) --no-print-directory -C "$(SYMLINK)/" -f vars.mk; \
echo; \
fi $(LOG)
# step 3 entry point: copy the needed parts into BUILDDIR
profile/populate: SHELL=/bin/bash
profile/populate: profile/finalize profile/dump-vars make-aptbox
@for dir in sub.in features.in pkg.in; do \
$(MAKE) -C $$dir $(LOG_STDERR); \
done