summaryrefslogtreecommitdiffstats
path: root/Makefile.maint
blob: 63a40a50ee68540ab70830826cc2da25fe86d3e7 (plain) (blame)
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#
# Maintainer Makefile
#

# WARNING:

# THIS IS EXPERIMENTAL - DO NOT USE (YET) !

# * This Makefile is only useful to RTEMS maintainers
# * You must have write access to RTEMS CVS
# * Running this Makefile modifies RTEMS CVS
# * Watch out for warning and error messages - Do NOT IGNORE them!


# MAINTAINER notes:


# Cutting a new release:
# 1. Perform a non-anonymous cvs checkout of the BRANCH 
#    you want to cut a release tarball from
# 2. Run "make -f Makefile.maint new-revision"
#    (rsp. "make -f Makefile.maint new-minor").
# 3. Run "make -f Makefile.maint commit"
# 4. Run "make -f Makefile.maint tag"
# 5. Run "make -f Makefile.maint tarball"

# -----------------
# SECURITY: Append a string to tag to avoid accidentially screwing up cvs-tags
# For "hot runs" you will want to use "make -f Makefile.maint TAG_SUFFIX= <command>"
TAG_SUFFIX = -test1

rtems_version := $(shell cat VERSION | sed -n '/.* Version /{s/^.*Version[ ]*\([0-9\.]\+\)/\1/p};')
rtems_tag     := $(shell echo "rtems-$(rtems_version)" | tr . -)
rtems_api     := 4.10
PATH          := /opt/rtems-$(rtems_api)/bin:$(PATH)

# -----------------
# Cleanup check out and cvs-tag the files inside
tag:
	cvs -q -z9 up -dP
	./bootstrap -p >/dev/null
	cvs -q tag -c $(rtems_tag)$(TAG_SUFFIX)

# -----------------
# Different stages of cvs-exporting
rtems-$(rtems_version)/stamp.export.$(rtems_tag)$(TAG_SUFFIX):
	rm -rf rtems-$(rtems_version)
	@cvs -q -z9 export -d rtems-$(rtems_version) -r $(rtems_tag)$(TAG_SUFFIX) rtems
	@if ! test -f rtems-$(rtems_version)/VERSION; then \
	echo "ERROR export failed"; \
	echo " Did you run 'make -f Makefile.maint tag' ?"; exit 1; fi
	echo "$(rtems_tag)$(TAG_SUFFIX)" > rtems-$(rtems_version)/stamp.export.$(rtems_tag)$(TAG_SUFFIX)

rtems-$(rtems_version)$(TAG_SUFFIX).tar.bz2: rtems-$(rtems_version)/stamp.autofiles \
	  rtems-$(rtems_version)/excludes \
	  rtems-$(rtems_version)/TOOL_VERSIONS
	tar -cj -X rtems-$(rtems_version)/excludes \
	  -f rtems-$(rtems_version)$(TAG_SUFFIX).tar.bz2 rtems-$(rtems_version)

## Touching the top pages in the various manuals results in the date
## on their title page matching the release date.
rtems-$(rtems_version)/stamp.cleanup: rtems-$(rtems_version)/stamp.export.$(rtems_tag)$(TAG_SUFFIX)
	find rtems-$(rtems_version) -name .cvsignore -exec rm -f {} \;
	find rtems-$(rtems_version) -name preinstall.am -exec touch {} \;
	rm -rf rtems-$(rtems_version)/contrib
	touch rtems-$(rtems_version)/stamp.cleanup

rtems-$(rtems_version)/stamp.autofiles: rtems-$(rtems_version)/stamp.cleanup
	cd rtems-$(rtems_version) && ./bootstrap -r
	touch rtems-$(rtems_version)/stamp.autofiles

rtems-$(rtems_version)/excludes: Makefile.maint
	@echo "Generating $@"
	@echo "excludes" > $@
	@echo "stamp.*" >> $@
	@echo "autom4te.cache" >> $@
	@echo "Makefile.maint" >> $@

