From b60532595a76d993ce7302da4f095c62b6e2391c Mon Sep 17 00:00:00 2001
From: wagerlabs <joelr1@gmail.com>
Date: Thu, 14 Jan 2010 17:36:29 +0000
Subject: [PATCH] static libxul

---
 browser/app/Makefile.in                       |   78 +++++++++++++++++++++++
 browser/components/build/Makefile.in          |    7 ++
 browser/confvars.sh                           |    4 +-
 config/config.mk                              |    2 +
 config/rules.mk                               |    6 ++-
 config/static-config.mk                       |    8 +++
 config/static-rules.mk                        |   20 ++++++
 configure.in                                  |    4 -
 db/sqlite3/src/Makefile.in                    |    4 +
 js/jsd/Makefile.in                            |    2 +
 modules/libpr0n/decoders/icon/Makefile.in     |    8 +++
 modules/libpr0n/decoders/icon/gtk/Makefile.in |    4 +
 toolkit/components/alerts/src/mac/Makefile.in |    3 +-
 toolkit/library/Makefile.in                   |   13 ++++-
 toolkit/toolkit-tiers.mk                      |    2 -
 xpcom/build/Makefile.in                       |    5 +-
 xpcom/stub/Makefile.in                        |   22 +++++++
 xulrunner/app/Makefile.in                     |   83 ++++++++++++++++++++++++-
 xulrunner/app/nsRegisterGRE.h                 |    2 +-
 xulrunner/app/nsRegisterGREUnix.cpp           |    2 +-
 xulrunner/app/nsRegisterGREWin.cpp            |    2 +-
 xulrunner/app/nsXULRunnerApp.cpp              |    3 +-
 xulrunner/confvars.sh                         |    7 ++-
 23 files changed, 271 insertions(+), 20 deletions(-)

diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in
index 3f303cd..15907c9 100644
--- a/browser/app/Makefile.in
+++ b/browser/app/Makefile.in
@@ -103,6 +103,9 @@ else
 STATIC_COMPONENTS_LINKER_PATH = -L$(DEPTH)/staticlib
 endif
 LIBS += $(DEPTH)/toolkit/xre/$(LIB_PREFIX)xulapp_s.$(LIB_SUFFIX)
+ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
+LIBS += -framework SystemConfiguration -framework OpenGL
+endif
 else
 ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 LIBS += $(DIST)/bin/XUL
@@ -115,12 +118,17 @@ ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 TK_LIBS := $(TK_LIBS)
 endif
 
+ifndef BUILD_STATIC_LIBS
 ifdef MOZ_ENABLE_LIBXUL
 APP_XPCOM_LIBS = $(XPCOM_GLUE_LDOPTS)
 else
 MOZILLA_INTERNAL_API = 1
 APP_XPCOM_LIBS = $(XPCOM_LIBS)
 endif
+else
+MOZILLA_INTERNAL_API = 1
+APP_XPCOM_LIBS =
+endif
 
 LIBS += \
 	$(STATIC_COMPONENTS_LINKER_PATH) \
@@ -148,6 +156,24 @@ MOZ_WINCONSOLE = 0
 endif
 endif
 
+ifdef BUILD_STATIC_LIBS
+# dependent libraries
+ifneq (,$(MOZ_ENABLE_GTK2))
+SHARED_LIBRARY_LIBS += \
+  $(DEPTH)/embedding/browser/gtk/src/$(LIB_PREFIX)gtkembedmoz.$(LIB_SUFFIX)
+DEFINES += -DMOZ_ENABLE_GTK2
+endif
+
+SHARED_LIBRARY_LIBS += \
+	$(DEPTH)/toolkit/xre/$(LIB_PREFIX)xulapp_s.$(LIB_SUFFIX) \
+	$(NULL)
+
+SHARED_LIBRARY_LIBS += \
+	$(foreach component,$(COMPONENT_LIBS),$(DEPTH)/staticlib/components/$(LIB_PREFIX)$(component).$(LIB_SUFFIX)) \
+	$(foreach lib,$(STATIC_LIBS),$(DEPTH)/staticlib/$(LIB_PREFIX)$(lib).$(LIB_SUFFIX)) \
+	$(NULL)
+endif
+
 # This switches $(INSTALL) to copy mode, like $(SYSINSTALL), so things that
 # shouldn't get 755 perms need $(IFLAGS1) for either way of calling nsinstall.
 NSDISTMODE = copy
