More work on shared libraries for NSS.

1. Implemented a way to link all the objects in archive libraries into
   a shared library.  I query each subdirectory for the list of objects
   comprising an archive library (the get_objs makefile target) and link
   these objects as opposed to the archive libraries.  Not all linkers
   support the --whole-archive, -all, or -z allextract options.  The
   *sym.c solution cannot fully control what objects in the archive
   libraries are pulled and what symbols are exported.
2. Moved pkcs7 from libsmime3.so to libnss3.so because certread.c in
   libcerthi.a (part of libnss3.so) depends on some PKCS7 functions,
   which creates a circular dependency between libsmime3.so and libnss3.so.
This should work on all Unix platforms.
This commit is contained in:
wtc%netscape.com 2000-12-28 02:22:33 +00:00
Родитель 261d99acb9
Коммит d8b46439c0
6 изменённых файлов: 41 добавлений и 15 удалений

Просмотреть файл

@ -303,6 +303,9 @@ ifneq ($(POLICY),)
-$(PLCYPATCH) $(PLCYPATCH_ARGS) $@ -$(PLCYPATCH) $(PLCYPATCH_ARGS) $@
endif endif
get_objs:
@echo $(OBJS)
$(LIBRARY): $(OBJS) $(LIBRARY): $(OBJS)
@$(MAKE_OBJDIR) @$(MAKE_OBJDIR)
rm -f $@ rm -f $@
@ -314,6 +317,10 @@ $(IMPORT_LIBRARY): $(SHARED_LIBRARY)
wlib +$(SHARED_LIBRARY) wlib +$(SHARED_LIBRARY)
endif endif
ifdef SHARED_LIBRARY_LIBS
SUB_SHLOBJS = $(foreach dir,$(SHARED_LIBRARY_DIRS),$(addprefix $(dir)/,$(shell $(MAKE) -C $(dir) --no-print-directory get_objs)))
endif
$(SHARED_LIBRARY): $(OBJS) $(SHARED_LIBRARY): $(OBJS)
@$(MAKE_OBJDIR) @$(MAKE_OBJDIR)
rm -f $@ rm -f $@
@ -344,7 +351,7 @@ else
$(LINK_DLL) -MAP $(DLLBASE) $(OBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS) $(LINK_DLL) -MAP $(DLLBASE) $(OBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS)
endif endif
else else
$(MKSHLIB) -o $@ $(OBJS) $(LD_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(MKSHLIB) -o $@ $(OBJS) $(SUB_SHLOBJS) $(LD_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS)
chmod +x $@ chmod +x $@
endif endif
endif endif

Просмотреть файл

@ -33,11 +33,11 @@
CORE_DEPTH = ../.. CORE_DEPTH = ../..
DEPTH = ../.. DEPTH = ../..
DIRS = crmf jar \ DIRS = crmf jar pkcs7 \
certhigh pk11wrap cryptohi \ certhigh pk11wrap cryptohi \
softoken certdb crypto \ softoken certdb crypto \
util freebl nss pkcs12 fortcrypt \ util freebl nss pkcs12 fortcrypt \
base ckfw pkcs7 smime ssl base ckfw smime ssl
# #
# these dirs are not built at the moment # these dirs are not built at the moment
# #

Просмотреть файл

@ -78,25 +78,37 @@ else
# $(PROGRAM) has explicit dependencies on $(EXTRA_LIBS) # $(PROGRAM) has explicit dependencies on $(EXTRA_LIBS)
CRYPTOLIB=$(DIST)/lib/libfreebl.$(LIB_SUFFIX) CRYPTOLIB=$(DIST)/lib/libfreebl.$(LIB_SUFFIX)
CRYPTODIR=../freebl
ifdef MOZILLA_SECURITY_BUILD ifdef MOZILLA_SECURITY_BUILD
CRYPTOLIB=$(DIST)/lib/libcrypto.$(LIB_SUFFIX) CRYPTOLIB=$(DIST)/lib/libcrypto.$(LIB_SUFFIX)
CRYPTODIR=../crypto
endif endif
ifdef MOZILLA_BSAFE_BUILD SHARED_LIBRARY_LIBS = \
CRYPTOLIB+=$(DIST)/lib/libbsafe.$(LIB_SUFFIX) $(DIST)/lib/libpkcs7.$(LIB_SUFFIX) \
CRYPTOLIB+=$(DIST)/lib/libfreebl.$(LIB_SUFFIX)
endif
EXTRA_LIBS += \
$(DIST)/lib/libcerthi.$(LIB_SUFFIX) \ $(DIST)/lib/libcerthi.$(LIB_SUFFIX) \
$(DIST)/lib/libpk11wrap.$(LIB_SUFFIX) \ $(DIST)/lib/libpk11wrap.$(LIB_SUFFIX) \
$(DIST)/lib/libcryptohi.$(LIB_SUFFIX) \ $(DIST)/lib/libcryptohi.$(LIB_SUFFIX) \
$(DIST)/lib/libcerthi.$(LIB_SUFFIX) \
$(DIST)/lib/libpk11wrap.$(LIB_SUFFIX) \
$(DIST)/lib/libsoftoken.$(LIB_SUFFIX) \ $(DIST)/lib/libsoftoken.$(LIB_SUFFIX) \
$(DIST)/lib/libcertdb.$(LIB_SUFFIX) \ $(DIST)/lib/libcertdb.$(LIB_SUFFIX) \
$(CRYPTOLIB) \ $(CRYPTOLIB) \
$(DIST)/lib/libsecutil.$(LIB_SUFFIX) \ $(DIST)/lib/libsecutil.$(LIB_SUFFIX) \
$(NULL)
EXTRA_LIBS += \
$(DIST)/lib/libdbm.$(LIB_SUFFIX) \ $(DIST)/lib/libdbm.$(LIB_SUFFIX) \
$(NULL) $(NULL)
ifdef MOZILLA_BSAFE_BUILD
EXTRA_LIBS+=$(DIST)/lib/libbsafe.$(LIB_SUFFIX)
endif
SHARED_LIBRARY_DIRS = \
../pkcs7 \
../certhigh \
../pk11wrap \
../cryptohi \
../softoken \
../certdb \
$(CRYPTODIR) \
../util \
$(NULL)
# $(PROGRAM) has NO explicit dependencies on $(EXTRA_SHARED_LIBS) # $(PROGRAM) has NO explicit dependencies on $(EXTRA_SHARED_LIBS)
# $(EXTRA_SHARED_LIBS) come before $(OS_LIBS), except on AIX. # $(EXTRA_SHARED_LIBS) come before $(OS_LIBS), except on AIX.
@ -108,3 +120,10 @@ EXTRA_SHARED_LIBS += \
$(NULL) $(NULL)
endif endif
#ifeq ($(OS_ARCH),SunOS)
#MKSHLIB += -z text -M mapfile
#endif
#ifeq ($(OS_ARCH),Linux)
#MKSHLIB += -Wl,--version-script,mapfile
#endif

Просмотреть файл

@ -40,7 +40,6 @@ MODULE = security
CSRCS = \ CSRCS = \
nssinit.c \ nssinit.c \
nsssym.c\
$(NULL) $(NULL)
REQUIRES = security dbm REQUIRES = security dbm

Просмотреть файл

@ -48,7 +48,6 @@ ifeq ($(OS_ARCH), WINNT)
EXTRA_LIBS += \ EXTRA_LIBS += \
$(DIST)/lib/pkcs12.lib \ $(DIST)/lib/pkcs12.lib \
$(DIST)/lib/pkcs7.lib \
$(DIST)/lib/nss3.lib \ $(DIST)/lib/nss3.lib \
$(DIST)/lib/$(NSPR31_LIB_PREFIX)plc4.lib \ $(DIST)/lib/$(NSPR31_LIB_PREFIX)plc4.lib \
$(DIST)/lib/$(NSPR31_LIB_PREFIX)plds4.lib \ $(DIST)/lib/$(NSPR31_LIB_PREFIX)plds4.lib \
@ -59,9 +58,12 @@ else
# $(PROGRAM) has NO explicit dependencies on $(EXTRA_SHARED_LIBS) # $(PROGRAM) has NO explicit dependencies on $(EXTRA_SHARED_LIBS)
# $(EXTRA_SHARED_LIBS) come before $(OS_LIBS), except on AIX. # $(EXTRA_SHARED_LIBS) come before $(OS_LIBS), except on AIX.
EXTRA_LIBS += \ SHARED_LIBRARY_LIBS = \
$(DIST)/lib/libpkcs12.${LIB_SUFFIX} \ $(DIST)/lib/libpkcs12.${LIB_SUFFIX} \
$(DIST)/lib/libpkcs7.${LIB_SUFFIX} \ $(NULL)
SHARED_LIBRARY_DIRS = \
../pkcs12 \
$(NULL) $(NULL)
EXTRA_SHARED_LIBS += \ EXTRA_SHARED_LIBS += \

Просмотреть файл

@ -67,7 +67,6 @@ CSRCS = \
cmsutil.c \ cmsutil.c \
smimemessage.c \ smimemessage.c \
smimeutil.c \ smimeutil.c \
smimesym.c \
$(NULL) $(NULL)
REQUIRES = security dbm REQUIRES = security dbm