tarball: rtems-$(rtems_version)$(TAG_SUFFIX).tar.bz2

rtems-$(rtems_version)/TOOL_VERSIONS: Makefile.maint
	( \
	 date ; \
	 echo ; \
	 echo "This file contains configuration information on the " ; \
	 echo "primary computer used to test and make the $(rtems_version)" ; \
	 echo "version of RTEMS" ; \
	 echo ; \
	 echo "OS Version: " `head -1 /etc/issue` ; \
	 echo ; \
	 echo "The following RTEMS RPMs were installed on the machine" ; \
	 echo "where this release was made:" ; \
	 echo ; \
	 rpm -qa 'rtems-$(rtems_api)-*' | sort | sed -e 's/^/    /' ; \
	 echo \
	 ) > $@

# -----------------
# Create a new minor release
# increments the 2nd digit of the version number
# set the 3rd digit of the version number to 0
# Example: 4.6.99.4 -> 4.7.0
new-minor:
	@v=$$(echo $(rtems_version) | sed 's,^\([0-9]\+\).*,\1,'); \
	r=$$(echo $(rtems_version) | sed 's,^[0-9]\+\.\([0-9]\+\).*,\1,'); \
	r=$$(($$r + 1)); version="$$v.$$r.0"; \
	echo "New minor release: $$version"; \
	sed -i -e "s|\[_RTEMS_VERSION\],\[.*\]|\[_RTEMS_VERSION\],\[$$version\]|" \
	  $(VERSION_FILES); \
	sed -i -e "s,\(^RTEMS Version\).*,\1 $$version," VERSION

# Create a new revision release
# increments the last digit of the version number
# Examples: 4.6.99.4 -> 4.6.99.5
#           4.7.0 -> 4.7.1
new-revision:
	@m=$$(echo $(rtems_version) | sed 's,^\(.*\)\.[0-9]\+,\1,'); \
	n=$$(echo $(rtems_version) | sed 's,^.*\.\([0-9]\+\),\1,'); \
	n=$$(($$n + 1)); version="$$m.$$n";\
	echo "New revision release: $$version"; \
	sed -i -e "s|\[_RTEMS_VERSION\],\[.*\]|\[_RTEMS_VERSION\],\[$$version\]|" \
	  $(VERSION_FILES); \
	sed -i -e "s,\(^RTEMS Version\).*,\1 $$version," VERSION

# -----------------
# Create a new branch
# increments the 2nd digit of the version number
# set the 3rd digit of the version number to 99
# set the 4rd digit of the version number to 0
# Example: 4.6.34.4 -> 4.7.99.0
new-branch:
	v=$$(echo $(rtems_version) | sed 's,^\([0-9]\+\).*,\1,'); \
	r=$$(echo $(rtems_version) | sed 's,^[0-9]\+\.\([0-9]\+\).*,\1,'); \
	r=$$(($$r + 1)); version="$$v.$$r.99.0"; \
	api="$$v.$$(($$r + 1))"; \
	echo "New branch release: $$version"; \
	sed -i -e "s|\[_RTEMS_VERSION\],\[.*\]|\[_RTEMS_VERSION\],\[$$version\]|" \
	  -e "s|\[_RTEMS_API\],\[.*\]|\[_RTEMS_API\],\[$$api\]|" \
	  $(VERSION_FILES); \
	sed -i -e "s,\(^RTEMS Version\).*,\1 $$version," VERSION

VERSION_FILES += aclocal/version.m4
VERSION_FILES += cpukit/aclocal/version.m4
VERSION_FILES += c/src/aclocal/version.m4
VERSION_FILES += testsuites/aclocal/version.m4

CVS_RUN := $(shell if [ -n "$(TAG_SUFFIX)" ]; then echo "cvs -n"; else echo "cvs"; fi)

commit:
	$(CVS_RUN) commit -m "Upgrade to $(rtems_version)" \
	  $(VERSION_FILES) VERSION

.PHONY: commit new-minor new-revision new-branch tag tarball