Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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/.
6 CC_WRAPPER =
7 CXX_WRAPPER =
9 default::
11 include $(topsrcdir)/config/makefiles/functions.mk
13 NSS_LIBS = \
14 nss3 \
15 nssutil3 \
16 smime3 \
17 ssl3 \
18 $(NULL)
20 ifdef MOZ_FOLD_LIBS
21 NSS_DLLS = $(LIBRARY_NAME)
22 else
23 NSS_DLLS = $(NSS_LIBS)
24 endif
26 NSS_EXTRA_DLLS = \
27 nssckbi \
28 softokn3 \
29 $(NULL)
31 ifndef NSS_DISABLE_DBM
32 NSS_EXTRA_DLLS += nssdbm3
33 endif
35 SDK_LIBS = crmf
37 ifneq (,$(filter WINNT,$(OS_ARCH)))
38 SDK_LIBS += $(NSS_DLLS)
39 endif
41 # Default
42 HAVE_FREEBL_LIBS = 1
44 # 32-bit HP-UX PA-RISC
45 ifeq ($(OS_ARCH), HP-UX)
46 ifneq ($(OS_TEST), ia64)
47 ifndef HAVE_64BIT_OS
48 HAVE_FREEBL_LIBS =
49 HAVE_FREEBL_LIBS_32INT32 = 1
50 HAVE_FREEBL_LIBS_32FPU = 1
51 endif
52 endif
53 endif
55 # SunOS SPARC
56 ifeq ($(OS_ARCH), SunOS)
57 ifneq (86,$(findstring 86,$(OS_TEST)))
58 ifdef HAVE_64BIT_OS
59 HAVE_FREEBL_LIBS =
60 HAVE_FREEBL_LIBS_64 = 1
61 else
62 HAVE_FREEBL_LIBS =
63 HAVE_FREEBL_LIBS_32FPU = 1
64 HAVE_FREEBL_LIBS_32INT64 = 1
65 endif
66 endif
67 endif
69 ifdef HAVE_FREEBL_LIBS
70 NSS_EXTRA_DLLS += freebl3
71 endif
72 ifdef HAVE_FREEBL_LIBS_32INT32
73 NSS_EXTRA_DLLS += freebl_32int_3
74 endif
75 ifdef HAVE_FREEBL_LIBS_32FPU
76 NSS_EXTRA_DLLS += freebl_32fpu_3
77 endif
78 ifdef HAVE_FREEBL_LIBS_32INT64
79 NSS_EXTRA_DLLS += freebl_32int64_3
80 endif
81 ifdef HAVE_FREEBL_LIBS_64
82 NSS_EXTRA_DLLS += freebl_64int_3
83 NSS_EXTRA_DLLS += freebl_64fpu_3
84 endif
86 ABS_DIST := $(abspath $(DIST))
87 ifeq ($(HOST_OS_ARCH),WINNT)
88 ifdef CYGDRIVE_MOUNT
89 ABS_DIST := $(shell cygpath -w $(ABS_DIST) | sed -e 's|\\|/|g')
90 endif
91 ifneq (,$(filter mingw%,$(host_os)))
92 ABS_DIST := $(shell cd $(DIST) && pwd -W)
93 endif
94 endif
95 # For all variables such as DLLFLAGS, that may contain $(DIST)
96 DIST := $(ABS_DIST)
97 NSPR_INCLUDE_DIR = $(firstword $(filter -I%,$(NSPR_CFLAGS)))
98 ifneq (,$(strip $(NSPR_INCLUDE_DIR)))
99 NSPR_INCLUDE_DIR := $(subst -I,,$(subst -I$(DIST),-I$(ABS_DIST),$(NSPR_INCLUDE_DIR)))
100 else
101 NSPR_INCLUDE_DIR = $(ABS_DIST)/include/nspr
102 endif
103 NSPR_LIB_DIR = $(firstword $(filter -L%,$(NSPR_LIBS)))
104 ifneq (,$(strip $(NSPR_LIB_DIR)))
105 NSPR_LIB_DIR := $(subst -L,,$(subst -L$(DIST),-L$(ABS_DIST),$(NSPR_LIB_DIR)))
106 else
107 NSPR_LIB_DIR = $(ABS_DIST)/lib
108 endif
109 # Can't pass this in DEFAULT_GMAKE_FLAGS because that overrides
110 # definitions in NSS, so just export it into the sub-make's environment.
111 ifeq (WINNT_1,$(OS_TARGET)_$(MOZ_MEMORY))
112 export DLLFLAGS
113 endif
115 # To get debug symbols from NSS
116 export MOZ_DEBUG_SYMBOLS
118 DEFAULT_GMAKE_FLAGS =
119 DEFAULT_GMAKE_FLAGS += CC='$(CC)'
120 DEFAULT_GMAKE_FLAGS += SOURCE_MD_DIR=$(ABS_DIST)
121 DEFAULT_GMAKE_FLAGS += SOURCE_MDHEADERS_DIR=$(NSPR_INCLUDE_DIR)
122 DEFAULT_GMAKE_FLAGS += DIST=$(ABS_DIST)
123 DEFAULT_GMAKE_FLAGS += NSPR_INCLUDE_DIR=$(NSPR_INCLUDE_DIR)
124 DEFAULT_GMAKE_FLAGS += NSPR_LIB_DIR=$(NSPR_LIB_DIR)
125 DEFAULT_GMAKE_FLAGS += MOZILLA_CLIENT=1
126 DEFAULT_GMAKE_FLAGS += NO_MDUPDATE=1
127 DEFAULT_GMAKE_FLAGS += NSS_ENABLE_ECC=1
128 ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_1)
129 DEFAULT_GMAKE_FLAGS += OS_DLLFLAGS='-static-libgcc'
130 endif
131 ifndef MOZ_NATIVE_SQLITE
132 ifdef MOZ_FOLD_LIBS
133 DEFAULT_GMAKE_FLAGS += SQLITE_LIB_NAME=nss3
134 else
135 DEFAULT_GMAKE_FLAGS += SQLITE_LIB_NAME=mozsqlite3
136 endif # MOZ_FOLD_LIBS
137 DEFAULT_GMAKE_FLAGS += SQLITE_INCLUDE_DIR=$(ABS_DIST)/include
138 endif
139 ifdef NSS_DISABLE_DBM
140 DEFAULT_GMAKE_FLAGS += NSS_DISABLE_DBM=1
141 endif
142 # Hack to force NSS build system to use "normal" object directories
143 DEFAULT_GMAKE_FLAGS += topsrcdir='$(topsrcdir)'
144 # topsrcdir can't be expanded here because msys path mangling likes to break
145 # paths in that case.
146 DEFAULT_GMAKE_FLAGS += BUILD='$(MOZ_BUILD_ROOT)/security/$$(subst $$(topsrcdir)/security/,,$$(CURDIR))'
147 DEFAULT_GMAKE_FLAGS += BUILD_TREE='$$(BUILD)' OBJDIR='$$(BUILD)' DEPENDENCIES='$$(BUILD)/.deps' SINGLE_SHLIB_DIR='$$(BUILD)'
148 DEFAULT_GMAKE_FLAGS += SOURCE_XP_DIR=$(ABS_DIST)
149 ifndef MOZ_DEBUG
150 DEFAULT_GMAKE_FLAGS += BUILD_OPT=1 OPT_CODE_SIZE=1
151 endif
152 ifdef GNU_CC
153 DEFAULT_GMAKE_FLAGS += NS_USE_GCC=1
154 else
155 DEFAULT_GMAKE_FLAGS += NS_USE_GCC=
156 endif
157 ifdef USE_N32
158 # It is not really necessary to specify USE_PTHREADS=1. USE_PTHREADS
159 # merely adds _PTH to coreconf's OBJDIR name.
160 DEFAULT_GMAKE_FLAGS += USE_N32=1 USE_PTHREADS=1
161 endif
162 ifdef HAVE_64BIT_OS
163 DEFAULT_GMAKE_FLAGS += USE_64=1
164 endif
165 ifeq ($(OS_ARCH),WINNT)
166 DEFAULT_GMAKE_FLAGS += OS_TARGET=WIN95
167 ifdef MOZ_DEBUG
168 ifndef MOZ_NO_DEBUG_RTL
169 DEFAULT_GMAKE_FLAGS += USE_DEBUG_RTL=1
170 endif
171 endif
172 endif # WINNT
173 ifeq ($(OS_ARCH),Darwin)
174 # Make nsinstall use absolute symlinks by default when building NSS
175 # for Mozilla on Mac OS X. (Bugzilla bug 193164)
176 ifndef NSDISTMODE
177 DEFAULT_GMAKE_FLAGS += NSDISTMODE=absolute_symlink
178 endif
179 ifdef MACOS_SDK_DIR
180 DEFAULT_GMAKE_FLAGS += MACOS_SDK_DIR=$(MACOS_SDK_DIR)
181 endif
182 endif
184 # Turn off TLS compression support because it requires system zlib.
185 # See bug 580679 comment 18.
186 DEFAULT_GMAKE_FLAGS += NSS_ENABLE_ZLIB=
188 # Disable building of the test programs in security/nss/lib/zlib
189 DEFAULT_GMAKE_FLAGS += PROGRAMS=
191 # Disable creating .chk files. They will be generated from packager.mk
192 # When bug 681624 lands, we can replace CHECKLOC= with SKIP_SHLIBSIGN=1
193 DEFAULT_GMAKE_FLAGS += CHECKLOC=
195 ifdef CROSS_COMPILE
197 DEFAULT_GMAKE_FLAGS += \
198 NATIVE_CC='$(HOST_CC)' \
199 CC='$(CC)' \
200 CCC='$(CXX)' \
201 LINK='$(LD)' \
202 AS='$(AS)' \
203 AR='$(AR) $(AR_FLAGS:$@=$$@)' \
204 RANLIB='$(RANLIB)' \
205 RC='$(RC) $(RCFLAGS)' \
206 OS_ARCH='$(OS_ARCH)' \
207 OS_TEST='$(OS_TEST)' \
208 CPU_ARCH='$(TARGET_CPU)' \
209 $(NULL)
211 # Android has pthreads integrated into -lc, so OS_PTHREAD is set to nothing
212 ifeq ($(OS_TARGET), Android)
213 DEFAULT_GMAKE_FLAGS += \
214 OS_RELEASE='2.6' \
215 OS_PTHREAD= \
216 $(NULL)
218 DEFAULT_GMAKE_FLAGS += ARCHFLAG='$(CFLAGS) -DCHECK_FORK_GETPID -DRTLD_NOLOAD=0 -include $(topsrcdir)/security/manager/android_stub.h'
219 endif
220 endif
222 ifdef WRAP_LDFLAGS
223 DEFAULT_GMAKE_FLAGS += \
224 LDFLAGS='$(LDFLAGS) $(WRAP_LDFLAGS)' \
225 DSO_LDOPTS='$(DSO_LDOPTS) $(LDFLAGS) $(WRAP_LDFLAGS)' \
226 $(NULL)
227 endif
229 DEFAULT_GMAKE_FLAGS += FREEBL_NO_DEPEND=0
230 ifeq ($(OS_TARGET),Linux)
231 DEFAULT_GMAKE_FLAGS += FREEBL_LOWHASH=1
232 endif
234 ifdef MOZ_NO_WLZDEFS
235 DEFAULT_GMAKE_FLAGS += ZDEFS_FLAG=
236 endif
237 ifdef MOZ_CFLAGS_NSS
238 DEFAULT_GMAKE_FLAGS += XCFLAGS='$(CFLAGS)'
239 DEFAULT_GMAKE_FLAGS += DARWIN_DYLIB_VERSIONS='-compatibility_version 1 -current_version 1 $(LDFLAGS)'
240 endif
242 DEFAULT_GMAKE_FLAGS += NSS_NO_PKCS11_BYPASS=1
244 # Put NSS headers directly under $(DIST)/include
245 DEFAULT_GMAKE_FLAGS += PUBLIC_EXPORT_DIR='$(ABS_DIST)/include/$$(MODULE)'
246 DEFAULT_GMAKE_FLAGS += SOURCE_XPHEADERS_DIR='$$(SOURCE_XP_DIR)/include/$$(MODULE)'
247 DEFAULT_GMAKE_FLAGS += MODULE_INCLUDES='$$(addprefix -I$$(SOURCE_XP_DIR)/include/,$$(REQUIRES))'
249 # Work around NSS's MAKE_OBJDIR being racy. See bug #836220
250 DEFAULT_GMAKE_FLAGS += MAKE_OBJDIR='$$(INSTALL) -D $$(OBJDIR)'
252 # Work around NSS adding IMPORT_LIBRARY to TARGETS with no rule for
253 # it, creating race conditions. See bug #836220
254 DEFAULT_GMAKE_FLAGS += TARGETS='$$(LIBRARY) $$(SHARED_LIBRARY) $$(PROGRAM)'
256 ifdef MOZ_B2G_CERTDATA
257 include $(srcdir)/b2g-certdata.mk
258 endif
260 ifdef MOZ_NSS_PATCH
261 # If we're applying a patch, we'll copy the NSS source to the objdir
262 # and build it from there.
263 NSS_SRCDIR = $(CURDIR)/nss
265 # This will copy and patch the NSS source for every build.
266 # Since we "cp -p", it won't force rebuilds for most files, just
267 # for patched files, but that's easier than trying to track
268 # dependencies for patched files.
269 export::
270 rm -rf $(NSS_SRCDIR)
271 $(NSINSTALL) -D $(NSS_SRCDIR)/security
272 cp -Rp $(topsrcdir)/security/nss $(NSS_SRCDIR)/security
273 cp -Rp $(topsrcdir)/security/coreconf $(NSS_SRCDIR)/security
274 cp -Rp $(topsrcdir)/security/dbm $(NSS_SRCDIR)/security
275 cp -Rp $(topsrcdir)/dbm $(NSS_SRCDIR)
276 (cd $(NSS_SRCDIR) && patch -p1 < $(abspath $(MOZ_NSS_PATCH)))
277 else
278 NSS_SRCDIR = $(topsrcdir)
279 endif
281 NSS_DIRS =
282 ifndef MOZ_FOLD_LIBS
283 NSS_DIRS += nss/lib
284 else
285 ifndef NSS_DISABLE_DBM
286 NSS_DIRS += nss/lib/dbm
287 endif
288 endif
289 NSS_DIRS += \
290 nss/cmd/lib \
291 nss/cmd/shlibsign \
292 $(NULL)
294 ifdef ENABLE_TESTS
295 NSS_DIRS += \
296 nss/cmd/certutil \
297 nss/cmd/pk12util \
298 nss/cmd/modutil \
299 $(NULL)
300 endif
302 ifneq (,$(filter %--build-id,$(LDFLAGS)))
303 DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id
304 endif
306 ifdef MOZ_FOLD_LIBS
307 # TODO: The following can be replaced by something simpler when bug 844880
308 # is fixed.
309 # All static libraries required for nss, smime, ssl and nssutil.
310 # The strip is needed to remove potential linefeed characters, since they hang
311 # around in some cases on Windows.
312 NSS_STATIC_LIBS := $(strip $(shell $(MAKE) --no-print-directory -f $(srcdir)/nss.mk DEPTH='$(DEPTH)' topsrcdir='$(topsrcdir)' srcdir='$(srcdir)' echo-variable-libs))
313 # Corresponding build directories
314 NSS_STATIC_DIRS := $(foreach lib,$(NSS_STATIC_LIBS),$(patsubst %/,%,$(dir $(lib))))
315 NSS_DIRS += $(NSS_STATIC_DIRS)
317 # TODO: The following can be replaced by something simpler when bug 844884
318 # is fixed.
319 # Remaining nss/lib directories
320 NSS_DIRS += nss/lib/freebl nss/lib/softoken nss/lib/jar nss/lib/crmf nss/lib/ckfw nss/lib/libpkix
321 ifeq (WINNT,$(OS_TARGET))
322 NSS_DIRS += nss/lib/zlib
323 endif
324 endif # MOZ_FOLD_LIBS
326 # Filter-out $(LIBRARY_NAME) because it's already handled in config/rules.mk.
327 NSS_DIST_DLL_FILES := $(addprefix $(DIST)/lib/$(DLL_PREFIX),$(addsuffix $(DLL_SUFFIX),$(filter-out $(LIBRARY_NAME),$(NSS_DLLS)) $(NSS_EXTRA_DLLS)))
328 NSS_DIST_DLL_DEST := $(DIST)/bin
329 INSTALL_TARGETS += NSS_DIST_DLL
331 ifeq ($(OS_ARCH)_$(1), SunOS_softokn3)
332 # has to use copy mode on Solaris, see #665509
333 $(DIST)/bin/$(DLL_PREFIX)softokn3$(DLL_SUFFIX): INSTALL := $(INSTALL) -t
334 endif
336 NSS_SDK_LIB_FILES := \
337 $(addprefix $(DIST)/lib/$(LIB_PREFIX),$(addsuffix .$(LIB_SUFFIX),$(SDK_LIBS))) \
338 $(addprefix $(DIST)/bin/$(DLL_PREFIX),$(addsuffix $(DLL_SUFFIX),$(NSS_DLLS))) \
339 $(NULL)
340 NSS_SDK_LIB_DEST := $(DIST)/sdk/lib
341 INSTALL_TARGETS += NSS_SDK_LIB
343 ifdef MOZ_FOLD_LIBS
344 ifeq (WINNT,$(OS_TARGET))
345 SUFFIX = _s.$(LIB_SUFFIX)
346 else
347 SUFFIX = .$(LIB_SUFFIX)
348 endif
350 # Fold NSPR libs
351 EXTRA_DSO_LDOPTS += $(DEPTH)/nsprpub/pr/src/$(LIB_PREFIX)nspr4$(SUFFIX)
352 EXTRA_DSO_LDOPTS += $(DEPTH)/nsprpub/lib/ds/$(LIB_PREFIX)plds4$(SUFFIX)
353 EXTRA_DSO_LDOPTS += $(DEPTH)/nsprpub/lib/libc/src/$(LIB_PREFIX)plc4$(SUFFIX)
355 # Fold SQLite
356 EXTRA_DSO_LDOPTS += $(DEPTH)/db/sqlite3/src/$(LIB_PREFIX)mozsqlite3.$(LIB_SUFFIX)
358 # Add all static libraries for nss, smime, ssl and nssutil
359 SHARED_LIBRARY_LIBS = $(addprefix ../,$(NSS_STATIC_LIBS))
361 ifeq (WINNT,$(OS_TARGET))
362 # Create a .def file based on the various .def files for nss, smime, ssl and
363 # nssutil.
364 NSS_STATIC_LIBS_DEFS := $(wildcard $(addprefix $(srcdir)/../,$(NSS_STATIC_LIBS:.$(LIB_SUFFIX)=.def)))
366 nss3.def: $(NSS_STATIC_LIBS_DEFS) $(DEPTH)/db/sqlite3/src/sqlite-processed.def
367 echo LIBRARY nss3$(DLL_SUFFIX) > $@.tmp
368 echo EXPORTS >> $@.tmp
369 grep -v -h -e ^LIBRARY -e ^EXPORTS -e ^\; $^ >> $@.tmp
370 mv $@.tmp $@
371 endif
373 ifneq (,$(filter WINNT,$(OS_ARCH)))
374 SDK_LIBRARY = $(IMPORT_LIBRARY)
375 else
376 SDK_LIBRARY = $(SHARED_LIBRARY)
377 endif
379 endif # MOZ_FOLD_LIBS
381 include $(topsrcdir)/config/rules.mk
383 ifdef MOZ_FOLD_LIBS
384 # Force the linker to include everything from the static libraries.
385 EXPAND_LIBS_EXEC += --extract
387 $(SHARED_LIBRARY): $(SHARED_LIBRARY_LIBS)
389 EXTRA_DSO_LDOPTS += $(REALTIME_LIBS)
391 ifdef IMPORT_LIB_SUFFIX
392 IMPORT_PREFIX = $(LIB_PREFIX)
393 IMPORT_SUFFIX = .$(IMPORT_LIB_SUFFIX)
394 else
395 IMPORT_PREFIX = $(DLL_PREFIX)
396 IMPORT_SUFFIX = $(DLL_SUFFIX)
397 endif
399 NSPR_IMPORT_LIBS = $(addprefix $(DIST)/lib/$(IMPORT_PREFIX),$(addsuffix $(IMPORT_SUFFIX),nspr4 plc4 plds4))
400 SQLITE_IMPORT_LIB = $(DIST)/lib/$(IMPORT_PREFIX)mozsqlite3$(IMPORT_SUFFIX)
402 # TODO: The following can be replaced by something simpler when bug 844884
403 # is fixed.
404 # Associate target files with the rules that build them.
405 $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX): libs-nss/lib/crmf
406 $(DIST)/lib/$(DLL_PREFIX)freebl3$(DLL_SUFFIX): libs-nss/lib/freebl
407 $(DIST)/lib/$(DLL_PREFIX)nssckbi$(DLL_SUFFIX): libs-nss/lib/ckfw
408 $(DIST)/lib/$(DLL_PREFIX)softokn3$(DLL_SUFFIX): libs-nss/lib/softoken
409 $(DIST)/lib/$(DLL_PREFIX)nssdbm3$(DLL_SUFFIX): libs-nss/lib/softoken
410 $(foreach lib,$(NSS_STATIC_LIBS),$(eval ../$(lib): libs-$(patsubst %/,%,$(dir $(lib)))))
412 # Create fake import libraries for the folded libraries, so that linking
413 # against them works both for the NSS build system (see dependencies below)
414 # and for the rest of the mozilla build system.
415 $(NSPR_IMPORT_LIBS) \
416 $(SQLITE_IMPORT_LIB) \
417 $(DIST)/lib/$(IMPORT_PREFIX)nssutil3$(IMPORT_SUFFIX) \
418 $(DIST)/lib/$(IMPORT_PREFIX)ssl3$(IMPORT_SUFFIX) \
419 $(DIST)/lib/$(IMPORT_PREFIX)smime3$(IMPORT_SUFFIX): $(DIST)/lib/$(IMPORT_PREFIX)nss3$(IMPORT_SUFFIX)
420 ifeq (WINNT,$(OS_TARGET))
421 cp $< $@
422 else
423 ln -sf $< $@
424 endif
426 # Interdependencies between nss sub-directories, and dependencies on NSPR/SQLite
427 libs-nss/lib/ckfw: libs-nss/lib/nss/../base $(NSPR_IMPORT_LIBS)
428 libs-nss/lib/softoken: $(NSPR_IMPORT_LIBS) $(SQLITE_IMPORT_LIB)
429 libs-nss/lib/softoken: libs-nss/lib/freebl
430 ifndef NSS_DISABLE_DBM
431 libs-nss/lib/softoken: libs-nss/lib/dbm
432 endif
433 libs-nss/lib/softoken: $(DIST)/lib/$(IMPORT_PREFIX)nssutil3$(IMPORT_SUFFIX)
434 libs-nss/lib/freebl: $(DIST)/lib/$(IMPORT_PREFIX)nssutil3$(IMPORT_SUFFIX) $(NSPR_IMPORT_LIBS)
436 # For each directory where we build static libraries, force the NSS build system
437 # to only build static libraries.
438 $(addprefix libs-,$(NSS_STATIC_DIRS)): DEFAULT_GMAKE_FLAGS += SHARED_LIBRARY= IMPORT_LIBRARY=
439 else
440 $(NSS_DIST_DLL_FILES) $(NSS_SDK_LIB_FILES): libs-nss/lib
441 endif # MOZ_FOLD_LIBS
443 ifeq ($(NSINSTALL_PY),$(NSINSTALL))
444 DEFAULT_GMAKE_FLAGS += PYTHON='$(PYTHON)'
445 DEFAULT_GMAKE_FLAGS += NSINSTALL_PY='$(abspath $(topsrcdir)/config/nsinstall.py)'
446 DEFAULT_GMAKE_FLAGS += NSINSTALL='$$(PYTHON) $$(NSINSTALL_PY)'
447 else
448 DEFAULT_GMAKE_FLAGS += NSINSTALL='$(NSINSTALL)'
449 endif
450 ifeq ($(OS_ARCH),WINNT)
451 DEFAULT_GMAKE_FLAGS += INSTALL='$$(NSINSTALL) -t'
452 endif
453 DEFAULT_GMAKE_FLAGS += $(EXTRA_GMAKE_FLAGS)
455 $(addprefix libs-,$(NSS_DIRS)): libs-%:
456 # Work around NSS's export rule being racy when recursing for private_export
457 # See bug #836220.
458 $(addprefix export-,$(NSS_DIRS)): EXTRA_GMAKE_FLAGS = PRIVATE_EXPORTS=
459 $(addprefix export-,$(NSS_DIRS)): export-%: private_export-%
460 $(addprefix private_export-,$(NSS_DIRS)): EXTRA_GMAKE_FLAGS =
461 $(addprefix private_export-,$(NSS_DIRS)): private_export-%:
463 # Work around bug #836228 in pymake
464 ifdef .PYMAKE
465 $(foreach p,libs export private_export,$(addprefix $(p)-,$(NSS_DIRS))): *=$(subst $(NULL) $(NULL),-,$(wordlist 2,$(words $(subst -, ,$@)),$(subst -, ,$@)))
466 endif
468 $(foreach p,libs export private_export,$(addprefix $(p)-,$(NSS_DIRS))):
469 $(DEFAULT_GMAKE_ENV) $(MAKE) -C $(NSS_SRCDIR)/security/$* $(@:-$*=) $(DEFAULT_GMAKE_FLAGS)
471 export:: $(addprefix export-,$(NSS_DIRS))
473 $(addprefix clean-,$(NSS_DIRS)): clean-%:
474 $(MAKE) -C $(NSS_SRCDIR)/security/$* $(DEFAULT_GMAKE_FLAGS) clean
476 clean clobber clobber_all realclean distclean depend:: $(addprefix clean-,$(NSS_DIRS))
478 NSS_CMD_TARGETS := $(addprefix libs-,$(filter-out nss/cmd/lib,$(filter nss/cmd/%,$(NSS_DIRS))))
479 libs:: $(NSS_CMD_TARGETS)
481 ifdef MOZ_FOLD_LIBS
482 $(NSS_CMD_TARGETS): $(addprefix $(DIST)/lib/$(IMPORT_PREFIX),$(addsuffix $(IMPORT_SUFFIX),$(NSS_LIBS)))
483 libs-nss/cmd/modutil: libs-nss/lib/jar
484 ifeq (WINNT,$(OS_TARGET))
485 libs-nss/cmd/modutil: libs-nss/lib/zlib
486 endif
487 $(NSS_CMD_TARGETS): libs-nss/cmd/lib
488 else
489 $(NSS_CMD_TARGETS): libs-nss/lib libs-nss/cmd/lib
490 endif # MOZ_FOLD_LIBS
492 # Work around NSS build system race condition creating certdata.c in
493 # security/nss/lib/ckfw/builtins. See bug #836220.
494 libs-nss/lib$(if $(MOZ_FOLD_LIBS),/ckfw): $(call mkdir_deps,../nss/lib/ckfw/builtins)