ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/make/Makefile
Revision: 1490
Committed: Fri Sep 24 04:16:43 2004 UTC (19 years, 9 months ago) by gezelter
File size: 11995 byte(s)
Log Message:
Import of OOPSE v. 2.0

File Contents

# Content
1 #---------------------------------------------------------------------------
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 # .cc -> .o
216 $(PackageTargetDir)/%.o : $(PackageSourceDir)/%.cc
217 $(Print) $@
218 $(CppCompiler) $(CppOptions) -c $(IncludePath) $< -o $@
219
220 %.o : $(PackageSourceDir)/%.cc
221 $(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