@@ -171,6 +197,54 @@ endif
 ifdef BUILD_STATIC_LIBS
 include $(topsrcdir)/config/static-config.mk
 
+STATIC_EXTRA_LIBS += -lmozz 
+STATIC_CPPSRCS =
+
+ifeq ($(OS_ARCH), Darwin)
+MOZ_OPTIMIZE_LDFLAGS =
+endif
+
+ifdef MOZ_ENABLE_DBUS
+LIBS += $(MOZ_DBUS_GLIB_LIBS)
+endif
+
+ifdef MOZ_PLATFORM_HILDON
+LIBS += $(LIBHILDONMIME_LIBS) $(LIBHILDONFM_LIBS)
+endif 
+
+ifdef MOZ_ENABLE_LIBCONIC
+LIBS += $(LIBCONIC_LIBS)
+endif
+
+ifdef NS_OSSO
+LIBS += $(LIBOSSO_LIBS)
+endif
+
+ifdef MOZ_ENABLE_DBUS
+LIBS += $(MOZ_DBUS_GLIB_LIBS)
+endif
+
+ifdef MOZ_ENABLE_GCONF
+LIBS += $(MOZ_GCONF_LIBS)
+endif
+
+ifdef MOZ_ENABLE_GNOMEVFS
+LIBS += $(MOZ_GNOMEVFS_LIBS)
+endif
+
+ifdef MOZ_ENABLE_LIBNOTIFY
+IBS += $(MOZ_LIBNOTIFY_LIBS)
+endif
+
+ifdef MOZ_ENABLE_GIO
+LIBS += $(MOZ_GIO_LIBS)
+endif
+
+FORCE_LOAD_LIBS= \
+	$(DIST)/lib/$(LIB_PREFIX)xul.$(LIB_SUFFIX) \
+	$(DIST)/lib/$(LIB_PREFIX)xpcom_core.$(LIB_SUFFIX) \
+	$(NULL)
+
 EXTRA_DEPS	+= \
 	$(STATIC_EXTRA_DEPS) \
 	$(NULL)
@@ -224,6 +298,10 @@ include $(topsrcdir)/config/rules.mk
 ifdef BUILD_STATIC_LIBS
 include $(topsrcdir)/config/static-rules.mk
 
+ifeq ($(OS_ARCH),Linux)
+LDFLAGS += -rdynamic
+endif
+
 DEFINES += -DIMPL_XREAPI
 endif
 
diff --git a/browser/components/build/Makefile.in b/browser/components/build/Makefile.in
index 4538754..364ae4f 100644
--- a/browser/components/build/Makefile.in
+++ b/browser/components/build/Makefile.in
@@ -86,4 +86,11 @@ EXTRA_DSO_LDOPTS += $(LIBXUL_DIST)/lib/$(LIB_PREFIX)thebes.$(IMPORT_LIB_SUFFIX)
 endif
 endif
 
+ifdef BUILD_STATIC_LIBS
+ifeq ($(OS_ARCH), Darwin)
+LIBXUL_LIBS=$(XPCOM_FROZEN_LDOPTS) -lobjc
+XPCOM_LIBS=$(XPCOM_FROZEN_LDOPTS) -lobjc
+endif
+endif
+
 include $(topsrcdir)/config/rules.mk
diff --git a/browser/confvars.sh b/browser/confvars.sh
index 56f2986..c381a44 100755
--- a/browser/confvars.sh
+++ b/browser/confvars.sh
@@ -41,7 +41,9 @@ MOZ_UPDATER=1
 MOZ_PHOENIX=1
 
 MOZ_ENABLE_LIBXUL=1
-MOZ_STATIC_BUILD_UNSUPPORTED=1
+BUILD_STATIC_LIBS=1
+MOZ_IPC=
+
 MOZ_PLACES=1
 # always enabled for form history
 MOZ_MORKREADER=1
diff --git a/config/config.mk b/config/config.mk
index 1499cc4..f29c74c 100644
--- a/config/config.mk
+++ b/config/config.mk
@@ -349,6 +349,7 @@ endif
 # Disable PIC if necessary
 #
 
+ifndef BUILD_STATIC_LIBS
 ifndef _ENABLE_PIC
 DSO_CFLAGS=
 ifeq ($(OS_ARCH)_$(HAVE_GCC3_ABI),Darwin_1)
