### ### 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