summaryrefslogtreecommitdiff
path: root/Makefile.maint
blob: 899f87143d0fe24e9309454b27c13075cd26f78a (plain)
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
# -*-Makefile-*-
# This Makefile fragment is shared between fileutils, sh-utils, textutils.

maintainer-check:
	if head ChangeLog| grep 'Version $(VERSION)' > /dev/null; then \
	  :; \
	else \
	  echo "$(VERSION) not in ChangeLog; not tagging" 1>&2; \
	  exit 1; \
	fi
	$(MAKE) distcheck
	$(MAKE) my-distcheck

prev-version := $(shell echo $(VERSION)|tr a-z Xa-y)
tag-package = $(shell echo "$(PACKAGE)" | tr a-z A-Z)
tag-this-version = $(subst .,_,$(VERSION))
tag-prev-version = $(subst .,_,$(prev-version))
this-cvs-tag = $(tag-package)-$(tag-this-version)
prev-cvs-tag = $(tag-package)-$(tag-prev-version)

# Verify that all source files using _() are listed in po/POTFILES.in.
po-check:
	grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1
	grep -E -l '\b_\(' lib/*.c src/*.c | sort > $@-2
	diff -u $@-1 $@-2
	rm -f $@-1 $@-2

# Tag before making distribution.  Also, don't make a distribution if
# checks fail.  Also, make sure the NEWS file is up-to-date.
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
cvs-dist: maintainer-check
	echo $(this-cvs-tag); \
	if cvs -n log -h README| grep -e $(this-cvs-tag): > /dev/null; then \
	  echo "VERSION not new; not tagging" 1>&2; \
	  exit 1; \
	fi; \
	cvs update po; \
	cvs tag -c $(this-cvs-tag)
	$(MAKE) dist

t=./=test
my-distcheck:
	-rm -rf $(t)
	mkdir $(t)
	GZIP=$(GZIP) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
# Removing $(DEPDIR) like this is a gross kludge to work around a bug
# in automake.  Remove that line once it's fixed.
	cd $(t)/$(distdir) \
	  && ./configure --disable-nls \
	  && $(MAKE) CFLAGS='-Wformat -Werror' \
	  && $(MAKE) dvi \
	  && $(MAKE) check \
	  && rm -rf $(DEPDIR) \
	  && $(MAKE) distclean
	cd $(t) && mv $(distdir) $(distdir).old \
	  && $(AMTAR) -zxf ../$(distdir).tar.gz
	diff -ur $(t)/$(distdir).old $(t)/$(distdir)
	-rm -rf $(t)
	@echo "========================"; \
	echo "$(distdir).tar.gz is ready for distribution"; \
	echo "========================"

THIS_VERSION_REGEXP = $(subst .,\.,$(VERSION))
# FIXME: this works only for Gnits-style test releases.
PREV_VERSION := $(shell echo $(VERSION)|tr b-z a-y|sed 's/a$$//')
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
v = Version

a_host=alpha.gnu.org
b_host=tug.org

a_url_dir=gnu/fetish
b_url_dir=gnu/fetish

a_real_dir=/fs/share/ftp/gnu/fetish
b_real_dir=/home/ftp/pub/gnu/fetish

url_dir_list = $(foreach x,a b,ftp://$($(x)_host)/$($(x)_url_dir))
real_dir_list = $(foreach x,a b,ftp://$($(x)_host)$($(x)_real_dir))

md5 = $(shell md5sum < $(distdir).tar.gz|sed 's/  -//')

rel-check:
	tarz=/tmp/rel-check-tarz-$$$$; \
	md5_tmp=/tmp/rel-check-md5-$$$$; \
	set -e; \
	trap 'status=$$?; rm -f $$tarz $$md5_tmp; exit $$status' 0 1 2 3 15; \
	wget -q --output-document=$$tarz $(url); \
	echo "$(md5)  -" > $$md5_tmp; \
	md5sum -c $$md5_tmp < $$tarz

announcement: NEWS ChangeLog $(distdir).tar.gz
	@( \
	  echo Subject: $(distdir) released; \
	  echo; \
	  echo FIXME: put comments here; \
	  echo; \
	  for url in $(url_dir_list); do \
	    echo "  $$url/$(distdir).tar.gz"; \
	  done; \
	  echo; \
	  echo "$(md5)  $(distdir).tar.gz"; \
	  echo; \
	  echo NEWS:; \
	  sed -n "/$(THIS_VERSION_REGEXP)/,/$(PREV_VERSION_REGEXP)/p" NEWS \
	    | grep -v '^\['; \
	  echo; \
	  echo ChangeLog entries:; \
	  find . -name ChangeLog \
	    | xargs cvs diff -up -r$(prev-cvs-tag) -rHEAD \
	    | sed -n 's/^+//p' \
	    | perl -ne 'm!^\+\+ (\./)?! or print,next;'	\
	      -e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
	)

release-archive-dir = ../release
prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta

alpha:
	$(MAKE) po-check
	$(MAKE) cvs-dist
	$(MAKE) -s announcement > /tmp/announce-$(distdir)
	ln $(distdir).tar.gz ../release
	chmod a-w $(distdir).tar.gz
	cd $(release-archive-dir) \
	  && xdelta delta -9 $(prev-tgz) $(distdir).tar.gz $(xd-delta) || :
	ln $(release-archive-dir)/$(xd-delta) .
	chmod a-w $(release-archive-dir)/$(xd-delta)
	@echo =====================================
	@for url in $(real_dir_list); do \
	  echo "ncftp -u $$url/"; \
	done
	@echo '#   mput $(xd-delta) $(distdir).tar.gz'
	@echo '# send the /tmp/announcement e-mail'
	@echo =====================================