@@ -357,6 +358,7 @@ else
 DSO_PIC_CFLAGS=
 endif
 endif
+endif
 
 ifndef SHARED_LIBRARY_NAME
 ifdef LIBRARY_NAME
diff --git a/config/rules.mk b/config/rules.mk
index 024b34a..a9468c7 100644
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -204,7 +204,11 @@ ifdef CPP_UNIT_TESTS
 CPPSRCS += $(CPP_UNIT_TESTS)
 SIMPLE_PROGRAMS += $(CPP_UNIT_TESTS:.cpp=$(BIN_SUFFIX))
 INCLUDES += -I$(DIST)/include/testing
-LIBS += $(XPCOM_GLUE_LDOPTS) $(NSPR_LIBS)
+ifndef BUILD_STATIC_LIBS
+LIBS += $(XPCOM_GLUE_LDOPTS)
+endif
+LIBS += $(NSPR_LIBS)
+
 
 # ...and run them the usual way
 check::
diff --git a/config/static-config.mk b/config/static-config.mk
index eba4edf..d66b59f 100644
--- a/config/static-config.mk
+++ b/config/static-config.mk
@@ -117,3 +117,11 @@ STATIC_EXTRA_LIBS += $(call EXPAND_LIBNAME,odm cfg)
 endif
 
 LOCAL_INCLUDES += -I$(topsrcdir)/config
+
+# 
+# Force whole loading of static libraries
+#
+
+FORCE_LOAD_CONTENTS = $(addsuffix .contents, $(FORCE_LOAD_LIBS))
+GARBAGE += $(FORCE_LOAD_CONTENTS)
+EXTRA_DEPS += $(FORCE_LOAD_CONTENTS)
diff --git a/config/static-rules.mk b/config/static-rules.mk
index f4842db..d66310a 100644
--- a/config/static-rules.mk
+++ b/config/static-rules.mk
@@ -23,3 +23,23 @@ endif
 ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 LIBS	+= -framework QuickTime -framework IOKit -lcrypto
 endif
+
+# 
+# Force whole loading of static libraries
+#
+
+$(DIST)/lib/$(LIB_PREFIX)%.$(LIB_SUFFIX).contents: $(DIST)/lib/$(LIB_PREFIX)%.$(LIB_SUFFIX)
+	rm -fr $@
+	mkdir $@
+	(cd $@ && $(AR_EXTRACT) ../$<)
+
+ifneq (,$(filter OSF1 BSD_OS FreeBSD NetBSD OpenBSD SunOS Darwin,$(OS_ARCH)))
+CLEANUP1	:= | egrep -v '(________64ELEL_|__.SYMDEF)'
+CLEANUP2	:= rm -f ________64ELEL_ __.SYMDEF
+else
+CLEANUP2	:= true
+endif
+
+FORCE_LOAD_OBJS := $(foreach lib, $(FORCE_LOAD_LIBS), $(addprefix $(lib).contents/, $(shell $(AR_LIST) $(lib) $(CLEANUP1))))
+GARBAGE += $(FORCE_LOAD_OBJS)
+LIBS += $(FORCE_LOAD_OBJS)
diff --git a/configure.in b/configure.in
index 4e572c0..8c8f27d 100644
--- a/configure.in
+++ b/configure.in
@@ -7473,10 +7473,6 @@ if test -n "$MOZ_STATIC_BUILD_UNSUPPORTED" -a -n "$BUILD_STATIC_LIBS"; then
 	AC_MSG_ERROR([--enable-static is not supported for building $MOZ_APP_NAME. You probably want --enable-libxul.])
 fi
 
-if test -n "$MOZ_ENABLE_LIBXUL" -a -n "$BUILD_STATIC_LIBS"; then
-	AC_MSG_ERROR([--enable-libxul is not compatible with --enable-static])
-fi
-
 if test -n "$MOZ_IPC" -a -z "$MOZ_ENABLE_LIBXUL"; then
     AC_MSG_ERROR([--enable-ipc requires --enable-libxul])
 fi
diff --git a/db/sqlite3/src/Makefile.in b/db/sqlite3/src/Makefile.in
index ab01962..efbe68c 100644
--- a/db/sqlite3/src/Makefile.in
+++ b/db/sqlite3/src/Makefile.in
@@ -47,7 +47,11 @@ include $(DEPTH)/config/autoconf.mk
 
 MODULE           = sqlite3
 LIBRARY_NAME     = mozsqlite3
