diff --git a/live/Makefile b/live/Makefile index 3585e7e041..5a263b9e36 100644 --- a/live/Makefile +++ b/live/Makefile @@ -25,19 +25,31 @@ $(DESTDIR): # copy the files from src/ to dist/ $(DESTDIR)/%: $(SRCDIR)/% - cp -f $< $@ + @if [ -e "$@" ]; then MSG="updated"; else MSG="created"; fi; \ + cp -f $< $@ ;\ + echo "$@ $${MSG}" # make a tarball from a directory # the tarball is reproducible, i.e. the same sources should result in the very # same tarball (bitwise) for the file time stamps use the date of the last # commit in the respective directory, use the UTC date to avoid possible time # zone and DST differences -$(DESTDIR)/%.tar.xz: % +# +# we need the second expansion here to depend on all files in the source +# directory, the first expansion expands `%` and reduces the escaped $$ +# to a single $, the second expansion runs $(shell find ...) +# https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html +.SECONDEXPANSION: +$(DESTDIR)/%.tar.xz: % $$(shell find % -type f,l) + @if [ -e "$@" ]; then MSG="updated"; else MSG="created"; fi; \ MTIME=$$(date --date="$$(git log -n 1 --pretty=format:%ci $<)" --utc +"%Y-%m-%d %H:%M:%S"); \ - (cd $< && find . -xtype f -not -name README.md | LC_ALL=C sort | tar -c -v -f - --format=gnu --owner=0 --group=0 --files-from - --mtime="$$MTIME") | xz -c -9 -e > $@ + (cd $< && find . -type f,l -not -name README.md | LC_ALL=C sort | tar -c -f - --format=gnu --owner=0 --group=0 --files-from - --mtime="$$MTIME") | xz -c -9 -e > $@; \ + echo "$@ $${MSG}" # build the ISO locally build: $(DESTDIR) if [ ! -e $(DESTDIR)/.osc ]; then make clean; osc co -o $(DESTDIR) systemsmanagement:Agama:Staging agama-live; fi $(MAKE) all (cd $(DESTDIR) && osc build -M $(FLAVOR) images) + +.PHONY: build all clean