Makefile 9.78 KB
Newer Older
1
# Copyright (C) 1991-2002  Lysator Academic Computer Association.
Linus Tolke's avatar
Linus Tolke committed
2
#
3
# This file is part of the LysKOM Emacs LISP client.
Linus Tolke's avatar
Linus Tolke committed
4
5
6
# 
# LysKOM is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by 
7
# the Free Software Foundation; either version 2, or (at your option) 
Linus Tolke's avatar
Linus Tolke committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# any later version.
# 
# LysKOM is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
# 
# You should have received a copy of the GNU General Public License
# along with LysKOM; see the file COPYING.  If not, write to
# Lysator, c/o ISY, Linkoping University, S-581 83 Linkoping, SWEDEN,
# or the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, 
# MA 02139, USA.
#
# Please mail bug reports to bug-lyskom@lysator.liu.se. 
Per Cederqvist's avatar
.    
Per Cederqvist committed
22

23
24
25
26
27
28
# Useful targets:
#
#   all      - Build lyskom.el from source files and compile it with $(EMACS).
#   verbose  - Same as above, but also print some progress messages.
#   check    - Perform test cases.
#   release  - Make distribution archives.
29

30
######################################################################
David Byers's avatar
David Byers committed
31

32
# Version of the client.
David Byers's avatar
David Byers committed
33
#
34
# Also remember to change version number in ../doc/Makefile!
David Byers's avatar
David Byers committed
35
CLIENTVERSION = 0.48
36

37
######################################################################
Kent Engström's avatar
Kent Engström committed
38

39
40
41
42
# Default Emacs to use for compilation by developers.
EMACS = xemacs

# The available languages.
43
LANGUAGES = swedish english
44
45

# These files are included in all distribution archives.
David Byers's avatar
David Byers committed
46
DOCFILES = ../doc/NEWS-$(CLIENTVERSION)
47
48
49
50
51
52

# Default target.
TARGET = lyskom.elc
TARGET-EL := $(TARGET:%.elc=%.el)

# These will be placed first in lyskom.el.
53
HEADER1 = 	header.el \
54
		defvar.el \
55
56
		feature.el
HEADER2 =	vars.el \
57
58
		macros.el \
		compatibility.el \
David Byers's avatar
David Byers committed
59
60
61
		language.el \
		help.el

62
63

# Next come the language definitions.
David Byers's avatar
David Byers committed
64
LANGUAGE-EL := $(LANGUAGES:=-strings.el) $(LANGUAGES:=-help.el)
65
66
67

# Finally, other source files.
SOURCES	 = 	komtypes.el \
David Byers's avatar
David Byers committed
68
		clienttypes.el \
69
		faces.el \
David Byers's avatar
David Byers committed
70
71
		deferred-insert.el \
		utilities.el \
72
		completing-read.el \
73
		keyboard-menu.el \
74
		command.el \
David Byers's avatar
David Byers committed
75
		buffers.el \
76
		aux-items.el \
77
		mime.el \
David Byers's avatar
David Byers committed
78
79
80
81
82
83
84
		prefetch.el \
		startup.el \
		reading.el \
		internal.el \
		services.el \
		parse.el \
		cache.el \
David Byers's avatar
David Byers committed
85
		view-mode.el \
86
		names.el \
David Byers's avatar
David Byers committed
87
88
89
90
91
92
93
94
95
		commands1.el \
		commands2.el \
		review.el \
		edit-text.el \
		filter.el \
		filter-edit.el \
		lyskom-buttons.el \
		view-text.el \
		async.el \
96
		mship-edit.el \
David Byers's avatar
David Byers committed
97
98
99
100
101
102
103
		flags.el \
		messages.el \
		ansaphone.el \
		remote-control.el \
		menus.el slow.el \
		elib-string.el \
		option-edit.el \
David Byers's avatar
David Byers committed
104
		talkback.el \
David Byers's avatar
David Byers committed
105
		faqs.el \
David Byers's avatar
David Byers committed
106
		user-hooks.el \
David Byers's avatar
David Byers committed
107
		lyskom-rest.el
David Byers's avatar
David Byers committed
108
                # lyskom-rest.el must be the last file!
David Byers's avatar
David Byers committed
109