+ifndef BUILD_STATIC_LIBS
 FORCE_SHARED_LIB = 1
+else
+DIST_INSTALL = 1
+endif
 VISIBILITY_FLAGS =
 LIB_IS_C_ONLY    = 1
 
diff --git a/js/jsd/Makefile.in b/js/jsd/Makefile.in
index 79bcee3..5ab4a07 100644
--- a/js/jsd/Makefile.in
+++ b/js/jsd/Makefile.in
@@ -47,7 +47,9 @@ include $(DEPTH)/config/autoconf.mk
 
 MODULE		= jsdebug
 LIBRARY_NAME	= jsd
+ifndef BUILD_STATIC_LIBS
 FORCE_SHARED_LIB= 1
+endif
 ifeq ($(OS_ARCH)$(MOZ_ENABLE_LIBXUL),WINNT)
 LIBRARY_NAME	= jsd$(MOZ_BITS)$(VERSION_NUMBER)
 endif
diff --git a/modules/libpr0n/decoders/icon/Makefile.in b/modules/libpr0n/decoders/icon/Makefile.in
index 2cb4a48..22b82ea 100644
--- a/modules/libpr0n/decoders/icon/Makefile.in
+++ b/modules/libpr0n/decoders/icon/Makefile.in
@@ -56,6 +56,14 @@ LIBXUL_LIBRARY = 1
 EXPORT_LIBRARY = 1
 endif
 
+ifdef BUILD_STATIC_LIBS
+USE_STATIC_LIBS = 1
+FORCE_STATIC_LIB = 1
+FORCE_SHARED_LIB =
+EXPORT_LIBRARY = 1
+MOZILLA_INTERNAL_API = 1
+endif
+
 ifneq (,$(filter qt,$(MOZ_WIDGET_TOOLKIT)))
 EXTRA_DSO_LDOPTS = $(MOZ_QT_LIBS)
 PLATFORM = qt
diff --git a/modules/libpr0n/decoders/icon/gtk/Makefile.in b/modules/libpr0n/decoders/icon/gtk/Makefile.in
index e6a0448..5638f6e 100644
--- a/modules/libpr0n/decoders/icon/gtk/Makefile.in
+++ b/modules/libpr0n/decoders/icon/gtk/Makefile.in
@@ -59,5 +59,9 @@ FORCE_STATIC_LIB = 1
 # This library is used by other shared libs in a static build
 FORCE_USE_PIC = 1
 
+ifdef BUILD_STATIC_LIBS
+MOZILLA_INTERNAL_API = 1
+endif
+
 include $(topsrcdir)/config/rules.mk
 
diff --git a/toolkit/components/alerts/src/mac/Makefile.in b/toolkit/components/alerts/src/mac/Makefile.in
index fb524dc..8a3b76c 100644
--- a/toolkit/components/alerts/src/mac/Makefile.in
+++ b/toolkit/components/alerts/src/mac/Makefile.in
@@ -44,8 +44,9 @@ include $(DEPTH)/config/autoconf.mk
 MODULE = alerts
 LIBRARY_NAME = alerts_s
 IS_COMPONENT = 1
+ifndef BUILD_STATIC_LIBS
 FORCE_SHARED_LIB = 1
-
+endif
 
 CMMSRCS = \
   nsAlertsService.mm \
diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in
index a7db916..77fca82 100644
--- a/toolkit/library/Makefile.in
+++ b/toolkit/library/Makefile.in
@@ -50,9 +50,14 @@ include $(topsrcdir)/intl/unicharutil/util/objs.mk
 MODULE = libxul
 LIBRARY_NAME = xul
 FORCE_USE_PIC = 1
+ifndef BUILD_STATIC_LIBS
 FORCE_SHARED_LIB = 1
+else
+DIST_INSTALL = 1
+endif
 MOZILLA_INTERNAL_API = 1
 
+ifndef BUILD_STATIC_LIBS
 ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa)
 # This is going to be a framework named "XUL", not an ordinary library named
 # "libxul.dylib"
@@ -62,7 +67,7 @@ LIBRARY_NAME=XUL
 # as-is so that dependencies of the form -ltracemalloc still work.
 MAKE_FRAMEWORK=1
 endif
