# 
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
CORE_DEPTH = ..
DEPTH      = ..

# Building softoken (and freebl) only requires that the paths
# to the locations where the util headers and libraries were
# previously installed by a prior util-only build - likely in
# in a system location that varies with the distribution. This
# cannot be addressed here and requires that downstream package
# mantainers add suitable modifications. Building full nss will
# not have that problem as everything is available.

SOFTOKEN_SRCDIRS=
NSS_SRCDIRS=

ifndef NSS_BUILD_UTIL_ONLY
SOFTOKEN_SRCDIRS = \
	$(FREEBL_SRCDIR) \
	$(SQLITE_SRCDIR) \
	$(DBM_SRCDIR) \
	$(SOFTOKEN_SRCDIR) \
	$(NULL)
ifndef NSS_BUILD_SOFTOKEN_ONLY
# the rest of nss
NSS_SRCDIRS = \
	base dev pki \
	$(LIBPKIX_SRCDIR) \
	certdb certhigh pk11wrap cryptohi nss \
	$(ZLIB_SRCDIR) ssl \
	pkcs7 pkcs12 smime \
	crmf jar \
	ckfw $(SYSINIT_SRCDIR) \
	$(NULL)
endif
endif

#
# organized by DLL
#
#  softoken and prereqs.
#  stan (not a separate dll yet)
#  libpkix (not a separate dll)
#  nss base (traditional)
#  ssl
#  smime
#  ckfw (builtins module)
#  crmf jar (not dll's)
DIRS = \
	$(UTIL_SRCDIR) \
	$(SOFTOKEN_SRCDIRS) \
	$(NSS_SRCDIRS) \
	$(NULL)

#  fortcrypt  is no longer built

#
# these dirs are not built at the moment
#
#NOBUILD_DIRS = jar
