--- a/a/nspr/configure	2010-02-08 19:41:35.000000000 +0100
+++ b/b/nspr/configure	2010-06-11 16:35:54.960188991 +0200
@@ -3900,7 +3900,7 @@
     PR_MD_CSRCS=linux.c
     MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
     DSO_CFLAGS=-fPIC
-    DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)'
+    DSO_LDOPTS='-shared -Wl,-z,origin -Wl,-rpath,\$$ORIGIN -Wl,-soname -Wl,$(notdir $@)'
     _OPTIMIZE_FLAGS=-O2
     _DEBUG_FLAGS="-g -fno-inline"  # most people on linux use gcc/gdb, and that
                                    # combo is not yet good at debugging inlined
--- a/a/nss/coreconf/FreeBSD.mk	2009-11-23 05:06:29.000000000 -0500
+++ b/b/nss/coreconf/FreeBSD.mk	2012-08-28 20:27:20.000000000 -0400
@@ -57,6 +57,7 @@
 
 DSO_CFLAGS		= -fPIC
 DSO_LDOPTS		= -shared -Wl,-soname -Wl,$(notdir $@)
+DSO_LDOPTS		+= -Wl,-z,origin '-Wl,-rpath,$$ORIGIN'
 
 #
 # The default implementation strategy for FreeBSD is pthreads.
--- a/a/nss/coreconf/Linux.mk	2010-01-15 23:19:00.000000000 +0100
+++ b/b/nss/coreconf/Linux.mk	2010-06-11 16:35:54.981151732 +0200
@@ -46,8 +46,11 @@
 	IMPL_STRATEGY = _PTH
 endif
 
-CC			= gcc
-CCC			= g++
+# CC is taken from environment automatically.
+#CC			= gcc
+# Use CCC from environment.
+#CCC			= g++
+CCC		= $(CXX)
 RANLIB			= ranlib
 
 DEFAULT_COMPILER = gcc
@@ -147,7 +150,7 @@
 # incorrectly reports undefined references in the libraries we link with, so
 # we don't use -z defs there.
 ZDEFS_FLAG		= -Wl,-z,defs
-DSO_LDOPTS		+= $(if $(findstring 2.11.90.0.8,$(shell ld -v)),,$(ZDEFS_FLAG))
+DSO_LDOPTS		+= $(if $(findstring 2.11.90.0.8,$(shell ld -v)),,$(ZDEFS_FLAG)) -Wl,-z,origin '-Wl,-rpath,$$ORIGIN'
 LDFLAGS			+= $(ARCHFLAG)
 
 # On Maemo, we need to use the -rpath-link flag for even the standard system
@@ -158,8 +161,13 @@
 endif
 endif
 
+ifneq ($(SYSTEM_ZLIB),)
+# Currently (3.12.4) only the tools modutil and signtool are linked with libz
+# If USE_SYSTEM_ZLIB is not set then the tools link statically libzlib.a which
+# is also build in nss.
 USE_SYSTEM_ZLIB = 1
 ZLIB_LIBS = -lz
+endif
 
 # The -rpath '$$ORIGIN' linker option instructs this library to search for its
 # dependencies in the same directory where it resides.
--- a/a/nss/coreconf/SunOS5.mk	2009-06-11 02:55:32.000000000 +0200
+++ b/b/nss/coreconf/SunOS5.mk	2010-06-11 16:35:54.985571182 +0200
@@ -89,8 +89,12 @@
 	    # OPTIMIZER += -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
 	endif
 else
-	CC         = cc
-	CCC        = CC
+# CC is taken from environment automatically.
+#	CC         = cc
+# Use CXX from environment.
+#	CCC        = CC
+        CCC       = $(CXX)
+
 	ASFLAGS   += -Wa,-P
 	OS_CFLAGS += $(NOMD_OS_CFLAGS) $(ARCHFLAG)
 	ifndef BUILD_OPT
--- a/a/nss/coreconf/arch.mk	2009-06-05 04:14:49.000000000 +0200
+++ b/b/nss/coreconf/arch.mk	2010-06-11 16:35:54.990913282 +0200
@@ -324,10 +324,15 @@
 # IMPL_STRATEGY may be defined too.
 #
 
-OBJDIR_NAME = $(OS_TARGET)$(OS_RELEASE)$(CPU_TAG)$(COMPILER_TAG)$(LIBC_TAG)$(IMPL_STRATEGY)$(OBJDIR_TAG).OBJ
+# OBJDIR_NAME is used to build the directory containing the built objects, for 
+# example mozilla/dist/Linux2.6_x86_glibc_PTH_DBG.OBJ
+# We need to deliver the contents of that folder into the solver. To make that easier
+# in the makefile we rename this directory to "out". 
+#OBJDIR_NAME = $(OS_TARGET)$(OS_RELEASE)$(CPU_TAG)$(COMPILER_TAG)$(LIBC_TAG)$(IMPL_STRATEGY)$(OBJDIR_TAG).OBJ
+OBJDIR_NAME = out
 
 ifeq (,$(filter-out WIN%,$(OS_TARGET)))
-ifndef BUILD_OPT
+ifdef THIS_HAS_BEEN_DISABLED_TO_GET_out
 #
 # Define USE_DEBUG_RTL if you want to use the debug runtime library
 # (RTL) in the debug build
--- a/a/nss/coreconf/rules.mk
+++ b/b/nss/coreconf/rules.mk
@@ -293,7 +293,7 @@
 ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
 	$(AR) $(subst /,\\,$(OBJS))
 else
-	$(AR) $(OBJS)
+	$(AR) cr $@ $(OBJS)
 endif
 	$(RANLIB) $@
 
--- a/a/nss/Makefile
+++ b/b/nss/Makefile
@@ -1,3 +1,5 @@
+export AR
+export RANLIB
 #! gmake
 #
 # This Source Code Form is subject to the terms of the Mozilla Public
--- a/a/nss/cmd/platlibs.mk	2010-02-04 19:59:10.000000000 +0100
+++ b/b/nss/cmd/platlibs.mk	2010-06-11 16:35:55.004869805 +0200
@@ -41,17 +41,22 @@
 
 ifeq ($(OS_ARCH), SunOS) 
 ifeq ($(USE_64), 1)
-EXTRA_SHARED_LIBS += -R '$$ORIGIN/../lib:/usr/lib/mps/secv1/64:/usr/lib/mps/64'
+#In OOo we would probable put the executables next to libs
+EXTRA_SHARED_LIBS += -R '$$ORIGIN'
 else
-EXTRA_SHARED_LIBS += -R '$$ORIGIN/../lib:/usr/lib/mps/secv1:/usr/lib/mps'
+EXTRA_SHARED_LIBS += -R '$$ORIGIN'
 endif
 endif
 
+ifeq ($(OS_ARCH), FreeBSD)
+EXTRA_SHARED_LIBS += -Wl,-z,origin -Wl,-rpath,'$$ORIGIN'
+endif
+
 ifeq ($(OS_ARCH), Linux)
 ifeq ($(USE_64), 1)
-EXTRA_SHARED_LIBS += -Wl,-rpath,'$$ORIGIN/../lib64:/opt/sun/private/lib64:$$ORIGIN/../lib'
+EXTRA_SHARED_LIBS += -Wl,-z,origin -Wl,-rpath,'$$ORIGIN'
 else
-EXTRA_SHARED_LIBS += -Wl,-rpath,'$$ORIGIN/../lib:/opt/sun/private/lib'
+EXTRA_SHARED_LIBS += -Wl,-z,origin -Wl,-rpath,'$$ORIGIN'
 endif
 endif