Update clean target
[mapsector.git] / Makefile
1
2 lib/00_version.sh:
3         echo "version='`git describe --tag`'" >$@
4 .PHONY: lib/00_version.sh
5
6 # The $(wildcard ...) return value is sorted and duplicates are
7 # removed from the list of dependencies. I need to mention
8 # lib/00_version.sh explicitly since it might not yet exist
9 mapsectorsh: mapsector lib/00_version.sh $(wildcard lib/[0-9][0-9]_*.sh)
10         @echo "generating $@"
11         @(                                                      \
12             sed -n -e '1p' $<;                                  \
13             echo "#";                                           \
14             echo "# $@ automatically generated from";           \
15             for script in $^; do                                \
16                 echo "#         $$script";                      \
17             done;                                               \
18             sed -n -e '2,/^load$$/p' $<;                        \
19             for script in $^; do                                \
20                 if [ "$$script" == "$<" ]; then continue; fi;   \
21                 echo "#### $$script";                           \
22                 echo;                                           \
23                 cat $$script;                                   \
24                 echo;                                           \
25             done;                                               \
26             sed -n -e '/^load$$/,$$p' $<;                       \
27         ) >$@
28         @sed -i -e 's/^load$$/####/' -eT -eh -eG -eH -eG -eH -eG -e'y/\n/#/' $@
29         @chmod ugo+rx $@
30
31 NAME       := mapsector
32 CLOGDIR    := .git/changelogs
33 CHANGELOGS := $(shell lasttag=HEAD;                                             \
34                       (git tag -l 'v*'; echo)                                   \
35                           | while read tag; do                                  \
36                               echo $(CLOGDIR)/$${tag}$${tag:+-}$$lasttag;       \
37                               lasttag=$$tag;                                    \
38                           done)
39
40 $(CHANGELOGS): %:
41         @echo "generating $@"
42         @mkdir -p "$(CLOGDIR)"
43         @(                                                                                      \
44             version="$@"; version="$${version#$(CLOGDIR)/}";                                    \
45             from="$${version%-*}"; version="$${version#*-}"; to="$$version";                    \
46             if [ "$$from" == "$$to" ]; then from=""; fi;                                        \
47             case "$$version" in                                                                 \
48             HEAD) version="`git describe --tag --match='v*' | sed -e 's/-/~/' -e 's/-/./g'`";   \
49                   release="UNRELEASED" ;;                                                       \
50             v*)   version="$${version#v}";                                                      \
51                   release="unstable" ;;                                                         \
52             esac;                                                                               \
53             echo "$(NAME) ($$version) $$release; urgency=low";                                  \
54             echo;                                                                               \
55             git log --pretty=oneline --abbrev-commit $$from$${from:+..}$$to                     \
56                 | while read commit description; do                                             \
57                     echo "  * [$$commit] $$description";                                        \
58             done;                                                                               \
59             echo;                                                                               \
60             date="`git log --format='%cD' $$to'^!'`";                                           \
61             author="`git log --format='%an <%ae>' $$to'^!'`";                                   \
62             echo " -- $$author  $$date";                                                        \
63             echo;                                                                               \
64         ) >$@
65 .PHONY: $(word 1,$(CHANGELOGS))
66
67 debian/changelog: $(CHANGELOGS)
68         cat $^ > $@
69
70 prepare: lib/00_version.sh debian/changelog
71 .PHONY: prepare
72
73 clean:
74         fakeroot debian/rules clean
75         rm -f mapsectorsh
76         rm -f debian/changelog
77         rm -f lib/00_version.sh
78         rm -rf .git/changelogs
79
80 .PHONY: clean