Submitted By: Randy McMurchy Date: 2006-01-20 Initial Package Version: 1.5 Upstream Status: In trunk and firefox-2.0 branch. Origin: https://bugzilla.mozilla.org/show_bug.cgi?id=255408 Description: Fixes the --use-system-nss and --with-nss-prefix switches so that they actually work. This patch allows the Mozilla products to use the system installed versions of NSS and NSPR. diff -Naur mozilla-orig/aclocal.m4 mozilla/aclocal.m4 --- mozilla-orig/aclocal.m4 2004-05-13 03:12:47.000000000 +0000 +++ mozilla/aclocal.m4 2006-01-21 00:57:48.000000000 +0000 @@ -8,6 +8,7 @@ builtin(include, build/autoconf/libIDL.m4)dnl builtin(include, build/autoconf/libIDL-2.m4)dnl builtin(include, build/autoconf/nspr.m4)dnl +builtin(include, build/autoconf/nss.m4)dnl builtin(include, build/autoconf/libart.m4)dnl builtin(include, build/autoconf/pkg.m4)dnl builtin(include, build/autoconf/freetype2.m4)dnl diff -Naur mozilla-orig/build/autoconf/nss.m4 mozilla/build/autoconf/nss.m4 --- mozilla-orig/build/autoconf/nss.m4 1970-01-01 00:00:00.000000000 +0000 +++ mozilla/build/autoconf/nss.m4 2006-01-21 00:57:48.000000000 +0000 @@ -0,0 +1,67 @@ +# -*- tab-width: 4; -*- +# Configure paths for NSS +# Public domain - Chris Seawood 2001-04-05 +# Based upon gtk.m4 (also PD) by Owen Taylor + +dnl AM_PATH_NSS([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for NSS, and define NSS_CFLAGS and NSS_LIBS +AC_DEFUN(AM_PATH_NSS, +[dnl + +AC_ARG_WITH(nss-prefix, + [ --with-nss-prefix=PFX Prefix where NSS is installed], + nss_config_prefix="$withval", + nss_config_prefix="") + +AC_ARG_WITH(nss-exec-prefix, + [ --with-nss-exec-prefix=PFX + Exec prefix where NSS is installed], + nss_config_exec_prefix="$withval", + nss_config_exec_prefix="") + + if test -n "$nss_config_exec_prefix"; then + nss_config_args="$nss_config_args --exec-prefix=$nss_config_exec_prefix" + if test -z "$NSS_CONFIG"; then + NSS_CONFIG=$nss_config_exec_prefix/bin/nss-config + fi + fi + if test -n "$nss_config_prefix"; then + nss_config_args="$nss_config_args --prefix=$nss_config_prefix" + if test -z "$NSS_CONFIG"; then + NSS_CONFIG=$nss_config_prefix/bin/nss-config + fi + fi + + unset ac_cv_path_NSS_CONFIG + AC_PATH_PROG(NSS_CONFIG, nss-config, no) + min_nss_version=ifelse([$1], ,3.0.0,$1) + AC_MSG_CHECKING(for NSS - version >= $min_nss_version (skipping)) + + no_nss="" + if test "$NSS_CONFIG" = "no"; then + no_nss="yes" + else + NSS_CFLAGS=`$NSS_CONFIG $nss_config_args --cflags` + NSS_LIBS=`$NSS_CONFIG $nss_config_args --libs` + + dnl Skip version check for now + nss_config_major_version=`$NSS_CONFIG $nss_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + nss_config_minor_version=`$NSS_CONFIG $nss_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + nss_config_micro_version=`$NSS_CONFIG $nss_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + fi + + if test -z "$no_nss"; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + fi + + + AC_SUBST(NSS_CFLAGS) + AC_SUBST(NSS_LIBS) + +]) diff -Naur mozilla-orig/config/autoconf.mk.in mozilla/config/autoconf.mk.in --- mozilla-orig/config/autoconf.mk.in 2005-08-17 17:17:17.000000000 +0000 +++ mozilla/config/autoconf.mk.in 2006-01-21 00:57:48.000000000 +0000 @@ -229,6 +229,7 @@ MOZ_INSURE_EXCLUDE_DIRS = @MOZ_INSURE_EXCLUDE_DIRS@ MOZ_NATIVE_NSPR = @MOZ_NATIVE_NSPR@ +MOZ_NATIVE_NSS = @MOZ_NATIVE_NSS@ CROSS_COMPILE = @CROSS_COMPILE@ @@ -384,6 +385,48 @@ NSPR_CFLAGS = @NSPR_CFLAGS@ NSPR_LIBS = @NSPR_LIBS@ +NSS_CONFIG = @NSS_CONFIG@ +NSS_CFLAGS = @NSS_CFLAGS@ +NSS_LIBS = @NSS_LIBS@ + +ifdef MOZ_NATIVE_NSS +NSS_DEP_LIBS = \ + $(NULL) +NSS_LIBS += \ + -lcrmf \ + $(NULL) +else +NSS_DEP_LIBS = \ + $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ + $(DIST)/lib/$(DLL_PREFIX)smime3$(DLL_SUFFIX) \ + $(DIST)/lib/$(DLL_PREFIX)ssl3$(DLL_SUFFIX) \ + $(DIST)/lib/$(DLL_PREFIX)nss3$(DLL_SUFFIX) \ + $(DIST)/lib/$(DLL_PREFIX)softokn3$(DLL_SUFFIX) \ + $(NULL) +NSS_LIBS = \ + $(LIBS_DIR) \ + $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ + -lsmime3 \ + -lssl3 \ + -lnss3 \ + -lsoftokn3 \ + $(NULL) +endif + +ifneq (,$(filter OS2 WINNT WINCE, $(OS_ARCH))) +ifndef GNU_CC +ifndef MOZ_NATIVE_NSS +NSS_LIBS = \ + $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ + $(DIST)/lib/$(LIB_PREFIX)smime3.$(IMPORT_LIB_SUFFIX) \ + $(DIST)/lib/$(LIB_PREFIX)ssl3.$(IMPORT_LIB_SUFFIX) \ + $(DIST)/lib/$(LIB_PREFIX)nss3.$(IMPORT_LIB_SUFFIX) \ + $(DIST)/lib/$(LIB_PREFIX)softokn3.$(IMPORT_LIB_SUFFIX) \ + $(NULL) +endif +endif +endif + LDAP_CFLAGS = @LDAP_CFLAGS@ LDAP_LIBS = @LDAP_LIBS@ XPCOM_GLUE_LDOPTS = @XPCOM_GLUE_LDOPTS@ diff -Naur mozilla-orig/config/config.mk mozilla/config/config.mk --- mozilla-orig/config/config.mk 2005-07-28 19:48:11.000000000 +0000 +++ mozilla/config/config.mk 2006-01-21 00:57:48.000000000 +0000 @@ -138,39 +138,6 @@ FINAL_LINK_COMPS = $(DEPTH)/config/final-link-comps FINAL_LINK_COMP_NAMES = $(DEPTH)/config/final-link-comp-names -# -# NSS libs needed for final link in static build -# - -NSS_LIBS = \ - $(LIBS_DIR) \ - $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ - -lsmime3 \ - -lssl3 \ - -lnss3 \ - -lsoftokn3 \ - $(NULL) - -ifneq (,$(filter OS2 WINNT WINCE, $(OS_ARCH))) -ifndef GNU_CC -NSS_LIBS = \ - $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)smime3.$(IMPORT_LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)ssl3.$(IMPORT_LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)nss3.$(IMPORT_LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)softokn3.$(IMPORT_LIB_SUFFIX) \ - $(NULL) -endif -endif - -NSS_DEP_LIBS = \ - $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ - $(DIST)/lib/$(DLL_PREFIX)smime3$(DLL_SUFFIX) \ - $(DIST)/lib/$(DLL_PREFIX)ssl3$(DLL_SUFFIX) \ - $(DIST)/lib/$(DLL_PREFIX)nss3$(DLL_SUFFIX) \ - $(DIST)/lib/$(DLL_PREFIX)softokn3$(DLL_SUFFIX) \ - $(NULL) - MOZ_UNICHARUTIL_LIBS = $(DIST)/lib/$(LIB_PREFIX)unicharutil_s.$(LIB_SUFFIX) MOZ_REGISTRY_LIBS = $(DIST)/lib/$(LIB_PREFIX)mozreg_s.$(LIB_SUFFIX) MOZ_WIDGET_SUPPORT_LIBS = $(DIST)/lib/$(LIB_PREFIX)widgetsupport_s.$(LIB_SUFFIX) diff -Naur mozilla-orig/configure mozilla/configure --- mozilla-orig/configure 2005-10-04 06:01:48.000000000 +0000 +++ mozilla/configure 2006-01-21 00:57:47.000000000 +0000 @@ -44,6 +44,13 @@ --with-nspr-exec-prefix=PFX Exec prefix where NSPR is installed" ac_help="$ac_help + --with-system-nss Use system installed NSS" +ac_help="$ac_help + --with-nss-prefix=PFX Prefix where NSS is installed" +ac_help="$ac_help + --with-nss-exec-prefix=PFX + Exec prefix where NSS is installed" +ac_help="$ac_help --with-system-jpeg[=PFX] Use system libjpeg [installed at prefix PFX]" ac_help="$ac_help @@ -1020,6 +1027,7 @@ MOZPNG=10207 MOZZLIB=1.2.3 NSPR_VERSION=4 +NSS_VERSION=3 GLIB_VERSION=1.2.0 GTK_VERSION=1.2.0 @@ -11300,6 +11308,123 @@ fi fi + +# Check whether --with-system-nss or --without-system-nss was given. +if test "${with_system_nss+set}" = set; then + withval="$with_system_nss" + if test "$withval" = "yes"; then + _USE_SYSTEM_NSS=1 + elif test "$withval" = "no"; then + : + else + { echo "configure: error: Option, system-nss, does not take an argument ($withval)." 1>&2; exit 1; } + fi +fi + + +if test -n "$_USE_SYSTEM_NSS"; then + +# Check whether --with-nss-prefix or --without-nss-prefix was given. +if test "${with_nss_prefix+set}" = set; then + withval="$with_nss_prefix" + nss_config_prefix="$withval" +else + nss_config_prefix="" +fi + + +# Check whether --with-nss-exec-prefix or --without-nss-exec-prefix was given. +if test "${with_nss_exec_prefix+set}" = set; then + withval="$with_nss_exec_prefix" + nss_config_exec_prefix="$withval" +else + nss_config_exec_prefix="" +fi + + + if test -n "$nss_config_exec_prefix"; then + nss_config_args="$nss_config_args --exec-prefix=$nss_config_exec_prefix" + if test -z "$NSS_CONFIG"; then + NSS_CONFIG=$nss_config_exec_prefix/bin/nss-config + fi + fi + if test -n "$nss_config_prefix"; then + nss_config_args="$nss_config_args --prefix=$nss_config_prefix" + if test -z "$NSS_CONFIG"; then + NSS_CONFIG=$nss_config_prefix/bin/nss-config + fi + fi + + unset ac_cv_path_NSS_CONFIG + # Extract the first word of "nss-config", so it can be a program name with args. +set dummy nss-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:11363: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_NSS_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$NSS_CONFIG" in + /*) + ac_cv_path_NSS_CONFIG="$NSS_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_NSS_CONFIG="$NSS_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_NSS_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NSS_CONFIG" && ac_cv_path_NSS_CONFIG="no" + ;; +esac +fi +NSS_CONFIG="$ac_cv_path_NSS_CONFIG" +if test -n "$NSS_CONFIG"; then + echo "$ac_t""$NSS_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + min_nss_version=3.0.0 + echo $ac_n "checking for NSS - version >= $min_nss_version (skipping)""... $ac_c" 1>&6 +echo "configure:11398: checking for NSS - version >= $min_nss_version (skipping)" >&5 + + no_nss="" + if test "$NSS_CONFIG" = "no"; then + no_nss="yes" + else + NSS_CFLAGS=`$NSS_CONFIG $nss_config_args --cflags` + NSS_LIBS=`$NSS_CONFIG $nss_config_args --libs` + + nss_config_major_version=`$NSS_CONFIG $nss_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + nss_config_minor_version=`$NSS_CONFIG $nss_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + nss_config_micro_version=`$NSS_CONFIG $nss_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + fi + + if test -z "$no_nss"; then + echo "$ac_t""yes" 1>&6 + MOZ_NATIVE_NSS=1 + else + echo "$ac_t""no" 1>&6 + fi + + + + + + +fi + if test -z "$SKIP_LIBRARY_CHECKS"; then # Check whether --with-system-jpeg or --without-system-jpeg was given. if test "${with_system_jpeg+set}" = set; then @@ -19473,6 +19598,9 @@ s%@NSPR_CONFIG@%$NSPR_CONFIG%g s%@NSPR_CFLAGS@%$NSPR_CFLAGS%g s%@NSPR_LIBS@%$NSPR_LIBS%g +s%@NSS_CONFIG@%$NSS_CONFIG%g +s%@NSS_CFLAGS@%$NSS_CFLAGS%g +s%@NSS_LIBS@%$NSS_LIBS%g s%@GTK_CONFIG@%$GTK_CONFIG%g s%@GTK_CFLAGS@%$GTK_CFLAGS%g s%@GTK_LIBS@%$GTK_LIBS%g @@ -19753,6 +19881,7 @@ s%@MOZ_PNG_CFLAGS@%$MOZ_PNG_CFLAGS%g s%@MOZ_PNG_LIBS@%$MOZ_PNG_LIBS%g s%@MOZ_NATIVE_NSPR@%$MOZ_NATIVE_NSPR%g +s%@MOZ_NATIVE_NSS@%$MOZ_NATIVE_NSS%g s%@COMPILE_CFLAGS@%$COMPILE_CFLAGS%g s%@COMPILE_CXXFLAGS@%$COMPILE_CXXFLAGS%g s%@CROSS_COMPILE@%$CROSS_COMPILE%g diff -Naur mozilla-orig/configure.in mozilla/configure.in --- mozilla-orig/configure.in 2005-10-04 05:53:49.000000000 +0000 +++ mozilla/configure.in 2006-01-21 00:57:47.000000000 +0000 @@ -86,6 +86,7 @@ MOZPNG=10207 MOZZLIB=1.2.3 NSPR_VERSION=4 +NSS_VERSION=3 dnl Set the minimum version of toolkit libs used by mozilla dnl ======================================================== @@ -3472,6 +3473,19 @@ fi fi +dnl ======================================================== +dnl = If NSS was not detected in the system, +dnl = use the one in the source tree (mozilla/security/nss) +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-nss, +[ --with-system-nss Use system installed NSS], + _USE_SYSTEM_NSS=1 ) + +if test -n "$_USE_SYSTEM_NSS"; then + AM_PATH_NSS(3.0.0, [MOZ_NATIVE_NSS=1], [MOZ_NATIVE_NSS=]) +fi + if test -z "$SKIP_LIBRARY_CHECKS"; then dnl system JPEG support dnl ======================================================== @@ -6698,6 +6712,10 @@ AC_SUBST(NSPR_LIBS) AC_SUBST(MOZ_NATIVE_NSPR) +AC_SUBST(NSS_CFLAGS) +AC_SUBST(NSS_LIBS) +AC_SUBST(MOZ_NATIVE_NSS) + AC_SUBST(CFLAGS) AC_SUBST(CXXFLAGS) AC_SUBST(CPPFLAGS) diff -Naur mozilla-orig/security/manager/Makefile.in mozilla/security/manager/Makefile.in --- mozilla-orig/security/manager/Makefile.in 2005-06-02 02:03:05.000000000 +0000 +++ mozilla/security/manager/Makefile.in 2006-01-21 00:57:48.000000000 +0000 @@ -46,6 +46,8 @@ MODULE = psm PACKAGE_FILE = psm.pkg + +ifndef MOZ_NATIVE_NSS PACKAGE_VARS += \ NSS3_LIB \ SMIME3_LIB \ @@ -57,6 +59,7 @@ $(NULL) LOADABLE_ROOT_MODULE = $(DLL_PREFIX)nssckbi$(DLL_SUFFIX) +endif NSS3_LIB = $(DLL_PREFIX)nss3$(DLL_SUFFIX) SMIME3_LIB = $(DLL_PREFIX)smime3$(DLL_SUFFIX) @@ -147,6 +150,7 @@ export:: .nss.cleaned .nss.cleaned: .nss.checkout +ifndef MOZ_NATIVE_NSS $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) clean $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) clean ifndef SKIP_CHK @@ -154,9 +158,12 @@ $(MAKE) -C $(topsrcdir)/security/nss/cmd/shlibsign $(DEFAULT_GMAKE_FLAGS) clean endif touch $@ +endif .nss.checkout: +ifndef MOZ_NATIVE_NSS touch $(srcdir)/$@ +endif dependclean export packages chrome:: $(MAKE) -C boot $@ @@ -167,12 +174,15 @@ endif libs:: +ifndef MOZ_NATIVE_NSS $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) +endif ifeq ($(OS_ARCH),WINNT) cd $(DIST)/lib; cp -f $(LIB_PREFIX)dbm$(MOZ_BITS).$(LIB_SUFFIX) $(LIB_PREFIX)dbm.$(LIB_SUFFIX) else cd $(DIST)/lib; cp -f $(LIB_PREFIX)mozdbm_s.$(LIB_SUFFIX) $(LIB_PREFIX)dbm.$(LIB_SUFFIX); $(RANLIB) $(LIB_PREFIX)dbm.$(LIB_SUFFIX) endif +ifndef MOZ_NATIVE_NSS $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) ifndef SKIP_CHK $(MAKE) -C $(topsrcdir)/security/nss/cmd/lib $(DEFAULT_GMAKE_FLAGS) @@ -210,6 +220,7 @@ $(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_HYBRID_MODULE) $(DIST)/bin endif endif +endif $(MAKE) -C boot $@ $(MAKE) -C ssl $@ $(MAKE) -C locales $@ @@ -218,6 +229,7 @@ endif install:: +ifndef MOZ_NATIVE_NSS $(SYSINSTALL) -m 755 $(DIST)/lib/$(LOADABLE_ROOT_MODULE) $(DESTDIR)$(mozappdir) ifndef SKIP_CHK $(SYSINSTALL) -m 644 $(DIST)/lib/$(SOFTOKEN3_CHK) $(DESTDIR)$(mozappdir) @@ -232,6 +244,7 @@ $(SYSINSTALL) -m 644 $(DIST)/lib/$(FREEBL_HYBRID_CHK) $(DESTDIR)$(mozappdir) $(SYSINSTALL) -m 755 $(DIST)/lib/$(FREEBL_HYBRID_MODULE) $(DESTDIR)$(mozappdir) endif +endif $(MAKE) -C boot $@ $(MAKE) -C ssl $@ $(MAKE) -C locales $@ @@ -246,15 +259,18 @@ ifdef MOZ_XUL $(MAKE) -C pki $@ endif +ifndef MOZ_NATIVE_NSS $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) clean $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) clean ifndef SKIP_CHK $(MAKE) -C $(topsrcdir)/security/nss/cmd/lib $(DEFAULT_GMAKE_FLAGS) clean $(MAKE) -C $(topsrcdir)/security/nss/cmd/shlibsign $(DEFAULT_GMAKE_FLAGS) clean endif +endif echo-requires-recursive:: $(MAKE) -C boot $@ $(MAKE) -C ssl $@ $(MAKE) -C pki $@ $(MAKE) -C locales $@ + diff -Naur mozilla-orig/security/manager/ssl/src/Makefile.in mozilla/security/manager/ssl/src/Makefile.in --- mozilla-orig/security/manager/ssl/src/Makefile.in 2005-08-03 05:24:18.000000000 +0000 +++ mozilla/security/manager/ssl/src/Makefile.in 2006-01-21 00:57:48.000000000 +0000 @@ -123,8 +123,13 @@ # Use local includes because they are inserted before INCLUDES # so that Mozilla's nss.h is used, not glibc's +ifdef MOZ_NATIVE_NSS +LOCAL_INCLUDES += $(NSS_CFLAGS) \ + $(NULL) +else LOCAL_INCLUDES += -I$(DIST)/public/nss \ $(NULL) +endif EXTRA_DSO_LDOPTS += \ $(MOZ_UNICHARUTIL_LIBS) \ diff -Naur mozilla-orig/security/manager/ssl/src/nsNSSComponent.cpp mozilla/security/manager/ssl/src/nsNSSComponent.cpp --- mozilla-orig/security/manager/ssl/src/nsNSSComponent.cpp 2005-08-26 06:41:50.000000000 +0000 +++ mozilla/security/manager/ssl/src/nsNSSComponent.cpp 2006-01-21 00:57:48.000000000 +0000 @@ -488,14 +488,6 @@ } -#ifdef XP_MAC -#ifdef DEBUG -#define LOADABLE_CERTS_MODULE NS_LITERAL_CSTRING("NSSckbiDebug.shlb") -#else -#define LOADABLE_CERTS_MODULE NS_LITERAL_CSTRING("NSSckbi.shlb") -#endif /*DEBUG*/ -#endif /*XP_MAC*/ - static void setOCSPOptions(nsIPrefBranch * pref); NS_IMETHODIMP @@ -689,40 +681,40 @@ const char *possible_ckbi_locations[] = { NS_GRE_DIR, - NS_XPCOM_CURRENT_PROCESS_DIR + NS_XPCOM_CURRENT_PROCESS_DIR, + 0 }; - + for (size_t il = 0; il < sizeof(possible_ckbi_locations)/sizeof(const char*); ++il) { nsCOMPtr mozFile; - directoryService->Get( possible_ckbi_locations[il], - NS_GET_IID(nsILocalFile), - getter_AddRefs(mozFile)); + char *fullModuleName = nsnull; + + if (!possible_ckbi_locations[il]) + { + fullModuleName = PR_GetLibraryName(nsnull, "nssckbi"); + } + else + { + directoryService->Get( possible_ckbi_locations[il], + NS_GET_IID(nsILocalFile), + getter_AddRefs(mozFile)); - if (!mozFile) { - continue; + if (!mozFile) { + continue; + } + + nsCAutoString processDir; + mozFile->GetNativePath(processDir); + fullModuleName = PR_GetLibraryName(processDir.get(), "nssckbi"); } - char *fullModuleName = nsnull; -#ifdef XP_MAC - nsCAutoString nativePath; - mozFile->AppendNative(NS_LITERAL_CSTRING("Essential Files")); - mozFile->AppendNative(LOADABLE_CERTS_MODULE); - mozFile->GetNativePath(nativePath); - fullModuleName = (char *) nativePath.get(); -#else - nsCAutoString processDir; - mozFile->GetNativePath(processDir); - fullModuleName = PR_GetLibraryName(processDir.get(), "nssckbi"); -#endif /* If a module exists with the same name, delete it. */ NS_ConvertUCS2toUTF8 modNameUTF8(modName); int modType; SECMOD_DeleteModule(NS_CONST_CAST(char*, modNameUTF8.get()), &modType); SECStatus rv_add = SECMOD_AddNewModule(NS_CONST_CAST(char*, modNameUTF8.get()), fullModuleName, 0, 0); -#ifndef XP_MAC - PR_Free(fullModuleName); // allocated by NSPR -#endif + PR_FreeLibraryName(fullModuleName); // allocated by NSPR if (SECSuccess == rv_add) { // found a module, no need to try other directories break;