-
+endif
 
 ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
 CPPSRCS += dlldeps-xul.cpp
@@ -76,6 +81,7 @@ ifeq ($(OS_ARCH),OS2)
 CPPSRCS += dlldeps-xul.cpp
 endif
 
+ifndef BUILD_STATIC_LIBS
 # dependent libraries
 ifneq (,$(MOZ_ENABLE_GTK2))
 SHARED_LIBRARY_LIBS += \
@@ -91,6 +97,11 @@ SHARED_LIBRARY_LIBS += \
 	$(foreach component,$(COMPONENT_LIBS),$(DEPTH)/staticlib/components/$(LIB_PREFIX)$(component).$(LIB_SUFFIX)) \
 	$(foreach lib,$(STATIC_LIBS),$(DEPTH)/staticlib/$(LIB_PREFIX)$(lib).$(LIB_SUFFIX)) \
 	$(NULL)
+else
+ifneq (,$(MOZ_ENABLE_GTK2))
+DEFINES += -DMOZ_ENABLE_GTK2
+endif
+endif
 
 ifdef MOZ_JAVAXPCOM
 LOCAL_INCLUDES += \
diff --git a/toolkit/toolkit-tiers.mk b/toolkit/toolkit-tiers.mk
index 012f915..833a7a8 100644
--- a/toolkit/toolkit-tiers.mk
+++ b/toolkit/toolkit-tiers.mk
@@ -228,9 +228,7 @@ tier_toolkit_dirs += embedding/browser/gtk
 endif
 endif
 
-ifndef BUILD_STATIC_LIBS
 tier_toolkit_dirs += toolkit/library
-endif
 
 ifdef MOZ_ENABLE_LIBXUL
 tier_toolkit_dirs += xpcom/stub
diff --git a/xpcom/build/Makefile.in b/xpcom/build/Makefile.in
index be26a29..f6b0416 100644
--- a/xpcom/build/Makefile.in
+++ b/xpcom/build/Makefile.in
@@ -51,9 +51,8 @@ LIBRARY_NAME	= xpcom_core
 SHORT_LIBNAME	= xpcomcor
 LIBXUL_LIBRARY = 1
 
-# This is only a static library in libxul builds
-ifdef MOZ_ENABLE_LIBXUL
-EXPORT_LIBRARY = 1
+ifdef BUILD_STATIC_LIBS
+DIST_INSTALL = 1
 endif
 
 GRE_MODULE	= 1
diff --git a/xpcom/stub/Makefile.in b/xpcom/stub/Makefile.in
index f4f9ee8..cff8afc 100644
--- a/xpcom/stub/Makefile.in
+++ b/xpcom/stub/Makefile.in
@@ -74,12 +74,24 @@ FORCE_SHARED_LIB = 1
 
 EXTRA_DSO_LDOPTS = $(LIBS_DIR)
 
+# Don't want -Wl,-z,defs
+
+ifdef BUILD_STATIC_LIBS
+ifeq ($(OS_TARGET),Linux)
+DSO_LDOPTS = -shared
+endif
+endif
+
 DEPENDENT_LIBS_LIST += \
 	$(LIB_PREFIX)nspr4$(DLL_SUFFIX) \
 	$(LIB_PREFIX)plc4$(DLL_SUFFIX) \
 	$(LIB_PREFIX)plds4$(DLL_SUFFIX) \
 	$(NULL)
 
+ifneq (_, $(BUILD_STATIC_LIBS))
+USE_STATIC_LIBS = 1
+endif
+
 ifdef MOZ_ENABLE_LIBXUL
 
 DEPENDENT_LIBS_LIST += \
@@ -92,6 +104,9 @@ DEPENDENT_LIBS_LIST += \
 	$(LIB_PREFIX)mozjs$(DLL_SUFFIX) \
 	$(NULL)
 
+# We want libxul.a when building static
+
+ifndef BUILD_STATIC_LIBS
 ifeq (bundle,$(MOZ_FS_LAYOUT))
 EXTRA_DSO_LDOPTS += $(DIST)/bin/XUL
 DEPENDENT_LIBS_LIST += XUL
@@ -99,6 +114,7 @@ else
 EXTRA_DSO_LIBS = xul
 DEPENDENT_LIBS_LIST += $(LIB_PREFIX)xul$(DLL_SUFFIX)
 endif
+endif
 
 else #!MOZ_ENABLE_LIBXUL
 