110
111
112
113
114
115
# Included in the source distribution archive.
EXTRA-SRCDIST = \
	distribution-COPYING distribution-configure.in \
	distribution-Makefile.in
EXTRA-SRCVERBATIM = \
	envcheck.el lpath.el autoconf.el \
116
117
	help-swedish.xml help-english.xml \
	help-compile.el \
118
	$(DOCFILES)
David Byers's avatar
David Byers committed
119

120
121
122
123
124
# Included in the non-source distribution archives.
EXTRA-NONSRCDIST = \
	distribution-COPYING
EXTRA-NONSRCVERBATIM = \
	$(DOCFILES)
David Byers's avatar
David Byers committed
125

126
127
# Base name of distribution packages.
PACKAGENAME = lyskom-elisp-client
David Byers's avatar
David Byers committed
128

129
130
131
# Default paths in the source dist Makefile.
DEFAULTLISPDIR = /usr/local/share/emacs/site-lisp
DEFAULTPREFIX = /usr/local
132

133
134
135
136
137
138
ifeq ($(MAKECMDGOALS),release)
    VERSION-EL = version.el-release
else
    VERSION-EL = version.el
endif

139
EMACS-BATCH := $(EMACS) -batch
Per Cederqvist's avatar
.    
Per Cederqvist committed
140

141
all: $(TARGET)
142

143
version.el: version.el.in Makefile $(HEADER1) $(HEADER2) $(LANGUAGE-EL) $(SOURCES)
144
	rm -f $@
145
	sed "s/@@CLIENTVERSION@@/$(CLIENTVERSION) (`date +%Y-%m-%d`; Git `git rev-parse --short HEAD``git diff --quiet HEAD||echo '*'`)/g" <$< >$@
146
	chmod 444 $@
147

148
version.el-release: version.el.in Makefile $(HEADER1) $(HEADER2) $(LANGUAGE-EL) $(SOURCES)
149
	rm -f $@
150
	sed 's/@@CLIENTVERSION@@/$(CLIENTVERSION)/g' <$< >$@
151
	chmod 444 $@
152

153
$(TARGET-EL) lyskom-all-$(CLIENTVERSION).el: \
154
		$(HEADER1) $(VERSION-EL) $(HEADER2) $(LANGUAGE-EL) $(SOURCES)
155
	rm -f $@
David Byers's avatar
David Byers committed
156
157
	echo ";;;;; -*-coding: x-ctext;-*-" >$@
	cat $^ >>$@
158
	chmod 444 $@
159

David Byers's avatar
David Byers committed
160
%-help.el: help-%.xml
161
	rm -f $@
162
	$(EMACS) -batch -l help-compile.el $^ -f lyskom-help-compile-to-el
163
	chmod 444 $@
David Byers's avatar
David Byers committed
164

165
lyskom-%-$(CLIENTVERSION).el: $(HEADER1) $(VERSION-EL) $(HEADER2) %-strings.el %-help.el $(SOURCES)
166
	rm -f $@
David Byers's avatar
David Byers committed
167
168
	echo ";;;;; -*-coding: x-ctext;-*-" >$@
	cat $^ >>$@
169
	chmod 444 $@
170

171
172
verbose: verbose-el $(TARGET)

173
verbose-el: $(HEADER1) $(VERSION-EL) $(HEADER2) $(LANGUAGE-EL) $(SOURCES)
David Byers's avatar
David Byers committed
174
	echo ";;;;; -*-coding: x-ctext;-*-" >$(TARGET-EL)
175
176
	for i in $^ ; do \
		echo '(eval-when-compile (message "Compiling %s" "'$$i'"))' \
177
178
			>>$(TARGET-EL) ; \
		cat $$i >>$(TARGET-EL) ; \
179
180
	    done

181
$(TARGET): $(TARGET-EL)
182
	LYSKOM_DEBUG_COMPILE=yes $(EMACS-BATCH) -l lpath.el -f batch-byte-compile $<
183

184
check: $(TARGET-EL) check-eof
David Byers's avatar
David Byers committed
185
	$(EMACS-BATCH) -l lpath.el -l $< -l check-strings.el \
David Byers's avatar
David Byers committed
186
			-f lyskom-check-strings
