Makefile 6.52 KB
Newer Older
thomas.forbriger's avatar
thomas.forbriger committed
1
2
# this is <Makefile>
# ----------------------------------------------------------------------------
3
# $Id: Makefile,v 1.8 2010-03-24 07:43:25 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
# 
# 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
# ----
24
25
#
# Other libraries that are required to compile libdatwritexx:
26
# libaff, libgsexx, libtime, libsffxx, libdatreadxx
27
28
29
30
#
# The library libdatwritexx is a supplement to libdatreadxx. Most of the data
# structures and formats are defined in libdatreadxx. libdatwritexx
# supplements these with file writing modules.
thomas.forbriger's avatar
thomas.forbriger committed
31
32
33
34
35
36
# 
# REVISIONS and CHANGES 
#    11/04/2006   V1.0   Thomas Forbriger
# 
# ============================================================================
#
thomas.forbriger's avatar
thomas.forbriger committed
37
MODULES=sff ascii binary
thomas.forbriger's avatar
thomas.forbriger committed
38
39
40
41
42

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

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

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

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
76
77
78
79
80
81
DATREADFILES=$(wildcard ../libdatreadxx/*.cc) \
             $(wildcard ../libdatreadxx/*.h) \
             $(wildcard ../libdatreadxx/*/*.cc) \
             $(wildcard ../libdatreadxx/*/*.h) \
		 ../libdatreadxx/Makefile

thomas.forbriger's avatar
thomas.forbriger committed
82
flist: Makefile $(wildcard *.cfg contrib/*.h) $(HEADERS) $(LIBSRC) \
thomas.forbriger's avatar
thomas.forbriger committed
83
         $(TESTSRC) README $(DATREADFILES)
thomas.forbriger's avatar
thomas.forbriger committed
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
	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
112
libdatwritexx.a: $(patsubst %.cc,%.o,$(LIBSRC))
thomas.forbriger's avatar
thomas.forbriger committed
113
114
	ar rcv $@ $^
	ranlib $@
thomas.forbriger's avatar
thomas.forbriger committed
115
	/bin/mv -fv $@ $(LOCLIBDIR)
thomas.forbriger's avatar
thomas.forbriger committed
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

#----------------------------------------------------------------------
# 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
147
DOXYWWWPATH=$(WWWBASEDIR)/libdatwritexx
thomas.forbriger's avatar
thomas.forbriger committed
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
.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
169
170
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
171
172
173
174
175
176
doxyview: doxyfullview doxybrief

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

thomas.forbriger's avatar
thomas.forbriger committed
177
writetest: %: tests/%.o libdatwritexx.a
thomas.forbriger's avatar
thomas.forbriger committed
178
179
180
	$(CXX) $(FLAGS) -o $@ $< -I$(LOCINCLUDEDIR) \
        -ldatwritexx -lsffxx -lgsexx -ltsxx -ltfxx -laff -ltime++ \
        -L$(LOCLIBDIR)
thomas.forbriger's avatar
thomas.forbriger committed
181
	/bin/mv -fv $@ $(LOCBINDIR)
thomas.forbriger's avatar
thomas.forbriger committed
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197

#======================================================================
# 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
198
199
	cd $(TMPPATH)/..; cvs export -r HEAD \
        -d $(PACKAGE) thof/src/README.1st
thomas.forbriger's avatar
thomas.forbriger committed
200
201
202
203
204
205
206
207
208
209
210
	/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 -----