Makefile 6.21 KB
Newer Older
thomas.forbriger's avatar
thomas.forbriger committed
1
2
# this is <Makefile>
# ----------------------------------------------------------------------------
thomas.forbriger's avatar
thomas.forbriger committed
3
# $Id: Makefile,v 1.5 2010-02-24 07:53:11 tforb Exp $
thomas.forbriger's avatar
thomas.forbriger committed
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
# 
# Copyright (c) 2006 by Thomas Forbriger (BFO Schiltach) 
# 
# all stuff to create libdatwritexx and its package
#
# ----
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. 
# 
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
# ----
# 
# REVISIONS and CHANGES 
#    11/04/2006   V1.0   Thomas Forbriger
# 
# ============================================================================
#
MODULES=sff ascii

HEADERS=$(wildcard *.h $(addsuffix /*.h,$(MODULES)))

LIBSRC=$(wildcard *.cc $(addsuffix /*.cc,$(MODULES)))

thomas.forbriger's avatar
thomas.forbriger committed
36
TESTSRC=$(wildcard tests/*.cc)
thomas.forbriger's avatar
thomas.forbriger committed
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

INCINSTALLPATH=$(LOCINCLUDEDIR)/datwritexx
LIBINSTALLPATH=$(LOCLIBDIR)

# name of headers with comments stripped off
STRIPHEADER=$(addsuffix .strip,$(notdir $(HEADERS)))
# name of installed (exported) header files
INSTHEADER=$(addprefix $(INCINSTALLPATH)/,$(notdir $(HEADERS)))

# if defined, empty lines are kept in stripped comment headers
# to synchronize line numbers
EMPTYPRINT=1
#EMPTYPRINT=0

# define this to be cat in case you do not have remcmmnt available
REMCMMNT=remcmmnt
#REMCMMNT=cat

#
# general part
# ------------
#

FLAGS=
CXXFLAGS=-fhonor-std -Wall $(FLAGS)
CXXFLAGS=-Wall $(FLAGS)
LDFLAGS=-L$(LOCLIBDIR)
CPPFLAGS=-I$(LOCINCLUDEDIR) $(FLAGS)

all: install doxybrief doxyfull
install: install-include libdatwritexx.a

thomas.forbriger's avatar
thomas.forbriger committed
69
70
71
72
73
74
DATREADFILES=$(wildcard ../libdatreadxx/*.cc) \
             $(wildcard ../libdatreadxx/*.h) \
             $(wildcard ../libdatreadxx/*/*.cc) \
             $(wildcard ../libdatreadxx/*/*.h) \
		 ../libdatreadxx/Makefile

thomas.forbriger's avatar
thomas.forbriger committed
75
flist: Makefile $(wildcard *.cfg contrib/*.h) $(HEADERS) $(LIBSRC) \
thomas.forbriger's avatar
thomas.forbriger committed
76
         $(TESTSRC) README $(DATREADFILES)
thomas.forbriger's avatar
thomas.forbriger committed
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
	echo $^ | tr ' ' '\n' | sort > $@

.PHONY: edit
edit: flist; vim $<

.PHONY: clean
clean: ; 
	-find . -name \*.bak | xargs --no-run-if-empty /bin/rm -v
	-find . -name \*.o | xargs --no-run-if-empty /bin/rm -v
	-find . -name \*.d | xargs --no-run-if-empty /bin/rm -v
	-/bin/rm -vf flist 

#======================================================================
# pattern rules
# -------------

%.d: %.cc
	$(SHELL) -ec '$(CXX) -M $(CPPFLAGS) $< \
      | sed '\''s,\($(notdir $*)\)\.o[ :]*,$(dir $@)\1.o $@ : ,g'\'' \
        > $@; \
      [ -s $@ ] || rm -f $@'

#======================================================================
# library part
# ------------

-include $(patsubst %.cc,%.d,$(LIBSRC) $(TESTSRC))

thomas.forbriger's avatar
thomas.forbriger committed
105
libdatwritexx.a: $(patsubst %.cc,%.o,$(LIBSRC))
thomas.forbriger's avatar
thomas.forbriger committed
106
107
	ar rcv $@ $^
	ranlib $@
thomas.forbriger's avatar
thomas.forbriger committed
108
	/bin/mv -fv $@ $(LOCLIBDIR)
thomas.forbriger's avatar
thomas.forbriger committed
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

#----------------------------------------------------------------------
# comment stripping

%.hd: %.h; echo $(notdir $<.strip): $< > $@

-include $(patsubst %.h,%.hd,$(HEADERS))

# first awk rule assumes that the first non-comment line starts with '#'
# and that the first (copyright) comment end with pattern "^ */"
%.h.strip:
	awk 'BEGIN {hot=1;} /^ \*\// { if (hot) { hot=2; print; next;} }\
        /^#/ { hot=0; } \
        { if (hot==2) { print ""; } else if (hot) { print; } }' $< > $@
	$(REMCMMNT) $< | awk 'BEGIN {hot=0;} \
        /^ *$$/ { if ((hot) && ($(EMPTYPRINT))) { print; } next; } \
        /^#/ { hot=1; } { if (hot) print; }' >> $@

#----------------------------------------------------------------------

$(INCINSTALLPATH)/%.h: %.h.strip
	mkdir -p $(INCINSTALLPATH)
	-rm -fv $@
	ln -svf $$(pwd)/$< $@

install-include: $(INSTHEADER)
	touch $@

#======================================================================
# documentation part
# ------------------
thomas.forbriger's avatar
thomas.forbriger committed
140
DOXYWWWPATH=$(WWWBASEDIR)/libdatwritexx
thomas.forbriger's avatar
thomas.forbriger committed
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
.PHONY: doxyclean doxyview doxybriefview doxyfullconf doxybriefconf

doxyclean: ;/bin/rm -rfv doc/* docbrief/* doc docbrief

DOXYSRC=$(LIBSRC) $(HEADERS) README

doc/%: doxyfull.cfg $(DOXYSRC)
	mkdir -vp $(DOXYWWWPATH)
	/bin/rm -rfv doc/* doc
	ln -sfv $(DOXYWWWPATH) doc
	doxygen $<

docbrief/%: doxybrief.cfg $(DOXYSRC); doxygen $<

doxybriefconf doxyfullconf: doxy%conf: 
	doxywizard $(patsubst doxy%conf,doxy%.cfg,$@)

doxybrief: docbrief/html/index.html
doxyfull: doc/html/index.html
doxydoc: doxybrief doxyfull

thomas.forbriger's avatar
thomas.forbriger committed
162
163
doxyfullview: doxyfull; $(TF_BROWSER) file:$(DOXYWWWPATH)/html/index.html &
doxybriefview: doxybrief; $(TF_BROWSER) file:/docbrief/html/index.html &
thomas.forbriger's avatar
thomas.forbriger committed
164
165
166
167
168
169
doxyview: doxyfullview doxybrief

#======================================================================
# test code
# ---------

thomas.forbriger's avatar
thomas.forbriger committed
170
writetest: %: tests/%.o libdatwritexx.a
thomas.forbriger's avatar
thomas.forbriger committed
171
172
173
	$(CXX) $(FLAGS) -o $@ $< -I$(LOCINCLUDEDIR) \
        -ldatwritexx -lsffxx -lgsexx -ltsxx -ltfxx -laff -ltime++ \
        -L$(LOCLIBDIR)
thomas.forbriger's avatar
thomas.forbriger committed
174
	/bin/mv -fv $@ $(LOCBINDIR)
thomas.forbriger's avatar
thomas.forbriger committed
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190

#======================================================================
# create package
# --------------
LIBRARYNAME=libdatwritexx
VERSIONCODE=$(shell date +'%Y%m%d')
PACKAGE=$(LIBRARYNAME)$(VERSIONCODE)
PUBLICATIONPATH=$(HOME)/public_html/download/software
TMPPATH=$(HOME)/tmp/$(PACKAGE)
package:
	/bin/rm -rfv $(TMPPATH); mkdir -pv $(TMPPATH)
	cd $(TMPPATH)/..; cvs export -r HEAD \
        -d $(PACKAGE) thof/src/libs/$(LIBRARYNAME)
	cd $(TMPPATH)/..; cvs export -r HEAD -d $(PACKAGE) thof/src/LICENSE.GPL
	cd $(TMPPATH)/..; cvs export -r HEAD \
        -d $(PACKAGE) thof/src/README.compile
thomas.forbriger's avatar
thomas.forbriger committed
191
192
	cd $(TMPPATH)/..; cvs export -r HEAD \
        -d $(PACKAGE) thof/src/README.1st
thomas.forbriger's avatar
thomas.forbriger committed
193
194
195
196
197
198
199
200
201
202
203
	/bin/bash -c 'cd $(TMPPATH); \
        export WWWBASEDIR=doxydoc; \
        mkdir -v inctmp; \
        make INCINSTALLPATH=inctmp all; make clean; /bin/rm -rfv inctmp'
	cd $(TMPPATH)/..; tar cvf $(PUBLICATIONPATH)/$(PACKAGE).tar $(PACKAGE)
	gzip --force -9 $(PUBLICATIONPATH)/$(PACKAGE).tar
	cd $(TMPPATH)/..; tar cvf $(PUBLICATIONPATH)/$(PACKAGE).tar $(PACKAGE)
	bzip2 -f $(PUBLICATIONPATH)/$(PACKAGE).tar
	$(MAKE) install

# ----- END OF Makefile -----