summaryrefslogtreecommitdiff
path: root/Makefile.am
blob: b39c5afa5247cf1e80ac255e07ecad72ae8200bd (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
AUTOMAKE_OPTIONS = foreign

SUBDIRS = libspectre

if ENABLE_TEST
SUBDIRS += test
endif

EXTRA_DIST = 			\
	AUTHORS			\
	Doxyfile.in		\
	INSTALL			\
	README			\
	libspectre.pc.in	

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libspectre.pc

DISTCLEANFILES = 		\
	$(pkgconfig_DATA)	\
	Doxyfile		\
	ChangeLog

dist-hook: changelog

changelog: $(top_srcdir)/.git/HEAD
	git log --stat > ChangeLog

doc: Doxyfile
	doxygen Doxyfile

# Releasing stuff based on Cairo
# Some custom targets to make it easier to release things.
# To make real stable releases use:
#             make release-publish

RELEASE_UPLOAD_HOST =   libspectre.freedesktop.org
RELEASE_UPLOAD_BASE =   /srv/$(RELEASE_UPLOAD_HOST)/www
RELEASE_UPLOAD_DIR =    $(RELEASE_UPLOAD_BASE)/releases
RELEASE_URL_BASE =      http://$(RELEASE_UPLOAD_HOST)/releases

MANUAL_DATED =          libspectre-manual-`date +%Y%m%d`
MANUAL_TAR_FILE =       $(MANUAL_DATED).tar.gz
MANUAL_UPLOAD_DIR =     $(RELEASE_UPLOAD_BASE)

tar_file = $(PACKAGE)-$(VERSION).tar.gz
sha1_file = $(tar_file).sha1
gpg_file = $(sha1_file).asc

$(sha1_file): $(tar_file)
	sha1sum $^ > $@

$(gpg_file): $(sha1_file)
	@echo "Please enter your GPG password to sign the checksum."
	gpg --armor --sign $^

release-verify-soname-major:
	@echo -n "Checking that the libspectre soname major number is 1..."
	@test "$(LT_CURRENT_MINUS_AGE)" = "1" \
		|| (echo "Ouch." && echo "The soname major number is $(LT_CURRENT_MINUS_AGE) instead of 1." \
		&& echo "The libtool shared library version numbers in configure.ac must be incremented properly." \
		&& false)
	@echo "Good."

release-verify-newer:
	@echo -n "Checking that no $(VERSION) release already exists..."
	@ssh $(RELEASE_UPLOAD_HOST) test ! -e $(RELEASE_UPLOAD_DIR)/$(tar_file) \
		|| (echo "Ouch." && echo "Found: $(RELEASE_UPLOAD_HOST):$(RELEASE_UPLOAD_DIR)/$(tar_file)" \
		&& echo "Are you sure you have an updated checkout?" \
		&& echo "This should never happen." \
		&& false)
	@echo "Good."

release-remove-old:
	$(RM) $(tar_file) $(sha1_file) $(gpg_file)

release-cleanup-group-sticky:
	find . -type f | xargs chmod g-s

release-check: release-verify-soname-major release-verify-newer release-remove-old release-cleanup-group-sticky distcheck

release-upload: release-check $(tar_file) $(sha1_file) $(gpg_file)
	mkdir -p releases
	scp $(tar_file) $(sha1_file) $(gpg_file) $(RELEASE_UPLOAD_HOST):$(RELEASE_UPLOAD_DIR)
	mv $(tar_file) $(sha1_file) $(gpg_file) releases
	ssh $(RELEASE_UPLOAD_HOST) "rm -f $(RELEASE_UPLOAD_DIR)/LATEST-$(PACKAGE)-[0-9]* && ln -s $(tar_file) $(RELEASE_UPLOAD_DIR)/LATEST-$(PACKAGE)-$(VERSION)"
	 git tag -s -m "libspectre $(SPECTRE_MAJOR_VERSION).$(SPECTRE_MINOR_VERSION).$(SPECTRE_MICRO_VERSION) release" $(SPECTRE_MAJOR_VERSION).$(SPECTRE_MINOR_VERSION).$(SPECTRE_MICRO_VERSION)

release-publish-message: releases/$(sha1_file)
	@echo "Please follow the instructions in RELEASING to push stuff out and"
	@echo "send out the announcement mails.  Here is the excerpt you need:"
	@echo ""
	@echo "Subject: $(PACKAGE) release $(VERSION) now available"
	@echo ""
	@echo "============================== CUT HERE =============================="
	@echo "A new $(PACKAGE) release $(VERSION) is now available from:"
	@echo ""
	@echo " $(RELEASE_URL_BASE)/$(tar_file)"
	@echo ""
	@echo "    which can be verified with:"
	@echo ""
	@echo " $(RELEASE_URL_BASE)/$(sha1_file)"
	@echo -n "      "
	@cat releases/$(sha1_file)
	@echo ""
	@echo " $(RELEASE_URL_BASE)/$(gpg_file)"
	@echo " (signed by `getent passwd "$$USER" | cut -d: -f 5 | cut -d, -f 1`)"
	@echo ""
	@echo "  Additionally, a git clone of the source tree:"
	@echo ""
	@echo " git clone git://anongit.freedesktop.org/git/libspectre"
	@echo ""
	@echo "    will include a signed $(VERSION) tag which points to a commit named:"
	@echo " `git cat-file tag $(VERSION) | grep ^object | sed -e 's,object ,,'`"
	@echo ""
	@echo "    which can be verified with:"
	@echo " git verify-tag $(VERSION)"
	@echo ""
	@echo "    and can be checked out with a command such as:"
	@echo " git checkout -b build $(VERSION)"
	@echo ""
	@echo "============================== CUT HERE =============================="

release-publish: release-upload release-publish-message

doc-publish: doc
	cp -a doc/html $(MANUAL_DATED)
	tar czf $(MANUAL_TAR_FILE) $(MANUAL_DATED)
	scp $(MANUAL_TAR_FILE) $(RELEASE_UPLOAD_HOST):$(MANUAL_UPLOAD_DIR)
	ssh $(RELEASE_UPLOAD_HOST) "cd $(MANUAL_UPLOAD_DIR) && tar xzf $(MANUAL_TAR_FILE) && rm -f manual && ln -s $(MANUAL_DATED) manual && ln -sf $(MANUAL_TAR_FILE) libspectre-manual.tar.gz"

.PHONY: release-verify-newer release-remove-old release-cleanup-group-sticky release-check release-upload release-publish doc-publish