187

188
check-eof:
189
	for i in $(HEADER1) $(VERSION-EL) $(HEADER2) $(LANGUAGE-EL) $(SOURCES); \
190
191
192
193
194
195
196
197
198
199
200
201
	do \
	    sz=`wc -c < $$i`; \
	    sz=`expr $$sz - 1`; \
	    lastchar=`od -t d1 -j $$sz $$i|awk 'NF==2 {print $$2}'`; \
	    if [ $$lastchar != 10 ]; \
	    then \
		echo $$i:`wc -l < $$i`: bad file ending >&2; \
		exit 1; \
	    fi \
	done


202
TAGS: $(HEADER1) $(VERSION-EL) $(HEADER2) $(LANGUAGE-EL) $(SOURCES)
203
204
205
206
207
208
209
210
211
212
213
214
215
216
	etags $^

distribution-README-%: \
		distribution-README.begin \
		distribution-README.install-% \
		distribution-README.end
	cat $^ >$@

RELEASE-DIST-FLAVOURS := src all $(LANGUAGES)

RELEASE-DIST-ARCHIVES := \
    $(patsubst %,$(PACKAGENAME)-%-$(CLIENTVERSION).tar.gz,$(RELEASE-DIST-FLAVOURS)) \
    $(patsubst %,$(PACKAGENAME)-%-$(CLIENTVERSION).zip,$(RELEASE-DIST-FLAVOURS))

217
release: $(VERSION-EL) $(RELEASE-DIST-ARCHIVES)
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
	@echo
	@echo
	@echo "Release archives created:"
	@echo
	@for i in $(RELEASE-DIST-ARCHIVES); do \
		echo "    $$i" ; \
	    done
	@echo

%.tar: %.buildstamp
	tar cvf $@ $*

%.gz: %
	gzip -f --best $<

%.zip: %.buildstamp
	zip -R9y $@ $*/*

############################################################
# Source dist.

239
RELEASE-SOURCE-SRC = $(HEADER1) $(VERSION-EL) $(HEADER2) $(LANGUAGE-EL) $(SOURCES) $(MISC)
240
241
242
243
244
245
246
247
248
249
250
251
RELEASE-BASE-SRC = $(PACKAGENAME)-src-$(CLIENTVERSION)

$(RELEASE-BASE-SRC).buildstamp: \
		$(RELEASE-SOURCE-SRC) $(EXTRA-SRCDIST) $(EXTRA-SRCVERBATIM) \
		distribution-README-src
	mkdir -p $(RELEASE-BASE-SRC)
	cp $(RELEASE-SOURCE-SRC) $(RELEASE-BASE-SRC)
	sed 's/@@CLIENTVERSION@@/$(CLIENTVERSION)/g' \
		<distribution-README-src \
		>$(RELEASE-BASE-SRC)/README
	for i in $(subst distribution-,,$(EXTRA-SRCDIST)); do \
	    sed -e 's/@@CLIENTVERSION@@/$(CLIENTVERSION)/g' \
252
253
254
		-e 's/@@HEADER1@@/$(HEADER1)/g' \
		-e 's/@@HEADER2@@/$(HEADER2)/g' \
		-e 's/@@VERSION-EL@@/$(VERSION-EL)/g' \
255
256
257
258
259
260
261
262
263
264
265
266
		-e 's/@@SOURCES@@/$(SOURCES)/g' \
		<distribution-$$i \
		>$(RELEASE-BASE-SRC)/$$i ; \
	    done
	cp $(EXTRA-SRCVERBATIM) $(RELEASE-BASE-SRC)
	sed -e "s/#CLIENTVERSION#/$(CLIENTVERSION)/" \
	    -e "s/#REDHATCLIENTVERSION#/$(REDHATCLIENTVERSION)/" \
	    <$(PACKAGENAME).spec \
	    >$(RELEASE-BASE-SRC)/$(PACKAGENAME)-$(REDHATCLIENTVERSION).spec
	cd $(RELEASE-BASE-SRC) && autoconf
	cd $(RELEASE-BASE-SRC) && ./configure --prefix=$(DEFAULTPREFIX) \
					      --with-lispdir=$(DEFAULTLISPDIR)
267
	cd $(RELEASE-BASE-SRC) && rm -f config.log config.status config.cache
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
	touch $@

############################################################
# Normal dist.

RELEASE-BASE-NONSRC = $(PACKAGENAME)-$*-$(CLIENTVERSION)

$(PACKAGENAME)-%-$(CLIENTVERSION).buildstamp: \
		lyskom-%-$(CLIENTVERSION).el $(EXTRA-NONSRCDIST) \
		distribution-README-nonsrc
	mkdir -p $(RELEASE-BASE-NONSRC)
	cp $< $(RELEASE-BASE-NONSRC)
	sed -e 's/@@CLIENTVERSION@@/$(CLIENTVERSION)/g' \
	    -e 's/@@FLAVOUR@@/$*/g' \
		<distribution-README-nonsrc \
		>$(RELEASE-BASE-NONSRC)/README
	for i in $(subst distribution-,,$(EXTRA-NONSRCDIST)); do \
	    sed 's/@@CLIENTVERSION@@/$(CLIENTVERSION)/g' \
		<distribution-$$i \
		>$(RELEASE-BASE-NONSRC)/$$i ; \
	    done
	cp $(EXTRA-NONSRCVERBATIM) $(RELEASE-BASE-NONSRC)
	touch $@