@@ -112,6 +128,12 @@ endif
 
 endif
 
+ifdef BUILD_STATIC_LIBS
+ifeq ($(OS_TARGET),Darwin)
+EXTRA_DSO_LDOPTS += -undefined dynamic_lookup
+endif
+endif
+
 EXTRA_DSO_LDOPTS += $(EXTRA_DSO_LIBS) $(NSPR_LIBS)
 
 include $(topsrcdir)/config/rules.mk
diff --git a/xulrunner/app/Makefile.in b/xulrunner/app/Makefile.in
index d166ed6..2b4389e 100644
--- a/xulrunner/app/Makefile.in
+++ b/xulrunner/app/Makefile.in
@@ -96,6 +96,7 @@ ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 TK_LIBS := -framework Cocoa $(TK_LIBS)
 endif
 
+ifndef BUILD_STATIC_LIBS
 ifndef MOZ_ENABLE_LIBXUL
 ifeq (bundle,$(MOZ_FS_LAYOUT))
 LIBS += $(DIST)/bin/XUL
@@ -103,11 +104,23 @@ else
 EXTRA_DSO_LIBS += xul
 endif
 endif
+else
+MOZILLA_INTERNAL_API = 1
+XPCOM_LIBS = 
+endif
 
 LIBS += \
 	$(EXTRA_DSO_LIBS) \
 	$(MOZ_JS_LIBS) \
-	$(DIST)/lib/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
+	$(NULL)
+
+ifndef BUILD_STATIC_LIBS
+LIBS += $(DIST)/lib/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX)
+else
+LIBS += $(DEPTH)/toolkit/xre/$(LIB_PREFIX)xulapp_s.$(LIB_SUFFIX)
+endif
+
+LIBS += \
 	$(XPCOM_LIBS) \
 	$(NSPR_LIBS) \
 	$(TK_LIBS) \
@@ -147,6 +160,66 @@ WIN32_EXE_LDFLAGS += -ENTRY:wmainCRTStartup
 endif
 endif
 
+ifdef BUILD_STATIC_LIBS
+include $(topsrcdir)/config/static-config.mk
+
+STATIC_EXTRA_LIBS += -lmozz 
+STATIC_CPPSRCS =
+
+ifeq ($(OS_ARCH), Darwin)
+MOZ_OPTIMIZE_LDFLAGS =
+endif
+
+ifdef MOZ_ENABLE_DBUS
+LIBS += $(MOZ_DBUS_GLIB_LIBS)
+endif
+
+ifdef MOZ_PLATFORM_HILDON
+LIBS += $(LIBHILDONMIME_LIBS) $(LIBHILDONFM_LIBS)
+endif 
+
+ifdef MOZ_ENABLE_LIBCONIC
+LIBS += $(LIBCONIC_LIBS)
+endif
+
+ifdef NS_OSSO
+LIBS += $(LIBOSSO_LIBS)
+endif
+
+ifdef MOZ_ENABLE_DBUS
+LIBS += $(MOZ_DBUS_GLIB_LIBS)
+endif
+
+ifdef MOZ_ENABLE_GCONF
+LIBS += $(MOZ_GCONF_LIBS)
+endif
+
+ifdef MOZ_ENABLE_GNOMEVFS
+LIBS += $(MOZ_GNOMEVFS_LIBS)
+endif
+
+ifdef MOZ_ENABLE_LIBNOTIFY
+LIBS += $(MOZ_LIBNOTIFY_LIBS)
+endif
+
+ifdef MOZ_ENABLE_GIO
+LIBS += $(MOZ_GIO_LIBS)
+endif
+
+FORCE_LOAD_LIBS= \
+	$(DIST)/lib/$(LIB_PREFIX)xul.$(LIB_SUFFIX) \
+	$(DIST)/lib/$(LIB_PREFIX)xpcom_core.$(LIB_SUFFIX) \
+	$(NULL)
+
+EXTRA_DEPS	+= \
+	$(STATIC_EXTRA_DEPS) \
+	$(NULL)
+DEFINES		+= $(STATIC_DEFINES)
+CPPSRCS		+= $(STATIC_CPPSRCS)
+EXTRA_DSO_LIBS	+= $(STATIC_EXTRA_DSO_LIBS)
+EXTRA_LIBS	+= $(STATIC_EXTRA_LIBS)
+endif
+
 ifeq ($(OS_ARCH),WINNT)
 OS_LIBS += $(call EXPAND_LIBNAME,comctl32 comdlg32 uuid shell32 ole32 oleaut32 version winspool)
 RCINCLUDE = splash.rc
