fix wrongly interpreted >> in template
[arduino-ctags.git] / maintainer.mak
blob6c76c2c69bd50376554e54f05fdafc42e452f977
1 # $Id: maintainer.mak 722 2009-07-09 16:10:35Z dhiebert $
3 # Copyright (c) 1996-2009, Darren Hiebert
5 # Development makefile for Exuberant Ctags. Also used to build releases.
6 # Requires GNU make.
8 OBJEXT := o
10 include source.mak
12 DSOURCES := $(SOURCES) debug.c
14 VERSION_FILES:= ctags.h ctags.1 NEWS
16 LIB_FILES := readtags.c readtags.h
18 ENVIRONMENT_MAKEFILES := \
19 mk_bc3.mak mk_bc5.mak mk_djg.mak mk_manx.mak mk_mingw.mak \
20 mk_mpw.mak mk_mvc.mak mk_os2.mak mk_qdos.mak mk_sas.mak \
22 COMMON_FILES := COPYING EXTENDING.html FAQ INSTALL.oth MAINTAINERS NEWS README \
23 $(ENVIRONMENT_MAKEFILES) source.mak \
24 $(DSOURCES) $(HEADERS) $(LIB_FILES) \
25 $(ENVIRONMENT_SOURCES) $(ENVIRONMENT_HEADERS)
27 UNIX_FILES := $(COMMON_FILES) \
28 .indent.pro INSTALL configure.ac \
29 Makefile.in maintainer.mak \
30 descrip.mms mkinstalldirs magic.diff \
31 ctags.spec ctags.1
33 REGEX_DIR := gnu_regex
35 WIN_FILES := $(COMMON_FILES) $(VERSION_FILES)
37 SVN_FILES := $(UNIX_FILES)
39 DEP_DIR := .deps
41 OBJECTS := $(patsubst %.c,%.o,$(notdir $(SOURCES)))
42 DOBJECTS := $(patsubst %.c,%.od,$(notdir $(DSOURCES)))
43 DEPS := $(patsubst %.c,$(DEP_DIR)/%.d,$(notdir $(SOURCES)))
45 WARNINGS := -Wall -W -Wpointer-arith -Wcast-align -Wwrite-strings \
46 -Wmissing-prototypes -Wmissing-declarations \
47 -Wnested-externs -Wcast-qual -Wshadow -pedantic \
48 -Wstrict-prototypes \
49 # -Wtraditional -Wconversion -Werror
51 PRODUCER := Darren B. Hiebert
52 EMAIL := dhiebert@users.sourceforge.net
53 CTAGS_WEBSITE := http://ctags.sourceforge.net
54 RPM_ROOT := rpms
55 RPM_ABS_ROOT := $(PWD)/$(RPM_ROOT)
56 WINDOWS_DIR := win32
57 RELEASE_DIR := releases
58 CTAGS_WEBDIR := website
59 win_version = $(subst .,,$(version))
60 HOST_ARCH := $(shell uname -p)
62 ifneq ($(findstring $(HOST_ARCH),i386 i686),)
63 COMP_ARCH := -march=i686
64 endif
66 CC := gcc
67 INCLUDE := -I.
68 DEFS := -DHAVE_CONFIG_H
69 COMP_FLAGS := $(INCLUDE) $(DEFS) $(CFLAGS)
70 PROF_OPT := -O3 $(COMP_ARCH)
71 #OPT := $(PROF_OPT) -fomit-frame-pointer
72 OPT := $(PROF_OPT)
73 DCFLAGS := $(COMP_FLAGS) -DDEBUG -DINTERNAL_SORT
74 LD := gcc
75 LDFLAGS :=
76 RPM_FLAGS := -O3 $(COMP_ARCH)
78 AUTO_GEN := configure config.h.in
79 CONFIG_GEN := config.cache config.log config.status config.run config.h Makefile
80 PROF_GEN := gmon.out
81 COV_GEN := *.da *.gcov
83 UNIX2DOS := perl -pe 's/(\r\n|\n|\r)/\r\n/g'
84 MAN2HTML := tbl | groff -Wall -mtty-char -mandoc -Thtml -c
87 # Targets
89 default: all
90 ifeq ($(findstring clean,$(MAKECMDGOALS)),)
91 ifeq ($(wildcard config.h),)
92 ctags dctags ctags.prof ctags.cov:
93 $(MAKE) config.h
94 $(MAKE) $(MAKECMDGOALS)
95 else
96 all: dctags tags syntax.vim
98 -include $(DEPS) $(DEP_DIR)/readtags.d
101 # Executable targets
103 ctags: $(OBJECTS)
104 @ echo "-- Linking $@"
105 @ $(LD) -o $@ $(LDFLAGS) $^
107 dctags: $(DOBJECTS) debug.od
108 @ echo "-- Building $@"
109 $(LD) -o $@ $(LDFLAGS) $^
111 ctags.prof: $(SOURCES) $(HEADERS) Makefile
112 $(CC) -pg $(PROF_OPT) $(COMP_FLAGS) $(WARNINGS) $(SOURCES) -o $@
114 ctags.cov: $(SOURCES) $(HEADERS) Makefile
115 $(CC) -fprofile-arcs -ftest-coverage $(COMP_FLAGS) $(WARNINGS) $(SOURCES) -o $@
117 gcov: $(SOURCES:.c=.c.gcov)
119 readtags: readtags.[ch]
120 $(CC) -g $(COMP_FLAGS) -DDEBUG -DREADTAGS_MAIN -o $@ readtags.c
122 readtags.o: readtags.c readtags.h
123 $(CC) $(COMP_FLAGS) -c readtags.c
125 etyperef: etyperef.o keyword.o routines.o strlist.o vstring.o
126 $(CC) -o $@ $^
128 etyperef.o: eiffel.c
129 $(CC) -DTYPE_REFERENCE_TOOL $(OPT) $(COMP_FLAGS) -o $@ -c $<
131 endif
132 endif
135 # Support targets
137 FORCE:
139 config.h.in: configure.ac
140 autoheader
141 @ touch $@
143 configure: configure.ac
144 autoconf
146 config.status: configure
147 ./config.status --recheck
149 config.h: config.h.in config.status
150 ./config.status
151 touch $@
153 depclean:
154 rm -f $(DEPS)
156 profclean:
157 rm -f $(PROF_GEN)
159 gcovclean:
160 rm -f $(COV_GEN)
162 clean: depclean profclean gcovclean clean-test
163 rm -f *.[ois] *.o[dm] ctags dctags ctags*.exe readtags etyperef \
164 ctags.man ctags.html ctags.prof ctags.cov *.bb *.bbg tags TAGS syntax.vim
166 distclean: clean
167 rm -f $(CONFIG_GEN)
169 maintainer-clean maintclean: distclean
170 rm -f $(AUTO_GEN)
172 %.man: %.1 Makefile
173 tbl $< | groff -Wall -mtty-char -mandoc -Tascii -c | sed 's/.\b//g' > $@
175 %.html: %.1 Makefile
176 cat $< | $(MAN2HTML) > $@
178 tags: $(DSOURCES) $(HEADERS) $(LIB_FILES) Makefile *.mak
179 @ echo "-- Building tag file"
180 @ ctags *
183 # Create a Vim syntax file for all typedefs
185 syntax: syntax.vim
186 syntax.vim: $(DSOURCES) $(HEADERS) $(LIB_FILES)
187 @ echo "-- Generating syntax file"
188 @ ctags --c-types=cgstu --file-scope -o- $^ |\
189 awk '{print $$1}' | sort -u | fmt |\
190 awk '{printf("syntax keyword Typedef\t%s\n", $$0)}' > $@
193 # Testing
195 -include testing.mak
198 # Help
200 help:
201 @ echo "Major targets:"
202 @ echo "default : Build dctags, with debugging support"
203 @ echo "ctags : Build optimized binary"
204 @ echo "help-release: Print help on releasing ctags"
207 # Release management
210 help-release:
211 @ echo "1. make release-svn-X.Y"
212 @ echo "2. make release-source-X.Y"
213 @ echo "3. move ctags-X.Y.tar.gz to Linux"
214 @ echo "4. On Linux: Extract tar; make -f maintainer.mak release-rpm-X.Y"
215 @ echo "5. On Windows: cd $(WINDOWS_DIR)/winXY; nmake -f mk_mvc.mak ctags.exe mostlyclean"
216 @ echo "6. make version=X.Y win-zip"
217 @ echo "7. make website-X.Y"
219 .SECONDARY:
221 RPM_ARCH := i386
222 RPM_SUBDIRS := BUILD SOURCES SPECS SRPMS RPMS
223 RPM_DIRS := $(addprefix $(RPM_ROOT)/,$(RPM_SUBDIRS))
225 $(RELEASE_DIR)/ctags-%-1.$(RPM_ARCH).rpm: \
226 $(RPM_ROOT)/RPMS/$(RPM_ARCH)/ctags-%-1.$(RPM_ARCH).rpm \
227 | $(RELEASE_DIR)
228 ln -f $< $@
229 chmod 644 $@
231 $(RELEASE_DIR)/ctags-%-1.src.rpm: \
232 $(RPM_ROOT)/SRPMS/ctags-%-1.src.rpm \
233 | $(RELEASE_DIR)
234 ln -f $< $@
235 chmod 644 $@
237 $(eval $(RPM_DIRS) $(RELEASE_DIR): ; mkdir -p $$@)
239 $(RPM_ROOT)/SRPMS/ctags-%-1.src.rpm \
240 $(RPM_ROOT)/RPMS/$(RPM_ARCH)/ctags-%-1.$(RPM_ARCH).rpm: \
241 $(RPM_ROOT)/SOURCES/ctags-%.tar.gz \
242 $(RPM_ROOT)/SPECS/ctags-%.spec \
243 | $(RPM_DIRS)
244 rpmbuild --define '_topdir $(RPM_ABS_ROOT)' --define 'optflags $(RPM_FLAGS)' --define 'packager $(PRODUCER) $(CTAGS_WEBSITE)' -ba $(RPM_ROOT)/SPECS/ctags-$*.spec
245 rm -fr $(RPM_ROOT)/BUILD/ctags-$*
247 $(RPM_ROOT)/rpmrc: rpmmacros maintainer.mak
248 echo "optflags: $(RPM_ARCH) $(RPM_FLAGS)" > $@
249 echo "macrofiles: $(PWD)/rpmmacros" >> $@
251 $(RPM_ROOT)/rpmmacros: maintainer.mak
252 echo "%_topdir $(RPM_ABS_ROOT)" > $@
253 echo '%_gpg_name "$(PRODUCER) <$(EMAIL)>"' >> $@
254 echo "%packager $(PRODUCER) $(CTAGS_WEBSITE)" >> $@
255 echo "%_i18ndomains %{nil}" >> $@
256 echo "%debug_package %{nil}" >> $@
258 $(RPM_ROOT)/SPECS/ctags-%.spec: ctags.spec | $(RPM_ROOT)/SPECS
259 sed -e "s/@VERSION@/$*/" ctags.spec > $(RPM_ROOT)/SPECS/ctags-$*.spec
261 $(RPM_ROOT)/SOURCES/ctags-%.tar.gz: $(RELEASE_DIR)/ctags-%.tar.gz | $(RPM_ROOT)/SOURCES
262 ln -f $< $@
264 $(RELEASE_DIR)/ctags-%.tar.gz: $(UNIX_FILES) | $(RELEASE_DIR)
265 @ echo "---------- Building tar ball"
266 if [ -d $(@D)/dirs/ctags-$* ]; then rm -fr $(@D)/dirs/ctags-$*; fi
267 mkdir -p $(@D)/dirs/ctags-$*
268 cp -pr $(UNIX_FILES) $(REGEX_DIR) $(@D)/dirs/ctags-$*/
269 sed -e 's/\(PROGRAM_VERSION\) "\([^ ]*\)"/\1 "$*"/' ctags.h > $(@D)/dirs/ctags-$*/ctags.h
270 sed -e 's/"\(Version\) \([^ ]*\)"/"\1 $*"/' ctags.1 > $(@D)/dirs/ctags-$*/ctags.1
271 sed -e 's/\(Current Version:\) [^ ]*/\1 $*/' -e 's/@VERSION@/$*/' -e "s/@DATE@/`date +'%d %b %Y'`/" NEWS > $(@D)/dirs/ctags-$*/NEWS
272 (cd $(@D)/dirs/ctags-$* ;\
273 chmod 644 * ;\
274 chmod 755 mkinstalldirs ;\
275 chmod 755 $(REGEX_DIR) ;\
276 chmod 644 $(REGEX_DIR)/* ;\
277 autoheader ;\
278 chmod 644 config.h.in ;\
279 autoconf ;\
280 chmod 755 configure ;\
281 rm -fr autom4te.cache ;\
282 cat ctags.1 | $(MAN2HTML) > ctags.html ;\
284 cd $(@D)/dirs && tar -zcf ../$(@F) ctags-$*
285 chmod 644 $@
287 clean-rpm:
288 rm -fr $(RPM_ROOT)
290 ifneq ($(findstring win-,$(MAKECMDGOALS)),)
291 ifeq ($(version),,)
292 $(error $(MAKECMDGOALS) target requires value for 'version')
293 endif
294 endif
296 check-version-%:
297 @ if [ -z "$(version)" ]; then echo "target requires value for 'version'" >&2; exit 1; fi
299 $(WINDOWS_DIR)/ctags$(win_version): \
300 $(RELEASE_DIR)/ctags-$(version).tar.gz maintainer.mak \
301 | $(WINDOWS_DIR)
302 @ echo "---------- Building Win32 release directory"
303 rm -fr "$(WINDOWS_DIR)/ctags$(win_version)"
304 mkdir -p "$(WINDOWS_DIR)/ctags$(win_version)"
305 for file in $(WIN_FILES) ctags.html; do \
306 $(UNIX2DOS) < "$(RELEASE_DIR)/dirs/ctags-$(version)/$${file}" > $@/$${file} ;\
307 done
308 mkdir $@/$(REGEX_DIR)
309 for file in $(REGEX_DIR)/*; do \
310 $(UNIX2DOS) < "$${file}" > $@/$(REGEX_DIR)/`basename $${file}` ;\
311 done
312 chmod 644 $@/*
313 chmod 755 $@/$(REGEX_DIR)
314 chmod 644 $@/$(REGEX_DIR)/*
316 $(RELEASE_DIR)/ctags%.zip: \
317 check-version-% \
318 $(WINDOWS_DIR)/ctags% \
319 $(WINDOWS_DIR)/ctags%/ctags.exe
320 cd $(WINDOWS_DIR) && zip -r ../$@ ctags$*
322 win-source: $(WINDOWS_DIR)/ctags$(win_version)
324 win-zip: $(RELEASE_DIR)/ctags$(win_version).zip
326 release-win-%:
327 $(MAKE) version="$*" win-source
329 release-tar-%: $(RELEASE_DIR)/ctags-%.tar.gz
332 release-rpm-%: \
333 $(RELEASE_DIR)/ctags-%-1.$(RPM_ARCH).rpm \
334 $(RELEASE_DIR)/ctags-%-1.src.rpm
337 release-source-%: $(RELEASE_DIR)/ctags-%.tar.gz
338 $(MAKE) version="$*" win-source
340 release-bin-%: release-rpm-%
341 $(MAKE) version="$*" win-zip
343 $(WINDOWS_DIR):
344 mkdir -p $@
347 # Web site files
349 website-%: website-man-% website-index-% website-news-% \
350 $(CTAGS_WEBDIR)/EXTENDING.html
353 website-man-%: ctags.1 Makefile
354 @ echo "---------- Generating $(CTAGS_WEBDIR)/ctags.html"
355 umask 022 ; \
356 sed -e 's/"\(Version\) \([^ ]*\)"/"\1 $*"/' ctags.1 |\
357 $(MAN2HTML) > $(CTAGS_WEBDIR)/ctags.html
359 website-index-%: index.html Makefile
360 @ echo "---------- Generating $(CTAGS_WEBDIR)/index.html"
361 umask 022 ; \
362 sed -e "s/@VERSION@/$*/g" \
363 -e "s/@DOS_VERSION@/`echo $* | sed 's/\.//g'`/g" \
364 -e "s/@DATE@/`date +'%d %B %Y'`/" \
365 $< > $(CTAGS_WEBDIR)/index.html
367 website-news-%: NEWS maintainer.mak
368 @ echo "---------- Generating $(CTAGS_WEBDIR)/news.html"
369 umask 022 ; \
370 sed -e 's/\(Current Version:\) [^ ]*/\1 $*/' \
371 -e 's/@VERSION@/$*/' \
372 -e "s/@DATE@/`date +'%d %b %Y'`/" \
373 -e 's/</\&lt;/g' -e 's/>/\&gt;/g' \
374 -e 's@^Current Version:.*$$@<html><head><title>Exuberant Ctags: Change Notes</title></head><body><h1>Change Notes</h1><pre>@' \
375 -e 's@\(^ctags-.* (.*)\)$$@<b>\1</b>@' \
376 -e 's@^vim:.*$$@</pre><hr><a href="http:index.html">Back to <strong>Exuberant Ctags</strong></a></body></html>@' \
377 $< > $(CTAGS_WEBDIR)/news.html
379 $(CTAGS_WEBDIR)/EXTENDING.html: EXTENDING.html
380 @ echo "---------- Generating $(CTAGS_WEBDIR)/EXTENDING.html"
381 cp $< $@ && chmod 644 $@
384 # SVN management
386 svn_url := https://ctags.svn.sourceforge.net/svnroot/ctags
388 release-svn-%: svn-tagcheck-%
389 @ echo "---------- Tagging release $*"
390 svn copy -m'Release of ctags-$*' $(svn_url)/trunk $(svn_url)/tags/ctags-$*
392 rerelease-svn-%:
393 @ echo "---------- Tagging release $*"
394 svn remove -m'Regenerating release of ctags-$*' $(svn_url)/tags/ctags-$*
395 svn copy -m'Release of ctags-$*' $(svn_url)/trunk $(svn_url)/tags/ctags-$*
397 svn-tagcheck-%:
398 if svn list $(svn_url)/tags/ | grep -q 'ctags-$*/$$' >/dev/null 2>&1 ;then \
399 echo "ctags-$* already exists; use rerelease-$*" >&2 ;\
400 exit 1 ;\
403 svn-files:
404 @ls -1 $(SVN_FILES)
407 # Dependency file generation
409 $(DEPS): %.c maintainer.mak
410 @ if [ ! -d $(DEP_DIR) ] ;then mkdir -p $(DEP_DIR) ;fi
411 @ $(CC) -M $(DCFLAGS) $< | sed 's/\($*\.o\)\([ :]\)/\1 $*.od $(@F)\2/g' > $@
414 %.inc: %.c Makefile
415 -@ $(CC) -MM $(DCFLAGS) $<
418 # Compilation rules
420 %.o %.od: gnu_regex/%.c
421 # @ echo "-- Compiling $<"
422 $(CC) $(CFLAGS) -D__USE_GNU -Dbool=int -Dfalse=0 -Dtrue=1 -I$(REGEX_DIR) $(OPT) -c $<
424 %.o: %.c
425 @ echo "-- Compiling $<"
426 @ $(CC) $(COMP_FLAGS) -DEXTERNAL_SORT $(OPT) $(WARNINGS) -Wuninitialized -c $<
428 %.od: %.c
429 @ echo "-- Compiling (debug) $<"
430 @ $(CC) -g $(DCFLAGS) $(WARNINGS) -o $*.od -c $<
432 %.i: %.c FORCE
433 $(CC) $(DCFLAGS) $(WARNINGS) -Wuninitialized -O -E $< > $@
435 %.ic: %.c FORCE
436 $(CC) $(DCFLAGS) $(WARNINGS) -Wuninitialized -O -E $< | sed '/^[ ]*$/d' > $@
438 %.s: %.c FORCE
439 $(CC) $(DCFLAGS) $(WARNINGS) -S $< > $@
441 readtags.err: DCFLAGS += -DREADTAGS_MAIN
443 %.err: %.c
444 @ $(CC) $(DCFLAGS) $(WARNINGS) -Wuninitialized -O -c $<
445 @ rm $*.o
447 %.c.gcov: %.da
448 @ gcov $*.c
450 %.sproto: %.c
451 @ genproto -s -m __ARGS $<
453 %.proto: %.c
454 @ genproto -e -m __ARGS $<
456 # Print out the value of a variable
457 # From http://www.cmcrossroads.com/ubbthreads/showflat.php?Cat=0&Board=cmbasics&Number=28829
458 print-%:
459 @echo $* = $($*)
461 # Print out the expanded values of all variables
462 # From http://www.cmcrossroads.com/ubbthreads/showflat.php?Cat=0&Number=29581
463 .PHONY: print-vars
464 print-vars:
465 @$(foreach V,$(sort $(.VARIABLES)), \
466 $(if $(filter-out environment% default automatic, \
467 $(origin $V)),$(warning $V=$($V))))
469 # Print out the declared values of all variables
470 .PHONY: print-vars-decl
471 print-vars-decl:
472 @$(foreach V,$(sort $(.VARIABLES)), \
473 $(if $(filter-out environment% default automatic, \
474 $(origin $V)),$(warning $V=$(value $V))))
476 # vi:ts=4 sw=4