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
|
###
### More fundamental definitions at the top, big "user"-level
### definitions at the end, and .ISO-like targets in the middle
###
################################
### build tracking variables
################################
# keep in sync with "./build" script
prevbuild := $(shell cat < lastbuild)
buildstem := $(shell python -c "print '$(prevbuild)'.split('.')[0][:-2];")
nextbuild := $(shell python -c "print '%0.2d' % (int('$(prevbuild)'.split('.')[0][-2:]) + 1);")
buildname := $(buildstem)$(nextbuild)
################################
### Fundamental rules
################################
create.%: sized.% %.sha1sum
echo $@ done
sized.%: % %.size.txt
echo $@ done
%.size.txt: %
du -sk $^ | cut -f 1 > $@
%.sha1sum: %
sha1sum $^ > $@
%.tree.tar: %.tree
tar -c -C $^ . > $@
%.tree.tar.lzma: %.tree.tar
lzma -1kf $^
%.tar.lzma: %
tar -c $^ | lzma -1 > $@
################################
### The Really Interesting Artifacts: .ISOs, .IMG files, VMDK
################################
soas%xo.iso:
livecd-creator --cache=../cache --fslabel soas$*xo -c ../soas-xo.ks
soas%.iso:
livecd-creator --cache=../cache --fslabel soas$* -c ../soas.ks
soas%.vmdk:
appliance-creator --cache=../cache -n soas$* -f vmdk --checksum -p zip -c ../soas-appliance.ks
soas%.vmdk.zip: soas%.vmdk
echo "created $@"
soas%.tree: soas%.iso
../livecd-iso-to-bootable-tree.sh $^ $@
touch $@
chroot $@ rpm -qa | sort > $@.packages.txt
chroot $@ rpm -qa --queryformat="%10{SIZE}\t%{NAME}\n" | sort -k1,1n > $@.packages-sizes.txt
soas%.fulldisk.img: soas%.tree
../bootable-tree-to-fulldisk-img.sh $^ $@
soas%xo.img: soas%xo.tree
../bootable-tree-to-xo.sh $^ $@
soas%xo.plc: soas%xo.img
../image-digestor.sh $^
################################
### Announcements, size changes, xdeltas, and other .txt files
################################
exts := .tree .fulldisk.img.tar.lzma xo.tree xo.img
sized_names = soas$(nextbuild)$(ext).size-change.txt
sized_changes := $(foreach ext,$(exts),$(sized_names))
soas%.announcement.txt: $(sized_changes) soas%.tree.package-changes.txt
../announce . soas$*
soas$(nextbuild)%.size-change.txt: soas$(nextbuild)%.size.txt $(prevbuild)%.size.txt
cat $^ | python -c "import sys; oldk, newk = [int(l.strip()) for l in sys.stdin.readlines()] ; print '%0.2fM / %dK' % (newk / 1024.0, newk - oldk)" > $@
soas%.tree.tar.xdelta: soas%.tree.tar
-xdelta delta $(prevbuild).tree.tar $^ $@
soas$(nextbuild)fulldisk.img.xdelta: soas$(nextbuild)fulldisk.img
-xdelta delta $(prevbuild)fulldisk.img $^ $@
soas$(nextbuild).tree.package-changes.txt: $(prevbuild).tree.packages.txt soas$(nextbuild).tree.packages.txt
diff -U 1 $^ | grep -v ^@@ > $@ || echo "[No changes]" > $@
################################
### Big XXXX.done target and make-isms like .PRECIOUS
################################
.PRECIOUS: soas%.iso soas%.tree soas%.tree.tar soas%.tree.tar.lzma \
soas%.fulldisk.img soas%.fulldisk.img.tar.lzma soas%.fulldisk.img.tar.lzma.size-change.txt \
soas%xo.fulldisk.img soas%xo.fulldisk.img.tar.lzma soas%xo.fulldisk.img.tar.lzma.size-change.txt \
soas%xo.iso soas%xo.tree soas%xo.tree.tar soas%xo.tree.tar.lzma \
soas%xo.img soas%xo.plc \
soas%xo.tree.size-change.txt \
soas%xo.img.size-change.txt \
soas%.tree.size-change.txt \
%.size.txt %.sha1sum \
soas%.vmdk soas%.vmdk.zip \
soas%.announcement.txt
soas%.done: create.soas%.iso sized.soas%.tree \
create.soas%.tree.tar.lzma soas%.tree.tar.xdelta \
create.soas%.fulldisk.img.tar.lzma \
create.soas%xo.iso sized.soas%xo.tree \
create.soas%xo.tree.tar.lzma soas%xo.tree.tar.xdelta \
create.soas%xo.fulldisk.img.tar.lzma \
create.soas%xo.img soas%xo.plc \
create.soas%.vmdk.zip
touch $@
################################
### high-level targets like "all" and "clean"
################################
all: soas$(nextbuild).done soas$(nextbuild).announcement.txt
echo soas$(nextbuild) > lastbuild
artifacts = $(wildcard *.txt) $(wildcard *.tree) $(wildcard *.tar) \
$(wildcard *.img) $(wildcard *.iso) $(wildcard *.plc) \
$(wildcard *.crc) $(wildcard *.lzma) $(wildcard *.sha1sum) \
$(wildcard *.done)
clean:
rm -rf $(filter-out soas$(nextbuild)% $(prevbuild)%,$(artifacts))
.PHONY: create.% sized.% all clean
|