ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/make/Makefile
Revision: 1493
Committed: Mon Sep 27 20:13:04 2004 UTC (19 years, 9 months ago) by tim
File size: 11998 byte(s)
Log Message:
change suffix from .cc to .cpp

File Contents

# User Rev Content
1 gezelter 1490 #---------------------------------------------------------------------------
2     # (C) 1999 - 2002 Jacob Dreyer - Geotechnical Software Services
3     # jacob.dreyer@geosoft.no - http://geosoft.no
4     #
5     # This program is free software; you can redistribute it and/or
6     # modify it under the terms of the GNU General Public License
7     # as published by the Free Software Foundation; either version 2
8     # of the License, or (at your option) any later version.
9     #
10     # This program is distributed in the hope that it will be useful,
11     # but WITHOUT ANY WARRANTY; without even the implied warranty of
12     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13     # GNU General Public License for more details.
14     #
15     # You should have received a copy of the GNU General Public License
16     # along with this program; if not, write to the Free Software
17     # Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18     # MA 02111-1307, USA.
19     #---------------------------------------------------------------------------
20     #---------------------------------------------------------------------------
21     #
22     # GnuMake crash course:
23     #
24     # target : depends
25     # rule
26     #
27     # target - the parameter given to make. I.e. what to build
28     # depends - file or other targets target depends on
29     # rule - how to create target (note that rule is preceeded by a TAB char)
30     # $(VAR) - environment variable or variable defined above
31     # $@ - Current target
32     # $* - Current target without extension
33     # $< - Current dependency
34     #
35     #---------------------------------------------------------------------------
36     #---------------------------------------------------------------------------
37     #
38     # Directories
39     #
40     #---------------------------------------------------------------------------
41     SourceDir = $(DEV_ROOT)/src
42     TargetDir = $(DEV_ROOT)/obj
43     LibDir = $(DEV_ROOT)/lib
44     MakeDir = $(DEV_ROOT)/make
45     BinDir = $(DEV_ROOT)/bin
46     DocsDir = $(DEV_ROOT)/docs
47     CurrentDir = $(CURDIR)
48    
49     ifdef Source
50     Package = $(subst $(SourceDir)/,,$(CurrentDir))
51     PackageList = $(Package)
52     PackageSourceDir = $(SourceDir)/$(Package)
53     PackageTargetDir = $(TargetDir)/$(Package)
54     JavaMainClass = $(subst /,.,$(Package)).$(Main)
55     else
56     PackageList = $(Packages) $(JavaPackages)
57     endif
58    
59     PackageListLoop = $(patsubst %,$(SourceDir)/%/.loop,$(PackageList))
60    
61     JRE = $(JAVA_HOME)/jre/lib/rt.jar
62    
63     ifdef IS_UNIX
64     X = :
65     else
66     X = \;
67     endif
68    
69     #---------------------------------------------------------------------------
70     #
71     # Classification of files
72     #
73     #---------------------------------------------------------------------------
74    
75     # Source
76     JavaFiles = $(filter %.java, $(Source))
77     CppFiles = $(filter %.cpp, $(Source))
78     CFiles = $(filter %.c, $(Source))
79     FortranFiles = $(filter %.f, $(Source))
80     F90Files = $(filter %.F90, $(Source))
81     CorbaFiles = $(filter %.idl, $(Source))
82     OtherSourceFiles = $(filter-out $(JavaFiles) $(CppFiles) $(CFiles) \
83     $(FortranFiles) $(F90Files) \
84     $(CorbaFiles), \
85     $(Source))
86     ManifestFile = $(PackageSourceDir)/Manifest
87     SourceFiles = $(JavaFiles:%.java= $(PackageSourceDir)/%.java)\
88     $(CppFiles:%.cpp= $(PackageSourceDir)/%.cpp)\
89     $(CFiles:%.c= $(PackageSourceDir)/%.c)\
90     $(FortranFiles:%.f= $(PackageSourceDir)/%.f)\
91     $(F90Files:%.F90= $(PackageSourceDir)/%.F90)
92    
93     # Target
94     JavaClassFiles = $(JavaFiles:%.java= $(PackageTargetDir)/%.class)
95     JavaClassFilesRel = $(JavaFiles:%.java= $(Package)/%.class)
96     RmiStubFiles = $(RmiSource:%.java= $(PackageTargetDir)/%_Stub.class)
97     RmiSkeletonFiles = $(RmiSource:%.java= $(PackageTargetDir)/%_Skel.class)
98     JniClassFiles = $(JniSource:%.java= $(PackageTargetDir)/%.class)
99     JniHeaders = $(JniSource:%.java= $(PackageSourceDir)/%.h)
100     ObjectFiles = $(CFiles:%.c= $(PackageTargetDir)/%.o)\
101     $(CppFiles:%.cpp= $(PackageTargetDir)/%.o)\
102     $(FortranFiles:%.f= $(PackageTargetDir)/%.o)\
103     $(F90Files:%.F90= $(PackageTargetDir)/%.o)
104     OtherTargetFiles = $(OtherSourceFiles:%=$(PackageTargetDir)/%)
105    
106     ThirdPartyJarsTmp = $(patsubst %,$(LibDir)/%,$(JavaLibraries))
107     ThirdPartyJars = $(subst $(Space),$(X),$(ThirdPartyJarsTmp))
108    
109     ifneq "$(words $(JavaFiles))" "0"
110     JavaPackageName = $(subst /,.,$(Package))
111     JarFile = $(LibDir)/$(subst /,,$(Package)).jar
112     endif
113     ifneq "$(words $(ObjectFiles))" "0"
114     DependencyFile = $(PackageSourceDir)/Makedepend
115     SharedLibrary = $(LibDir)/lib$(subst /,,$(Package)).so
116     StaticLibrary = $(LibDir)/lib$(subst /,,$(Package)).a
117     ifneq "$(Main)" ""
118     Executable = $(BinDir)/$(Main)
119     endif
120     endif
121     #
122     # Misc
123     #
124     ClassPath = $(JRE)$(X)$(TargetDir)$(X)$(ThirdPartyJars)
125     JavaPackageNames = $(subst /,.,$(JavaPackages))
126     IncludePath = -I$(SourceDir) $(IncludeDirs:%=-I%)
127     LibDirs = -L$(LibDir) $(LibraryDirs:%=-L%)
128     LocalLibs = $(subst /,,$(Packages))
129     LibList = $(LocalLibs:%=-l%) $(Libraries:%=-l%)
130    
131    
132     #---------------------------------------------------------------------------
133     #
134     # Tools & Options
135     #
136     #---------------------------------------------------------------------------
137     Print = @echo
138     Copy = cp
139     CCompiler = gcc
140     CppCompiler = gcc
141     Linker = gcc
142     MakeDepend = makedepend
143     MakeDir = mkdir -p
144     Delete = rm -fr
145     StaticArchiver = ar
146     DynamicArchiver = gcc
147     FortranCompiler = f77
148     F90Compiler = f90
149     JavaCompiler = $(JAVA_HOME)/bin/javac
150     JavaArchiver = $(JAVA_HOME)/bin/jar
151     JarSigner = $(JAVA_HOME)/bin/jarsigner
152     JavadocGenerator = $(JAVA_HOME)/bin/javadoc
153     JniCompiler = $(JAVA_HOME)/bin/javah
154     RmiCompiler = $(JAVA_HOME)/bin/rmic
155     JavaExecute = $(JAVA_HOME)/bin/java
156     Purify = purify
157     WordCount = wc
158     List = cat
159    
160     MakeOptions = -k -s
161     MakeDependOptions =
162     StaticArchiverOptions = rc
163     DynamicArchiverOptions = -shared
164     JavaArchiverOptions =
165     JniOptions =
166     RmiOptions = -d $(TargetDir) -classpath $(ClassPath) \
167     -sourcepath $(SourceDir)
168     FortranOptions =
169     F90Options =
170     JavaCompilerOptions = -d $(TargetDir) -classpath $(ClassPath) \
171     -sourcepath $(SourceDir) -deprecation
172     JavaRunOptions = -classpath $(ClassPath)
173     PurifyOptions =
174     JavadocOptions = -d $(DocsDir) \
175     -sourcepath $(SourceDir) \
176     -classpath $(ClassPath) \
177     -author \
178     -package \
179     -use \
180     -splitIndex \
181     -version \
182     -link file:$(JAVA_HOME)/docs/api \
183     -windowtitle $(JavadocWindowTitle) \
184     -doctitle $(JavadocDocTitle) \
185     -header $(JavadocHeader) \
186     -bottom $(JavadocFooter)
187     WordCountOptions = --lines
188    
189     Empty =
190     Space = $(Empty) $(Empty)
191    
192    
193     #---------------------------------------------------------------------------
194     #
195     # Rules
196     #
197     #---------------------------------------------------------------------------
198     default : build
199    
200     %.loop :
201     @$(MAKE) $(MakeOptions) -C $(subst .loop,,$@) _$(MAKECMDGOALS)all
202    
203     # Create target directory
204     $(PackageTargetDir) :
205     $(MakeDir) $@
206    
207     # .c -> .o
208     $(PackageTargetDir)/%.o : $(PackageTargetDir) $(PackageSourceDir)/%.c
209     $(Print) $@
210     @$(CCompiler) $(COptions) -c $(IncludePath) $< -o $@
211    
212     %.o : $(PackageSourceDir)/%.c
213     $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@
214    
215 tim 1493 # .cpp -> .o
216     $(PackageTargetDir)/%.o : $(PackageSourceDir)/%.cpp
217 gezelter 1490 $(Print) $@
218     $(CppCompiler) $(CppOptions) -c $(IncludePath) $< -o $@
219    
220 tim 1493 %.o : $(PackageSourceDir)/%.cpp
221 gezelter 1490 $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@
222    
223     # .f -> .o
224     $(PackageTargetDir)/%.o : $(PackageSourceDir)/%.f
225     $(Print) $@
226     @$(FortranCompiler) $(FortranOptions) -c $< -o $@
227    
228     %.o : $(PackageSourceDir)/%.f
229     $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@
230    
231     # .F90 -> .o
232     $(PackageTargetDir)/%.o : $(PackageSourceDir)/%.F90
233     $(Print) $@
234     @$(F90Compiler) $(F90Options) -c $< -o $@
235    
236     %.o : $(PackageSourceDir)/%.F90
237     $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@
238    
239     # .java -> .class
240     $(PackageTargetDir)/%.class : $(PackageSourceDir)/%.java
241     $(Print) $@
242     @$(JavaCompiler) $(JavaCompilerOptions) $<
243    
244     %.class : $(PackageSourceDir)/%.java
245     @$(MAKE) $(MakeOptions) $(PackageTargetDir)/$@
246    
247     # .class -> .h
248     $(PackageSourceDir)/%.h : $(PackageTargetDir)/%.class
249     $(Print) $@
250     $(JniCompiler) $(JniOptions) $(JavaPackageName).$*
251    
252     %.h : %.class
253     $(MAKE) $(MakeOptions) $(PackageSourceDir)/$@
254    
255     # .o -> .a
256     $(LibDir)/%.a : $(ObjectFiles)
257     $(Print) $@
258     @$(StaticArchiver) $(StaticArchiverOptions) $@ $(ObjectFiles)
259    
260     %.a : $(ObjectFiles)
261     $(MAKE) $(MakeOptions) $(LibDir)/$@
262    
263     # .o -> .so
264     $(LibDir)/%.so : $(ObjectFiles)
265     $(Print) $@
266     $(DynamicArchiver) $(ObjectFiles) $(DynamicArchiverOptions) -o $@
267    
268     %.so : $(ObjectFiles)
269     $(MAKE) $(MakeOptions) $(LibDir)/$@
270    
271     # .class -> .jar
272     $(LibDir)/%.jar : $(JavaClassFiles) $(OtherTargetFiles)
273     $(Print) $@
274     @cd $(TargetDir); $(JavaArchiver) -cf $@ \
275     $(JavaClassFilesRel) $(OtherTargetFiles)
276    
277     %.jar : $(JavaClassFiles) $(OtherTargetFiles)
278     $(MAKE) $(MakeOptions) $(LibDir)/$@
279    
280     # .class -> JavaDoc
281     javadoc :
282     $(Print) $(JavaPackageNames) > $(DEV_ROOT)/packages.tmp
283     $(JavadocGenerator) $(JavadocOptions) @$(DEV_ROOT)/packages.tmp
284     $(Delete) $(DEV_ROOT)/packages.tmp
285     $(Print) Done JavaDoc.
286    
287     # .class -> _Stub.class
288     $(PackageTargetDir)/%_Stub.class : $(PackageTargetDir)/%.class
289     $(Print) $@
290     $(RmiCompiler) $(RmiOptions) $(JavaPackageName).$*
291    
292     %_Stub.class : %.class
293     $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@
294    
295     # .class -> _Skel.class
296     $(PackageTargetDir)/%_Skel.class : $(PackageTargetDir)/%.class
297     $(Print) $@
298     $(RmiCompiler) $(RmiOptions) $(JavaPackageName).$*
299    
300     %_Skel.class : %.class
301     $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@
302    
303     # Executable
304     $(Executable) : $(ObjectFiles)
305     $(Print) $@
306     $(Linker) $(LinkOptions) $(LibDirs) $(LibList) $(ObjectFiles) -o $@
307    
308     # Anything else is just copied from source to target
309     $(PackageTargetDir)/% : $(PackageSourceDir)/%
310     $(Print) $@
311     $(Copy) $< $@
312    
313     # make (or make build)
314     build : $(PackageListLoop)
315     $(Print) Done build.
316    
317     _all : _buildall
318    
319     _buildall : \
320     $(DependencyFile) \
321     $(PackageTargetDir) \
322     $(ObjectFiles) \
323     $(JavaClassFiles) \
324     $(RmiStubFiles) \
325     $(RmiSkeletonFiles) \
326     $(OtherTargetFiles) \
327     $(SharedLibrary) \
328     $(StaticLibrary) \
329     $(JarFile) \
330     $(Executable)
331    
332    
333     # make clean
334     clean : $(PackageListLoop)
335     $(Print) Done clean.
336    
337     _cleanall :
338     $(Delete) $(PackageTargetDir)/* \
339     $(JarFile) \
340     $(SharedLibrary) \
341     $(StaticLibrary) \
342     $(Executable) \
343     $(DependencyFile)
344    
345    
346     # make depend
347     depend : $(PackageListLoop)
348     $(Print) Done dependencies.
349    
350     _dependall : $(DependencyFile)
351    
352     $(DependencyFile) :
353     $(Print) $@
354     @cd $(PackageSourceDir); \
355     $(MakeDepend) $(MakeDependOptions) -f- -p$(PackageTargetDir)/ \
356     $(IncludePath) $(Source) > $(DependencyFile)
357    
358     # make lib
359     lib : $(PackageListLoop)
360     $(Print) Libraries built.
361    
362     _liball : $(JarFile) $(SharedLibrary) $(StaticLibrary)
363    
364     jar : $(JarFile)
365    
366     jarsign : $(JarFile)
367     $(JarSigner) -keystore GeoSoftKeystore $(JarFile) myself
368    
369     # make statistics
370     _statisticsall :
371     @$(Print) $(SourceFiles) >> $(DEV_ROOT)/files.tmp
372    
373     statistics : $(PackageListLoop)
374     @$(List) $(DEV_ROOT)/files.tmp | xargs $(WordCount) $(WordCountOptions)
375     @$(Delete) $(DEV_ROOT)/files.tmp
376     $(Print) Done statistics.
377    
378     # make pure
379     $(Executable).pure :
380     $(Purify) $(PurifyOptions) $(CppCompiler) $(LinkOptions) $(LibDirs) \
381     $(LibList) $(ObjectFiles) -o $@
382    
383     pure : $(Executable).pure
384    
385     # Execute
386     _runexe :
387     $(Executable) $(RunParameters)
388    
389     _runjava :
390     $(JavaExecute) $(JavaRunOptions) $(JavaMainClass) $(RunParameters)
391    
392     run : _runjava
393    
394    
395     ifdef $(DependencyFile)
396     -include $(DependencyFile)
397     endif