|
1 # |
|
2 # This Source Code Form is subject to the terms of the Mozilla Public |
|
3 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
5 |
|
6 ####################################################################### |
|
7 ### ### |
|
8 ### R U L E S O F E N G A G E M E N T ### |
|
9 ### ### |
|
10 ####################################################################### |
|
11 |
|
12 ####################################################################### |
|
13 # Double-Colon rules for utilizing the binary release model. # |
|
14 ####################################################################### |
|
15 |
|
16 all:: export libs |
|
17 |
|
18 ifeq ($(AUTOCLEAN),1) |
|
19 autobuild:: clean export private_export libs program install |
|
20 else |
|
21 autobuild:: export private_export libs program install |
|
22 endif |
|
23 |
|
24 platform:: |
|
25 @echo $(OBJDIR_NAME) |
|
26 |
|
27 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
28 USE_NT_C_SYNTAX=1 |
|
29 endif |
|
30 |
|
31 # |
|
32 # IMPORTS will always be associated with a component. Therefore, |
|
33 # the "import" rule will always change directory to the top-level |
|
34 # of a component, and traverse the IMPORTS keyword from the |
|
35 # "manifest.mn" file located at this level only. |
|
36 # |
|
37 # note: if there is a trailing slash, the component will be appended |
|
38 # (see import.pl - only used for xpheader.jar) |
|
39 |
|
40 import:: |
|
41 @echo "== import.pl ==" |
|
42 @$(PERL) -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/import.pl \ |
|
43 "RELEASE_TREE=$(RELEASE_TREE)" \ |
|
44 "IMPORTS=$(IMPORTS)" \ |
|
45 "VERSION=$(VERSION)" \ |
|
46 "OS_ARCH=$(OS_ARCH)" \ |
|
47 "PLATFORM=$(PLATFORM)" \ |
|
48 "OVERRIDE_IMPORT_CHECK=$(OVERRIDE_IMPORT_CHECK)" \ |
|
49 "ALLOW_VERSION_OVERRIDE=$(ALLOW_VERSION_OVERRIDE)" \ |
|
50 "SOURCE_RELEASE_PREFIX=$(SOURCE_RELEASE_XP_DIR)" \ |
|
51 "SOURCE_MD_DIR=$(SOURCE_MD_DIR)" \ |
|
52 "SOURCE_XP_DIR=$(SOURCE_XP_DIR)" \ |
|
53 "FILES=$(IMPORT_XPCLASS_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR)" \ |
|
54 "$(IMPORT_XPCLASS_JAR)=$(IMPORT_XP_DIR)|$(IMPORT_XPCLASS_DIR)|" \ |
|
55 "$(XPHEADER_JAR)=$(IMPORT_XP_DIR)|$(SOURCE_XP_DIR)/public/|v" \ |
|
56 "$(MDHEADER_JAR)=$(IMPORT_MD_DIR)|$(SOURCE_MD_DIR)/include|" \ |
|
57 "$(MDBINARY_JAR)=$(IMPORT_MD_DIR)|$(SOURCE_MD_DIR)|" |
|
58 # On Mac OS X ranlib needs to be rerun after static libs are moved. |
|
59 ifeq ($(OS_TARGET),Darwin) |
|
60 find $(SOURCE_MD_DIR)/lib -name "*.a" -exec $(RANLIB) {} \; |
|
61 endif |
|
62 |
|
63 export:: |
|
64 +$(LOOP_OVER_DIRS) |
|
65 |
|
66 private_export:: |
|
67 +$(LOOP_OVER_DIRS) |
|
68 |
|
69 release_export:: |
|
70 +$(LOOP_OVER_DIRS) |
|
71 |
|
72 release_classes:: |
|
73 +$(LOOP_OVER_DIRS) |
|
74 |
|
75 libs program install:: $(TARGETS) |
|
76 ifdef LIBRARY |
|
77 $(INSTALL) -m 664 $(LIBRARY) $(SOURCE_LIB_DIR) |
|
78 endif |
|
79 ifdef SHARED_LIBRARY |
|
80 $(INSTALL) -m 775 $(SHARED_LIBRARY) $(SOURCE_LIB_DIR) |
|
81 ifdef MOZ_DEBUG_SYMBOLS |
|
82 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
83 $(INSTALL) -m 644 $(SHARED_LIBRARY:$(DLL_SUFFIX)=pdb) $(SOURCE_LIB_DIR) |
|
84 endif |
|
85 endif |
|
86 endif |
|
87 ifdef IMPORT_LIBRARY |
|
88 $(INSTALL) -m 775 $(IMPORT_LIBRARY) $(SOURCE_LIB_DIR) |
|
89 endif |
|
90 ifdef PROGRAM |
|
91 $(INSTALL) -m 775 $(PROGRAM) $(SOURCE_BIN_DIR) |
|
92 ifdef MOZ_DEBUG_SYMBOLS |
|
93 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
94 $(INSTALL) -m 644 $(PROGRAM:$(PROG_SUFFIX)=.pdb) $(SOURCE_BIN_DIR) |
|
95 endif |
|
96 endif |
|
97 endif |
|
98 ifdef PROGRAMS |
|
99 $(INSTALL) -m 775 $(PROGRAMS) $(SOURCE_BIN_DIR) |
|
100 endif |
|
101 +$(LOOP_OVER_DIRS) |
|
102 |
|
103 tests:: |
|
104 +$(LOOP_OVER_DIRS) |
|
105 |
|
106 clean clobber:: |
|
107 rm -rf $(ALL_TRASH) |
|
108 +$(LOOP_OVER_DIRS) |
|
109 |
|
110 realclean clobber_all:: |
|
111 rm -rf $(wildcard *.OBJ) dist $(ALL_TRASH) |
|
112 +$(LOOP_OVER_DIRS) |
|
113 |
|
114 ####################################################################### |
|
115 # Double-Colon rules for populating the binary release model. # |
|
116 ####################################################################### |
|
117 |
|
118 |
|
119 release_clean:: |
|
120 rm -rf $(SOURCE_XP_DIR)/release/$(RELEASE_MD_DIR) |
|
121 |
|
122 release:: release_clean release_export release_classes release_policy release_md release_jars release_cpdistdir |
|
123 |
|
124 release_cpdistdir:: |
|
125 @echo "== cpdist.pl ==" |
|
126 @$(PERL) -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/cpdist.pl \ |
|
127 "RELEASE_TREE=$(RELEASE_TREE)" \ |
|
128 "CORE_DEPTH=$(CORE_DEPTH)" \ |
|
129 "MODULE=${MODULE}" \ |
|
130 "OS_ARCH=$(OS_ARCH)" \ |
|
131 "RELEASE=$(RELEASE)" \ |
|
132 "PLATFORM=$(PLATFORM)" \ |
|
133 "RELEASE_VERSION=$(RELEASE_VERSION)" \ |
|
134 "SOURCE_RELEASE_PREFIX=$(SOURCE_RELEASE_XP_DIR)" \ |
|
135 "RELEASE_XP_DIR=$(RELEASE_XP_DIR)" \ |
|
136 "RELEASE_MD_DIR=$(RELEASE_MD_DIR)" \ |
|
137 "FILES=$(XPCLASS_JAR) $(XPCLASS_DBG_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR) XP_FILES MD_FILES" \ |
|
138 "$(XPCLASS_JAR)=$(SOURCE_RELEASE_CLASSES_DIR)|x"\ |
|
139 "$(XPCLASS_DBG_JAR)=$(SOURCE_RELEASE_CLASSES_DBG_DIR)|x"\ |
|
140 "$(XPHEADER_JAR)=$(SOURCE_RELEASE_XPHEADERS_DIR)|x" \ |
|
141 "$(MDHEADER_JAR)=$(SOURCE_RELEASE_MDHEADERS_DIR)|m" \ |
|
142 "$(MDBINARY_JAR)=$(SOURCE_RELEASE_MD_DIR)|m" \ |
|
143 "XP_FILES=$(XP_FILES)|xf" \ |
|
144 "MD_FILES=$(MD_FILES)|mf" |
|
145 |
|
146 |
|
147 # $(SOURCE_RELEASE_xxx_JAR) is a name like yyy.jar |
|
148 # $(SOURCE_RELEASE_xx_DIR) is a name like |
|
149 |
|
150 release_jars:: |
|
151 @echo "== release.pl ==" |
|
152 @$(PERL) -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/release.pl \ |
|
153 "RELEASE_TREE=$(RELEASE_TREE)" \ |
|
154 "PLATFORM=$(PLATFORM)" \ |
|
155 "OS_ARCH=$(OS_ARCH)" \ |
|
156 "RELEASE_VERSION=$(RELEASE_VERSION)" \ |
|
157 "SOURCE_RELEASE_DIR=$(SOURCE_RELEASE_DIR)" \ |
|
158 "FILES=$(XPCLASS_JAR) $(XPCLASS_DBG_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR)" \ |
|
159 "$(XPCLASS_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DIR)|b"\ |
|
160 "$(XPCLASS_DBG_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DBG_DIR)|b"\ |
|
161 "$(XPHEADER_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_XPHEADERS_DIR)|a" \ |
|
162 "$(MDHEADER_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_MDHEADERS_DIR)|a" \ |
|
163 "$(MDBINARY_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_MD_DIR)|bi" |
|
164 |
|
165 # Rules for releasing classes. |
|
166 # We have to do some REALLY gross stuff to deal with multiple classes in one |
|
167 # file, as well as nested classes, which have a filename of the form |
|
168 # ContainingClass$NestedClass.class. |
|
169 # RELEASE_CLASSES simply performs a required patsubst on CLASSES |
|
170 # RELEASE_CLASS_PATH is RELEASE_CLASSES with the path (in ns/dist) prepended |
|
171 # RELEASE_NESTED is all the nested classes in RELEASE_CLASS_PATH. We use a |
|
172 # foreach and wildcard to get all the files that start out like one of the |
|
173 # class files, then have a $. So, for each class file, we look for file$* |
|
174 # RELEASE_FILES is the combination of RELEASE_NESTED and the class files |
|
175 # specified by RELEASE_CLASSES which have .class appended to them. Note that |
|
176 # the RELEASE_NESTED don't need to have .class appended because they were |
|
177 # read in from the wildcard as complete filenames. |
|
178 # |
|
179 # The _DBG versions are the debuggable ones. |
|
180 ifneq ($(CLASSES),) |
|
181 |
|
182 RELEASE_CLASSES := $(patsubst %,%,$(CLASSES)) |
|
183 |
|
184 ifdef BUILD_OPT |
|
185 RELEASE_CLASS_PATH := $(patsubst %,$(SOURCE_CLASSES_DIR)/$(PACKAGE)/%, $(RELEASE_CLASSES)) |
|
186 RELEASE_NESTED := $(foreach file,$(RELEASE_CLASS_PATH),$(wildcard $(file)$$*)) |
|
187 RELEASE_FILES := $(patsubst %,%.class,$(RELEASE_CLASS_PATH)) $(RELEASE_NESTED) |
|
188 else |
|
189 RELEASE_DBG_CLASS_PATH:= $(patsubst %,$(SOURCE_CLASSES_DBG_DIR)/$(PACKAGE)/%, $(RELEASE_CLASSES)) |
|
190 RELEASE_DBG_NESTED := $(foreach file,$(RELEASE_DBG_CLASS_PATH),$(wildcard $(file)$$*)) |
|
191 RELEASE_DBG_FILES := $(patsubst %,%.class,$(RELEASE_DBG_CLASS_PATH)) $(RELEASE_DBG_NESTED) |
|
192 endif |
|
193 |
|
194 # Substitute \$ for $ so the shell doesn't choke |
|
195 ifdef BUILD_OPT |
|
196 release_classes:: |
|
197 $(INSTALL) -m 444 $(subst $$,\$$,$(RELEASE_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DIR)/$(PACKAGE) |
|
198 else |
|
199 release_classes:: |
|
200 $(INSTALL) -m 444 $(subst $$,\$$,$(RELEASE_DBG_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DBG_DIR)/$(PACKAGE) |
|
201 endif |
|
202 |
|
203 endif |
|
204 |
|
205 release_policy:: |
|
206 +$(LOOP_OVER_DIRS) |
|
207 |
|
208 ifndef NO_MD_RELEASE |
|
209 ifdef LIBRARY |
|
210 MD_LIB_RELEASE_FILES += $(LIBRARY) |
|
211 endif |
|
212 ifdef SHARED_LIBRARY |
|
213 MD_LIB_RELEASE_FILES += $(SHARED_LIBRARY) |
|
214 endif |
|
215 ifdef IMPORT_LIBRARY |
|
216 MD_LIB_RELEASE_FILES += $(IMPORT_LIBRARY) |
|
217 endif |
|
218 ifdef PROGRAM |
|
219 MD_BIN_RELEASE_FILES += $(PROGRAM) |
|
220 endif |
|
221 ifdef PROGRAMS |
|
222 MD_BIN_RELEASE_FILES += $(PROGRAMS) |
|
223 endif |
|
224 endif |
|
225 |
|
226 release_md:: |
|
227 ifneq ($(MD_LIB_RELEASE_FILES),) |
|
228 $(INSTALL) -m 444 $(MD_LIB_RELEASE_FILES) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR) |
|
229 endif |
|
230 ifneq ($(MD_BIN_RELEASE_FILES),) |
|
231 $(INSTALL) -m 555 $(MD_BIN_RELEASE_FILES) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_BIN_DIR) |
|
232 endif |
|
233 +$(LOOP_OVER_DIRS) |
|
234 |
|
235 |
|
236 alltags: |
|
237 rm -f TAGS |
|
238 find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs etags -a |
|
239 find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs ctags -a |
|
240 |
|
241 $(PROGRAM): $(OBJS) $(EXTRA_LIBS) |
|
242 @$(MAKE_OBJDIR) |
|
243 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
244 $(MKPROG) $(subst /,\\,$(OBJS)) -Fe$@ -link $(LDFLAGS) $(subst /,\\,$(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)) |
|
245 ifdef MT |
|
246 if test -f $@.manifest; then \ |
|
247 $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ |
|
248 rm -f $@.manifest; \ |
|
249 fi |
|
250 endif # MSVC with manifest tool |
|
251 else |
|
252 $(MKPROG) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) |
|
253 endif |
|
254 |
|
255 get_objs: |
|
256 @echo $(OBJS) |
|
257 |
|
258 $(LIBRARY): $(OBJS) |
|
259 @$(MAKE_OBJDIR) |
|
260 rm -f $@ |
|
261 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
262 $(AR) $(subst /,\\,$(OBJS)) |
|
263 else |
|
264 $(AR) $(OBJS) |
|
265 endif |
|
266 $(RANLIB) $@ |
|
267 |
|
268 |
|
269 ifeq ($(OS_TARGET),OS2) |
|
270 $(IMPORT_LIBRARY): $(MAPFILE) |
|
271 rm -f $@ |
|
272 $(IMPLIB) $@ $< |
|
273 $(RANLIB) $@ |
|
274 endif |
|
275 |
|
276 ifdef SHARED_LIBRARY_LIBS |
|
277 ifdef BUILD_TREE |
|
278 SUB_SHLOBJS = $(foreach dir,$(SHARED_LIBRARY_DIRS),$(shell $(MAKE) -C $(dir) --no-print-directory get_objs)) |
|
279 else |
|
280 SUB_SHLOBJS = $(foreach dir,$(SHARED_LIBRARY_DIRS),$(addprefix $(dir)/,$(shell $(MAKE) -C $(dir) --no-print-directory get_objs))) |
|
281 endif |
|
282 endif |
|
283 |
|
284 $(SHARED_LIBRARY): $(OBJS) $(RES) $(MAPFILE) $(SUB_SHLOBJS) |
|
285 @$(MAKE_OBJDIR) |
|
286 rm -f $@ |
|
287 ifeq ($(OS_TARGET)$(OS_RELEASE), AIX4.1) |
|
288 echo "#!" > $(OBJDIR)/lib$(LIBRARY_NAME)_syms |
|
289 nm -B -C -g $(OBJS) \ |
|
290 | awk '/ [T,D] / {print $$3}' \ |
|
291 | sed -e 's/^\.//' \ |
|
292 | sort -u >> $(OBJDIR)/lib$(LIBRARY_NAME)_syms |
|
293 $(LD) $(XCFLAGS) -o $@ $(OBJS) -bE:$(OBJDIR)/lib$(LIBRARY_NAME)_syms \ |
|
294 -bM:SRE -bnoentry $(OS_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) |
|
295 else |
|
296 ifeq (,$(filter-out WIN%,$(OS_TARGET))) |
|
297 ifdef NS_USE_GCC |
|
298 $(LINK_DLL) $(OBJS) $(SUB_SHLOBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS) $(RES) |
|
299 else |
|
300 $(LINK_DLL) -MAP $(DLLBASE) $(subst /,\\,$(OBJS) $(SUB_SHLOBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS) $(RES)) |
|
301 ifdef MT |
|
302 if test -f $@.manifest; then \ |
|
303 $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;2; \ |
|
304 rm -f $@.manifest; \ |
|
305 fi |
|
306 endif # MSVC with manifest tool |
|
307 endif |
|
308 else |
|
309 $(MKSHLIB) -o $@ $(OBJS) $(SUB_SHLOBJS) $(LD_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) |
|
310 chmod +x $@ |
|
311 endif |
|
312 endif |
|
313 |
|
314 ifeq (,$(filter-out WIN%,$(OS_TARGET))) |
|
315 $(RES): $(RESNAME) |
|
316 @$(MAKE_OBJDIR) |
|
317 # The resource compiler does not understand the -U option. |
|
318 ifdef NS_USE_GCC |
|
319 $(RC) $(filter-out -U%,$(DEFINES)) $(INCLUDES:-I%=--include-dir %) -o $@ $< |
|
320 else |
|
321 $(RC) $(filter-out -U%,$(DEFINES)) $(INCLUDES) -Fo$@ $< |
|
322 endif |
|
323 @echo $(RES) finished |
|
324 endif |
|
325 |
|
326 $(MAPFILE): $(MAPFILE_SOURCE) |
|
327 @$(MAKE_OBJDIR) |
|
328 $(PROCESS_MAP_FILE) |
|
329 |
|
330 |
|
331 $(OBJDIR)/$(PROG_PREFIX)%$(PROG_SUFFIX): $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX) |
|
332 @$(MAKE_OBJDIR) |
|
333 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
334 $(MKPROG) $< -Fe$@ -link \ |
|
335 $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) |
|
336 ifdef MT |
|
337 if test -f $@.manifest; then \ |
|
338 $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ |
|
339 rm -f $@.manifest; \ |
|
340 fi |
|
341 endif # MSVC with manifest tool |
|
342 else |
|
343 $(MKPROG) -o $@ $(CFLAGS) $< \ |
|
344 $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) |
|
345 endif |
|
346 |
|
347 WCCFLAGS1 := $(subst /,\\,$(CFLAGS)) |
|
348 WCCFLAGS2 := $(subst -I,-i=,$(WCCFLAGS1)) |
|
349 WCCFLAGS3 := $(subst -D,-d,$(WCCFLAGS2)) |
|
350 |
|
351 # Translate source filenames to absolute paths. This is required for |
|
352 # debuggers under Windows & OS/2 to find source files automatically |
|
353 |
|
354 ifeq (,$(filter-out OS2 AIX,$(OS_TARGET))) |
|
355 # OS/2 and AIX |
|
356 NEED_ABSOLUTE_PATH := 1 |
|
357 PWD := $(shell pwd) |
|
358 |
|
359 else |
|
360 # Windows |
|
361 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
362 NEED_ABSOLUTE_PATH := 1 |
|
363 ifdef .PYMAKE |
|
364 PWD := $(CURDIR) |
|
365 else |
|
366 PWD := $(shell pwd) |
|
367 ifeq (,$(findstring ;,$(PATH))) |
|
368 ifndef USE_MSYS |
|
369 PWD := $(subst \,/,$(shell cygpath -w $(PWD))) |
|
370 endif |
|
371 endif |
|
372 endif |
|
373 |
|
374 else |
|
375 # everything else |
|
376 PWD := $(shell pwd) |
|
377 endif |
|
378 endif |
|
379 |
|
380 # The quotes allow absolute paths to contain spaces. |
|
381 core_abspath = "$(if $(findstring :,$(1)),$(1),$(if $(filter /%,$(1)),$(1),$(PWD)/$(1)))" |
|
382 |
|
383 $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.c |
|
384 @$(MAKE_OBJDIR) |
|
385 ifdef USE_NT_C_SYNTAX |
|
386 $(CC) -Fo$@ -c $(CFLAGS) $(call core_abspath,$<) |
|
387 else |
|
388 ifdef NEED_ABSOLUTE_PATH |
|
389 $(CC) -o $@ -c $(CFLAGS) $(call core_abspath,$<) |
|
390 else |
|
391 $(CC) -o $@ -c $(CFLAGS) $< |
|
392 endif |
|
393 endif |
|
394 |
|
395 $(PROG_PREFIX)%$(OBJ_SUFFIX): %.c |
|
396 ifdef USE_NT_C_SYNTAX |
|
397 $(CC) -Fo$@ -c $(CFLAGS) $(call core_abspath,$<) |
|
398 else |
|
399 ifdef NEED_ABSOLUTE_PATH |
|
400 $(CC) -o $@ -c $(CFLAGS) $(call core_abspath,$<) |
|
401 else |
|
402 $(CC) -o $@ -c $(CFLAGS) $< |
|
403 endif |
|
404 endif |
|
405 |
|
406 ifneq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) |
|
407 $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.s |
|
408 @$(MAKE_OBJDIR) |
|
409 $(AS) -o $@ $(ASFLAGS) -c $< |
|
410 endif |
|
411 |
|
412 $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.asm |
|
413 @$(MAKE_OBJDIR) |
|
414 $(AS) -Fo$@ $(ASFLAGS) -c $< |
|
415 |
|
416 $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.S |
|
417 @$(MAKE_OBJDIR) |
|
418 $(AS) -o $@ $(ASFLAGS) -c $< |
|
419 |
|
420 $(OBJDIR)/$(PROG_PREFIX)%: %.cpp |
|
421 @$(MAKE_OBJDIR) |
|
422 ifdef USE_NT_C_SYNTAX |
|
423 $(CCC) -Fo$@ -c $(CFLAGS) $(call core_abspath,$<) |
|
424 else |
|
425 ifdef NEED_ABSOLUTE_PATH |
|
426 $(CCC) -o $@ -c $(CFLAGS) $(call core_abspath,$<) |
|
427 else |
|
428 $(CCC) -o $@ -c $(CFLAGS) $< |
|
429 endif |
|
430 endif |
|
431 |
|
432 # |
|
433 # Please keep the next two rules in sync. |
|
434 # |
|
435 $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cc |
|
436 @$(MAKE_OBJDIR) |
|
437 $(CCC) -o $@ -c $(CFLAGS) $< |
|
438 |
|
439 $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cpp |
|
440 @$(MAKE_OBJDIR) |
|
441 ifdef STRICT_CPLUSPLUS_SUFFIX |
|
442 echo "#line 1 \"$<\"" | cat - $< > $(OBJDIR)/t_$*.cc |
|
443 $(CCC) -o $@ -c $(CFLAGS) $(OBJDIR)/t_$*.cc |
|
444 rm -f $(OBJDIR)/t_$*.cc |
|
445 else |
|
446 ifdef USE_NT_C_SYNTAX |
|
447 $(CCC) -Fo$@ -c $(CFLAGS) $(call core_abspath,$<) |
|
448 else |
|
449 ifdef NEED_ABSOLUTE_PATH |
|
450 $(CCC) -o $@ -c $(CFLAGS) $(call core_abspath,$<) |
|
451 else |
|
452 $(CCC) -o $@ -c $(CFLAGS) $< |
|
453 endif |
|
454 endif |
|
455 endif #STRICT_CPLUSPLUS_SUFFIX |
|
456 |
|
457 %.i: %.cpp |
|
458 $(CCC) -C -E $(CFLAGS) $< > $@ |
|
459 |
|
460 %.i: %.c |
|
461 ifeq (,$(filter-out WIN%,$(OS_TARGET))) |
|
462 $(CC) -C /P $(CFLAGS) $< |
|
463 else |
|
464 $(CC) -C -E $(CFLAGS) $< > $@ |
|
465 endif |
|
466 |
|
467 ifneq (,$(filter-out WIN%,$(OS_TARGET))) |
|
468 %.i: %.s |
|
469 $(CC) -C -E $(CFLAGS) $< > $@ |
|
470 endif |
|
471 |
|
472 %: %.pl |
|
473 rm -f $@; cp $< $@; chmod +x $@ |
|
474 |
|
475 %: %.sh |
|
476 rm -f $@; cp $< $@; chmod +x $@ |
|
477 |
|
478 ################################################################################ |
|
479 # Bunch of things that extend the 'export' rule (in order): |
|
480 ################################################################################ |
|
481 |
|
482 $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE) $(JMCSRCDIR):: |
|
483 @if test ! -d $@; then \ |
|
484 echo Creating $@; \ |
|
485 rm -rf $@; \ |
|
486 $(NSINSTALL) -D $@; \ |
|
487 fi |
|
488 |
|
489 ################################################################################ |
|
490 ## IDL_GEN |
|
491 |
|
492 ifneq ($(IDL_GEN),) |
|
493 |
|
494 #export:: |
|
495 # $(IDL2JAVA) $(IDL_GEN) |
|
496 |
|
497 #all:: export |
|
498 |
|
499 #clobber:: |
|
500 # rm -f $(IDL_GEN:.idl=.class) # XXX wrong! |
|
501 |
|
502 endif |
|
503 |
|
504 ################################################################################ |
|
505 ### JSRCS -- for compiling java files |
|
506 ### |
|
507 ### NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined, |
|
508 ### replace $(CORE_DEPTH) with $(NETLIBDEPTH). |
|
509 ### |
|
510 |
|
511 ifneq ($(JSRCS),) |
|
512 ifneq ($(JAVAC),) |
|
513 ifdef NETLIBDEPTH |
|
514 CORE_DEPTH := $(NETLIBDEPTH) |
|
515 endif |
|
516 |
|
517 JAVA_EXPORT_SRCS=$(shell $(PERL) $(CORE_DEPTH)/coreconf/outofdate.pl $(PERLARG) -d $(JAVA_DESTPATH)/$(PACKAGE) $(JSRCS) $(PRIVATE_JSRCS)) |
|
518 |
|
519 export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE) |
|
520 ifneq ($(JAVA_EXPORT_SRCS),) |
|
521 $(JAVAC) $(JAVA_EXPORT_SRCS) |
|
522 endif |
|
523 |
|
524 all:: export |
|
525 |
|
526 clobber:: |
|
527 rm -f $(SOURCE_XP_DIR)/classes/$(PACKAGE)/*.class |
|
528 |
|
529 endif |
|
530 endif |
|
531 |
|
532 # |
|
533 # JDIRS -- like JSRCS, except you can give a list of directories and it will |
|
534 # compile all the out-of-date java files in those directories. |
|
535 # |
|
536 # NOTE: recursing through these can speed things up, but they also cause |
|
537 # some builds to run out of memory |
|
538 # |
|
539 # NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined, |
|
540 # replace $(CORE_DEPTH) with $(NETLIBDEPTH). |
|
541 # |
|
542 ifdef JDIRS |
|
543 ifneq ($(JAVAC),) |
|
544 ifdef NETLIBDEPTH |
|
545 CORE_DEPTH := $(NETLIBDEPTH) |
|
546 endif |
|
547 |
|
548 # !!!!! THIS WILL CRASH SHMSDOS.EXE !!!!! |
|
549 # shmsdos does not support shell variables. It will crash when it tries |
|
550 # to parse the '=' character. A solution is to rewrite outofdate.pl so it |
|
551 # takes the Javac command as an argument and executes the command itself, |
|
552 # instead of returning a list of files. |
|
553 export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE) |
|
554 @echo "!!! THIS COMMAND IS BROKEN ON WINDOWS--SEE rules.mk FOR DETAILS !!!" |
|
555 return -1 |
|
556 @for d in $(JDIRS); do \ |
|
557 if test -d $$d; then \ |
|
558 set $(EXIT_ON_ERROR); \ |
|
559 files=`echo $$d/*.java`; \ |
|
560 list=`$(PERL) $(CORE_DEPTH)/coreconf/outofdate.pl $(PERLARG) \ |
|
561 -d $(JAVA_DESTPATH)/$(PACKAGE) $$files`; \ |
|
562 if test "$${list}x" != "x"; then \ |
|
563 echo Building all java files in $$d; \ |
|
564 echo $(JAVAC) $$list; \ |
|
565 $(JAVAC) $$list; \ |
|
566 fi; \ |
|
567 set +e; \ |
|
568 else \ |
|
569 echo "Skipping non-directory $$d..."; \ |
|
570 fi; \ |
|
571 $(CLICK_STOPWATCH); \ |
|
572 done |
|
573 endif |
|
574 endif |
|
575 |
|
576 # |
|
577 # JDK_GEN -- for generating "old style" native methods |
|
578 # |
|
579 # Generate JDK Headers and Stubs into the '_gen' and '_stubs' directory |
|
580 # |
|
581 # NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined, |
|
582 # replace $(CORE_DEPTH) with $(NETLIBDEPTH). |
|
583 # |
|
584 ifneq ($(JDK_GEN),) |
|
585 ifneq ($(JAVAH),) |
|
586 ifdef NSBUILDROOT |
|
587 INCLUDES += -I$(JDK_GEN_DIR) -I$(SOURCE_XP_DIR) |
|
588 else |
|
589 INCLUDES += -I$(JDK_GEN_DIR) |
|
590 endif |
|
591 |
|
592 ifdef NETLIBDEPTH |
|
593 CORE_DEPTH := $(NETLIBDEPTH) |
|
594 endif |
|
595 |
|
596 JDK_PACKAGE_CLASSES := $(JDK_GEN) |
|
597 JDK_PATH_CLASSES := $(subst .,/,$(JDK_PACKAGE_CLASSES)) |
|
598 JDK_HEADER_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES)) |
|
599 JDK_STUB_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES)) |
|
600 JDK_HEADER_CFILES := $(patsubst %,$(JDK_GEN_DIR)/%.h,$(JDK_GEN)) |
|
601 JDK_STUB_CFILES := $(patsubst %,$(JDK_STUB_DIR)/%.c,$(JDK_GEN)) |
|
602 |
|
603 $(JDK_HEADER_CFILES): $(JDK_HEADER_CLASSFILES) |
|
604 $(JDK_STUB_CFILES): $(JDK_STUB_CLASSFILES) |
|
605 |
|
606 export:: |
|
607 @echo Generating/Updating JDK headers |
|
608 $(JAVAH) -d $(JDK_GEN_DIR) $(JDK_PACKAGE_CLASSES) |
|
609 @echo Generating/Updating JDK stubs |
|
610 $(JAVAH) -stubs -d $(JDK_STUB_DIR) $(JDK_PACKAGE_CLASSES) |
|
611 ifndef NO_MAC_JAVA_SHIT |
|
612 @if test ! -d $(CORE_DEPTH)/lib/mac/Java/; then \ |
|
613 echo "!!! You need to have a ns/lib/mac/Java directory checked out."; \ |
|
614 echo "!!! This allows us to automatically update generated files for the mac."; \ |
|
615 echo "!!! If you see any modified files there, please check them in."; \ |
|
616 fi |
|
617 @echo Generating/Updating JDK headers for the Mac |
|
618 $(JAVAH) -mac -d $(CORE_DEPTH)/lib/mac/Java/_gen $(JDK_PACKAGE_CLASSES) |
|
619 @echo Generating/Updating JDK stubs for the Mac |
|
620 $(JAVAH) -mac -stubs -d $(CORE_DEPTH)/lib/mac/Java/_stubs $(JDK_PACKAGE_CLASSES) |
|
621 endif |
|
622 endif |
|
623 endif |
|
624 |
|
625 # |
|
626 # JRI_GEN -- for generating "old style" JRI native methods |
|
627 # |
|
628 # Generate JRI Headers and Stubs into the 'jri' directory |
|
629 # |
|
630 # NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined, |
|
631 # replace $(CORE_DEPTH) with $(NETLIBDEPTH). |
|
632 # |
|
633 ifneq ($(JRI_GEN),) |
|
634 ifneq ($(JAVAH),) |
|
635 ifdef NSBUILDROOT |
|
636 INCLUDES += -I$(JRI_GEN_DIR) -I$(SOURCE_XP_DIR) |
|
637 else |
|
638 INCLUDES += -I$(JRI_GEN_DIR) |
|
639 endif |
|
640 |
|
641 ifdef NETLIBDEPTH |
|
642 CORE_DEPTH := $(NETLIBDEPTH) |
|
643 endif |
|
644 |
|
645 JRI_PACKAGE_CLASSES := $(JRI_GEN) |
|
646 JRI_PATH_CLASSES := $(subst .,/,$(JRI_PACKAGE_CLASSES)) |
|
647 JRI_HEADER_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JRI_PATH_CLASSES)) |
|
648 JRI_STUB_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JRI_PATH_CLASSES)) |
|
649 JRI_HEADER_CFILES := $(patsubst %,$(JRI_GEN_DIR)/%.h,$(JRI_GEN)) |
|
650 JRI_STUB_CFILES := $(patsubst %,$(JRI_GEN_DIR)/%.c,$(JRI_GEN)) |
|
651 |
|
652 $(JRI_HEADER_CFILES): $(JRI_HEADER_CLASSFILES) |
|
653 $(JRI_STUB_CFILES): $(JRI_STUB_CLASSFILES) |
|
654 |
|
655 export:: |
|
656 @echo Generating/Updating JRI headers |
|
657 $(JAVAH) -jri -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES) |
|
658 @echo Generating/Updating JRI stubs |
|
659 $(JAVAH) -jri -stubs -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES) |
|
660 ifndef NO_MAC_JAVA_SHIT |
|
661 @if test ! -d $(CORE_DEPTH)/lib/mac/Java/; then \ |
|
662 echo "!!! You need to have a ns/lib/mac/Java directory checked out."; \ |
|
663 echo "!!! This allows us to automatically update generated files for the mac."; \ |
|
664 echo "!!! If you see any modified files there, please check them in."; \ |
|
665 fi |
|
666 @echo Generating/Updating JRI headers for the Mac |
|
667 $(JAVAH) -jri -mac -d $(CORE_DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES) |
|
668 @echo Generating/Updating JRI stubs for the Mac |
|
669 $(JAVAH) -jri -mac -stubs -d $(CORE_DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES) |
|
670 endif |
|
671 endif |
|
672 endif |
|
673 |
|
674 # |
|
675 # JNI_GEN -- for generating JNI native methods |
|
676 # |
|
677 # Generate JNI Headers into the 'jni' directory |
|
678 # |
|
679 ifneq ($(JNI_GEN),) |
|
680 ifneq ($(JAVAH),) |
|
681 JNI_HEADERS := $(patsubst %,$(JNI_GEN_DIR)/%.h,$(JNI_GEN)) |
|
682 |
|
683 export:: |
|
684 @if test ! -d $(JNI_GEN_DIR); then \ |
|
685 echo $(JAVAH) -jni -d $(JNI_GEN_DIR) $(JNI_GEN); \ |
|
686 $(JAVAH) -jni -d $(JNI_GEN_DIR) $(JNI_GEN); \ |
|
687 else \ |
|
688 echo "Checking for out of date header files" ; \ |
|
689 $(PERL) $(CORE_DEPTH)/coreconf/jniregen.pl $(PERLARG) \ |
|
690 -d $(JAVA_DESTPATH) -j "$(JAVAH) -jni -d $(JNI_GEN_DIR)" $(JNI_GEN);\ |
|
691 fi |
|
692 endif |
|
693 endif |
|
694 |
|
695 # |
|
696 # JMC_EXPORT -- for declaring which java classes are to be exported for jmc |
|
697 # |
|
698 ifneq ($(JMC_EXPORT),) |
|
699 JMC_EXPORT_PATHS := $(subst .,/,$(JMC_EXPORT)) |
|
700 JMC_EXPORT_FILES := $(patsubst %,$(JAVA_DESTPATH)/$(PACKAGE)/%.class,$(JMC_EXPORT_PATHS)) |
|
701 |
|
702 # |
|
703 # We're doing NSINSTALL -t here (copy mode) because calling INSTALL will pick up |
|
704 # your NSDISTMODE and make links relative to the current directory. This is a |
|
705 # problem because the source isn't in the current directory: |
|
706 # |
|
707 export:: $(JMC_EXPORT_FILES) $(JMCSRCDIR) |
|
708 $(NSINSTALL) -t -m 444 $(JMC_EXPORT_FILES) $(JMCSRCDIR) |
|
709 endif |
|
710 |
|
711 # |
|
712 # JMC_GEN -- for generating java modules |
|
713 # |
|
714 # Provide default export & install rules when using JMC_GEN |
|
715 # |
|
716 ifneq ($(JMC_GEN),) |
|
717 ifneq ($(JMC),) |
|
718 INCLUDES += -I$(JMC_GEN_DIR) -I. |
|
719 JMC_HEADERS := $(patsubst %,$(JMC_GEN_DIR)/%.h,$(JMC_GEN)) |
|
720 JMC_STUBS := $(patsubst %,$(JMC_GEN_DIR)/%.c,$(JMC_GEN)) |
|
721 JMC_OBJS := $(patsubst %,$(OBJDIR)/%$(OBJ_SUFFIX),$(JMC_GEN)) |
|
722 |
|
723 $(JMC_GEN_DIR)/M%.h: $(JMCSRCDIR)/%.class |
|
724 $(JMC) -d $(JMC_GEN_DIR) -interface $(JMC_GEN_FLAGS) $(?F:.class=) |
|
725 |
|
726 $(JMC_GEN_DIR)/M%.c: $(JMCSRCDIR)/%.class |
|
727 $(JMC) -d $(JMC_GEN_DIR) -module $(JMC_GEN_FLAGS) $(?F:.class=) |
|
728 |
|
729 $(OBJDIR)/M%$(OBJ_SUFFIX): $(JMC_GEN_DIR)/M%.c $(JMC_GEN_DIR)/M%.h |
|
730 @$(MAKE_OBJDIR) |
|
731 $(CC) -o $@ -c $(CFLAGS) $< |
|
732 |
|
733 export:: $(JMC_HEADERS) $(JMC_STUBS) |
|
734 endif |
|
735 endif |
|
736 |
|
737 # |
|
738 # Copy each element of EXPORTS to $(SOURCE_XP_DIR)/public/$(MODULE)/ |
|
739 # |
|
740 PUBLIC_EXPORT_DIR = $(SOURCE_XP_DIR)/public/$(MODULE) |
|
741 |
|
742 ifneq ($(EXPORTS),) |
|
743 $(PUBLIC_EXPORT_DIR):: |
|
744 @if test ! -d $@; then \ |
|
745 echo Creating $@; \ |
|
746 $(NSINSTALL) -D $@; \ |
|
747 fi |
|
748 |
|
749 export:: $(PUBLIC_EXPORT_DIR) |
|
750 |
|
751 export:: $(EXPORTS) |
|
752 $(INSTALL) -m 444 $^ $(PUBLIC_EXPORT_DIR) |
|
753 |
|
754 export:: $(BUILT_SRCS) |
|
755 endif |
|
756 |
|
757 # Duplicate export rule for private exports, with different directories |
|
758 |
|
759 PRIVATE_EXPORT_DIR = $(SOURCE_XP_DIR)/private/$(MODULE) |
|
760 |
|
761 ifneq ($(PRIVATE_EXPORTS),) |
|
762 $(PRIVATE_EXPORT_DIR):: |
|
763 @if test ! -d $@; then \ |
|
764 echo Creating $@; \ |
|
765 $(NSINSTALL) -D $@; \ |
|
766 fi |
|
767 |
|
768 private_export:: $(PRIVATE_EXPORT_DIR) |
|
769 |
|
770 private_export:: $(PRIVATE_EXPORTS) |
|
771 $(INSTALL) -m 444 $^ $(PRIVATE_EXPORT_DIR) |
|
772 else |
|
773 private_export:: |
|
774 @echo There are no private exports.; |
|
775 endif |
|
776 |
|
777 ########################################################################## |
|
778 ### RULES FOR RUNNING REGRESSION SUITE TESTS |
|
779 ### REQUIRES 'REGRESSION_SPEC' TO BE SET TO THE NAME OF A REGRESSION SPECFILE |
|
780 ### AND RESULTS_SUBDIR TO BE SET TO SOMETHING LIKE SECURITY/PKCS5 |
|
781 ########################################################################## |
|
782 |
|
783 TESTS_DIR = $(RESULTS_DIR)/$(RESULTS_SUBDIR)/$(OS_TARGET)$(OS_RELEASE)$(CPU_TAG)$(COMPILER_TAG)$(IMPL_STRATEGY) |
|
784 |
|
785 ifneq ($(REGRESSION_SPEC),) |
|
786 |
|
787 ifneq ($(BUILD_OPT),) |
|
788 REGDATE = $(subst \ ,, $(shell $(PERL) $(CORE_DEPTH)/$(MODULE)/scripts/now)) |
|
789 endif |
|
790 |
|
791 tests:: $(REGRESSION_SPEC) |
|
792 cd $(PLATFORM); \ |
|
793 ../$(SOURCE_MD_DIR)/bin/regress$(PROG_SUFFIX) specfile=../$(REGRESSION_SPEC) progress $(EXTRA_REGRESS_OPTIONS); \ |
|
794 if test ! -d $(TESTS_DIR); then \ |
|
795 echo Creating $(TESTS_DIR); \ |
|
796 $(NSINSTALL) -D $(TESTS_DIR); \ |
|
797 fi |
|
798 ifneq ($(BUILD_OPT),) |
|
799 $(NSINSTALL) -m 664 $(PLATFORM)/$(REGDATE).sum $(TESTS_DIR); \ |
|
800 $(NSINSTALL) -m 664 $(PLATFORM)/$(REGDATE).htm $(TESTS_DIR); \ |
|
801 echo "Please now make sure your results files are copied to $(TESTS_DIR), "; \ |
|
802 echo "then run 'reporter specfile=$(RESULTS_DIR)/rptspec'" |
|
803 endif |
|
804 else |
|
805 tests:: |
|
806 @echo Error: you didn't specify REGRESSION_SPEC in your manifest.mn file!; |
|
807 endif |
|
808 |
|
809 |
|
810 # Duplicate export rule for releases, with different directories |
|
811 |
|
812 ifneq ($(EXPORTS),) |
|
813 $(SOURCE_RELEASE_XP_DIR)/include:: |
|
814 @if test ! -d $@; then \ |
|
815 echo Creating $@; \ |
|
816 $(NSINSTALL) -D $@; \ |
|
817 fi |
|
818 |
|
819 release_export:: $(SOURCE_RELEASE_XP_DIR)/include |
|
820 |
|
821 release_export:: $(EXPORTS) |
|
822 $(INSTALL) -m 444 $^ $(SOURCE_RELEASE_XP_DIR)/include |
|
823 endif |
|
824 |
|
825 |
|
826 |
|
827 |
|
828 ################################################################################ |
|
829 |
|
830 -include $(DEPENDENCIES) |
|
831 |
|
832 ifneq (,$(filter-out OS2 WIN%,$(OS_TARGET))) |
|
833 # Can't use sed because of its 4000-char line length limit, so resort to perl |
|
834 PERL_DEPENDENCIES_PROGRAM = \ |
|
835 open(MD, "< $(DEPENDENCIES)"); \ |
|
836 while (<MD>) { \ |
|
837 if (m@ \.*/*$< @) { \ |
|
838 $$found = 1; \ |
|
839 last; \ |
|
840 } \ |
|
841 } \ |
|
842 if ($$found) { \ |
|
843 print "Removing stale dependency $< from $(DEPENDENCIES)\n"; \ |
|
844 seek(MD, 0, 0); \ |
|
845 $$tmpname = "$(OBJDIR)/fix.md" . $$$$; \ |
|
846 open(TMD, "> " . $$tmpname); \ |
|
847 while (<MD>) { \ |
|
848 s@ \.*/*$< @ @; \ |
|
849 if (!print TMD "$$_") { \ |
|
850 unlink(($$tmpname)); \ |
|
851 exit(1); \ |
|
852 } \ |
|
853 } \ |
|
854 close(TMD); \ |
|
855 if (!rename($$tmpname, "$(DEPENDENCIES)")) { \ |
|
856 unlink(($$tmpname)); \ |
|
857 } \ |
|
858 } elsif ("$<" ne "$(DEPENDENCIES)") { \ |
|
859 print "$(MAKE): *** No rule to make target $<. Stop.\n"; \ |
|
860 exit(1); \ |
|
861 } |
|
862 |
|
863 .DEFAULT: |
|
864 @$(PERL) -e '$(PERL_DEPENDENCIES_PROGRAM)' |
|
865 endif |
|
866 |
|
867 ############################################################################# |
|
868 # X dependency system |
|
869 ############################################################################# |
|
870 |
|
871 ifdef MKDEPENDENCIES |
|
872 |
|
873 # For Windows, $(MKDEPENDENCIES) must be -included before including rules.mk |
|
874 |
|
875 $(MKDEPENDENCIES):: |
|
876 @$(MAKE_OBJDIR) |
|
877 touch $(MKDEPENDENCIES) |
|
878 chmod u+w $(MKDEPENDENCIES) |
|
879 #on NT, the preceding touch command creates a read-only file !?!?! |
|
880 #which is why we have to explicitly chmod it. |
|
881 $(MKDEPEND) -p$(OBJDIR_NAME)/ -o'$(OBJ_SUFFIX)' -f$(MKDEPENDENCIES) \ |
|
882 $(NOMD_CFLAGS) $(YOPT) $(CSRCS) $(CPPSRCS) $(ASFILES) |
|
883 |
|
884 $(MKDEPEND):: $(MKDEPEND_DIR)/*.c $(MKDEPEND_DIR)/*.h |
|
885 $(MAKE) -C $(MKDEPEND_DIR) |
|
886 |
|
887 ifdef OBJS |
|
888 depend:: $(MKDEPEND) $(MKDEPENDENCIES) |
|
889 else |
|
890 depend:: |
|
891 endif |
|
892 +$(LOOP_OVER_DIRS) |
|
893 |
|
894 dependclean:: |
|
895 rm -f $(MKDEPENDENCIES) |
|
896 +$(LOOP_OVER_DIRS) |
|
897 |
|
898 #-include $(NSINSTALL_DIR)/$(OBJDIR)/depend.mk |
|
899 |
|
900 else |
|
901 depend:: |
|
902 endif |
|
903 |
|
904 # |
|
905 # HACK ALERT |
|
906 # |
|
907 # The only purpose of this rule is to pass Mozilla's Tinderbox depend |
|
908 # builds (http://tinderbox.mozilla.org/showbuilds.cgi). Mozilla's |
|
909 # Tinderbox builds NSS continuously as part of the Mozilla client. |
|
910 # Because NSS's make depend is not implemented, whenever we change |
|
911 # an NSS header file, the depend build does not recompile the NSS |
|
912 # files that depend on the header. |
|
913 # |
|
914 # This rule makes all the objects depend on a dummy header file. |
|
915 # Check in a change to this dummy header file to force the depend |
|
916 # build to recompile everything. |
|
917 # |
|
918 # This rule should be removed when make depend is implemented. |
|
919 # |
|
920 |
|
921 DUMMY_DEPEND = $(CORE_DEPTH)/coreconf/coreconf.dep |
|
922 |
|
923 $(filter $(OBJDIR)/%$(OBJ_SUFFIX),$(OBJS)): $(OBJDIR)/%$(OBJ_SUFFIX): $(DUMMY_DEPEND) |
|
924 |
|
925 # END OF HACK |
|
926 |
|
927 ################################################################################ |
|
928 # Special gmake rules. |
|
929 ################################################################################ |
|
930 |
|
931 # |
|
932 # Re-define the list of default suffixes, so gmake won't have to churn through |
|
933 # hundreds of built-in suffix rules for stuff we don't need. |
|
934 # |
|
935 .SUFFIXES: |
|
936 .SUFFIXES: .out .a .ln .o .obj .c .cc .C .cpp .y .l .s .S .h .sh .i .pl .class .java .html .asm .dep |
|
937 |
|
938 # |
|
939 # Don't delete these files if we get killed. |
|
940 # |
|
941 .PRECIOUS: .java $(JDK_HEADERS) $(JDK_STUBS) $(JRI_HEADERS) $(JRI_STUBS) $(JMC_HEADERS) $(JMC_STUBS) $(JNI_HEADERS) |
|
942 |
|
943 # |
|
944 # Fake targets. Always run these rules, even if a file/directory with that |
|
945 # name already exists. |
|
946 # |
|
947 .PHONY: all all_platforms alltags boot clean clobber clobber_all export install libs program realclean release $(OBJDIR) |
|
948 |