######################################################################
# RPM packages

REDHATCLIENTVERSION := $(subst -,.,$(CLIENTVERSION))
RPMROOT = /usr/src/redhat
David Byers's avatar
David Byers committed
297

298
299
300
301
302
303
redhat-packages: $(PACKAGENAME)-src-$(CLIENTVERSION).tar.gz
	cp $< $(RPMROOT)/SOURCES/
	sed -e "s/#CLIENTVERSION#/$(CLIENTVERSION)/" \
	    -e "s/#REDHATCLIENTVERSION#/$(REDHATCLIENTVERSION)/" \
	    <$(PACKAGENAME).spec \
	    >$(RPMROOT)/SPECS/$(PACKAGENAME)-$(REDHATCLIENTVERSION).spec
David Byers's avatar
David Byers committed
304
	rpmbuild -ba $(RPMROOT)/SPECS/$(PACKAGENAME)-$(REDHATCLIENTVERSION).spec
305
306
307
######################################################################
# Debian packages

308
309
310
311
312
313
# Keeping the suffix in it's own variable lets you easily replace it
# from the commandline. This is useful when you're building a package
# just for your self and don't want it replaced by the package in the
# distribution. (make DEBIANCLIENTVERSIONSUFFIX=qha1 debian-packages).
DEBIANCLIENTVERSIONSUFFIX = 1

314
315
316
# and when you're the only one who'll use the package and you're not
# really the maintainer you might want to set this to something like
# '-us -uc' and perhaps -rfakeroot aswell.
317
DPKG_BUILDPACKAGE_OPTIONS =
318

319
320
321
322
323
DEBIANCLIENTVERSION := $(subst -,.,$(CLIENTVERSION))

debian-packages: $(RELEASE-BASE-SRC).buildstamp
	cp -R debian $(RELEASE-BASE-SRC)
	$(RM) -rf $(RELEASE-BASE-SRC)/debian/CVS
324
	sed '1s/(.*)/($(DEBIANCLIENTVERSION)-$(DEBIANCLIENTVERSIONSUFFIX))/' <debian/changelog >$(RELEASE-BASE-SRC)/debian/changelog
325
	sed 's/@@CLIENTVERSION@@/$(CLIENTVERSION)/g' <debian/rules >$(RELEASE-BASE-SRC)/debian/rules
326
	cd $(RELEASE-BASE-SRC) && dpkg-buildpackage $(DPKG_BUILDPACKAGE_OPTIONS)
327
328


329
clean:
330
	rm -f *~ *.gz *.zip *.buildstamp *.elc* $(TARGET-EL)
331
	rm -rf $(PACKAGENAME)-*-$(CLIENTVERSION)* lyskom-*-$(CLIENTVERSION).el
332
	rm -f version.el version.el-release
333
334
	rm -f distribution-README-src distribution-README-nonsrc

335
.PHONY: all verbose verbose-el check release redhat-packages clean debian-packages