Bug 467437, bump automation config for fx2.0.0.19 build 2, r=bhearsum
[mozilla-1.9.git] / config / rules.mk
blob9a611a9c31d7e8b4288cb55ce8be561f3922ea47
1 # vim:set ts=8 sw=8 sts=8 noet:
3 # ***** BEGIN LICENSE BLOCK *****
4 # Version: MPL 1.1/GPL 2.0/LGPL 2.1
6 # The contents of this file are subject to the Mozilla Public License Version
7 # 1.1 (the "License"); you may not use this file except in compliance with
8 # the License. You may obtain a copy of the License at
9 # http://www.mozilla.org/MPL/
11 # Software distributed under the License is distributed on an "AS IS" basis,
12 # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 # for the specific language governing rights and limitations under the
14 # License.
16 # The Original Code is mozilla.org code.
18 # The Initial Developer of the Original Code is
19 # Netscape Communications Corporation.
20 # Portions created by the Initial Developer are Copyright (C) 1998
21 # the Initial Developer. All Rights Reserved.
23 # Contributor(s):
24 # Chase Phillips <chase@mozilla.org>
25 # Benjamin Smedberg <benjamin@smedbergs.us>
26 # Jeff Walden <jwalden+code@mit.edu>
28 # Alternatively, the contents of this file may be used under the terms of
29 # either of the GNU General Public License Version 2 or later (the "GPL"),
30 # or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
31 # in which case the provisions of the GPL or the LGPL are applicable instead
32 # of those above. If you wish to allow use of your version of this file only
33 # under the terms of either the GPL or the LGPL, and not to allow others to
34 # use your version of this file under the terms of the MPL, indicate your
35 # decision by deleting the provisions above and replace them with the notice
36 # and other provisions required by the GPL or the LGPL. If you do not delete
37 # the provisions above, a recipient may use your version of this file under
38 # the terms of any one of the MPL, the GPL or the LGPL.
40 # ***** END LICENSE BLOCK *****
41 ifndef topsrcdir
42 topsrcdir = $(DEPTH)
43 endif
45 ifndef MOZILLA_DIR
46 MOZILLA_DIR = $(topsrcdir)
47 endif
49 ifndef INCLUDED_CONFIG_MK
50 include $(topsrcdir)/config/config.mk
51 endif
53 ifndef INCLUDED_VERSION_MK
54 include $(topsrcdir)/config/version.mk
55 endif
57 REPORT_BUILD = @echo $(notdir $<)
59 ifeq ($(OS_ARCH),OS2)
60 EXEC =
61 else
62 EXEC = exec
63 endif
65 # ELOG prints out failed command when building silently (gmake -s).
66 ifneq (,$(findstring -s,$(MAKEFLAGS)))
67 ELOG := $(EXEC) sh $(BUILD_TOOLS)/print-failed-commands.sh
68 else
69 ELOG :=
70 endif
72 ifeq ($(MOZ_OS2_TOOLS),VACPP)
73 _LIBNAME_RELATIVE_PATHS=1
74 else
75 ifeq (,$(filter-out WINNT WINCE,$(OS_ARCH)))
76 ifndef GNU_CC
77 _LIBNAME_RELATIVE_PATHS=1
78 endif
79 endif
80 endif
82 ifeq (,$(filter-out WINNT WINCE,$(OS_ARCH)))
83 PWD := $(shell pwd)
84 _VPATH_SRCS = $(if $(filter /%,$<),$<,$(PWD)/$<)
85 else
86 _VPATH_SRCS = $<
87 endif
89 # Add $(DIST)/lib to VPATH so that -lfoo dependencies are followed
90 VPATH += $(DIST)/lib
91 ifdef LIBXUL_SDK
92 VPATH += $(LIBXUL_SDK)/lib
93 endif
95 # EXPAND_LIBNAME - $(call EXPAND_LIBNAME,foo)
96 # expands to foo.lib on platforms with import libs and -lfoo otherwise
98 # EXPAND_LIBNAME_PATH - $(call EXPAND_LIBNAME_PATH,foo,dir)
99 # expands to dir/foo.lib on platforms with import libs and
100 # -Ldir -lfoo otherwise
102 # EXPAND_MOZLIBNAME - $(call EXPAND_MOZLIBNAME,foo)
103 # expands to $(DIST)/lib/foo.lib on platforms with import libs and
104 # -lfoo otherwise
106 ifdef _LIBNAME_RELATIVE_PATHS
107 EXPAND_LIBNAME = $(foreach lib,$(1),$(LIB_PREFIX)$(lib).$(LIB_SUFFIX))
108 EXPAND_LIBNAME_PATH = $(foreach lib,$(1),$(2)/$(LIB_PREFIX)$(lib).$(LIB_SUFFIX))
109 EXPAND_MOZLIBNAME = $(foreach lib,$(1),$(DIST)/lib/$(LIB_PREFIX)$(lib).$(LIB_SUFFIX))
110 else
111 EXPAND_LIBNAME = $(addprefix -l,$(1))
112 EXPAND_LIBNAME_PATH = -L$(2) $(addprefix -l,$(1))
113 EXPAND_MOZLIBNAME = $(addprefix -l,$(1))
114 endif
116 ifdef EXTRA_DSO_LIBS
117 EXTRA_DSO_LIBS := $(call EXPAND_MOZLIBNAME,$(EXTRA_DSO_LIBS))
118 endif
121 # Library rules
123 # If BUILD_STATIC_LIBS or FORCE_STATIC_LIB is set, build a static library.
124 # Otherwise, build a shared library.
127 ifndef LIBRARY
128 ifdef LIBRARY_NAME
129 ifneq (,$(filter OS2 WINNT WINCE,$(OS_ARCH)))
130 ifdef SHORT_LIBNAME
131 LIBRARY_NAME := $(SHORT_LIBNAME)
132 endif
133 endif
134 LIBRARY := $(LIB_PREFIX)$(LIBRARY_NAME).$(LIB_SUFFIX)
135 endif
136 endif
138 ifndef HOST_LIBRARY
139 ifdef HOST_LIBRARY_NAME
140 HOST_LIBRARY := $(LIB_PREFIX)$(HOST_LIBRARY_NAME).$(LIB_SUFFIX)
141 endif
142 endif
144 ifdef LIBRARY
145 ifneq (_1,$(FORCE_SHARED_LIB)_$(BUILD_STATIC_LIBS))
146 ifdef MKSHLIB
148 ifdef LIB_IS_C_ONLY
149 MKSHLIB = $(MKCSHLIB)
150 endif
152 ifdef MAKE_FRAMEWORK
153 SHARED_LIBRARY := $(LIBRARY_NAME)
154 else
155 SHARED_LIBRARY := $(DLL_PREFIX)$(LIBRARY_NAME)$(DLL_SUFFIX)
156 endif
158 ifeq ($(OS_ARCH),OS2)
159 DEF_FILE := $(SHARED_LIBRARY:.dll=.def)
160 endif
162 ifneq (,$(filter OS2 WINNT WINCE,$(OS_ARCH)))
163 IMPORT_LIBRARY := $(LIB_PREFIX)$(LIBRARY_NAME).$(IMPORT_LIB_SUFFIX)
164 endif
166 ifdef MOZ_ENABLE_LIBXUL
167 EMBED_MANIFEST_AT=2
168 endif
170 endif # MKSHLIB
171 endif # FORCE_SHARED_LIB && !BUILD_STATIC_LIBS
172 endif # LIBRARY
174 ifeq (,$(BUILD_STATIC_LIBS)$(FORCE_STATIC_LIB))
175 LIBRARY := $(NULL)
176 endif
178 ifeq (_1,$(FORCE_SHARED_LIB)_$(BUILD_STATIC_LIBS))
179 SHARED_LIBRARY := $(NULL)
180 DEF_FILE := $(NULL)
181 IMPORT_LIBRARY := $(NULL)
182 endif
184 ifdef FORCE_STATIC_LIB
185 ifndef FORCE_SHARED_LIB
186 SHARED_LIBRARY := $(NULL)
187 DEF_FILE := $(NULL)
188 IMPORT_LIBRARY := $(NULL)
189 endif
190 endif
192 ifdef FORCE_SHARED_LIB
193 ifndef FORCE_STATIC_LIB
194 LIBRARY := $(NULL)
195 endif
196 endif
198 ifdef JAVA_LIBRARY_NAME
199 JAVA_LIBRARY := $(JAVA_LIBRARY_NAME).jar
200 endif
202 ifeq (,$(filter-out WINNT WINCE,$(OS_ARCH)))
203 ifndef GNU_CC
205 # Previously when possible we wrote to $LIBRARY_NAME.pdb. This broke parallel
206 # make builds on Windows. Now we just write to a pdb file per compiled file.
207 # See bug 286179 <https://bugzilla.mozilla.org/show_bug.cgi?id=286179> for
208 # details. -- chase@mozilla.org
210 # Changes to the PDBFILE naming scheme should also be reflected in HOST_PDBFILE
212 ifdef LIBRARY_NAME
213 PDBFILE=$(LIBRARY_NAME).pdb
214 ifdef MOZ_DEBUG
215 CODFILE=$(LIBRARY_NAME).cod
216 endif
217 else
218 PDBFILE=$(basename $(@F)).pdb
219 ifdef MOZ_DEBUG
220 CODFILE=$(basename $(@F)).cod
221 endif
222 endif # LIBRARY_NAME
224 ifdef MOZ_MAPINFO
225 ifdef LIBRARY_NAME
226 MAPFILE=$(LIBRARY_NAME).map
227 else
228 MAPFILE=$(basename $(@F)).map
229 endif # LIBRARY_NAME
230 endif # MOZ_MAPINFO
232 ifdef DEFFILE
233 OS_LDFLAGS += -DEF:$(DEFFILE)
234 endif
236 ifdef MAPFILE
237 OS_LDFLAGS += -MAP:$(MAPFILE)
238 #CFLAGS += -Fm$(MAPFILE)
239 #CXXFLAGS += -Fm$(MAPFILE)
240 endif
242 #ifdef CODFILE
243 #CFLAGS += -Fa$(CODFILE) -FAsc
244 #CFLAGS += -Fa$(CODFILE) -FAsc
245 #endif
247 endif # !GNU_CC
249 ifdef ENABLE_CXX_EXCEPTIONS
250 ifdef GNU_CC
251 CXXFLAGS += -fexceptions
252 else
253 ifeq (,$(filter-out 1200 1300 1310,$(_MSC_VER)))
254 CXXFLAGS += -GX
255 else
256 CXXFLAGS += -EHsc
257 endif # _MSC_VER
258 endif # GNU_CC
259 endif # ENABLE_CXX_EXCEPTIONS
260 endif # WINNT
262 ifeq (,$(filter-out WINNT WINCE,$(HOST_OS_ARCH)))
263 HOST_PDBFILE=$(basename $(@F)).pdb
264 endif
266 ifndef TARGETS
267 TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(PROGRAM) $(SIMPLE_PROGRAMS) $(HOST_LIBRARY) $(HOST_PROGRAM) $(HOST_SIMPLE_PROGRAMS) $(JAVA_LIBRARY)
268 endif
270 ifndef OBJS
271 _OBJS = \
272 $(JRI_STUB_CFILES) \
273 $(addsuffix .$(OBJ_SUFFIX), $(JMC_GEN)) \
274 $(CSRCS:.c=.$(OBJ_SUFFIX)) \
275 $(patsubst %.cc,%.$(OBJ_SUFFIX),$(CPPSRCS:.cpp=.$(OBJ_SUFFIX))) \
276 $(CMSRCS:.m=.$(OBJ_SUFFIX)) \
277 $(CMMSRCS:.mm=.$(OBJ_SUFFIX)) \
278 $(ASFILES:.$(ASM_SUFFIX)=.$(OBJ_SUFFIX))
279 OBJS = $(strip $(_OBJS))
280 endif
282 ifndef HOST_OBJS
283 _HOST_OBJS = \
284 $(addprefix host_,$(HOST_CSRCS:.c=.$(OBJ_SUFFIX))) \
285 $(addprefix host_,$(patsubst %.cc,%.$(OBJ_SUFFIX),$(HOST_CPPSRCS:.cpp=.$(OBJ_SUFFIX)))) \
286 $(addprefix host_,$(HOST_CMSRCS:.m=.$(OBJ_SUFFIX))) \
287 $(addprefix host_,$(HOST_CMMSRCS:.mm=.$(OBJ_SUFFIX)))
288 HOST_OBJS = $(strip $(_HOST_OBJS))
289 endif
291 ifeq ($(MOZ_OS2_TOOLS),VACPP)
292 LIBOBJS := $(OBJS)
293 else
294 LIBOBJS := $(addprefix \", $(OBJS))
295 LIBOBJS := $(addsuffix \", $(LIBOBJS))
296 endif
298 ifndef MOZ_AUTO_DEPS
299 ifneq (,$(OBJS)$(XPIDLSRCS)$(SDK_XPIDLSRCS)$(SIMPLE_PROGRAMS))
300 MDDEPFILES = $(addprefix $(MDDEPDIR)/,$(OBJS:.$(OBJ_SUFFIX)=.pp))
301 ifndef NO_GEN_XPT
302 MDDEPFILES += $(addprefix $(MDDEPDIR)/,$(XPIDLSRCS:.idl=.xpt)) \
303 $(addprefix $(MDDEPDIR)/,$(SDK_XPIDLSRCS:.idl=.xpt))
304 endif
305 endif
306 endif
308 ALL_TRASH = \
309 $(GARBAGE) $(TARGETS) $(OBJS) $(PROGOBJS) LOGS TAGS a.out \
310 $(OBJS:.$(OBJ_SUFFIX)=.s) $(OBJS:.$(OBJ_SUFFIX)=.ii) \
311 $(OBJS:.$(OBJ_SUFFIX)=.i) \
312 $(HOST_PROGOBJS) $(HOST_OBJS) $(IMPORT_LIBRARY) $(DEF_FILE)\
313 $(EXE_DEF_FILE) so_locations _gen _stubs $(wildcard *.res) $(wildcard *.RES) \
314 $(wildcard *.pdb) $(CODFILE) $(MAPFILE) $(IMPORT_LIBRARY) \
315 $(SHARED_LIBRARY:$(DLL_SUFFIX)=.exp) $(wildcard *.ilk) \
316 $(PROGRAM:$(BIN_SUFFIX)=.exp) $(SIMPLE_PROGRAMS:$(BIN_SUFFIX)=.exp) \
317 $(PROGRAM:$(BIN_SUFFIX)=.lib) $(SIMPLE_PROGRAMS:$(BIN_SUFFIX)=.lib) \
318 $(SIMPLE_PROGRAMS:$(BIN_SUFFIX)=.$(OBJ_SUFFIX)) \
319 $(wildcard gts_tmp_*) $(LIBRARY:%.a=.%.timestamp)
320 ALL_TRASH_DIRS = \
321 $(GARBAGE_DIRS) /no-such-file
323 ifdef SIMPLE_PROGRAMS
324 GARBAGE += $(SIMPLE_PROGRAMS:%=%.$(OBJ_SUFFIX))
325 endif
327 ifdef HOST_SIMPLE_PROGRAMS
328 GARBAGE += $(HOST_SIMPLE_PROGRAMS:%=%.$(OBJ_SUFFIX))
329 endif
332 # the Solaris WorkShop template repository cache. it occasionally can get
333 # out of sync, so targets like clobber should kill it.
335 ifeq ($(OS_ARCH),SunOS)
336 ifeq ($(GNU_CXX),)
337 GARBAGE_DIRS += SunWS_cache
338 endif
339 endif
341 ifeq ($(OS_ARCH),OpenVMS)
342 GARBAGE += $(wildcard *.*_defines)
343 ifdef SHARED_LIBRARY
344 VMS_SYMVEC_FILE = $(SHARED_LIBRARY:$(DLL_SUFFIX)=_symvec.opt)
345 ifdef MOZ_DEBUG
346 VMS_SYMVEC_FILE_MODULE = $(topsrcdir)/build/unix/vms/$(notdir $(SHARED_LIBRARY:$(DLL_SUFFIX)=_dbg_symvec.opt))
347 else
348 VMS_SYMVEC_FILE_MODULE = $(topsrcdir)/build/unix/vms/$(notdir $(SHARED_LIBRARY:$(DLL_SUFFIX)=_symvec.opt))
349 endif
350 VMS_SYMVEC_FILE_COMP = $(topsrcdir)/build/unix/vms/component_symvec.opt
351 GARBAGE += $(VMS_SYMVEC_FILE)
352 ifdef IS_COMPONENT
353 DSO_LDOPTS := $(filter-out -auto_symvec,$(DSO_LDOPTS)) $(VMS_SYMVEC_FILE)
354 endif
355 endif
356 endif
358 XPIDL_GEN_DIR = _xpidlgen
360 ifdef MOZ_UPDATE_XTERM
361 # Its good not to have a newline at the end of the titlebar string because it
362 # makes the make -s output easier to read. Echo -n does not work on all
363 # platforms, but we can trick sed into doing it.
364 UPDATE_TITLE = sed -e "s!Y!$@ in $(shell $(BUILD_TOOLS)/print-depth-path.sh)/$(dir)!" $(MOZILLA_DIR)/config/xterm.str;
365 endif
367 LOOP_OVER_DIRS = \
368 @$(EXIT_ON_ERROR) \
369 $(foreach dir,$(DIRS),$(UPDATE_TITLE) $(MAKE) -C $(dir) $@; ) true
371 LOOP_OVER_STATIC_DIRS = \
372 @$(EXIT_ON_ERROR) \
373 $(foreach dir,$(STATIC_DIRS),$(UPDATE_TITLE) $(MAKE) -C $(dir) $@; ) true
375 LOOP_OVER_TOOL_DIRS = \
376 @$(EXIT_ON_ERROR) \
377 $(foreach dir,$(TOOL_DIRS),$(UPDATE_TITLE) $(MAKE) -C $(dir) $@; ) true
380 # Now we can differentiate between objects used to build a library, and
381 # objects used to build an executable in the same directory.
383 ifndef PROGOBJS
384 PROGOBJS = $(OBJS)
385 endif
387 ifndef HOST_PROGOBJS
388 HOST_PROGOBJS = $(HOST_OBJS)
389 endif
391 # MAKE_DIRS: List of directories to build while looping over directories.
392 ifneq (,$(OBJS)$(XPIDLSRCS)$(SDK_XPIDLSRCS)$(SIMPLE_PROGRAMS))
393 MAKE_DIRS += $(MDDEPDIR)
394 GARBAGE_DIRS += $(MDDEPDIR)
395 endif
398 # Tags: emacs (etags), vi (ctags)
399 # TAG_PROGRAM := ctags -L -
401 TAG_PROGRAM = xargs etags -a
404 # Turn on C++ linking if we have any .cpp or .mm files
405 # (moved this from config.mk so that config.mk can be included
406 # before the CPPSRCS are defined)
408 ifneq ($(CPPSRCS)$(CMMSRCS),)
409 CPP_PROG_LINK = 1
410 endif
413 # Make sure to wrap static libs inside linker specific flags to turn on & off
414 # inclusion of all symbols inside the static libs
416 ifndef NO_LD_ARCHIVE_FLAGS
417 ifdef SHARED_LIBRARY_LIBS
418 EXTRA_DSO_LDOPTS := $(MKSHLIB_FORCE_ALL) $(SHARED_LIBRARY_LIBS) $(MKSHLIB_UNFORCE_ALL) $(EXTRA_DSO_LDOPTS)
419 endif
420 endif
423 # This will strip out symbols that the component should not be
424 # exporting from the .dynsym section.
426 ifdef IS_COMPONENT
427 EXTRA_DSO_LDOPTS += $(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS)
428 endif # IS_COMPONENT
431 # Enforce the requirement that MODULE_NAME must be set
432 # for components in static builds
434 ifdef IS_COMPONENT
435 ifdef EXPORT_LIBRARY
436 ifndef FORCE_SHARED_LIB
437 ifndef MODULE_NAME
438 $(error MODULE_NAME is required for components which may be used in static builds)
439 endif
440 endif
441 endif
442 endif
445 # MacOS X specific stuff
448 ifeq ($(OS_ARCH),Darwin)
449 ifdef SHARED_LIBRARY
450 ifdef IS_COMPONENT
451 EXTRA_DSO_LDOPTS += -bundle
452 else
453 EXTRA_DSO_LDOPTS += -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module
454 endif
455 endif
456 endif
459 # On NetBSD a.out systems, use -Bsymbolic. This fixes what would otherwise be
460 # fatal symbol name clashes between components.
462 ifeq ($(OS_ARCH),NetBSD)
463 ifeq ($(DLL_SUFFIX),.so.1.0)
464 ifdef IS_COMPONENT
465 EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
466 endif
467 endif
468 endif
470 ifeq ($(OS_ARCH),FreeBSD)
471 ifdef IS_COMPONENT
472 EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
473 endif
474 endif
476 ifeq ($(OS_ARCH),NetBSD)
477 ifneq (,$(filter arc cobalt hpcmips mipsco newsmips pmax sgimips,$(OS_TEST)))
478 ifeq ($(MODULE),layout)
479 OS_CFLAGS += -Wa,-xgot
480 OS_CXXFLAGS += -Wa,-xgot
481 endif
482 endif
483 endif
485 ifeq ($(OS_ARCH),Linux)
486 ifneq (,$(filter mips mipsel,$(OS_TEST)))
487 ifeq ($(MODULE),layout)
488 OS_CFLAGS += -Wa,-xgot
489 OS_CXXFLAGS += -Wa,-xgot
490 endif
491 endif
492 endif
495 # HP-UXBeOS specific section: for COMPONENTS only, add -Bsymbolic flag
496 # which uses internal symbols first
498 ifeq ($(OS_ARCH),HP-UX)
499 ifdef IS_COMPONENT
500 ifeq ($(GNU_CC)$(GNU_CXX),)
501 EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
502 ifneq ($(HAS_EXTRAEXPORTS),1)
503 MKSHLIB += -Wl,+eNSGetModule -Wl,+eerrno
504 MKCSHLIB += +eNSGetModule +eerrno
505 ifneq ($(OS_TEST),ia64)
506 MKSHLIB += -Wl,+e_shlInit
507 MKCSHLIB += +e_shlInit
508 endif # !ia64
509 endif # !HAS_EXTRAEXPORTS
510 endif # non-gnu compilers
511 endif # IS_COMPONENT
512 endif # HP-UX
514 ifeq ($(OS_ARCH),AIX)
515 ifdef IS_COMPONENT
516 ifneq ($(HAS_EXTRAEXPORTS),1)
517 MKSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall
518 MKCSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall
519 endif # HAS_EXTRAEXPORTS
520 endif # IS_COMPONENT
521 endif # AIX
524 # OSF1: add -B symbolic flag for components
526 ifeq ($(OS_ARCH),OSF1)
527 ifdef IS_COMPONENT
528 ifeq ($(GNU_CC)$(GNU_CXX),)
529 EXTRA_DSO_LDOPTS += -B symbolic
530 endif
531 endif
532 endif
535 # Linux: add -Bsymbolic flag for components
537 ifeq ($(OS_ARCH),Linux)
538 ifdef IS_COMPONENT
539 EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
540 endif
541 endif
544 # MINGW32
546 ifeq ($(OS_ARCH),WINNT)
547 ifdef GNU_CC
548 ifndef IS_COMPONENT
549 DSO_LDOPTS += -Wl,--out-implib -Wl,$(IMPORT_LIBRARY)
550 endif
551 endif
552 endif
554 ifeq ($(USE_TVFS),1)
555 IFLAGS1 = -rb
556 IFLAGS2 = -rb
557 else
558 IFLAGS1 = -m 644
559 IFLAGS2 = -m 755
560 endif
562 ifeq ($(MOZ_OS2_TOOLS),VACPP)
563 OUTOPTION = -Fo# eol
564 else
565 ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
566 OUTOPTION = -Fo# eol
567 else
568 OUTOPTION = -o # eol
569 endif # WINNT && !GNU_CC
570 endif # VACPP
571 ifneq (,$(filter WINCE,$(OS_ARCH)))
572 OUTOPTION = -Fo# eol
573 endif
575 ifeq ($(OS_TARGET), WINCE)
576 OUTOPTION = -Fo# eol
577 HOST_OUTOPTION = -Fo# eol
578 else
580 ifeq (,$(CROSS_COMPILE))
581 HOST_OUTOPTION = $(OUTOPTION)
582 else
583 HOST_OUTOPTION = -o # eol
584 endif
586 endif
587 ################################################################################
589 # SUBMAKEFILES: List of Makefiles for next level down.
590 # This is used to update or create the Makefiles before invoking them.
591 SUBMAKEFILES += $(addsuffix /Makefile, $(DIRS) $(TOOL_DIRS))
593 # The root makefile doesn't want to do a plain export/libs, because
594 # of the tiers and because of libxul. Suppress the default rules in favor
595 # of something else. Makefiles which use this var *must* provide a sensible
596 # default rule before including rules.mk
597 ifndef SUPPRESS_DEFAULT_RULES
598 ifdef TIERS
600 DIRS += $(foreach tier,$(TIERS),$(tier_$(tier)_dirs))
601 STATIC_DIRS += $(foreach tier,$(TIERS),$(tier_$(tier)_staticdirs))
603 default all alldep::
604 $(EXIT_ON_ERROR) \
605 $(foreach tier,$(TIERS),$(MAKE) tier_$(tier); ) true
607 else
609 default all::
610 @$(EXIT_ON_ERROR) \
611 $(foreach dir,$(STATIC_DIRS),$(MAKE) -C $(dir); ) true
612 $(MAKE) export
613 $(MAKE) libs
614 $(MAKE) tools
616 # Do depend as well
617 alldep::
618 $(MAKE) export
619 $(MAKE) depend
620 $(MAKE) libs
621 $(MAKE) tools
623 endif # TIERS
624 endif # SUPPRESS_DEFAULT_RULES
626 MAKE_TIER_SUBMAKEFILES = +$(if $(tier_$*_dirs),$(MAKE) $(addsuffix /Makefile,$(tier_$*_dirs)))
628 export_tier_%:
629 @echo "$@"
630 @$(MAKE_TIER_SUBMAKEFILES)
631 @$(EXIT_ON_ERROR) \
632 $(foreach dir,$(tier_$*_dirs),$(MAKE) -C $(dir) export; ) true
634 libs_tier_%:
635 @echo "$@"
636 @$(MAKE_TIER_SUBMAKEFILES)
637 @$(EXIT_ON_ERROR) \
638 $(foreach dir,$(tier_$*_dirs),$(MAKE) -C $(dir) libs; ) true
640 tools_tier_%:
641 @echo "$@"
642 @$(MAKE_TIER_SUBMAKEFILES)
643 @$(EXIT_ON_ERROR) \
644 $(foreach dir,$(tier_$*_dirs),$(MAKE) -C $(dir) tools; ) true
646 $(foreach tier,$(TIERS),tier_$(tier))::
647 @echo "$@: $($@_staticdirs) $($@_dirs)"
648 @$(EXIT_ON_ERROR) \
649 $(foreach dir,$($@_staticdirs),$(MAKE) -C $(dir); ) true
650 $(MAKE) export_$@
651 $(MAKE) libs_$@
653 # Do everything from scratch
654 everything::
655 $(MAKE) clean
656 $(MAKE) alldep
658 # Add dummy depend target for tinderboxes
659 depend::
661 ifdef ALL_PLATFORMS
662 all_platforms:: $(NFSPWD)
663 @d=`$(NFSPWD)`; \
664 if test ! -d LOGS; then rm -rf LOGS; mkdir LOGS; else true; fi; \
665 for h in $(PLATFORM_HOSTS); do \
666 echo "On $$h: $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log";\
667 rsh $$h -n "(chdir $$d; \
668 $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log; \
669 echo DONE) &" 2>&1 > LOGS/$$h.pid & \
670 sleep 1; \
671 done
673 $(NFSPWD):
674 cd $(@D); $(MAKE) $(@F)
675 endif
677 # Target to only regenerate makefiles
678 makefiles: $(SUBMAKEFILES)
679 ifneq (,$(DIRS)$(TOOL_DIRS))
680 +$(LOOP_OVER_DIRS)
681 +$(LOOP_OVER_TOOL_DIRS)
682 endif
684 export:: $(SUBMAKEFILES) $(MAKE_DIRS) $(if $(EXPORTS)$(XPIDLSRCS)$(SDK_HEADERS)$(SDK_XPIDLSRCS),$(PUBLIC)) $(if $(SDK_HEADERS)$(SDK_XPIDLSRCS),$(SDK_PUBLIC)) $(if $(XPIDLSRCS),$(IDL_DIR)) $(if $(SDK_XPIDLSRCS),$(SDK_IDL_DIR))
685 +$(LOOP_OVER_DIRS)
686 +$(LOOP_OVER_TOOL_DIRS)
688 tools:: $(SUBMAKEFILES) $(MAKE_DIRS)
689 +$(LOOP_OVER_DIRS)
690 ifdef TOOL_DIRS
691 @$(EXIT_ON_ERROR) \
692 $(foreach dir,$(TOOL_DIRS),$(UPDATE_TITLE) $(MAKE) -C $(dir) libs; ) true
693 endif
696 # Rule to create list of libraries for final link
698 export::
699 ifdef LIBRARY_NAME
700 ifdef EXPORT_LIBRARY
701 ifdef IS_COMPONENT
702 ifdef BUILD_STATIC_LIBS
703 @$(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/build-list.pl $(FINAL_LINK_COMPS) $(LIBRARY_NAME)
704 ifdef MODULE_NAME
705 @$(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/build-list.pl $(FINAL_LINK_COMP_NAMES) $(MODULE_NAME)
706 endif
707 endif
708 else
709 $(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/build-list.pl $(FINAL_LINK_LIBS) $(LIBRARY_NAME)
710 endif # IS_COMPONENT
711 endif # EXPORT_LIBRARY
712 endif # LIBRARY_NAME
714 # Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries
715 LIBS_DEPS = $(filter %.$(LIB_SUFFIX), $(LIBS))
716 HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX), $(HOST_LIBS))
717 DSO_LDOPTS_DEPS = $(EXTRA_DSO_LIBS) $(filter %.$(LIB_SUFFIX), $(EXTRA_DSO_LDOPTS))
719 ##############################################
720 libs:: $(SUBMAKEFILES) $(MAKE_DIRS) $(HOST_LIBRARY) $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) $(HOST_PROGRAM) $(PROGRAM) $(HOST_SIMPLE_PROGRAMS) $(SIMPLE_PROGRAMS) $(JAVA_LIBRARY)
721 ifndef NO_DIST_INSTALL
722 ifdef LIBRARY
723 ifdef EXPORT_LIBRARY # Stage libs that will be linked into a static build
724 ifdef IS_COMPONENT
725 $(INSTALL) $(IFLAGS1) $(LIBRARY) $(DEPTH)/staticlib/components
726 else
727 $(INSTALL) $(IFLAGS1) $(LIBRARY) $(DEPTH)/staticlib
728 endif
729 endif # EXPORT_LIBRARY
730 ifdef DIST_INSTALL
731 ifdef IS_COMPONENT
732 $(error Shipping static component libs makes no sense.)
733 else
734 $(INSTALL) $(IFLAGS1) $(LIBRARY) $(DIST)/lib
735 endif
736 endif # DIST_INSTALL
737 endif # LIBRARY
738 ifdef SHARED_LIBRARY
739 ifdef IS_COMPONENT
740 $(INSTALL) $(IFLAGS2) $(SHARED_LIBRARY) $(FINAL_TARGET)/components
741 $(ELF_DYNSTR_GC) $(FINAL_TARGET)/components/$(SHARED_LIBRARY)
742 ifdef BEOS_ADDON_WORKAROUND
743 ( cd $(FINAL_TARGET)/components && $(CC) -nostart -o $(SHARED_LIBRARY).stub $(SHARED_LIBRARY) )
744 endif
745 else # ! IS_COMPONENT
746 ifneq (,$(filter OS2 WINNT WINCE,$(OS_ARCH)))
747 $(INSTALL) $(IFLAGS2) $(IMPORT_LIBRARY) $(DIST)/lib
748 else
749 $(INSTALL) $(IFLAGS2) $(SHARED_LIBRARY) $(DIST)/lib
750 endif
751 $(INSTALL) $(IFLAGS2) $(SHARED_LIBRARY) $(FINAL_TARGET)
752 ifdef BEOS_ADDON_WORKAROUND
753 ( cd $(FINAL_TARGET) && $(CC) -nostart -o $(SHARED_LIBRARY).stub $(SHARED_LIBRARY) )
754 endif
755 endif # IS_COMPONENT
756 endif # SHARED_LIBRARY
757 ifdef PROGRAM
758 $(INSTALL) $(IFLAGS2) $(PROGRAM) $(FINAL_TARGET)
759 endif
760 ifdef SIMPLE_PROGRAMS
761 $(INSTALL) $(IFLAGS2) $(SIMPLE_PROGRAMS) $(FINAL_TARGET)
762 endif
763 ifdef HOST_PROGRAM
764 $(INSTALL) $(IFLAGS2) $(HOST_PROGRAM) $(DIST)/host/bin
765 endif
766 ifdef HOST_SIMPLE_PROGRAMS
767 $(INSTALL) $(IFLAGS2) $(HOST_SIMPLE_PROGRAMS) $(DIST)/host/bin
768 endif
769 ifdef HOST_LIBRARY
770 $(INSTALL) $(IFLAGS1) $(HOST_LIBRARY) $(DIST)/host/lib
771 endif
772 ifdef JAVA_LIBRARY
773 ifdef IS_COMPONENT
774 $(INSTALL) $(IFLAGS1) $(JAVA_LIBRARY) $(FINAL_TARGET)/components
775 else
776 $(INSTALL) $(IFLAGS1) $(JAVA_LIBRARY) $(FINAL_TARGET)
777 endif
778 endif # JAVA_LIBRARY
779 endif # !NO_DIST_INSTALL
780 +$(LOOP_OVER_DIRS)
782 ##############################################
784 ifndef NO_PROFILE_GUIDED_OPTIMIZE
785 ifneq (,$(MOZ_PROFILE_GENERATE)$(MOZ_PROFILE_USE))
786 ifeq ($(OS_ARCH)_$(GNU_CC)$(INTERNAL_TOOLS), WINNT_)
787 # Force re-linking when building with PGO, since
788 # the MSVC linker does all the work. We force re-link
789 # in both stages so you can do depend builds with PGO.
790 ifdef SHARED_LIBRARY
791 $(SHARED_LIBRARY): FORCE
792 BINARY_BASENAME = $(SHARED_LIBRARY:$(DLL_SUFFIX)=)
793 endif
794 ifdef PROGRAM
795 $(PROGRAM): FORCE
796 BINARY_BASENAME = $(PROGRAM:$(BIN_SUFFIX)=)
797 endif
799 ifdef MOZ_PROFILE_USE
800 # In the second pass, we need to merge the pgc files into the pgd file.
801 # The compiler would do this for us automatically if they were in the right
802 # place, but they're in dist/bin.
803 ifdef BINARY_BASENAME
804 export::
805 $(PYTHON) $(topsrcdir)/build/win32/pgomerge.py \
806 $(BINARY_BASENAME) $(DIST)/bin
807 endif
808 endif # MOZ_PROFILE_USE
809 endif # WINNT_
810 endif # MOZ_PROFILE_GENERATE || MOZ_PROFILE_USE
811 endif # NO_PROFILE_GUIDED_OPTIMIZE
813 ##############################################
815 checkout:
816 $(MAKE) -C $(topsrcdir) -f client.mk checkout
818 run_viewer: $(FINAL_TARGET)/viewer
819 cd $(FINAL_TARGET); \
820 MOZILLA_FIVE_HOME=`pwd` \
821 LD_LIBRARY_PATH=".:$(LIBS_PATH):$$LD_LIBRARY_PATH" \
822 viewer
824 clean clobber realclean clobber_all:: $(SUBMAKEFILES)
825 -rm -f $(ALL_TRASH)
826 -rm -rf $(ALL_TRASH_DIRS)
827 +-$(LOOP_OVER_DIRS)
828 +-$(LOOP_OVER_STATIC_DIRS)
829 +-$(LOOP_OVER_TOOL_DIRS)
831 distclean:: $(SUBMAKEFILES)
832 +-$(LOOP_OVER_DIRS)
833 +-$(LOOP_OVER_STATIC_DIRS)
834 +-$(LOOP_OVER_TOOL_DIRS)
835 -rm -rf $(ALL_TRASH_DIRS)
836 -rm -f $(ALL_TRASH) \
837 Makefile .HSancillary \
838 $(wildcard *.$(OBJ_SUFFIX)) $(wildcard *.ho) $(wildcard host_*.o*) \
839 $(wildcard *.$(LIB_SUFFIX)) $(wildcard *$(DLL_SUFFIX)) \
840 $(wildcard *.$(IMPORT_LIB_SUFFIX))
841 ifeq ($(MOZ_OS2_TOOLS),VACPP)
842 -rm -f $(PROGRAM:.exe=.map)
843 endif
845 alltags:
846 rm -f TAGS
847 find $(topsrcdir) -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' -o -name '*.idl' \) -print | $(TAG_PROGRAM)
850 # PROGRAM = Foo
851 # creates OBJS, links with LIBS to create Foo
853 $(PROGRAM): $(PROGOBJS) $(LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) Makefile Makefile.in
854 ifeq (WINCE,$(OS_ARCH))
855 $(LD) -NOLOGO -OUT:$@ $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
856 else
857 ifeq ($(MOZ_OS2_TOOLS),VACPP)
858 $(LD) -OUT:$@ $(LDFLAGS) $(PROGOBJS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) $(EXE_DEF_FILE) -ST:0x100000
859 else
861 ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
862 $(LD) -NOLOGO -OUT:$@ -PDB:$(PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
863 ifdef MSMANIFEST_TOOL
864 @if test -f $@.manifest; then \
865 if test -f "$(srcdir)/$@.manifest"; then \
866 mt.exe -NOLOGO -MANIFEST "$(win_srcdir)/$@.manifest" $@.manifest -OUTPUTRESOURCE:$@\;1; \
867 else \
868 mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
869 fi; \
870 rm -f $@.manifest; \
872 endif # MSVC with manifest tool
873 else
874 ifeq ($(CPP_PROG_LINK),1)
875 $(CCC) -o $@ $(CXXFLAGS) $(WRAP_MALLOC_CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(SOLARIS_JEMALLOC_LDFLAGS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(WRAP_MALLOC_LIB) $(PROFILER_LIBS) $(EXE_DEF_FILE)
876 else # ! CPP_PROG_LINK
877 $(CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(SOLARIS_JEMALLOC_LDFLAGS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE)
878 endif # CPP_PROG_LINK
879 endif # WINNT && !GNU_CC
880 endif # OS2
881 endif # WINCE
883 ifdef ENABLE_STRIP
884 $(STRIP) $@
885 endif
886 ifdef MOZ_POST_PROGRAM_COMMAND
887 $(MOZ_POST_PROGRAM_COMMAND) $@
888 endif
889 ifeq ($(OS_ARCH),BeOS)
890 ifdef BEOS_PROGRAM_RESOURCE
891 xres -o $@ $(BEOS_PROGRAM_RESOURCE)
892 mimeset $@
893 endif
894 endif # BeOS
896 $(HOST_PROGRAM): $(HOST_PROGOBJS) $(HOST_LIBS_DEPS) $(HOST_EXTRA_DEPS) Makefile Makefile.in
897 ifeq ($(MOZ_OS2_TOOLS),VACPP)
898 $(LD) -OUT:$@ $(LDFLAGS) $(HOST_OBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) -ST:0x100000
899 else
900 ifeq (WINCE,$(OS_ARCH))
901 $(HOST_LD) -NOLOGO -OUT:$@ $(HOST_OBJS) $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
902 else
903 ifeq (_WINNT,$(GNU_CC)_$(HOST_OS_ARCH))
904 $(HOST_LD) -NOLOGO -OUT:$@ -PDB:$(PDBFILE) $(HOST_OBJS) $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
905 ifdef MSMANIFEST_TOOL
906 @if test -f $@.manifest; then \
907 mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
908 rm -f $@.manifest; \
910 endif # MSVC with manifest tool
911 else
912 ifeq ($(CPP_PROG_LINK),1)
913 $(HOST_CXX) -o $@ $(HOST_CXXFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
914 else
915 $(HOST_CC) -o $@ $(HOST_CFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
916 endif # CPP_PROG_LINK
917 endif
918 endif
919 endif
922 # This is an attempt to support generation of multiple binaries
923 # in one directory, it assumes everything to compile Foo is in
924 # Foo.o (from either Foo.c or Foo.cpp).
926 # SIMPLE_PROGRAMS = Foo Bar
927 # creates Foo.o Bar.o, links with LIBS to create Foo, Bar.
929 $(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(LIBS_DEPS) $(EXTRA_DEPS) Makefile Makefile.in
930 ifeq (WINCE,$(OS_ARCH))
931 $(LD) -nologo -entry:main -out:$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
932 else
933 ifeq ($(MOZ_OS2_TOOLS),VACPP)
934 $(LD) -Out:$@ $< $(LDFLAGS) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(WRAP_MALLOC_LIB) $(PROFILER_LIBS)
935 else
936 ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
937 $(LD) -nologo -out:$@ -pdb:$(PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
938 ifdef MSMANIFEST_TOOL
939 @if test -f $@.manifest; then \
940 mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
941 rm -f $@.manifest; \
943 endif # MSVC with manifest tool
944 else
945 ifeq ($(CPP_PROG_LINK),1)
946 $(CCC) $(WRAP_MALLOC_CFLAGS) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(SOLARIS_JEMALLOC_LDFLAGS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(WRAP_MALLOC_LIB) $(PROFILER_LIBS) $(BIN_FLAGS)
947 else
948 $(CC) $(WRAP_MALLOC_CFLAGS) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(SOLARIS_JEMALLOC_LDFLAGS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(WRAP_MALLOC_LIB) $(PROFILER_LIBS) $(BIN_FLAGS)
949 endif # CPP_PROG_LINK
950 endif # WINNT && !GNU_CC
951 endif # OS/2 VACPP
952 endif # WINCE
954 ifdef ENABLE_STRIP
955 $(STRIP) $@
956 endif
957 ifdef MOZ_POST_PROGRAM_COMMAND
958 $(MOZ_POST_PROGRAM_COMMAND) $@
959 endif
961 $(HOST_SIMPLE_PROGRAMS): host_%$(HOST_BIN_SUFFIX): host_%.$(OBJ_SUFFIX) $(HOST_LIBS_DEPS) $(HOST_EXTRA_DEPS) Makefile Makefile.in
962 ifeq ($(MOZ_OS2_TOOLS),VACPP)
963 $(HOST_LD) -OUT:$@ $< $(LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) -ST:0x100000
964 else
965 ifeq (WINCE,$(OS_ARCH))
966 $(HOST_LD) -NOLOGO -OUT:$@ $(WIN32_EXE_LDFLAGS) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
967 else
968 ifeq (WINNT_,$(HOST_OS_ARCH)_$(GNU_CC))
969 $(HOST_LD) -NOLOGO -OUT:$@ -PDB:$(PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
970 else
971 ifdef HOST_CPPSRCS
972 $(HOST_CXX) $(HOST_OUTOPTION)$@ $(HOST_CXXFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
973 else
974 $(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_CFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
975 endif
976 endif
977 endif
978 endif
981 # Purify target. Solaris/sparc only to start.
982 # Purify does not recognize "egcs" or "c++" so we go with
983 # "gcc" and "g++" for now.
985 pure: $(PROGRAM)
986 ifeq ($(CPP_PROG_LINK),1)
987 $(PURIFY) $(CCC) -o $^.pure $(CXXFLAGS) $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS)
988 else
989 $(PURIFY) $(CC) -o $^.pure $(CFLAGS) $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS)
990 endif
991 ifndef NO_DIST_INSTALL
992 $(INSTALL) $(IFLAGS2) $^.pure $(FINAL_TARGET)
993 endif
995 quantify: $(PROGRAM)
996 ifeq ($(CPP_PROG_LINK),1)
997 $(QUANTIFY) $(CCC) -o $^.quantify $(CXXFLAGS) $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS)
998 else
999 $(QUANTIFY) $(CC) -o $^.quantify $(CFLAGS) $(PROGOBJS) $(LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS)
1000 endif
1001 ifndef NO_DIST_INSTALL
1002 $(INSTALL) $(IFLAGS2) $^.quantify $(FINAL_TARGET)
1003 endif
1006 # This allows us to create static versions of the shared libraries
1007 # that are built using other static libraries. Confused...?
1009 ifdef SHARED_LIBRARY_LIBS
1010 ifeq (,$(GNU_LD)$(filter-out OS2 WINNT WINCE, $(OS_ARCH)))
1011 ifneq (,$(BUILD_STATIC_LIBS)$(FORCE_STATIC_LIB))
1012 LOBJS += $(SHARED_LIBRARY_LIBS)
1013 endif
1014 else
1015 ifneq (,$(filter OSF1 BSD_OS FreeBSD NetBSD OpenBSD SunOS Darwin,$(OS_ARCH)))
1016 CLEANUP1 := | egrep -v '(________64ELEL_|__.SYMDEF)'
1017 CLEANUP2 := rm -f ________64ELEL_ __.SYMDEF
1018 else
1019 CLEANUP2 := true
1020 endif
1021 SUB_LOBJS = $(shell for lib in $(SHARED_LIBRARY_LIBS); do $(AR_LIST) $${lib} $(CLEANUP1); done;)
1022 endif
1023 endif
1024 ifdef MOZILLA_PROBE_LIBS
1025 PROBE_LOBJS = $(shell for lib in $(MOZILLA_PROBE_LIBS); do $(AR_LIST) $${lib} $(CLEANUP1); done;)
1026 endif
1027 ifdef DTRACE_PROBE_OBJ
1028 EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
1029 endif
1031 $(LIBRARY): $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DEPS) Makefile Makefile.in
1032 rm -f $@
1033 ifneq (,$(GNU_LD)$(filter-out OS2 WINNT WINCE, $(OS_ARCH)))
1034 ifdef SHARED_LIBRARY_LIBS
1035 @rm -f $(SUB_LOBJS)
1036 @for lib in $(SHARED_LIBRARY_LIBS); do $(AR_EXTRACT) $${lib}; $(CLEANUP2); done
1037 endif
1038 endif
1039 $(AR) $(AR_FLAGS) $(OBJS) $(LOBJS) $(SUB_LOBJS)
1040 $(RANLIB) $@
1041 @rm -f foodummyfilefoo $(SUB_LOBJS)
1043 ifeq (,$(filter-out WINNT WINCE, $(OS_ARCH)))
1044 $(IMPORT_LIBRARY): $(SHARED_LIBRARY)
1045 endif
1047 ifeq ($(OS_ARCH),OS2)
1048 $(DEF_FILE): $(OBJS) $(SHARED_LIBRARY_LIBS)
1049 rm -f $@
1050 echo LIBRARY $(LIBRARY_NAME) INITINSTANCE TERMINSTANCE > $@
1051 echo PROTMODE >> $@
1052 echo CODE LOADONCALL MOVEABLE DISCARDABLE >> $@
1053 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $@
1054 echo EXPORTS >> $@
1055 ifeq ($(IS_COMPONENT),1)
1056 ifeq ($(HAS_EXTRAEXPORTS),1)
1057 ifndef MOZ_OS2_USE_DECLSPEC
1058 $(FILTER) $(OBJS) $(SHARED_LIBRARY_LIBS) >> $@
1059 endif
1060 else
1061 echo _NSGetModule >> $@
1062 endif
1063 else
1064 ifndef MOZ_OS2_USE_DECLSPEC
1065 $(FILTER) $(OBJS) $(SHARED_LIBRARY_LIBS) >> $@
1066 endif
1067 endif
1068 $(ADD_TO_DEF_FILE)
1070 ifdef MOZ_OS2_USE_DECLSPEC
1071 $(IMPORT_LIBRARY): $(SHARED_LIBRARY)
1072 else
1073 $(IMPORT_LIBRARY): $(DEF_FILE)
1074 endif
1075 rm -f $@
1076 $(IMPLIB) $@ $^
1077 $(RANLIB) $@
1078 endif # OS/2
1080 $(HOST_LIBRARY): $(HOST_OBJS) Makefile
1081 rm -f $@
1082 $(HOST_AR) $(HOST_AR_FLAGS) $(HOST_OBJS)
1083 $(HOST_RANLIB) $@
1085 ifdef NO_LD_ARCHIVE_FLAGS
1086 SUB_SHLOBJS = $(SUB_LOBJS)
1087 endif
1089 ifdef HAVE_DTRACE
1090 ifndef XP_MACOSX
1091 ifdef DTRACE_PROBE_OBJ
1092 ifndef DTRACE_LIB_DEPENDENT
1093 $(DTRACE_PROBE_OBJ): $(OBJS)
1094 dtrace -G -C -32 -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(OBJS)
1095 endif
1096 endif
1097 endif
1098 endif
1100 # On Darwin (Mac OS X), dwarf2 debugging uses debug info left in .o files,
1101 # so instead of deleting .o files after repacking them into a dylib, we make
1102 # symlinks back to the originals. The symlinks are a no-op for stabs debugging,
1103 # so no need to conditionalize on OS version or debugging format.
1105 $(SHARED_LIBRARY): $(OBJS) $(LOBJS) $(DEF_FILE) $(RESFILE) $(SHARED_LIBRARY_LIBS) $(EXTRA_DEPS) $(DSO_LDOPTS_DEPS) Makefile Makefile.in
1106 ifndef INCREMENTAL_LINKER
1107 rm -f $@
1108 endif
1109 ifneq ($(MOZ_OS2_TOOLS),VACPP)
1110 ifeq ($(OS_ARCH),OpenVMS)
1111 @if test ! -f $(VMS_SYMVEC_FILE); then \
1112 if test -f $(VMS_SYMVEC_FILE_MODULE); then \
1113 echo Creating specific component options file $(VMS_SYMVEC_FILE); \
1114 cp $(VMS_SYMVEC_FILE_MODULE) $(VMS_SYMVEC_FILE); \
1115 fi; \
1117 ifdef IS_COMPONENT
1118 @if test ! -f $(VMS_SYMVEC_FILE); then \
1119 echo Creating generic component options file $(VMS_SYMVEC_FILE); \
1120 cp $(VMS_SYMVEC_FILE_COMP) $(VMS_SYMVEC_FILE); \
1122 endif
1123 endif
1124 ifdef NO_LD_ARCHIVE_FLAGS
1125 ifdef SHARED_LIBRARY_LIBS
1126 @rm -f $(SUB_SHLOBJS)
1127 @for lib in $(SHARED_LIBRARY_LIBS); do $(AR_EXTRACT) $${lib}; $(CLEANUP2); done
1128 ifeq ($(OS_ARCH),Darwin)
1129 @echo Making symlinks to the original object files in the archive libraries $(SHARED_LIBRARY_LIBS)
1130 @for lib in $(SHARED_LIBRARY_LIBS); do \
1131 libdir=`echo $$lib|sed -e 's,/[^/]*\.a,,'`; \
1132 ofiles=`$(AR_LIST) $${lib}`; \
1133 for ofile in $$ofiles; do \
1134 if [ -f $$libdir/$$ofile ]; then \
1135 rm -f $$ofile; \
1136 ln -s $$libdir/$$ofile $$ofile; \
1137 fi; \
1138 done; \
1139 done
1140 endif
1141 endif # SHARED_LIBRARY_LIBS
1142 endif # NO_LD_ARCHIVE_FLAGS
1143 ifdef DTRACE_LIB_DEPENDENT
1144 @rm -f $(PROBE_LOBJS)
1145 @for lib in $(MOZILLA_PROBE_LIBS); do $(AR_EXTRACT) $${lib}; $(CLEANUP2); done
1146 ifndef XP_MACOSX
1147 dtrace -G -C -32 -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(PROBE_LOBJS)
1148 endif
1149 @for lib in $(MOZILLA_PROBE_LIBS); do \
1150 ofiles=`$(AR_LIST) $${lib}`; \
1151 $(AR_DELETE) $${lib} $$ofiles; \
1152 done
1153 $(MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(PROBE_LOBJS) $(RESFILE) $(LDFLAGS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE)
1154 @rm -f $(PROBE_LOBJS)
1155 @rm -f $(DTRACE_PROBE_OBJ)
1156 @for lib in $(MOZILLA_PROBE_LIBS); do \
1157 if [ -L $${lib} ]; then rm -f `readlink $${lib}`; fi; \
1158 done
1159 @rm -f $(MOZILLA_PROBE_LIBS)
1161 else
1162 $(MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(DTRACE_PROBE_OBJ) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE)
1163 endif # DTRACE_LIB_DEPENDENT
1165 ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
1166 ifdef MSMANIFEST_TOOL
1167 ifdef EMBED_MANIFEST_AT
1168 @if test -f $@.manifest; then \
1169 mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;$(EMBED_MANIFEST_AT); \
1170 rm -f $@.manifest; \
1172 endif # EMBED_MANIFEST_AT
1173 endif # MSVC with manifest tool
1174 endif # WINNT && !GCC
1175 ifeq ($(OS_ARCH),Darwin)
1176 else # non-Darwin
1177 @rm -f $(SUB_SHLOBJS)
1178 endif # Darwin
1179 @rm -f foodummyfilefoo $(DELETE_AFTER_LINK)
1180 else # os2 vacpp
1181 $(MKSHLIB) -O:$@ -DLL -INC:_dllentry $(LDFLAGS) $(OBJS) $(LOBJS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE)
1182 endif # !os2 vacpp
1183 chmod +x $@
1184 ifdef ENABLE_STRIP
1185 $(STRIP) $@
1186 endif
1187 ifdef MOZ_POST_DSO_LIB_COMMAND
1188 $(MOZ_POST_DSO_LIB_COMMAND) $@
1189 endif
1191 ifdef MOZ_AUTO_DEPS
1192 ifdef COMPILER_DEPEND
1193 ifeq (__SunOS,$(GNU_CC)_$(GNU_CXX)_$(OS_ARCH))
1194 _MDDEPFILE = $(MDDEPDIR)/$(@F).pp
1196 define MAKE_DEPS_AUTO_CC
1197 if test -d $(@D); then \
1198 echo "Building deps for $< using Sun Studio cc"; \
1199 $(CC) $(COMPILE_CFLAGS) -xM $< >$(_MDDEPFILE) ; \
1201 endef
1202 define MAKE_DEPS_AUTO_CXX
1203 if test -d $(@D); then \
1204 echo "Building deps for $< using Sun Studio CC"; \
1205 $(CXX) $(COMPILE_CXXFLAGS) -xM $< >$(_MDDEPFILE) ; \
1207 endef
1208 endif # Sun Studio on Solaris
1209 else # COMPILER_DEPEND
1211 # Generate dependencies on the fly
1213 _MDDEPFILE = $(MDDEPDIR)/$(@F).pp
1215 define MAKE_DEPS_AUTO
1216 if test -d $(@D); then \
1217 echo "Building deps for $<"; \
1218 $(MKDEPEND) -o'.$(OBJ_SUFFIX)' -f- $(DEFINES) $(ACDEFINES) $(INCLUDES) $< 2>/dev/null | sed -e "s|^[^ ]*/||" > $(_MDDEPFILE) ; \
1220 endef
1222 MAKE_DEPS_AUTO_CC = $(MAKE_DEPS_AUTO)
1223 MAKE_DEPS_AUTO_CXX = $(MAKE_DEPS_AUTO)
1225 endif # COMPILER_DEPEND
1227 endif # MOZ_AUTO_DEPS
1229 ifdef MOZ_MEMORY
1230 ifeq ($(OS_ARCH),SunOS)
1231 SOLARIS_JEMALLOC_LDFLAGS = $(call EXPAND_LIBNAME_PATH,jemalloc,$(DIST)/lib)
1232 endif
1233 endif
1235 # Rules for building native targets must come first because of the host_ prefix
1236 host_%.$(OBJ_SUFFIX): %.c Makefile Makefile.in
1237 $(REPORT_BUILD)
1238 $(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
1240 host_%.$(OBJ_SUFFIX): %.cpp Makefile Makefile.in
1241 $(REPORT_BUILD)
1242 $(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CXXFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
1244 host_%.$(OBJ_SUFFIX): %.cc Makefile Makefile.in
1245 $(REPORT_BUILD)
1246 $(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CXXFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
1248 host_%.$(OBJ_SUFFIX): %.m Makefile Makefile.in
1249 $(REPORT_BUILD)
1250 $(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CFLAGS) $(HOST_CMFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
1252 host_%.$(OBJ_SUFFIX): %.mm Makefile Makefile.in
1253 $(REPORT_BUILD)
1254 $(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CXXFLAGS) $(HOST_CMMFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
1256 %: %.c Makefile Makefile.in
1257 $(REPORT_BUILD)
1258 @$(MAKE_DEPS_AUTO_CC)
1259 $(ELOG) $(CC) $(CFLAGS) $(LDFLAGS) $(OUTOPTION)$@ $(_VPATH_SRCS)
1261 %.$(OBJ_SUFFIX): %.c Makefile Makefile.in
1262 $(REPORT_BUILD)
1263 @$(MAKE_DEPS_AUTO_CC)
1264 $(ELOG) $(CC) $(OUTOPTION)$@ -c $(COMPILE_CFLAGS) $(_VPATH_SRCS)
1266 moc_%.cpp: %.h Makefile Makefile.in
1267 $(MOC) $< $(OUTOPTION)$@
1269 ifdef ASFILES
1270 # The AS_DASH_C_FLAG is needed cause not all assemblers (Solaris) accept
1271 # a '-c' flag.
1272 %.$(OBJ_SUFFIX): %.$(ASM_SUFFIX) Makefile Makefile.in
1273 ifeq ($(MOZ_OS2_TOOLS),VACPP)
1274 $(AS) -Fdo:./$(OBJDIR) -Feo:.$(OBJ_SUFFIX) $(ASFLAGS) $(AS_DASH_C_FLAG) $<
1275 else
1276 $(AS) -o $@ $(ASFLAGS) $(AS_DASH_C_FLAG) $(_VPATH_SRCS)
1277 endif
1278 endif
1280 %.$(OBJ_SUFFIX): %.S Makefile Makefile.in
1281 $(AS) -o $@ $(ASFLAGS) -c $<
1283 %: %.cpp Makefile Makefile.in
1284 @$(MAKE_DEPS_AUTO_CXX)
1285 $(CCC) $(OUTOPTION)$@ $(CXXFLAGS) $(_VPATH_SRCS) $(LDFLAGS)
1288 # Please keep the next two rules in sync.
1290 %.$(OBJ_SUFFIX): %.cc Makefile Makefile.in
1291 $(REPORT_BUILD)
1292 @$(MAKE_DEPS_AUTO_CXX)
1293 $(ELOG) $(CCC) $(OUTOPTION)$@ -c $(COMPILE_CXXFLAGS) $(_VPATH_SRCS)
1295 %.$(OBJ_SUFFIX): %.cpp Makefile Makefile.in
1296 $(REPORT_BUILD)
1297 @$(MAKE_DEPS_AUTO_CXX)
1298 ifdef STRICT_CPLUSPLUS_SUFFIX
1299 echo "#line 1 \"$*.cpp\"" | cat - $*.cpp > t_$*.cc
1300 $(ELOG) $(CCC) -o $@ -c $(COMPILE_CXXFLAGS) t_$*.cc
1301 rm -f t_$*.cc
1302 else
1303 $(ELOG) $(CCC) $(OUTOPTION)$@ -c $(COMPILE_CXXFLAGS) $(_VPATH_SRCS)
1304 endif #STRICT_CPLUSPLUS_SUFFIX
1306 $(OBJ_PREFIX)%.$(OBJ_SUFFIX): %.mm Makefile Makefile.in
1307 $(REPORT_BUILD)
1308 @$(MAKE_DEPS_AUTO_CXX)
1309 $(ELOG) $(CCC) -o $@ -c $(COMPILE_CXXFLAGS) $(COMPILE_CMMFLAGS) $(_VPATH_SRCS)
1311 $(OBJ_PREFIX)%.$(OBJ_SUFFIX): %.m Makefile Makefile.in
1312 $(REPORT_BUILD)
1313 @$(MAKE_DEPS_AUTO_CC)
1314 $(ELOG) $(CC) -o $@ -c $(COMPILE_CFLAGS) $(COMPILE_CMFLAGS) $(_VPATH_SRCS)
1316 %.s: %.cpp
1317 $(CCC) -S $(COMPILE_CXXFLAGS) $(_VPATH_SRCS)
1319 %.s: %.cc
1320 $(CCC) -S $(COMPILE_CXXFLAGS) $(_VPATH_SRCS)
1322 %.s: %.c
1323 $(CC) -S $(COMPILE_CFLAGS) $(_VPATH_SRCS)
1325 %.i: %.cpp
1326 $(CCC) -C -E $(COMPILE_CXXFLAGS) $(_VPATH_SRCS) > $*.i
1328 %.i: %.cc
1329 $(CCC) -C -E $(COMPILE_CXXFLAGS) $(_VPATH_SRCS) > $*.i
1331 %.i: %.c
1332 $(CC) -C -E $(COMPILE_CFLAGS) $(_VPATH_SRCS) > $*.i
1334 %.i: %.mm
1335 $(CCC) -C -E $(COMPILE_CXXFLAGS) $(COMPILE_CMMFLAGS) $(_VPATH_SRCS) > $*.i
1337 %.res: %.rc
1338 @echo Creating Resource file: $@
1339 ifeq ($(OS_ARCH),OS2)
1340 $(RC) $(RCFLAGS:-D%=-d %) -i $(subst /,\,$(srcdir)) -r $< $@
1341 else
1342 ifdef GNU_CC
1343 $(RC) $(RCFLAGS) $(filter-out -U%,$(DEFINES)) $(INCLUDES:-I%=--include-dir %) $(OUTOPTION)$@ $(_VPATH_SRCS)
1344 else
1345 $(RC) $(RCFLAGS) -r $(DEFINES) $(INCLUDES) $(OUTOPTION)$@ $(_VPATH_SRCS)
1346 endif
1347 endif
1349 # need 3 separate lines for OS/2
1350 %: %.pl
1351 rm -f $@
1352 cp $< $@
1353 chmod +x $@
1355 %: %.sh
1356 rm -f $@; cp $< $@; chmod +x $@
1358 # Cancel these implicit rules
1360 %: %,v
1362 %: RCS/%,v
1364 %: s.%
1366 %: SCCS/s.%
1368 ###############################################################################
1369 # Java rules
1370 ###############################################################################
1371 ifneq (,$(filter OS2 WINNT WINCE,$(OS_ARCH)))
1372 SEP := ;
1373 else
1374 SEP := :
1375 endif
1377 EMPTY :=
1378 SPACE := $(EMPTY) $(EMPTY)
1380 # Cygwin and MSYS have their own special path form, but javac expects the source
1381 # and class paths to be in the DOS form (i.e. e:/builds/...). This function
1382 # does the appropriate conversion on Windows, but is a noop on other systems.
1383 ifeq (,$(filter-out WINNT WINCE, $(HOST_OS_ARCH)))
1384 ifdef CYGWIN_WRAPPER
1385 normalizepath = $(foreach p,$(1),$(shell cygpath -m $(p)))
1386 else
1387 # assume MSYS
1388 # We use 'pwd -W' to get DOS form of the path. However, since the given path
1389 # could be a file or a non-existent path, we cannot call 'pwd -W' directly
1390 # on the path. Instead, we extract the root path (i.e. "c:/"), call 'pwd -W'
1391 # on it, then merge with the rest of the path.
1392 root-path = $(shell echo $(1) | sed -e "s|\(/[^/]*\)/\?\(.*\)|\1|")
1393 non-root-path = $(shell echo $(1) | sed -e "s|\(/[^/]*\)/\?\(.*\)|\2|")
1394 normalizepath = $(foreach p,$(1),$(if $(filter /%,$(1)),$(shell cd $(call root-path,$(1)) && pwd -W)$(call non-root-path,$(1)),$(1)))
1395 endif
1396 else
1397 normalizepath = $(1)
1398 endif
1400 _srcdir = $(call normalizepath,$(srcdir))
1401 ifdef JAVA_SOURCEPATH
1402 SP = $(subst $(SPACE),$(SEP),$(call normalizepath,$(strip $(JAVA_SOURCEPATH))))
1403 _JAVA_SOURCEPATH = ".$(SEP)$(_srcdir)$(SEP)$(SP)"
1404 else
1405 _JAVA_SOURCEPATH = ".$(SEP)$(_srcdir)"
1406 endif
1408 ifdef JAVA_CLASSPATH
1409 CP = $(subst $(SPACE),$(SEP),$(call normalizepath,$(strip $(JAVA_CLASSPATH))))
1410 _JAVA_CLASSPATH = ".$(SEP)$(CP)"
1411 else
1412 _JAVA_CLASSPATH = .
1413 endif
1415 _JAVA_DIR = _java
1416 $(_JAVA_DIR)::
1417 $(NSINSTALL) -D $@
1419 $(_JAVA_DIR)/%.class: %.java Makefile Makefile.in $(_JAVA_DIR)
1420 $(CYGWIN_WRAPPER) $(JAVAC) $(JAVAC_FLAGS) -classpath $(_JAVA_CLASSPATH) \
1421 -sourcepath $(_JAVA_SOURCEPATH) -d $(_JAVA_DIR) $(_VPATH_SRCS)
1423 $(JAVA_LIBRARY): $(addprefix $(_JAVA_DIR)/,$(JAVA_SRCS:.java=.class)) Makefile Makefile.in
1424 $(JAR) cf $@ -C $(_JAVA_DIR) .
1426 GARBAGE_DIRS += $(_JAVA_DIR)
1428 ###############################################################################
1429 # Update Makefiles
1430 ###############################################################################
1432 # In GNU make 3.80, makefiles must use the /cygdrive syntax, even if we're
1433 # processing them with AS perl. See bug 232003
1434 ifdef AS_PERL
1435 CYGWIN_TOPSRCDIR = -nowrap -p $(topsrcdir) -wrap
1436 endif
1438 # Note: Passing depth to make-makefile is optional.
1439 # It saves the script some work, though.
1440 Makefile: Makefile.in
1441 @$(PERL) $(AUTOCONF_TOOLS)/make-makefile -t $(topsrcdir) -d $(DEPTH) $(CYGWIN_TOPSRCDIR)
1443 ifdef SUBMAKEFILES
1444 # VPATH does not work on some machines in this case, so add $(srcdir)
1445 $(SUBMAKEFILES): % : $(srcdir)/%.in
1446 $(PERL) $(AUTOCONF_TOOLS)/make-makefile -t $(topsrcdir) -d $(DEPTH) $(CYGWIN_TOPSRCDIR) $@
1447 endif
1449 ifdef AUTOUPDATE_CONFIGURE
1450 $(topsrcdir)/configure: $(topsrcdir)/configure.in
1451 (cd $(topsrcdir) && $(AUTOCONF)) && (cd $(DEPTH) && ./config.status --recheck)
1452 endif
1454 ###############################################################################
1455 # Bunch of things that extend the 'export' rule (in order):
1456 ###############################################################################
1458 ################################################################################
1459 # Copy each element of EXPORTS to $(PUBLIC)
1461 ifneq ($(EXPORTS)$(XPIDLSRCS)$(SDK_HEADERS)$(SDK_XPIDLSRCS),)
1462 $(SDK_PUBLIC) $(PUBLIC)::
1463 @if test ! -d $@; then echo Creating $@; rm -rf $@; $(NSINSTALL) -D $@; else true; fi
1464 endif
1466 ifdef MOZ_JAVAXPCOM
1467 ifneq ($(XPIDLSRCS)$(SDK_XPIDLSRCS),)
1468 $(JAVA_DIST_DIR)::
1469 $(NSINSTALL) -D $@
1470 endif
1471 endif
1473 ifneq ($(XPI_NAME),)
1474 export::
1475 @if test ! -d $(FINAL_TARGET); then echo Creating $(FINAL_TARGET); rm -fr $(FINAL_TARGET); $(NSINSTALL) -D $(FINAL_TARGET); else true; fi
1476 endif
1478 ifndef NO_DIST_INSTALL
1479 ifneq ($(EXPORTS),)
1480 export:: $(EXPORTS) $(PUBLIC)
1481 $(INSTALL) $(IFLAGS1) $^
1482 endif
1484 ifneq ($(SDK_HEADERS),)
1485 export:: $(SDK_HEADERS) $(SDK_PUBLIC)
1486 $(INSTALL) $(IFLAGS1) $^
1488 export:: $(SDK_HEADERS) $(PUBLIC)
1489 $(INSTALL) $(IFLAGS1) $^
1490 endif
1491 endif # NO_DIST_INSTALL
1493 ################################################################################
1494 # Copy each element of PREF_JS_EXPORTS
1496 ifdef GRE_MODULE
1497 PREF_DIR = greprefs
1498 else
1499 ifneq (,$(XPI_NAME)$(LIBXUL_SDK))
1500 PREF_DIR = defaults/preferences
1501 else
1502 PREF_DIR = defaults/pref
1503 endif
1504 endif
1506 ifneq ($(PREF_JS_EXPORTS),)
1507 # on win32, pref files need CRLF line endings... see bug 206029
1508 ifeq (WINNT,$(OS_ARCH))
1509 PREF_PPFLAGS = --line-endings=crlf
1510 endif
1512 ifndef NO_DIST_INSTALL
1513 libs:: $(PREF_JS_EXPORTS)
1514 if test ! -d $(FINAL_TARGET)/$(PREF_DIR); then $(NSINSTALL) -D $(FINAL_TARGET)/$(PREF_DIR); fi
1515 $(EXIT_ON_ERROR) \
1516 for i in $(PREF_JS_EXPORTS); do \
1517 dest=$(FINAL_TARGET)/$(PREF_DIR)/`basename $$i`; \
1518 $(RM) -f $$dest; \
1519 $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) $$i > $$dest; \
1520 done
1521 endif
1522 endif
1524 ################################################################################
1525 # Copy each element of AUTOCFG_JS_EXPORTS to $(FINAL_TARGET)/defaults/autoconfig
1527 ifneq ($(AUTOCFG_JS_EXPORTS),)
1528 $(FINAL_TARGET)/defaults/autoconfig::
1529 @if test ! -d $@; then echo Creating $@; rm -rf $@; $(NSINSTALL) -D $@; else true; fi
1531 ifndef NO_DIST_INSTALL
1532 export:: $(AUTOCFG_JS_EXPORTS) $(FINAL_TARGET)/defaults/autoconfig
1533 $(INSTALL) $(IFLAGS1) $^
1534 endif
1536 endif
1537 ################################################################################
1538 # Export the elements of $(XPIDLSRCS) & $(SDK_XPIDLSRCS),
1539 # generating .h and .xpt files and moving them to the appropriate places.
1541 ifneq ($(XPIDLSRCS)$(SDK_XPIDLSRCS),)
1543 export:: $(patsubst %.idl,$(XPIDL_GEN_DIR)/%.h, $(XPIDLSRCS))
1545 ifndef XPIDL_MODULE
1546 XPIDL_MODULE = $(MODULE)
1547 endif
1549 ifeq ($(XPIDL_MODULE),) # we need $(XPIDL_MODULE) to make $(XPIDL_MODULE).xpt
1550 export:: FORCE
1551 @echo
1552 @echo "*** Error processing XPIDLSRCS:"
1553 @echo "Please define MODULE or XPIDL_MODULE when defining XPIDLSRCS,"
1554 @echo "so we have a module name to use when creating MODULE.xpt."
1555 @echo; sleep 2; false
1556 endif
1558 $(SDK_IDL_DIR) $(IDL_DIR)::
1559 @if test ! -d $@; then echo Creating $@; rm -rf $@; $(NSINSTALL) -D $@; else true; fi
1561 # generate .h files from into $(XPIDL_GEN_DIR), then export to $(PUBLIC);
1562 # warn against overriding existing .h file.
1563 $(XPIDL_GEN_DIR)/.done:
1564 @if test ! -d $(XPIDL_GEN_DIR); then echo Creating $(XPIDL_GEN_DIR)/.done; rm -rf $(XPIDL_GEN_DIR); mkdir $(XPIDL_GEN_DIR); fi
1565 @touch $@
1567 # don't depend on $(XPIDL_GEN_DIR), because the modification date changes
1568 # with any addition to the directory, regenerating all .h files -> everything.
1570 $(XPIDL_GEN_DIR)/%.h: %.idl $(XPIDL_COMPILE) $(XPIDL_GEN_DIR)/.done
1571 $(REPORT_BUILD)
1572 $(ELOG) $(XPIDL_COMPILE) -m header -w $(XPIDL_FLAGS) -o $(XPIDL_GEN_DIR)/$* $(_VPATH_SRCS)
1573 @if test -n "$(findstring $*.h, $(EXPORTS) $(SDK_HEADERS))"; \
1574 then echo "*** WARNING: file $*.h generated from $*.idl overrides $(srcdir)/$*.h"; else true; fi
1576 ifndef NO_GEN_XPT
1577 # generate intermediate .xpt files into $(XPIDL_GEN_DIR), then link
1578 # into $(XPIDL_MODULE).xpt and export it to $(FINAL_TARGET)/components.
1579 $(XPIDL_GEN_DIR)/%.xpt: %.idl $(XPIDL_COMPILE) $(XPIDL_GEN_DIR)/.done
1580 $(REPORT_BUILD)
1581 $(ELOG) $(XPIDL_COMPILE) -m typelib -w $(XPIDL_FLAGS) -e $@ -d $(MDDEPDIR)/$*.pp $(_VPATH_SRCS)
1583 # no need to link together if XPIDLSRCS contains only XPIDL_MODULE
1584 ifneq ($(XPIDL_MODULE).idl,$(strip $(XPIDLSRCS)))
1585 $(XPIDL_GEN_DIR)/$(XPIDL_MODULE).xpt: $(patsubst %.idl,$(XPIDL_GEN_DIR)/%.xpt,$(XPIDLSRCS) $(SDK_XPIDLSRCS)) Makefile.in Makefile $(XPIDL_LINK)
1586 $(XPIDL_LINK) $(XPIDL_GEN_DIR)/$(XPIDL_MODULE).xpt $(patsubst %.idl,$(XPIDL_GEN_DIR)/%.xpt,$(XPIDLSRCS) $(SDK_XPIDLSRCS))
1587 endif # XPIDL_MODULE.xpt != XPIDLSRCS
1589 libs:: $(XPIDL_GEN_DIR)/$(XPIDL_MODULE).xpt
1590 ifndef NO_DIST_INSTALL
1591 $(INSTALL) $(IFLAGS1) $(XPIDL_GEN_DIR)/$(XPIDL_MODULE).xpt $(FINAL_TARGET)/components
1592 endif
1594 endif # NO_GEN_XPT
1596 GARBAGE_DIRS += $(XPIDL_GEN_DIR)
1598 endif # XPIDLSRCS || SDK_XPIDLSRCS
1600 ifneq ($(XPIDLSRCS),)
1601 # export .idl files to $(IDL_DIR)
1602 ifndef NO_DIST_INSTALL
1603 export:: $(XPIDLSRCS) $(IDL_DIR)
1604 $(INSTALL) $(IFLAGS1) $^
1606 export:: $(patsubst %.idl,$(XPIDL_GEN_DIR)/%.h, $(XPIDLSRCS)) $(PUBLIC)
1607 $(INSTALL) $(IFLAGS1) $^
1608 endif # NO_DIST_INSTALL
1610 endif # XPIDLSRCS
1615 # General rules for exporting idl files.
1617 # WORK-AROUND ONLY, for mozilla/tools/module-deps/bootstrap.pl build.
1618 # Bug to fix idl dependency problems w/o this extra build pass is
1619 # http://bugzilla.mozilla.org/show_bug.cgi?id=145777
1621 $(IDL_DIR)::
1622 @if test ! -d $@; then echo Creating $@; rm -rf $@; $(NSINSTALL) -D $@; else true; fi
1624 export-idl:: $(SUBMAKEFILES) $(MAKE_DIRS)
1626 ifneq ($(XPIDLSRCS)$(SDK_XPIDLSRCS),)
1627 ifndef NO_DIST_INSTALL
1628 export-idl:: $(XPIDLSRCS) $(SDK_XPIDLSRCS) $(IDL_DIR)
1629 $(INSTALL) $(IFLAGS1) $^
1630 endif
1631 endif
1632 +$(LOOP_OVER_DIRS)
1633 +$(LOOP_OVER_TOOL_DIRS)
1638 ifneq ($(SDK_XPIDLSRCS),)
1639 # export .idl files to $(IDL_DIR) & $(SDK_IDL_DIR)
1640 ifndef NO_DIST_INSTALL
1641 export:: $(SDK_XPIDLSRCS) $(IDL_DIR)
1642 $(INSTALL) $(IFLAGS1) $^
1644 export:: $(SDK_XPIDLSRCS) $(SDK_IDL_DIR)
1645 $(INSTALL) $(IFLAGS1) $^
1647 export:: $(patsubst %.idl,$(XPIDL_GEN_DIR)/%.h, $(SDK_XPIDLSRCS)) $(PUBLIC)
1648 $(INSTALL) $(IFLAGS1) $^
1650 export:: $(patsubst %.idl,$(XPIDL_GEN_DIR)/%.h, $(SDK_XPIDLSRCS)) $(SDK_PUBLIC)
1651 $(INSTALL) $(IFLAGS1) $^
1652 endif
1654 endif # SDK_XPIDLSRCS
1658 ifdef MOZ_JAVAXPCOM
1659 ifneq ($(XPIDLSRCS)$(SDK_XPIDLSRCS),)
1661 JAVA_XPIDLSRCS = $(XPIDLSRCS) $(SDK_XPIDLSRCS)
1663 # A single IDL file can contain multiple interfaces, which result in multiple
1664 # Java interface files. So use hidden dependency files.
1665 JAVADEPFILES = $(addprefix $(JAVA_GEN_DIR)/.,$(JAVA_XPIDLSRCS:.idl=.java.pp))
1667 $(JAVA_GEN_DIR):
1668 $(NSINSTALL) -D $@
1669 GARBAGE_DIRS += $(JAVA_GEN_DIR)
1671 # generate .java files into _javagen/[package name dirs]
1672 _JAVA_GEN_DIR = $(JAVA_GEN_DIR)/$(JAVA_IFACES_PKG_NAME)
1673 $(_JAVA_GEN_DIR):
1674 $(NSINSTALL) -D $@
1676 $(JAVA_GEN_DIR)/.%.java.pp: %.idl $(XPIDL_COMPILE) $(_JAVA_GEN_DIR)
1677 $(REPORT_BUILD)
1678 $(ELOG) $(XPIDL_COMPILE) -m java -w -I$(srcdir) -I$(IDL_DIR) -o $(_JAVA_GEN_DIR)/$* $(_VPATH_SRCS)
1679 @touch $@
1681 # "Install" generated Java interfaces. We segregate them based on the XPI_NAME.
1682 # If XPI_NAME is not set, install into the "default" directory.
1683 ifneq ($(XPI_NAME),)
1684 JAVA_INSTALL_DIR = $(JAVA_DIST_DIR)/$(XPI_NAME)
1685 else
1686 JAVA_INSTALL_DIR = $(JAVA_DIST_DIR)/default
1687 endif
1689 $(JAVA_INSTALL_DIR):
1690 $(NSINSTALL) -D $@
1692 export:: $(JAVA_DIST_DIR) $(JAVADEPFILES) $(JAVA_INSTALL_DIR)
1693 (cd $(JAVA_GEN_DIR) && tar $(TAR_CREATE_FLAGS) - .) | (cd $(JAVA_INSTALL_DIR) && tar -xf -)
1695 endif # XPIDLSRCS || SDK_XPIDLSRCS
1696 endif # MOZ_JAVAXPCOM
1698 ################################################################################
1699 # Copy each element of EXTRA_COMPONENTS to $(FINAL_TARGET)/components
1700 ifdef EXTRA_COMPONENTS
1701 libs:: $(EXTRA_COMPONENTS)
1702 ifndef NO_DIST_INSTALL
1703 $(INSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)/components
1704 endif
1706 endif
1708 ifdef EXTRA_PP_COMPONENTS
1709 libs:: $(EXTRA_PP_COMPONENTS)
1710 ifndef NO_DIST_INSTALL
1711 $(EXIT_ON_ERROR) \
1712 $(NSINSTALL) -D $(FINAL_TARGET)/components; \
1713 for i in $^; do \
1714 dest=$(FINAL_TARGET)/components/`basename $$i`; \
1715 $(RM) -f $$dest; \
1716 $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) $$i > $$dest; \
1717 done
1718 endif
1720 endif
1722 ################################################################################
1723 # Copy each element of EXTRA_JS_MODULES to $(FINAL_TARGET)/modules
1724 ifdef EXTRA_JS_MODULES
1725 libs:: $(EXTRA_JS_MODULES)
1726 ifndef NO_DIST_INSTALL
1727 $(INSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)/modules
1728 endif
1730 endif
1732 ifdef EXTRA_PP_JS_MODULES
1733 libs:: $(EXTRA_PP_JS_MODULES)
1734 ifndef NO_DIST_INSTALL
1735 $(EXIT_ON_ERROR) \
1736 $(NSINSTALL) -D $(FINAL_TARGET)/modules; \
1737 for i in $^; do \
1738 dest=$(FINAL_TARGET)/modules/`basename $$i`; \
1739 $(RM) -f $$dest; \
1740 $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) $$i > $$dest; \
1741 done
1742 endif
1744 endif
1746 ################################################################################
1747 # SDK
1749 ifneq (,$(SDK_LIBRARY))
1750 $(SDK_LIB_DIR)::
1751 @if test ! -d $@; then echo Creating $@; rm -rf $@; $(NSINSTALL) -D $@; else true; fi
1753 ifndef NO_DIST_INSTALL
1754 libs:: $(SDK_LIBRARY) $(SDK_LIB_DIR)
1755 $(INSTALL) $(IFLAGS2) $^
1756 endif
1758 endif # SDK_LIBRARY
1760 ifneq (,$(SDK_BINARY))
1761 $(SDK_BIN_DIR)::
1762 @if test ! -d $@; then echo Creating $@; rm -rf $@; $(NSINSTALL) -D $@; else true; fi
1764 ifndef NO_DIST_INSTALL
1765 libs:: $(SDK_BINARY) $(SDK_BIN_DIR)
1766 $(INSTALL) $(IFLAGS2) $^
1767 endif
1769 endif # SDK_BINARY
1771 ################################################################################
1772 # CHROME PACKAGING
1774 JAR_MANIFEST := $(srcdir)/jar.mn
1776 chrome::
1777 $(MAKE) realchrome
1778 +$(LOOP_OVER_DIRS)
1779 +$(LOOP_OVER_TOOL_DIRS)
1781 libs realchrome:: $(CHROME_DEPS)
1782 ifndef NO_DIST_INSTALL
1783 @$(EXIT_ON_ERROR) \
1784 if test -f $(JAR_MANIFEST); then \
1785 if test ! -d $(FINAL_TARGET)/chrome; then $(NSINSTALL) -D $(FINAL_TARGET)/chrome; fi; \
1786 if test ! -d $(MAKE_JARS_TARGET)/chrome; then $(NSINSTALL) -D $(MAKE_JARS_TARGET)/chrome; fi; \
1787 $(PYTHON) $(MOZILLA_DIR)/config/Preprocessor.py $(XULPPFLAGS) $(DEFINES) $(ACDEFINES) \
1788 $(JAR_MANIFEST) | \
1789 $(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/make-jars.pl \
1790 -d $(MAKE_JARS_TARGET)/chrome -j $(FINAL_TARGET)/chrome \
1791 $(MAKE_JARS_FLAGS) -- "$(XULPPFLAGS) $(DEFINES) $(ACDEFINES)"; \
1793 endif
1795 ifneq ($(DIST_FILES),)
1796 libs:: $(DIST_FILES)
1797 @$(EXIT_ON_ERROR) \
1798 for f in $(DIST_FILES); do \
1799 dest=$(FINAL_TARGET)/`basename $$f`; \
1800 $(RM) -f $$dest; \
1801 $(PYTHON) $(MOZILLA_DIR)/config/Preprocessor.py \
1802 $(XULAPP_DEFINES) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \
1803 $(srcdir)/$$f > $$dest; \
1804 done
1805 endif
1807 ifneq ($(DIST_CHROME_FILES),)
1808 libs:: $(DIST_CHROME_FILES)
1809 @$(EXIT_ON_ERROR) \
1810 for f in $(DIST_CHROME_FILES); do \
1811 dest=$(FINAL_TARGET)/chrome/`basename $$f`; \
1812 $(RM) -f $$dest; \
1813 $(PYTHON) $(MOZILLA_DIR)/config/Preprocessor.py \
1814 $(XULAPP_DEFINES) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) \
1815 $(srcdir)/$$f > $$dest; \
1816 done
1817 endif
1819 ifneq ($(XPI_PKGNAME),)
1820 libs realchrome::
1821 ifdef STRIP_XPI
1822 ifndef MOZ_DEBUG
1823 @echo "Stripping $(XPI_PKGNAME) package directory..."
1824 @echo $(FINAL_TARGET)
1825 @cd $(FINAL_TARGET) && find . ! -type d \
1826 ! -name "*.js" \
1827 ! -name "*.xpt" \
1828 ! -name "*.gif" \
1829 ! -name "*.jpg" \
1830 ! -name "*.png" \
1831 ! -name "*.xpm" \
1832 ! -name "*.txt" \
1833 ! -name "*.rdf" \
1834 ! -name "*.sh" \
1835 ! -name "*.properties" \
1836 ! -name "*.dtd" \
1837 ! -name "*.html" \
1838 ! -name "*.xul" \
1839 ! -name "*.css" \
1840 ! -name "*.xml" \
1841 ! -name "*.jar" \
1842 ! -name "*.dat" \
1843 ! -name "*.tbl" \
1844 ! -name "*.src" \
1845 ! -name "*.reg" \
1846 $(PLATFORM_EXCLUDE_LIST) \
1847 -exec $(STRIP) $(STRIP_FLAGS) {} >/dev/null 2>&1 \;
1848 endif
1849 endif
1850 @echo "Packaging $(XPI_PKGNAME).xpi..."
1851 cd $(FINAL_TARGET) && $(ZIP) -qr ../$(XPI_PKGNAME).xpi *
1852 endif
1854 ifdef INSTALL_EXTENSION_ID
1855 ifndef XPI_NAME
1856 $(error XPI_NAME must be set for INSTALL_EXTENSION_ID)
1857 endif
1859 libs::
1860 $(RM) -rf "$(DIST)/bin/extensions/$(INSTALL_EXTENSION_ID)"
1861 $(NSINSTALL) -D "$(DIST)/bin/extensions/$(INSTALL_EXTENSION_ID)"
1862 cd $(FINAL_TARGET) && tar $(TAR_CREATE_FLAGS) - . | (cd "../../bin/extensions/$(INSTALL_EXTENSION_ID)" && tar -xf -)
1864 endif
1866 ifneq (,$(filter flat symlink,$(MOZ_CHROME_FILE_FORMAT)))
1867 _JAR_REGCHROME_DISABLE_JAR=1
1868 else
1869 _JAR_REGCHROME_DISABLE_JAR=0
1870 endif
1872 REGCHROME = $(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/add-chrome.pl \
1873 $(if $(filter gtk2,$(MOZ_WIDGET_TOOLKIT)),-x) \
1874 $(if $(CROSS_COMPILE),-o $(OS_ARCH)) $(FINAL_TARGET)/chrome/installed-chrome.txt \
1875 $(_JAR_REGCHROME_DISABLE_JAR)
1877 REGCHROME_INSTALL = $(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/add-chrome.pl \
1878 $(if $(filter gtk2,$(MOZ_WIDGET_TOOLKIT)),-x) \
1879 $(if $(CROSS_COMPILE),-o $(OS_ARCH)) $(DESTDIR)$(mozappdir)/chrome/installed-chrome.txt \
1880 $(_JAR_REGCHROME_DISABLE_JAR)
1883 ################################################################################
1884 # Testing frameworks support
1885 ################################################################################
1887 ifdef ENABLE_TESTS
1889 ifdef XPCSHELL_TESTS
1890 ifndef MODULE
1891 $(error Must define MODULE when defining XPCSHELL_TESTS.)
1892 endif
1894 # Test file installation
1895 libs::
1896 @$(EXIT_ON_ERROR) \
1897 for testdir in $(XPCSHELL_TESTS); do \
1898 $(INSTALL) \
1899 $(srcdir)/$$testdir/*.js \
1900 $(DEPTH)/_tests/xpcshell-simple/$(MODULE)/$$testdir; \
1901 done
1903 # Path formats on Windows are hard. We require a topsrcdir formatted so that
1904 # it may be passed to nsILocalFile.initWithPath (in other words, an absolute
1905 # path of the form X:\path\to\topsrcdir), which we store in NATIVE_TOPSRCDIR.
1906 # We require a forward-slashed path to topsrcdir so that it may be combined
1907 # with a relative forward-slashed path for loading scripts, both dynamically
1908 # and statically for head/test/tail JS files. Of course, on non-Windows none
1909 # of this matters, and things will work correctly because everything's
1910 # forward-slashed, everywhere, always.
1911 ifdef CYGWIN_WRAPPER
1912 NATIVE_TOPSRCDIR := `cygpath -wa $(topsrcdir)`
1913 FWDSLASH_TOPSRCDIR := `cygpath -ma $(topsrcdir)`
1914 else
1915 FWDSLASH_TOPSRCDIR := $(topsrcdir)
1916 ifeq ($(HOST_OS_ARCH),WINNT)
1917 NATIVE_TOPSRCDIR := $(subst /,\\,$(WIN_TOP_SRC))
1918 else
1919 NATIVE_TOPSRCDIR := $(topsrcdir)
1920 endif
1921 endif # CYGWIN_WRAPPER
1923 # Test execution
1924 check::
1925 @$(EXIT_ON_ERROR) \
1926 for testdir in $(XPCSHELL_TESTS); do \
1927 $(RUN_TEST_PROGRAM) \
1928 $(topsrcdir)/tools/test-harness/xpcshell-simple/test_all.sh \
1929 $(DIST)/bin/xpcshell \
1930 $(FWDSLASH_TOPSRCDIR) \
1931 $(NATIVE_TOPSRCDIR) \
1932 $(DEPTH)/_tests/xpcshell-simple/$(MODULE)/$$testdir; \
1933 done
1935 # Test execution
1936 check-interactive::
1937 @$(EXIT_ON_ERROR) \
1938 $(RUN_TEST_PROGRAM) \
1939 $(topsrcdir)/tools/test-harness/xpcshell-simple/test_one.sh \
1940 $(DIST)/bin/xpcshell \
1941 $(FWDSLASH_TOPSRCDIR) \
1942 $(NATIVE_TOPSRCDIR) \
1943 $(DEPTH)/_tests/xpcshell-simple/$(MODULE)/$$testdir \
1944 $(SOLO_FILE) 1;
1946 # Test execution
1947 check-one::
1948 @$(EXIT_ON_ERROR) \
1949 $(RUN_TEST_PROGRAM) \
1950 $(topsrcdir)/tools/test-harness/xpcshell-simple/test_one.sh \
1951 $(DIST)/bin/xpcshell \
1952 $(FWDSLASH_TOPSRCDIR) \
1953 $(NATIVE_TOPSRCDIR) \
1954 $(DEPTH)/_tests/xpcshell-simple/$(MODULE)/$$testdir \
1955 $(SOLO_FILE) 0;
1957 endif # XPCSHELL_TESTS
1959 endif # ENABLE_TESTS
1962 #############################################################################
1963 # Dependency system
1964 #############################################################################
1965 ifdef COMPILER_DEPEND
1966 depend::
1967 @echo "$(MAKE): No need to run depend target.\
1968 Using compiler-based depend." 1>&2
1969 ifeq ($(GNU_CC)$(GNU_CXX),)
1970 # Non-GNU compilers
1971 @echo "`echo '$(MAKE):'|sed 's/./ /g'`"\
1972 '(Compiler-based depend was turned on by "--enable-md".)' 1>&2
1973 else
1974 # GNU compilers
1975 @space="`echo '$(MAKE): '|sed 's/./ /g'`";\
1976 echo "$$space"'Since you are using a GNU compiler,\
1977 it is on by default.' 1>&2; \
1978 echo "$$space"'To turn it off, pass --disable-md to configure.' 1>&2
1979 endif
1981 else # ! COMPILER_DEPEND
1983 ifndef MOZ_AUTO_DEPS
1985 define MAKE_DEPS_NOAUTO
1986 $(MKDEPEND) -w1024 -o'.$(OBJ_SUFFIX)' -f- $(DEFINES) $(ACDEFINES) $(INCLUDES) $< 2>/dev/null | sed -e "s|^[^ ]*/||" > $@
1987 endef
1989 $(MDDEPDIR)/%.pp: %.c
1990 $(REPORT_BUILD)
1991 @$(MAKE_DEPS_NOAUTO)
1993 $(MDDEPDIR)/%.pp: %.cpp
1994 $(REPORT_BUILD)
1995 @$(MAKE_DEPS_NOAUTO)
1997 $(MDDEPDIR)/%.pp: %.s
1998 $(REPORT_BUILD)
1999 @$(MAKE_DEPS_NOAUTO)
2001 ifneq (,$(OBJS)$(XPIDLSRCS)$(SDK_XPIDLSRCS)$(SIMPLE_PROGRAMS))
2002 depend:: $(SUBMAKEFILES) $(MAKE_DIRS) $(MDDEPFILES)
2003 else
2004 depend:: $(SUBMAKEFILES)
2005 endif
2006 +$(LOOP_OVER_DIRS)
2007 +$(LOOP_OVER_TOOL_DIRS)
2009 dependclean:: $(SUBMAKEFILES)
2010 rm -f $(MDDEPFILES)
2011 +$(LOOP_OVER_DIRS)
2012 +$(LOOP_OVER_TOOL_DIRS)
2014 endif # MOZ_AUTO_DEPS
2016 endif # COMPILER_DEPEND
2019 #############################################################################
2020 # MDDEPDIR is the subdirectory where all the dependency files are placed.
2021 # This uses a make rule (instead of a macro) to support parallel
2022 # builds (-jN). If this were done in the LOOP_OVER_DIRS macro, two
2023 # processes could simultaneously try to create the same directory.
2025 $(MDDEPDIR):
2026 @if test ! -d $@; then echo Creating $@; rm -rf $@; mkdir $@; else true; fi
2028 ifneq (,$(filter-out all chrome default export realchrome tools clean clobber clobber_all distclean realclean,$(MAKECMDGOALS)))
2029 ifneq (,$(OBJS)$(XPIDLSRCS)$(SDK_XPIDLSRCS)$(SIMPLE_PROGRAMS))
2030 MDDEPEND_FILES := $(strip $(wildcard $(MDDEPDIR)/*.pp))
2032 ifneq (,$(MDDEPEND_FILES))
2033 ifdef PERL
2034 # The script mddepend.pl checks the dependencies and writes to stdout
2035 # one rule to force out-of-date objects. For example,
2036 # foo.o boo.o: FORCE
2037 # The script has an advantage over including the *.pp files directly
2038 # because it handles the case when header files are removed from the build.
2039 # 'make' would complain that there is no way to build missing headers.
2040 ifeq (,$(MAKE_RESTARTS))
2041 $(MDDEPDIR)/.all.pp: FORCE
2042 @$(PERL) $(BUILD_TOOLS)/mddepend.pl $@ $(MDDEPEND_FILES)
2043 endif
2044 -include $(MDDEPDIR)/.all.pp
2045 else
2046 include $(MDDEPEND_FILES)
2047 endif
2048 endif
2050 endif
2051 endif
2052 #############################################################################
2054 -include $(topsrcdir)/$(MOZ_BUILD_APP)/app-rules.mk
2055 -include $(MY_RULES)
2058 # This speeds up gmake's processing if these files don't exist.
2060 $(MY_CONFIG) $(MY_RULES):
2061 @touch $@
2064 # Generate Emacs tags in a file named TAGS if ETAGS was set in $(MY_CONFIG)
2065 # or in $(MY_RULES)
2067 ifdef ETAGS
2068 ifneq ($(CSRCS)$(CPPSRCS)$(HEADERS),)
2069 all:: TAGS
2070 TAGS:: $(CSRCS) $(CPPSRCS) $(HEADERS)
2071 $(ETAGS) $(CSRCS) $(CPPSRCS) $(HEADERS)
2072 endif
2073 endif
2075 ################################################################################
2076 # Special gmake rules.
2077 ################################################################################
2081 # Disallow parallel builds with MSVC < 8
2083 ifneq (,$(filter 1200 1300 1310,$(_MSC_VER)))
2084 .NOTPARALLEL:
2085 endif
2088 # Re-define the list of default suffixes, so gmake won't have to churn through
2089 # hundreds of built-in suffix rules for stuff we don't need.
2091 .SUFFIXES:
2094 # Fake targets. Always run these rules, even if a file/directory with that
2095 # name already exists.
2097 .PHONY: all all_platforms alltags boot checkout chrome realchrome clean clobber clobber_all export install libs makefiles realclean run_viewer run_apprunner tools $(DIRS) $(TOOL_DIRS) FORCE check check-interactive check-one
2099 # Used as a dependency to force targets to rebuild
2100 FORCE:
2102 # Delete target if error occurs when building target
2103 .DELETE_ON_ERROR:
2105 # Properly set LIBPATTERNS for the platform
2106 .LIBPATTERNS = $(if $(IMPORT_LIB_SUFFIX),$(LIB_PREFIX)%.$(IMPORT_LIB_SUFFIX)) $(LIB_PREFIX)%.$(LIB_SUFFIX) $(DLL_PREFIX)%$(DLL_SUFFIX)
2108 tags: TAGS
2110 TAGS: $(SUBMAKEFILES) $(CSRCS) $(CPPSRCS) $(wildcard *.h)
2111 -etags $(CSRCS) $(CPPSRCS) $(wildcard *.h)
2112 +$(LOOP_OVER_DIRS)
2114 echo-variable-%:
2115 @echo $($*)
2117 echo-tiers:
2118 @echo $(TIERS)
2120 echo-dirs:
2121 @echo $(DIRS)
2123 echo-module:
2124 @echo $(MODULE)
2126 echo-requires:
2127 @echo $(REQUIRES)
2129 echo-requires-recursive::
2130 ifdef _REPORT_ALL_DIRS
2131 @echo $(subst $(topsrcdir)/,,$(srcdir)): $(MODULE): $(REQUIRES)
2132 else
2133 @$(if $(REQUIRES),echo $(subst $(topsrcdir)/,,$(srcdir)): $(MODULE): $(REQUIRES))
2134 endif
2135 +$(LOOP_OVER_DIRS)
2137 echo-depth-path:
2138 @$(topsrcdir)/build/unix/print-depth-path.sh
2140 echo-module-name:
2141 @$(topsrcdir)/build/package/rpm/print-module-name.sh
2143 echo-module-filelist:
2144 @$(topsrcdir)/build/package/rpm/print-module-filelist.sh
2146 showtargs:
2147 ifneq (,$(filter $(PROGRAM) $(HOST_PROGRAM) $(SIMPLE_PROGRAMS) $(HOST_LIBRARY) $(LIBRARY) $(SHARED_LIBRARY),$(TARGETS)))
2148 @echo --------------------------------------------------------------------------------
2149 @echo "PROGRAM = $(PROGRAM)"
2150 @echo "SIMPLE_PROGRAMS = $(SIMPLE_PROGRAMS)"
2151 @echo "LIBRARY = $(LIBRARY)"
2152 @echo "SHARED_LIBRARY = $(SHARED_LIBRARY)"
2153 @echo "SHARED_LIBRARY_LIBS = $(SHARED_LIBRARY_LIBS)"
2154 @echo "LIBS = $(LIBS)"
2155 @echo "DEF_FILE = $(DEF_FILE)"
2156 @echo "IMPORT_LIBRARY = $(IMPORT_LIBRARY)"
2157 @echo "STATIC_LIBS = $(STATIC_LIBS)"
2158 @echo "SHARED_LIBS = $(SHARED_LIBS)"
2159 @echo "EXTRA_DSO_LIBS = $(EXTRA_DSO_LIBS)"
2160 @echo "EXTRA_DSO_LDOPTS = $(EXTRA_DSO_LDOPTS)"
2161 @echo "DEPENDENT_LIBS = $(DEPENDENT_LIBS)"
2162 @echo --------------------------------------------------------------------------------
2163 endif
2164 +$(LOOP_OVER_DIRS)
2166 showbuild:
2167 @echo "MOZ_BUILD_ROOT = $(MOZ_BUILD_ROOT)"
2168 @echo "MOZ_WIDGET_TOOLKIT = $(MOZ_WIDGET_TOOLKIT)"
2169 @echo "CC = $(CC)"
2170 @echo "CXX = $(CXX)"
2171 @echo "CCC = $(CCC)"
2172 @echo "CPP = $(CPP)"
2173 @echo "LD = $(LD)"
2174 @echo "AR = $(AR)"
2175 @echo "IMPLIB = $(IMPLIB)"
2176 @echo "FILTER = $(FILTER)"
2177 @echo "MKSHLIB = $(MKSHLIB)"
2178 @echo "MKCSHLIB = $(MKCSHLIB)"
2179 @echo "RC = $(RC)"
2180 @echo "CFLAGS = $(CFLAGS)"
2181 @echo "OS_CFLAGS = $(OS_CFLAGS)"
2182 @echo "COMPILE_CFLAGS = $(COMPILE_CFLAGS)"
2183 @echo "CXXFLAGS = $(CXXFLAGS)"
2184 @echo "OS_CXXFLAGS = $(OS_CXXFLAGS)"
2185 @echo "COMPILE_CXXFLAGS = $(COMPILE_CXXFLAGS)"
2186 @echo "COMPILE_CMFLAGS = $(COMPILE_CMFLAGS)"
2187 @echo "COMPILE_CMMFLAGS = $(COMPILE_CMMFLAGS)"
2188 @echo "LDFLAGS = $(LDFLAGS)"
2189 @echo "OS_LDFLAGS = $(OS_LDFLAGS)"
2190 @echo "DSO_LDOPTS = $(DSO_LDOPTS)"
2191 @echo "OS_INCLUDES = $(OS_INCLUDES)"
2192 @echo "OS_LIBS = $(OS_LIBS)"
2193 @echo "EXTRA_LIBS = $(EXTRA_LIBS)"
2194 @echo "BIN_FLAGS = $(BIN_FLAGS)"
2195 @echo "INCLUDES = $(INCLUDES)"
2196 @echo "DEFINES = $(DEFINES)"
2197 @echo "ACDEFINES = $(ACDEFINES)"
2198 @echo "BIN_SUFFIX = $(BIN_SUFFIX)"
2199 @echo "LIB_SUFFIX = $(LIB_SUFFIX)"
2200 @echo "DLL_SUFFIX = $(DLL_SUFFIX)"
2201 @echo "IMPORT_LIB_SUFFIX = $(IMPORT_LIB_SUFFIX)"
2202 @echo "INSTALL = $(INSTALL)"
2204 showhost:
2205 @echo "HOST_CC = $(HOST_CC)"
2206 @echo "HOST_CXX = $(HOST_CXX)"
2207 @echo "HOST_CFLAGS = $(HOST_CFLAGS)"
2208 @echo "HOST_LDFLAGS = $(HOST_LDFLAGS)"
2209 @echo "HOST_LIBS = $(HOST_LIBS)"
2210 @echo "HOST_EXTRA_LIBS = $(HOST_EXTRA_LIBS)"
2211 @echo "HOST_EXTRA_DEPS = $(HOST_EXTRA_DEPS)"
2212 @echo "HOST_PROGRAM = $(HOST_PROGRAM)"
2213 @echo "HOST_OBJS = $(HOST_OBJS)"
2214 @echo "HOST_PROGOBJS = $(HOST_PROGOBJS)"
2215 @echo "HOST_LIBRARY = $(HOST_LIBRARY)"
2217 showbuildmods::
2218 @echo "Build Modules = $(BUILD_MODULES)"
2219 @echo "Module dirs = $(BUILD_MODULE_DIRS)"
2221 zipmakes:
2222 ifneq (,$(filter $(PROGRAM) $(SIMPLE_PROGRAMS) $(LIBRARY) $(SHARED_LIBRARY),$(TARGETS)))
2223 zip $(DEPTH)/makefiles $(subst $(topsrcdir),$(MOZ_SRC)/mozilla,$(srcdir)/Makefile.in)
2224 endif
2225 +$(LOOP_OVER_DIRS)
2227 documentation:
2228 @cd $(DEPTH)
2229 $(DOXYGEN) $(DEPTH)/config/doxygen.cfg
2231 check:: $(SUBMAKEFILES) $(MAKE_DIRS)
2232 +$(LOOP_OVER_DIRS)
2233 +$(LOOP_OVER_TOOL_DIRS)