@@ -177,6 +250,14 @@ LIBS += $(JEMALLOC_LIBS)
 
 include $(topsrcdir)/config/rules.mk
 
+ifdef BUILD_STATIC_LIBS
+include $(topsrcdir)/config/static-rules.mk
+
+ifeq ($(OS_ARCH),Linux)
+LDFLAGS += -rdynamic
+endif
+endif
+
 DEFINES += -DXULRUNNER_ICO=\"$(DIST)/branding/xulrunner.ico\" -DDOCUMENT_ICO=\"$(DIST)/branding/document.ico\"
 
 ifeq ($(MOZ_WIDGET_TOOLKIT),photon)
diff --git a/xulrunner/app/nsRegisterGRE.h b/xulrunner/app/nsRegisterGRE.h
index e4bfd8e..ff0ae1b 100755
--- a/xulrunner/app/nsRegisterGRE.h
+++ b/xulrunner/app/nsRegisterGRE.h
@@ -39,7 +39,7 @@
 #define nsRegisterGRE_h__
 
 #include "nscore.h"
-#include "nsStringAPI.h"
+#include "nsStringGlue.h"
 class nsIFile;
 struct GREProperty;
 
diff --git a/xulrunner/app/nsRegisterGREUnix.cpp b/xulrunner/app/nsRegisterGREUnix.cpp
index 298e5da..932cf3f 100755
--- a/xulrunner/app/nsRegisterGREUnix.cpp
+++ b/xulrunner/app/nsRegisterGREUnix.cpp
@@ -43,7 +43,7 @@
 #include "nsILocalFile.h"
 
 #include "nsAppRunner.h" // for MAXPATHLEN
-#include "nsStringAPI.h"
+#include "nsStringGlue.h"
 #include "nsINIParser.h"
 #include "nsCOMPtr.h"
 
diff --git a/xulrunner/app/nsRegisterGREWin.cpp b/xulrunner/app/nsRegisterGREWin.cpp
index 46e1ef2..5ea1184 100644
--- a/xulrunner/app/nsRegisterGREWin.cpp
+++ b/xulrunner/app/nsRegisterGREWin.cpp
@@ -42,7 +42,7 @@
 #include "nsILocalFile.h"
 
 #include "nsAppRunner.h" // for MAXPATHLEN
-#include "nsStringAPI.h"
+#include "nsStringGlue.h"
 #include "nsXPCOMGlue.h"
 #include "nsCOMPtr.h"
 
diff --git a/xulrunner/app/nsXULRunnerApp.cpp b/xulrunner/app/nsXULRunnerApp.cpp
index 21670d9..c3f02d6 100644
--- a/xulrunner/app/nsXULRunnerApp.cpp
+++ b/xulrunner/app/nsXULRunnerApp.cpp
@@ -50,7 +50,8 @@
 #include "nsCOMPtr.h"
 #include "nsMemory.h"
 #include "nsCRTGlue.h"
-#include "nsStringAPI.h"
+#include "nsStringGlue.h"
+#include "nsXPCOMStrings.h"
 #include "nsServiceManagerUtils.h"
 #include "plstr.h"
 #include "prprf.h"
diff --git a/xulrunner/confvars.sh b/xulrunner/confvars.sh
index 90bcb5b..ad8cb4b 100755
--- a/xulrunner/confvars.sh
+++ b/xulrunner/confvars.sh
@@ -41,9 +41,12 @@ MOZ_APP_DISPLAYNAME=XULRunner
 MOZ_UPDATER=1
 MOZ_XULRUNNER=1
 MOZ_ENABLE_LIBXUL=1
-MOZ_STATIC_BUILD_UNSUPPORTED=1
+MOZ_STATIC_BUILD_UNSUPPORTED=
+BUILD_STATIC_LIBS=1
 MOZ_APP_VERSION=$MOZILLA_VERSION
-MOZ_JAVAXPCOM=1
+MOZ_JAVAXPCOM=
+MOZ_IPC=
+
 if test "$MOZ_STORAGE"; then
   MOZ_PLACES=1
 fi
-- 
1.6.4.1

