Bug 950298 - Make the js build system use top-level as its root objdir. r=gps
authorMike Hommey <mh+mozilla@glandium.org>
Tue, 14 Jan 2014 07:38:40 +0900
changeset 163236 1a1968da61b32a7dee6f1c08c15f7de9e825ec77
parent 163235 d2d3bfbb75a677e55535d15f2e110526587a2acf
child 163237 481e4766030eefc867a29701d37007c3796e696b
push id4315
push userkwierso@gmail.com
push dateTue, 14 Jan 2014 04:56:08 +0000
treeherderfx-team@05495edfe4ec [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgps
bugs950298
milestone29.0a1
Bug 950298 - Make the js build system use top-level as its root objdir. r=gps
CLOBBER
Makefile.in
client.mk
config/Makefile.in
config/baseconfig.mk
config/config.mk
config/moz.build
config/rules.mk
config/static-checking-config.mk
js/src/Makefile.in
js/src/aclocal.m4
js/src/build/check-sync-exceptions
js/src/build/msys-perl-wrapper
js/src/build/qemu-wrap
js/src/build/subconfigure.py
js/src/build/unix/add_phony_targets.py
js/src/build/unix/headers/bits/c++config.h
js/src/build/unix/print-failed-commands.sh
js/src/build/unix/uniq.pl
js/src/build/win32/pgomerge.py
js/src/config/Makefile.in
js/src/config/Moz/Milestone.pm
js/src/config/autoconf.mk.in
js/src/config/baseconfig.mk
js/src/config/check-sync-dirs.py
js/src/config/check-sync-exceptions
js/src/config/check_source_count.py
js/src/config/check_spidermonkey_style.py
js/src/config/check_vanilla_allocations.py
js/src/config/config.mk
js/src/config/emptyvars.mk.in
js/src/config/expandlibs.py
js/src/config/expandlibs_config.py
js/src/config/expandlibs_exec.py
js/src/config/expandlibs_gen.py
js/src/config/find_OOM_errors.py
js/src/config/gcc_hidden.h
js/src/config/make-system-wrappers.pl
js/src/config/makefiles/autotargets.mk
js/src/config/makefiles/debugmake.mk
js/src/config/makefiles/functions.mk
js/src/config/makefiles/java-build.mk
js/src/config/makefiles/makeutils.mk
js/src/config/makefiles/mochitest.mk
js/src/config/makefiles/nonrecursive.mk
js/src/config/makefiles/rcs.mk
js/src/config/makefiles/target_binaries.mk
js/src/config/milestone.pl
js/src/config/milestone.txt
js/src/config/moz.build
js/src/config/nsinstall.c
js/src/config/nsinstall.py
js/src/config/pathsub.c
js/src/config/pathsub.h
js/src/config/pythonpath.py
js/src/config/rebuild_check.py
js/src/config/recurse.mk
js/src/config/rules.mk
js/src/config/solaris_ia32.map
js/src/config/static-checking-config.mk
js/src/config/static-checking.js
js/src/config/string-format.js
js/src/config/system-headers
js/src/config/version.mk
js/src/config/version_win.pl
js/src/configure.in
js/src/gdb/Makefile.in
js/src/jsapi-tests/Makefile.in
js/src/make-source-package.sh
js/src/moz.build
js/src/shell/Makefile.in
moz.build
python/mozbuild/mozbuild/backend/recursivemake.py
testing/testsuite-targets.mk
toolkit/mozapps/installer/packager.mk
--- a/CLOBBER
+++ b/CLOBBER
@@ -17,9 +17,9 @@
 #
 # Modifying this file will now automatically clobber the buildbot machines \o/
 #
 
 # Are you updating CLOBBER because you think it's needed for your WebIDL
 # changes to stick? As of bug 928195, this shouldn't be necessary! Please
 # don't change CLOBBER for WebIDL changes any more.
 
-Bug 958185 requires clobber on Android to force a Proguard refresh
+Bug 950298 requires clobber because it changes where nsinstall is picked and it was previously installed there with wrong permissions. Also, the directory where js is built changed.
--- a/Makefile.in
+++ b/Makefile.in
@@ -12,56 +12,71 @@ ifneq ($(make_min_ver),$(firstword $(sor
 $(error GNU Make $(make_min_ver) or higher is required)
 endif
 endif
 
 export TOPLEVEL_BUILD := 1
 
 default::
 
+ifdef MOZ_BUILD_APP
 include $(topsrcdir)/$(MOZ_BUILD_APP)/build.mk
+endif
 
 include $(topsrcdir)/config/config.mk
 
 ifndef LIBXUL_SDK
 ifdef COMPILE_ENVIRONMENT
+ifndef BUILDING_JS
 BUILD_JS = 1
 endif
 endif
+endif
 
 GARBAGE_DIRS += dist _javagen _profile staticlib
 DIST_GARBAGE = config.cache config.log config.status* config-defs.h \
    config/autoconf.mk \
    mozilla-config.h \
    netwerk/necko-config.h xpcom/xpcom-config.h xpcom/xpcom-private.h \
    .mozconfig.mk
 
+ifdef BUILDING_JS
+configure_dir = $(topsrcdir)/js/src
+else
+configure_dir = $(topsrcdir)
+endif
+
 ifndef MOZ_PROFILE_USE
 # We need to explicitly put backend.RecursiveMakeBackend here
 # otherwise the rule in rules.mk doesn't run early enough.
-libs binaries export tools:: CLOBBER $(topsrcdir)/configure config.status backend.RecursiveMakeBackend
+libs binaries export tools:: CLOBBER $(configure_dir)/configure config.status backend.RecursiveMakeBackend
 ifdef BUILD_JS
 libs binaries export tools:: js-config-status
 endif
 endif
 
+ifdef BUILDING_JS
+.PHONY: CLOBBER
+CLOBBER:
+else
 CLOBBER: $(topsrcdir)/CLOBBER
 	@echo 'STOP!  The CLOBBER file has changed.'
 	@echo 'Please run the build through a sanctioned build wrapper, such as'
 	@echo '"mach build" or client.mk.'
 	@exit 1
+endif
 
-$(topsrcdir)/configure: $(topsrcdir)/configure.in
+$(configure_dir)/configure: $(configure_dir)/configure.in
 	@echo 'STOP!  configure.in has changed, and your configure is out of date.'
 	@echo 'Please rerun autoconf and re-configure your build directory.'
 	@echo 'To ignore this message, touch "configure" in the source directory,'
 	@echo 'but your build might not succeed.'
 	@exit 1
 
-config.status: $(topsrcdir)/configure
+config.status: $(configure_dir)/configure
 	@echo 'STOP!  configure has changed and needs to be run in this build directory.'
 	@echo 'Please rerun configure.'
 	@echo 'To ignore this message, touch "config.status" in the build directory,'
 	@echo 'but your build might not succeed.'
 	@exit 1
 
 # Regenerate the build backend if it is out of date. We only have this rule in
 # this main make file because having it in rules.mk and applied to partial tree
@@ -85,28 +100,40 @@ ifdef BUILD_JS
 .PHONY: js-config-status
 js-config-status:
 	$(call SUBMAKE,backend.RecursiveMakeBackend,js/src,1)
 endif
 
 install_manifests := bin idl include public private sdk
 install_manifest_depends = \
   CLOBBER \
-  $(topsrcdir)/configure \
+  $(configure_dir)/configure \
   config.status \
   backend.RecursiveMakeBackend \
   $(NULL)
 
 ifdef BUILD_JS
 install_manifest_depends += js-config-status
 endif
 
 .PHONY: install-manifests
 install-manifests: $(addprefix install-dist-,$(install_manifests))
 
+# process_install_manifest needs to be invoked with --no-remove when building
+# js as standalone because automated builds are building nspr separately and
+# that would remove the resulting files. It is also necessary when building
+# js as part of gecko because that would remove the files exported from gecko.
+# Eventually, a standalone js build would just be able to build nspr itself,
+# removing the need for the former. But that won't likely happen before
+# finishing to merge gecko and js build systems, removing the need for the
+# latter.
+ifdef BUILDING_JS
+NO_REMOVE=1
+endif
+
 .PHONY: $(addprefix install-dist-,$(install_manifests))
 $(addprefix install-dist-,$(install_manifests)): install-dist-%: $(install_manifest_depends)
 	$(call py_action,process_install_manifest,$(if $(NO_REMOVE),--no-remove )$(DIST)/$* _build_manifests/install/dist_$* $(if $(BUILD_JS),js/src/_build_manifests/install/dist_$*))
 
 .PHONY: install-tests
 install-manifests: install-tests
 install-tests: $(install_manifest_depends)
 	$(call py_action,process_install_manifest,$(if $(NO_REMOVE),--no-remove )_tests _build_manifests/install/tests $(if $(BUILD_JS),js/src/_build_manifests/install/tests))
@@ -134,20 +161,22 @@ export:: install-manifests
 binaries::
 	@$(MAKE) install-manifests NO_REMOVE=1
 endif
 
 # For historical reasons that are unknown, $(DIST)/sdk is always blown away
 # with no regard for PGO passes. This decision could probably be revisited.
 export:: install-dist-sdk
 
+ifndef BUILDING_JS
 ifdef ENABLE_TESTS
 # Additional makefile targets to call automated test suites
 include $(topsrcdir)/testing/testsuite-targets.mk
 endif
+endif
 
 default all::
 	$(call BUILDSTATUS,TIERS export $(if $(COMPILE_ENVIRONMENT),$(if $(MOZ_PSEUDO_DERECURSE),compile ))libs tools)
 
 include $(topsrcdir)/config/rules.mk
 
 distclean::
 	$(RM) $(DIST_GARBAGE)
@@ -176,16 +205,17 @@ endif
 ifeq (,$(filter-out Linux SunOS,$(OS_ARCH)))
 MAKE_SYM_STORE_ARGS := -c --vcs-info
 DUMP_SYMS_BIN ?= $(DIST)/host/bin/dump_syms
 MAKE_SYM_STORE_PATH := $(DIST)/bin
 endif
 
 SYM_STORE_SOURCE_DIRS := $(topsrcdir)
 
+ifndef BUILDING_JS
 include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk
 
 ifdef MOZ_SYMBOLS_EXTRA_BUILDID
 EXTRA_BUILDID := -$(MOZ_SYMBOLS_EXTRA_BUILDID)
 endif
 
 SYMBOL_INDEX_NAME = \
   $(MOZ_APP_NAME)-$(MOZ_APP_VERSION)-$(OS_TARGET)-$(BUILDID)-$(CPU_ARCH)$(EXTRA_BUILDID)-symbols.txt
@@ -220,16 +250,17 @@ ifdef MOZ_CRASHREPORTER
 	$(SHELL) $(topsrcdir)/toolkit/crashreporter/tools/upload_symbols.sh $(SYMBOL_INDEX_NAME) '$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip'
 endif
 
 # MOZ_SOURCE_STAMP is defined in package-name.mk with a deferred assignment.
 # exporting it makes make run its $(shell) command for each invoked submake,
 # so transform it to an immediate assignment.
 MOZ_SOURCE_STAMP := $(MOZ_SOURCE_STAMP)
 export MOZ_SOURCE_STAMP
+endif
 
 #XXX: this is a hack, since we don't want to clobber for MSVC
 # PGO support, but we can't do this test in client.mk
 ifneq ($(OS_ARCH)_$(GNU_CC), WINNT_)
 # No point in clobbering if PGO has been explicitly disabled.
 ifndef NO_PROFILE_GUIDED_OPTIMIZE
 maybe_clobber_profiledbuild: clean
 else
@@ -245,21 +276,37 @@ endif
 
 # Look for R_386_PC32 relocations in shared libs, these
 # break x86_64 builds and SELinux users.
 ifeq ($(OS_TARGET)_$(TARGET_XPCOM_ABI),Linux_x86-gcc3)
 check::
 	@relcount=`find $(DIST)/bin -name '*.so' | xargs objdump -R | grep R_386_PC32 | wc -l` && if test $$relcount -gt 0; then echo 'FAILED: R_386_PC32 relocations detected in a shared library.  Did you use a system header without adding it to config/system-headers?'; exit 1; else echo 'PASSED'; fi
 endif
 
+ifdef BUILDING_JS
+# Delegate js-specific rules to js
+check-%:
+	$(MAKE) -C js/src $@
+
+source-package install:
+	$(MAKE) -C js/src $@
+
+# Every export rule depends on config/export, but the rule for config/export
+# doesn't exist when building js non-standalone.
+.PHONY: config/export
+config/export:
+
+else
+
 ifdef BUILD_JS
 js/src/Makefile: subsrcdir := js/src
 
 ifdef MOZ_PSEUDO_DERECURSE
 # Interdependencies for parallel export.
 js/xpconnect/src/export: dom/bindings/export xpcom/xpidl/export
 accessible/src/xpcom/export: xpcom/xpidl/export
 js/src/export: mfbt/export
 ifdef ENABLE_CLANG_PLUGIN
 js/src/export config/export: build/clang-plugin/export
 endif
 endif
 endif
+endif
--- a/client.mk
+++ b/client.mk
@@ -307,27 +307,25 @@ CONFIG_CACHE  = $(wildcard $(OBJDIR)/con
 
 EXTRA_CONFIG_DEPS := \
   $(TOPSRCDIR)/aclocal.m4 \
   $(wildcard $(TOPSRCDIR)/build/autoconf/*.m4) \
   $(TOPSRCDIR)/js/src/aclocal.m4 \
   $(NULL)
 
 $(CONFIGURES): %: %.in $(EXTRA_CONFIG_DEPS)
-	@$(PYTHON) $(TOPSRCDIR)/js/src/config/check-sync-dirs.py $(TOPSRCDIR)/js/src/build $(TOPSRCDIR)/build
 	@echo Generating $@ using autoconf
 	cd $(@D); $(AUTOCONF)
 
 CONFIG_STATUS_DEPS := \
   $(wildcard $(TOPSRCDIR)/*/confvars.sh) \
   $(CONFIGURES) \
   $(TOPSRCDIR)/CLOBBER \
   $(TOPSRCDIR)/nsprpub/configure \
   $(TOPSRCDIR)/config/milestone.txt \
-  $(TOPSRCDIR)/js/src/config/milestone.txt \
   $(TOPSRCDIR)/browser/config/version.txt \
   $(TOPSRCDIR)/build/virtualenv_packages.txt \
   $(TOPSRCDIR)/python/mozbuild/mozbuild/virtualenv.py \
   $(TOPSRCDIR)/testing/mozbase/packages.txt \
   $(NULL)
 
 CONFIGURE_ENV_ARGS += \
   MAKE='$(MAKE)' \
@@ -391,17 +389,17 @@ ifdef MOZ_PREFLIGHT
 	for mkfile in $(MOZ_PREFLIGHT); do \
 	  $(MAKE) -f $(TOPSRCDIR)/$$mkfile preflight TOPSRCDIR=$(TOPSRCDIR) OBJDIR=$(OBJDIR) MOZ_OBJDIR=$(MOZ_OBJDIR); \
 	done
 endif
 
 ####################################
 # Build it
 
-realbuild::  $(OBJDIR)/Makefile $(OBJDIR)/config.status check-sync-dirs-config
+realbuild::  $(OBJDIR)/Makefile $(OBJDIR)/config.status
 	$(MOZ_MAKE)
 
 ####################################
 # Other targets
 
 # Pass these target onto the real build system
 $(OBJDIR_TARGETS):: $(OBJDIR)/Makefile $(OBJDIR)/config.status
 	$(MOZ_MAKE) $@
@@ -449,35 +447,16 @@ cleansrcdir:
 	else \
 	  echo 'Removing object files from srcdir...'; \
 	  rm -fr `find . -type d \( -name .deps -print -o -name CVS \
 	          -o -exec test ! -d {}/CVS \; \) -prune \
 	          -o \( -name '*.[ao]' -o -name '*.so' \) -type f -print`; \
 	   build/autoconf/clean-config.sh; \
 	fi;
 
-# Because SpiderMonkey can be distributed and built independently
-# of the Mozilla source tree, it contains its own copies of many of
-# the files used by the top-level Mozilla build process, from the
-# 'config' and 'build' subtrees.
-#
-# To make it simpler to keep the copies in sync, we follow the policy
-# that the SpiderMonkey copies must always be exact copies of those in
-# the containing Mozilla tree.  If you've made a change in one, it
-# belongs in the other as well.  If the change isn't right for both
-# places, then that's something to bring up with the other developers.
-#
-# Some files are reasonable to diverge; for  example,
-# js/src/config/autoconf.mk.in doesn't need most of the stuff in
-# config/autoconf.mk.in.
-.PHONY: check-sync-dirs
-check-sync-dirs: check-sync-dirs-build check-sync-dirs-config
-check-sync-dirs-%:
-	@$(PYTHON) $(TOPSRCDIR)/js/src/config/check-sync-dirs.py $(TOPSRCDIR)/js/src/$* $(TOPSRCDIR)/$*
-
 echo-variable-%:
 	@echo $($*)
 
 # This makefile doesn't support parallel execution. It does pass
 # MOZ_MAKE_FLAGS to sub-make processes, so they will correctly execute
 # in parallel.
 .NOTPARALLEL:
 
--- a/config/Makefile.in
+++ b/config/Makefile.in
@@ -22,44 +22,48 @@ include $(topsrcdir)/config/config.mk
 
 ifneq (WINNT,$(HOST_OS_ARCH))
 ifdef COMPILE_ENVIRONMENT
 # Ensure nsinstall is atomically created
 nsinstall$(HOST_BIN_SUFFIX): $(HOST_PROGRAM)
 	cp $^ $@.tmp
 	mv $@.tmp $@
 
-NSINSTALL_FILES := nsinstall$(HOST_BIN_SUFFIX)
+NSINSTALL_EXECUTABLES := nsinstall$(HOST_BIN_SUFFIX)
 NSINSTALL_DEST := $(DIST)/bin
 NSINSTALL_TARGET := export
 INSTALL_TARGETS += NSINSTALL
 endif
 endif
 
+ifndef BUILDING_JS
 HEADERS_FILES = \
 	$(DEPTH)/mozilla-config.h \
 	$(NULL)
 HEADERS_DEST := $(DIST)/include
 HEADERS_TARGET := export
 INSTALL_TARGETS += HEADERS
+endif
 
 PYTHON_UNIT_TESTS := $(wildcard $(srcdir)/tests/unit-*.py)
 
 include $(topsrcdir)/config/rules.mk
 
 HOST_CFLAGS += -DUNICODE -D_UNICODE
 
+ifndef BUILDING_JS
 # Generate a new buildid every time we "export" in config... that's only
 # supposed to be once per-build!
 export::
 ifdef MOZ_BUILD_DATE
 	printf '%s' $(MOZ_BUILD_DATE) > buildid
 else
 	$(PYTHON) $(topsrcdir)/toolkit/xre/make-platformini.py --print-buildid > buildid
 endif
+endif
 
 ifdef WRAP_SYSTEM_INCLUDES
 export-preqs = \
   $(call mkdir_deps,system_wrappers) \
   $(NULL)
 
 export:: $(export-preqs)
 	$(PYTHON) -m mozbuild.action.preprocessor $(DEFINES) $(ACDEFINES) \
@@ -103,20 +107,20 @@ GARBAGE += $(STL_WRAPPERS_SENTINEL)
 GARBAGE_DIRS += stl_wrappers
 endif
 
 GARBAGE += \
   $(FINAL_LINK_COMPS) $(FINAL_LINK_LIBS) $(FINAL_LINK_COMP_NAMES) buildid $(srcdir)/*.pyc *.pyc
 
 FORCE:
 
-check-preqs = \
-  check-jar-mn \
-  check-makefiles \
-  $(NULL)
+ifndef BUILDING_JS
+check-preqs += check-jar-mn
+endif
+check-preqs += check-makefiles
 
 check:: $(check-preqs)
 
 check-jar-mn::
 	$(MAKE) -C tests/src-simple check-jar
 	$(MAKE) -C tests/src-simple check-flat
 	$(MAKE) -C tests/src-simple check-flat USE_EXTENSION_MANIFEST=1
 ifneq (,$(filter-out WINNT OS2,$(OS_ARCH)))
--- a/config/baseconfig.mk
+++ b/config/baseconfig.mk
@@ -1,13 +1,24 @@
 includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
 idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
 installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
 sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
-DIST = $(DEPTH)/dist
+ifndef TOP_DIST
+TOP_DIST = dist
+endif
+ifneq (,$(filter /%,$(TOP_DIST)))
+DIST = $(TOP_DIST)
+else
+ifeq (.,$(DEPTH))
+DIST = $(TOP_DIST)
+else
+DIST = $(DEPTH)/$(TOP_DIST)
+endif
+endif
 
 # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't
 # manually use it before config.mk inclusion
 _OBJ_SUFFIX := $(OBJ_SUFFIX)
 OBJ_SUFFIX = $(error config/config.mk needs to be included before using OBJ_SUFFIX)
 
 ifeq ($(HOST_OS_ARCH),WINNT)
 # We only support building with pymake or a non-msys gnu make version
--- a/config/config.mk
+++ b/config/config.mk
@@ -712,17 +712,17 @@ ifdef NSINSTALL_BIN
 NSINSTALL = $(NSINSTALL_BIN)
 else
 ifeq (OS2,$(CROSS_COMPILE)$(OS_ARCH))
 NSINSTALL = $(MOZ_TOOLS_DIR)/nsinstall
 else
 ifeq ($(HOST_OS_ARCH),WINNT)
 NSINSTALL = $(NSINSTALL_PY)
 else
-NSINSTALL = $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX)
+NSINSTALL = $(DIST)/bin/nsinstall$(HOST_BIN_SUFFIX)
 endif # WINNT
 endif # OS2
 endif # NSINSTALL_BIN
 
 
 ifeq (,$(CROSS_COMPILE)$(filter-out WINNT OS2, $(OS_ARCH)))
 INSTALL = $(NSINSTALL) -t
 ifdef .PYMAKE
--- a/config/moz.build
+++ b/config/moz.build
@@ -5,19 +5,17 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 NO_DIST_INSTALL = True
 # For sanity's sake, we compile nsinstall without the wrapped system
 # headers, so that we can use it to set up the wrapped system headers.
 NO_VISIBILITY_FLAGS = True
 
 CONFIGURE_SUBST_FILES += [
-    'autoconf.mk',
     'doxygen.cfg',
-    'emptyvars.mk',
     'makefiles/test/Makefile',
     'tests/makefiles/autodeps/Makefile',
     'tests/src-simple/Makefile',
 ]
 
 if CONFIG['HOST_OS_ARCH'] != 'WINNT':
     HOST_SOURCES += [
         'nsinstall.c',
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -359,16 +359,20 @@ endif
 
 ifdef MOZ_UPDATE_XTERM
 # Its good not to have a newline at the end of the titlebar string because it
 # makes the make -s output easier to read.  Echo -n does not work on all
 # platforms, but we can trick printf into doing it.
 UPDATE_TITLE = printf '\033]0;%s in %s\007' $(1) $(relativesrcdir)/$(2) ;
 endif
 
+ifdef BUILDING_JS
+NO_BUILDSTATUS_MESSAGES=1
+endif
+
 ifdef MACH
 ifndef NO_BUILDSTATUS_MESSAGES
 define BUILDSTATUS
 @echo 'BUILDSTATUS $1'
 
 endef
 endif
 endif
@@ -1448,19 +1452,19 @@ endif
 # which the files and executables are installed. Default is "libs".
 #
 # Finally, a FOO_KEEP_PATH variable may be set to 1 to indicate the paths given
 # in FOO_FILES/FOO_EXECUTABLES are to be kept at the destination. That is,
 # if FOO_FILES is bar/baz/qux.h, and FOO_DEST is $(DIST)/include, the installed
 # file would be $(DIST)/include/bar/baz/qux.h instead of $(DIST)/include/qux.h
 
 # If we're using binary nsinstall and it's not built yet, fallback to python nsinstall.
-ifneq (,$(filter $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX),$(install_cmd)))
-ifeq (,$(wildcard $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX)))
-nsinstall_is_usable = $(if $(wildcard $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX)),yes)
+ifneq (,$(filter $(DIST)/bin/nsinstall$(HOST_BIN_SUFFIX),$(install_cmd)))
+ifeq (,$(wildcard $(DIST)/bin/nsinstall$(HOST_BIN_SUFFIX)))
+nsinstall_is_usable = $(if $(wildcard $(DIST)/bin/nsinstall$(HOST_BIN_SUFFIX)),yes)
 
 define install_cmd_override
 $(1): install_cmd = $$(if $$(nsinstall_is_usable),$$(INSTALL),$$(NSINSTALL_PY)) $$(1)
 endef
 endif
 endif
 
 install_target_tier = $(or $($(1)_TARGET),libs)
--- a/config/static-checking-config.mk
+++ b/config/static-checking-config.mk
@@ -2,28 +2,33 @@
 # 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/.
 
 # The entire tree should be subject to static analysis using the XPCOM
 # script. Additional scripts may be added by specific subdirectories.
 
 DEHYDRA_SCRIPT = $(topsrcdir)/config/static-checking.js
 
+ifndef BUILDING_JS
 DEHYDRA_MODULES = \
   $(topsrcdir)/xpcom/analysis/final.js \
   $(topsrcdir)/xpcom/analysis/must-override.js \
   $(NULL)
 
 TREEHYDRA_MODULES = \
   $(topsrcdir)/xpcom/analysis/outparams.js \
   $(topsrcdir)/xpcom/analysis/stack.js \
   $(topsrcdir)/xpcom/analysis/flow.js \
   $(topsrcdir)/xpcom/analysis/static-init.js \
+  $(topsrcdir)/layout/generic/frame-verify.js \
+  $(NULL)
+endif
+
+TREEHYDRA_MODULES += \
   $(topsrcdir)/js/src/jsstack.js \
-  $(topsrcdir)/layout/generic/frame-verify.js \
   $(NULL)
 
 DEHYDRA_ARG_PREFIX=-fplugin-arg-gcc_treehydra-
 
 DEHYDRA_ARGS = \
   $(DEHYDRA_ARG_PREFIX)script=$(DEHYDRA_SCRIPT) \
   $(DEHYDRA_ARG_PREFIX)topsrcdir=$(topsrcdir) \
   $(DEHYDRA_ARG_PREFIX)objdir=$(DEPTH) \
@@ -33,12 +38,16 @@ DEHYDRA_ARGS = \
 
 DEHYDRA_FLAGS = -fplugin=$(DEHYDRA_PATH) $(DEHYDRA_ARGS)
 
 ifdef DEHYDRA_PATH
 OS_CXXFLAGS += $(DEHYDRA_FLAGS)
 endif
 
 ifdef ENABLE_CLANG_PLUGIN
+ifndef BUILDING_JS
 CLANG_PLUGIN := $(DEPTH)/build/clang-plugin/$(DLL_PREFIX)clang-plugin$(DLL_SUFFIX)
+else
+CLANG_PLUGIN := $(DEPTH)/../../build/clang-plugin/$(DLL_PREFIX)clang-plugin$(DLL_SUFFIX)
+endif
 OS_CXXFLAGS += -Xclang -load -Xclang $(CLANG_PLUGIN) -Xclang -add-plugin -Xclang moz-check
 OS_CFLAGS += -Xclang -load -Xclang $(CLANG_PLUGIN) -Xclang -add-plugin -Xclang moz-check
 endif
--- a/js/src/Makefile.in
+++ b/js/src/Makefile.in
@@ -67,41 +67,16 @@ USE_HOST_CXX = 1
 
 ifdef HAVE_DTRACE
 ifneq ($(OS_ARCH),Darwin)
 DTRACE_PROBE_OBJ = $(LIBRARY_NAME)-dtrace.$(OBJ_SUFFIX)
 endif
 MOZILLA_DTRACE_SRC = $(srcdir)/devtools/javascript-trace.d
 endif
 
-backend.RecursiveMakeBackend:
-	@echo 'Build configuration changed. Regenerating backend.'
-	$(PYTHON) config.status
-
-Makefile: backend.RecursiveMakeBackend
-	@$(TOUCH) $@
-
-include backend.RecursiveMakeBackend.pp
-
-default:: backend.RecursiveMakeBackend
-
-default::
-	$(call py_action,process_install_manifest,--no-remove $(DIST)/include _build_manifests/install/dist_include)
-
-ifneq (,$(CROSS_COMPILE)$(filter-out WINNT OS2,$(OS_ARCH)))
-# nsinstall doesn't get built until we enter config/ in the exports phase,
-# so we'll have to manually ensure it gets built here if we want to use
-# $(EXPORTS)
-export:: config/nsinstall$(HOST_BIN_SUFFIX)
-$(PUBLIC) $(SDK_PUBLIC): config/nsinstall$(HOST_BIN_SUFFIX)
-
-config/nsinstall$(HOST_BIN_SUFFIX): $(srcdir)/config/nsinstall.c $(srcdir)/config/pathsub.c
-	$(MAKE) -C config/ nsinstall$(HOST_BIN_SUFFIX)
-endif
-
 # Ensure symbol versions of shared library on Linux do not conflict
 # with those in libxul.
 ifeq (Linux,$(OS_TARGET))
 EXTRA_DSO_LDOPTS += -Wl,-version-script,symverscript
 
 symverscript: symverscript.in
 	$(call py_action,preprocessor, \
 		-DVERSION='$(subst -,_,$(LIBRARY_NAME))' $< -o $@)
@@ -130,39 +105,39 @@ ifdef ENABLE_INTL_API
     ifeq ($(OS_ARCH),WINNT)
       ifdef MOZ_DEBUG
         ICU_LIB_SUFFIX=d
       endif
     endif # WINNT
     ifdef MOZ_SHARED_ICU
       ifeq ($(OS_ARCH),WINNT)
         ifdef JS_SHARED_LIBRARY
-          ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),intl/icu/target/lib/$(libname)$(ICU_LIB_SUFFIX)$(MOZ_ICU_VERSION).dll)
+          ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(libname)$(ICU_LIB_SUFFIX)$(MOZ_ICU_VERSION).dll)
         endif
       else # ! WINNT
         ifeq ($(OS_ARCH),Darwin)
           ifdef JS_SHARED_LIBRARY
-            ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),intl/icu/target/lib/$(DLL_PREFIX)$(libname).$(MOZ_ICU_VERSION)$(DLL_SUFFIX))
+            ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(DLL_PREFIX)$(libname).$(MOZ_ICU_VERSION)$(DLL_SUFFIX))
           endif
         else # ! Darwin
           ifdef JS_SHARED_LIBRARY
-            ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),intl/icu/target/lib/$(DLL_PREFIX)$(libname)$(DLL_SUFFIX).$(MOZ_ICU_VERSION))
+            ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(DLL_PREFIX)$(libname)$(DLL_SUFFIX).$(MOZ_ICU_VERSION))
           endif
         endif
       endif # WINNT
       ifdef ICU_FILES
         ICU_DEST := $(DIST)/bin
         INSTALL_TARGETS += ICU
         $(ICU_FILES): buildicu
         ICU_TARGET := $(if $(MOZ_PSEUDO_DERECURSE),compile,export)
       endif
     else # !MOZ_SHARED_ICU
       ifeq ($(OS_ARCH),WINNT)
         ICU_LIB_RENAME = $(foreach libname,$(ICU_LIB_NAMES),\
-                             cp -p intl/icu/target/lib/s$(libname)$(ICU_LIB_SUFFIX).lib intl/icu/target/lib/$(libname).lib;)
+                             cp -p $(DEPTH)/intl/icu/target/lib/s$(libname)$(ICU_LIB_SUFFIX).lib $(DEPTH)/intl/icu/target/lib/$(libname).lib;)
       endif
     endif # MOZ_SHARED_ICU
   endif # !MOZ_NATIVE_ICU
 endif # ENABLE_INTL_API
 
 include $(topsrcdir)/config/rules.mk
 
 .PHONY: buildffi buildicu
@@ -186,18 +161,18 @@ endif
 
 # ICU headers need to be available whether we build with the complete
 # Internationalization API or not - ICU stubs rely on them.
 
 ifdef MOZ_NATIVE_ICU
 LOCAL_INCLUDES += $(MOZ_ICU_CFLAGS)
 else
 LOCAL_INCLUDES += \
-  -I$(topsrcdir)/../../intl/icu/source/common \
-  -I$(topsrcdir)/../../intl/icu/source/i18n \
+  -I$(topsrcdir)/intl/icu/source/common \
+  -I$(topsrcdir)/intl/icu/source/i18n \
   $(NULL)
 endif
 
 ifdef ENABLE_INTL_API
 ifndef MOZ_NATIVE_ICU
 
 ifdef _MSC_VER
 ifdef MOZ_SHARED_ICU
@@ -227,54 +202,54 @@ endif
 # - ICU requires GNU make according to its readme.html. pymake can't be used
 #   because it doesn't support order only dependencies.
 # - Force ICU to use the standard suffix for object files because expandlibs
 #   will discard all files with a non-standard suffix (bug 857450).
 # - Options for genrb: -k strict parsing; -R omit collation tailoring rules.
 buildicu:
 # ICU's build system is full of races, so force non-parallel build.
 ifdef CROSS_COMPILE
-	+$(ICU_MAKE) -j1 -C intl/icu/host STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R -C'
+	+$(ICU_MAKE) -j1 -C $(DEPTH)/intl/icu/host STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R -C'
 endif
-	+$(ICU_MAKE) -j1 -C intl/icu/target STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R'
+	+$(ICU_MAKE) -j1 -C $(DEPTH)/intl/icu/target STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R'
 	$(ICU_LIB_RENAME)
 
 distclean clean::
 ifdef CROSS_COMPILE
-	$(call SUBMAKE,$@,intl/icu/host)
+	$(call SUBMAKE,$@,$(DEPTH)/intl/icu/host)
 endif
-	$(call SUBMAKE,$@,intl/icu/target)
+	$(call SUBMAKE,$@,$(DEPTH)/intl/icu/target)
 
 endif
 endif
 
 #
 # END ECMAScript Internationalization API
 #############################################
 
 
 # check_vanilla_allocations.py is tailored to Linux, so only run it there.
 # That should be enough to catch any problems.
 check-vanilla-allocations:
-	$(PYTHON) $(srcdir)/config/check_vanilla_allocations.py $(REAL_LIBRARY)
+	$(PYTHON) $(topsrcdir)/config/check_vanilla_allocations.py $(REAL_LIBRARY)
 
 # The "aggressive" variant will likely fail on some compiler/platform
 # combinations, but is worth running by hand every once in a while.
 check-vanilla-allocations-aggressive:
-	$(PYTHON) $(srcdir)/config/check_vanilla_allocations.py --aggressive $(REAL_LIBRARY)
+	$(PYTHON) $(topsrcdir)/config/check_vanilla_allocations.py --aggressive $(REAL_LIBRARY)
 
 ifeq ($(OS_ARCH),Linux)
 check:: check-vanilla-allocations
 endif
 
 # Help ensure that the number of OOM errors in SpiderMonkey doesn't increase.
 # If the number of OOM errors changes, update the number below. We intend this
 # number to go down over time, by fixing OOMs.
 check-ooms:
-	$(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/config/find_OOM_errors.py --regression 125
+	$(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(topsrcdir)/config/find_OOM_errors.py --regression 125
 
 ifeq ($(MOZ_DEBUG),1)
 #check:: check-ooms
 endif
 
 ifdef MOZ_VALGRIND
 ifndef MOZ_ASAN
 JITTEST_VALGRIND_FLAG = --valgrind
@@ -284,17 +259,17 @@ endif
 ifdef MOZ_ASAN
 ifneq ($(LLVM_SYMBOLIZER),)
 # Use the LLVM symbolizer when running jit-tests under ASan, if available
 JITTEST_ASAN_ENV=ASAN_SYMBOLIZER_PATH='$(LLVM_SYMBOLIZER)'
 endif
 endif
 
 check-style::
-	(cd $(srcdir) && $(PYTHON) config/check_spidermonkey_style.py);
+	(cd $(srcdir) && $(PYTHON) $(topsrcdir)/config/check_spidermonkey_style.py);
 
 check-jit-test::
 	$(JITTEST_ASAN_ENV) $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/jit-test/jit_test.py \
 	        --no-slow --no-progress --tinderbox --tbpl $(JITTEST_VALGRIND_FLAG) \
 	        $(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX)
 
 check:: check-style check-jit-test
 
--- a/js/src/aclocal.m4
+++ b/js/src/aclocal.m4
@@ -26,9 +26,18 @@ builtin(include, ../../build/autoconf/ex
 builtin(include, ../../build/autoconf/arch.m4)dnl
 builtin(include, ../../build/autoconf/android.m4)dnl
 builtin(include, ../../build/autoconf/zlib.m4)dnl
 builtin(include, ../../build/autoconf/linux.m4)dnl
 builtin(include, ../../build/autoconf/python-virtualenv.m4)dnl
 builtin(include, ../../build/autoconf/winsdk.m4)dnl
 builtin(include, ../../build/autoconf/icu.m4)dnl
 
+define([__MOZ_AC_INIT_PREPARE], defn([AC_INIT_PREPARE]))
+define([AC_INIT_PREPARE],
+[if test -z "$srcdir"; then
+  srcdir=`dirname "[$]0"`
+fi
+srcdir="$srcdir/../.."
+__MOZ_AC_INIT_PREPARE($1)
+])
+
 MOZ_PROG_CHECKMSYS()
deleted file mode 100644
--- a/js/src/build/check-sync-exceptions
+++ /dev/null
@@ -1,1 +0,0 @@
-*.pyc
deleted file mode 100644
--- a/js/src/build/msys-perl-wrapper
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-# 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/.
-
-
-args=""
-
-for i in "${@}"
-do
-    case "$i" in
-    -I?:/*)
-        i="$(echo "${i}" | sed -e 's|^-I\(.\):/|-I/\1/|')"
-	;;
-    esac
-
-    args="${args} '${i}'"
-done
-
-eval "exec perl $args"
deleted file mode 100755
--- a/js/src/build/qemu-wrap
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-# this script creates a wrapper shell script for an executable.  The idea is the actual executable cannot be
-# executed natively (it was cross compiled), but we want to run tests natively.  Running this script
-# as part of the compilation process will move the non-native executable to a new location, and replace it
-# with a script that will run it under qemu.
-while [[ -n $1 ]]; do
-    case $1 in
-        --qemu) QEMU="$2"; shift 2;;
-        --libdir) LIBDIR="$2"; shift 2;;
-        --ld) LD="$2"; shift 2;;
-        *) exe="$1"; shift;;
-    esac
-done
-if [[ -z $LIBDIR ]]; then
-    echo "You need to specify a directory for the cross libraries when you configure the shell"
-    echo "You can do this with --with-cross-lib="
-    exit 1
-fi
-LD=${LD:-$LIBDIR/ld-linux.so.3}
-mv $exe $exe.target
-# Just hardcode the path to the executable.  It'll be pretty obvious if it is doing the wrong thing.
-
-echo $'#!/bin/bash\n' $QEMU -E LD_LIBRARY_PATH="${LIBDIR}" "$LD" "$(readlink -f "$exe.target")" '"$@"' >"$exe"
-chmod +x $exe
\ No newline at end of file
deleted file mode 100644
--- a/js/src/build/subconfigure.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# 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/.
-
-# This script is used to capture the content of config.status-generated
-# files and subsequently restore their timestamp if they haven't changed.
-
-import os
-import re
-import subprocess
-import sys
-import pickle
-
-class File(object):
-    def __init__(self, path):
-        self._path = path
-        self._content = open(path, 'rb').read()
-        stat = os.stat(path)
-        self._times = (stat.st_atime, stat.st_mtime)
-
-    def update_time(self):
-        '''If the file hasn't changed since the instance was created,
-           restore its old modification time.'''
-        if not os.path.exists(self._path):
-            return
-        if open(self._path, 'rb').read() == self._content:
-            os.utime(self._path, self._times)
-
-
-# As defined in the various sub-configures in the tree
-PRECIOUS_VARS = set([
-    'build_alias',
-    'host_alias',
-    'target_alias',
-    'CC',
-    'CFLAGS',
-    'LDFLAGS',
-    'LIBS',
-    'CPPFLAGS',
-    'CPP',
-    'CCC',
-    'CXXFLAGS',
-    'CXX',
-    'CCASFLAGS',
-    'CCAS',
-])
-
-
-# Autoconf, in some of the sub-configures used in the tree, likes to error
-# out when "precious" variables change in value. The solution it gives to
-# straighten things is to either run make distclean or remove config.cache.
-# There's no reason not to do the latter automatically instead of failing,
-# doing the cleanup (which, on buildbots means a full clobber), and
-# restarting from scratch.
-def maybe_clear_cache():
-    comment = re.compile(r'^\s+#')
-    cache = {}
-    with open('config.cache') as f:
-        for line in f.readlines():
-            if not comment.match(line) and '=' in line:
-                key, value = line.split('=', 1)
-                cache[key] = value
-    for precious in PRECIOUS_VARS:
-        entry = 'ac_cv_env_%s_value' % precious
-        if entry in cache and (not precious in os.environ or os.environ[precious] != cache[entry]):
-            os.remove('config.cache')
-            return
-
-
-def dump(dump_file, shell):
-    if os.path.exists('config.cache'):
-        maybe_clear_cache()
-    if not os.path.exists('config.status'):
-        if os.path.exists(dump_file):
-            os.remove(dump_file)
-        return
-
-    config_files = [File('config.status')]
-
-    # Scan the config.status output for information about configuration files
-    # it generates.
-    config_status_output = subprocess.check_output(
-        [shell, '-c', './config.status --help'],
-        stderr=subprocess.STDOUT).splitlines()
-    state = None
-    for line in config_status_output:
-        if line.startswith('Configuration') and line.endswith(':'):
-            state = 'config'
-        elif not line.startswith(' '):
-            state = None
-        elif state == 'config':
-            for f in (couple.split(':')[0] for couple in line.split()):
-                if os.path.isfile(f):
-                    config_files.append(File(f))
-
-    with open(dump_file, 'wb') as f:
-        pickle.dump(config_files, f)
-
-
-def adjust(dump_file):
-    if not os.path.exists(dump_file):
-        return
-
-    config_files = []
-
-    try:
-        with open(dump_file, 'rb') as f:
-            config_files = pickle.load(f)
-    except Exception:
-        pass
-
-    for f in config_files:
-        f.update_time()
-
-    os.remove(dump_file)
-
-
-CONFIG_DUMP = 'config_files.pkl'
-
-if __name__ == '__main__':
-    if sys.argv[1] == 'dump':
-        dump(CONFIG_DUMP, sys.argv[2])
-    elif sys.argv[1] == 'adjust':
-        adjust(CONFIG_DUMP)
deleted file mode 100644
--- a/js/src/build/unix/add_phony_targets.py
+++ /dev/null
@@ -1,33 +0,0 @@
-import pymake.data
-import pymake.parser
-import pymake.parserdata
-import sys
-
-'''
-Modifies the output of Sun Studio's -xM to look more like the output
-of gcc's -MD -MP, adding phony targets for dependencies.
-'''
-
-
-def add_phony_targets(path):
-    print path
-    deps = set()
-    targets = set()
-    for stmt in pymake.parser.parsefile(path):
-        if isinstance(stmt, pymake.parserdata.Rule):
-            assert isinstance(stmt.depexp, pymake.data.StringExpansion)
-            assert isinstance(stmt.targetexp, pymake.data.StringExpansion)
-            for d in stmt.depexp.s.split():
-                deps.add(d)
-            for t in stmt.targetexp.s.split():
-                targets.add(t)
-    phony_targets = deps - targets
-    if not phony_targets:
-        return
-    with open(path, 'a') as f:
-        f.writelines('%s:\n' % d for d in phony_targets)
-
-
-if __name__ == '__main__':
-    for f in sys.argv[1:]:
-        add_phony_targets(f)
deleted file mode 100644
--- a/js/src/build/unix/headers/bits/c++config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include_next <bits/c++config.h>
-#undef _GLIBCXX_USE_FLOAT128
deleted file mode 100755
--- a/js/src/build/unix/print-failed-commands.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-# 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/.
-
-#
-# Usage from makefile:
-#   ELOG = . $(topdir)/build/autoconf/print-failed-commands.sh
-#   $(ELOG) $(CC) $CFLAGS -o $@ $<
-#
-# This shell script is used by the build system to print out commands that fail
-# to execute properly.  It is designed to make the "make -s" command more
-# useful.
-#
-# Note that in the example we are sourcing rather than execing the script.
-# Since make already started a shell for us, we might as well use it rather
-# than starting a new one.
-
-( exec "$@" ) || {
-    echo
-    echo "In the directory " `pwd`
-    echo "The following command failed to execute properly:"
-    echo "$@"
-    exit 1;
-}
deleted file mode 100644
--- a/js/src/build/unix/uniq.pl
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env perl
-
-# 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/CPAN INCLUDES [---##
-##----------------------------##
-use strict;
-use warnings;
-use Getopt::Long;
-
-##-------------------##
-##---]  EXPORTS  [---##
-##-------------------##
-our $VERSION = qw(1.1);
-
-##-------------------##
-##---]  GLOBALS  [---##
-##-------------------##
-my %argv;
-my $modver = $Getopt::Long::VERSION || 0;
-my $isOldGetopt = ($modver eq '2.25') ? 1 : 0;
-
-###########################################################################
-## Intent: Script init function
-###########################################################################
-sub init
-{
-    if ($isOldGetopt)
-    {
-	# mozilla.build/mingw perl in need of an upgrade
-	# emulate Getopt::Long switch|short:init
-	foreach (qw(debug regex sort))
-	{
-	    if (defined($argv{$_}))
-	    {
-		$argv{$_} ||= 1;
-	    }
-	}
-    }
-} # init
-
-##----------------##
-##---]  MAIN  [---##
-##----------------##
-my @args = ($isOldGetopt)
-    ? qw(debug|d regex|r sort|s)
-    : qw(debug|d:1 regex|r:1 sort|s:1)
-    ;
-
-unless(GetOptions(\%argv, @args))
-{
-    print "Usage: $0\n";
-    print "  --sort   Sort list elements early\n";
-    print "  --regex  Exclude subdirs by pattern\n";
-}
-
-init();
-my $debug = $argv{debug} || 0;
-
-my %seen;
-my @out;
-my @in = ($argv{sort}) ? sort @ARGV : @ARGV;
-
-foreach my $d (@in)
-{
-    next if ($seen{$d}++);
-
-    print "   arg is $d\n" if ($debug);
-
-    if ($argv{regex})
-    {
-        my $found = 0;
-        foreach my $dir (@out)
-	{
-	    my $dirM = quotemeta($dir);
-            $found++, last if ($d eq $dir || $d =~ m!^${dirM}\/!);
-        }
-	print "Adding $d\n" if ($debug && !$found);
-        push @out, $d if (!$found);
-    } else {
-	print "Adding: $d\n" if ($debug);
-        push(@out, $d);
-    }
-}
-
-print "@out\n"
-
-# EOF
deleted file mode 100644
--- a/js/src/build/win32/pgomerge.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/python
-# 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/.
-
-# Usage: pgomerge.py <binary basename> <dist/bin>
-# Gathers .pgc files from dist/bin and merges them into
-# $PWD/$basename.pgd using pgomgr, then deletes them.
-# No errors if any of these files don't exist.
-
-import sys, os, os.path, subprocess
-if not sys.platform == "win32":
-    raise Exception("This script was only meant for Windows.")
-
-def MergePGOFiles(basename, pgddir, pgcdir):
-  """Merge pgc files produced from an instrumented binary
-     into the pgd file for the second pass of profile-guided optimization
-     with MSVC.  |basename| is the name of the DLL or EXE without the
-     extension.  |pgddir| is the path that contains <basename>.pgd
-     (should be the objdir it was built in).  |pgcdir| is the path
-     containing basename!N.pgc files, which is probably dist/bin.
-     Calls pgomgr to merge each pgc file into the pgd, then deletes
-     the pgc files."""
-  if not os.path.isdir(pgddir) or not os.path.isdir(pgcdir):
-    return
-  pgdfile = os.path.abspath(os.path.join(pgddir, basename + ".pgd"))
-  if not os.path.isfile(pgdfile):
-    return
-  for file in os.listdir(pgcdir):
-    if file.startswith(basename+"!") and file.endswith(".pgc"):
-      try:
-        pgcfile = os.path.normpath(os.path.join(pgcdir, file))
-        subprocess.call(['pgomgr', '-merge',
-                         pgcfile,
-                         pgdfile])
-        os.remove(pgcfile)
-      except OSError:
-        pass
-
-if __name__ == '__main__':
-  if len(sys.argv) != 3:
-      print >>sys.stderr, "Usage: pgomerge.py <binary basename> <dist/bin>"
-      sys.exit(1)
-  MergePGOFiles(sys.argv[1], os.getcwd(), sys.argv[2])
deleted file mode 100644
--- a/js/src/config/Makefile.in
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# 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/.
-
-# IMPORTANT: Disable NSBUILDROOT for this directory only, otherwise we have
-# a recursive rule for finding nsinstall and the Perl scripts.
-ifdef NSBUILDROOT
-override NSBUILDROOT :=
-endif
-
-ifdef GNU_CC
-MODULE_OPTIMIZE_FLAGS = -O3
-endif
-
-include $(topsrcdir)/config/config.mk
-
-ifneq (WINNT,$(HOST_OS_ARCH))
-# Ensure nsinstall is atomically created
-nsinstall$(HOST_BIN_SUFFIX): $(HOST_PROGRAM)
-	cp $^ $@.tmp
-	mv $@.tmp $@
-
-NSINSTALL_FILES := nsinstall$(HOST_BIN_SUFFIX)
-NSINSTALL_DEST := $(DIST)/bin
-NSINSTALL_TARGET := export
-INSTALL_TARGETS += NSINSTALL
-endif
-
-include $(topsrcdir)/config/rules.mk
-
-HOST_CFLAGS += -DUNICODE -D_UNICODE
-
-ifdef WRAP_SYSTEM_INCLUDES
-export:: \
-  $(call mkdir_deps,system_wrappers_js) \
-  $(NULL)
-	$(PYTHON) -m mozbuild.action.preprocessor $(DEFINES) $(ACDEFINES) \
-		$(srcdir)/system-headers | $(PERL) $(srcdir)/make-system-wrappers.pl system_wrappers_js
-	$(INSTALL) system_wrappers_js $(DIST)
-
-GARBAGE_DIRS += system_wrappers_js
-endif
-
-GARBAGE += $(srcdir)/*.pyc *.pyc
-
-FORCE:
deleted file mode 100644
--- a/js/src/config/Moz/Milestone.pm
+++ /dev/null
@@ -1,220 +0,0 @@
-#!/usr/bin/perl -w
-# 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/.
-
-package Moz::Milestone;
-use strict;
-
-use vars qw($officialMilestone
-            $milestone);
-
-local $Moz::Milestone::milestone;
-local $Moz::Milestone::officialMilestone;
-
-#
-# Usage:  getOfficialMilestone($milestoneFile)
-# Returns full milestone (x.x.x.x[ab12pre+])
-#
-sub getOfficialMilestone($) {
-  my $mfile = $_[0];
-  open(FILE,"$mfile") ||
-    die ("Can't open $mfile for reading!");
-
-  my $num = <FILE>;
-  while($num =~ /^\s*#/ || $num !~ /^\d/) {
-      $num = <FILE>;
-  }
-
-  close(FILE);
-  if ($num !~ /^\d/) { return; }
-  chomp($num);
-  # Remove extra ^M caused by using dos-mode line-endings
-  chop $num if (substr($num, -1, 1) eq "\r");
-  $Moz::Milestone::officialMilestone = $num;
-  $Moz::Milestone::milestone = &getMilestoneNum;
-  return $num;
-}
-
-#
-# Usage: getMilestoneNum($num)
-# Returns: milestone without a + if it exists.
-#
-sub getMilestoneNum {
-  if (defined($Moz::Milestone::milestone)) {
-    return $Moz::Milestone::milestone;
-  }
-
-  if (defined($Moz::Milestone::officialMilestone)) {
-    $Moz::Milestone::milestone = $Moz::Milestone::officialMilestone;
-  } else {
-    $Moz::Milestone::milestone = $_[0];
-  }
-
-  if ($Moz::Milestone::milestone =~ /\+$/) {    # for x.x.x+, strip off the +
-    $Moz::Milestone::milestone =~ s/\+$//;
-  }
-
-  return $Moz::Milestone::milestone;
-}
-
-#
-# Usage: getMilestoneQualifier($num)
-# Returns: + if it exists.
-#
-sub getMilestoneQualifier {
-  my $milestoneQualifier;
-  if (defined($Moz::Milestone::officialMilestone)) {
-    $milestoneQualifier = $Moz::Milestone::officialMilestone;
-  } else {
-    $milestoneQualifier = $_[0];
-  }
-
-  if ($milestoneQualifier =~ /\+$/) {
-    return "+";
-  }
-}
-
-sub getMilestoneMajor {
-  my $milestoneMajor;
-  if (defined($Moz::Milestone::milestone)) {
-    $milestoneMajor = $Moz::Milestone::milestone;
-  } else {
-    $milestoneMajor = $_[0];
-  }
-  my @parts = split(/\./,$milestoneMajor);
-  return $parts[0];
-}
-
-sub getMilestoneMinor {
-  my $milestoneMinor;
-  if (defined($Moz::Milestone::milestone)) {
-    $milestoneMinor = $Moz::Milestone::milestone;
-  } else {
-    $milestoneMinor = $_[0];
-  }
-  my @parts = split(/\./,$milestoneMinor);
-
-  if ($#parts < 1 ) { return 0; }
-  return $parts[1];
-}
-
-sub getMilestoneMini {
-  my $milestoneMini;
-  if (defined($Moz::Milestone::milestone)) {
-    $milestoneMini = $Moz::Milestone::milestone;
-  } else {
-    $milestoneMini = $_[0];
-  }
-  my @parts = split(/\./,$milestoneMini);
-
-  if ($#parts < 2 ) { return 0; }
-  return $parts[2];
-}
-
-sub getMilestoneMicro {
-  my $milestoneMicro;
-  if (defined($Moz::Milestone::milestone)) {
-    $milestoneMicro = $Moz::Milestone::milestone;
-  } else {
-    $milestoneMicro = $_[0];
-  }
-  my @parts = split(/\./,$milestoneMicro);
-
-  if ($#parts < 3 ) { return 0; }
-  return $parts[3];
-}
-
-sub getMilestoneAB {
-  my $milestoneAB;
-  if (defined($Moz::Milestone::milestone)) {
-    $milestoneAB = $Moz::Milestone::milestone;
-  } else {
-    $milestoneAB = $_[0];
-  }
-  
-  if ($milestoneAB =~ /a/) { return "alpha"; }
-  if ($milestoneAB =~ /b/) { return "beta"; }
-  return "final";
-}
-
-#
-# Usage:  getMilestoneABWithNum($milestoneFile)
-# Returns the alpha and beta tag with its number (a1, a2, b3, ...)
-#
-sub getMilestoneABWithNum {
-  my $milestoneABNum;
-  if (defined($Moz::Milestone::milestone)) {
-    $milestoneABNum = $Moz::Milestone::milestone;
-  } else {
-    $milestoneABNum = $_[0];
-  }
-
-  if ($milestoneABNum =~ /([ab]\d+)/) {
-    return $1;
-  } else {
-    return "";
-  }
-}
-
-#
-# build_file($template_file,$output_file)
-#
-sub build_file($$) {
-  my @FILE;
-  my @MILESTONE_PARTS;
-  my $MINI_VERSION = 0;
-  my $MICRO_VERSION = 0;
-  my $OFFICIAL = 0;
-  my $QUALIFIER = "";
-
-  if (!defined($Moz::Milestone::milestone)) { die("$0: no milestone file set!\n"); }
-  @MILESTONE_PARTS = split(/\./, &getMilestoneNum);
-  if ($#MILESTONE_PARTS >= 2) {
-    $MINI_VERSION = 1;
-  } else {
-    $MILESTONE_PARTS[2] = 0;
-  }
-  if ($#MILESTONE_PARTS >= 3) {
-    $MICRO_VERSION = 1;
-  } else {
-    $MILESTONE_PARTS[3] = 0;
-  }
-  if (! &getMilestoneQualifier) {
-    $OFFICIAL = 1;
-  } else {
-    $QUALIFIER = "+";
-  }
-
-  if (-e $_[0]) {
-    open(FILE, "$_[0]") || die("$0: Can't open $_[0] for reading!\n");
-    @FILE = <FILE>;
-    close(FILE);
-
-    open(FILE, ">$_[1]") || die("$0: Can't open $_[1] for writing!\n");
-
-    #
-    # There will be more of these based on what we need for files.
-    #
-    foreach(@FILE) {
-      s/__MOZ_MAJOR_VERSION__/$MILESTONE_PARTS[0]/g;
-      s/__MOZ_MINOR_VERSION__/$MILESTONE_PARTS[1]/g;
-      s/__MOZ_MINI_VERSION__/$MILESTONE_PARTS[2]/g;
-      s/__MOZ_MICRO_VERSION__/$MILESTONE_PARTS[3]/g;
-      if ($MINI_VERSION) {
-        s/__MOZ_OPTIONAL_MINI_VERSION__/.$MILESTONE_PARTS[2]/g;
-      }
-      if ($MICRO_VERSION) {
-        s/__MOZ_OPTIONAL_MICRO_VERSION__/.$MILESTONE_PARTS[3]/g;
-      }
-
-      print FILE $_;
-    }
-    close(FILE);
-  } else {
-    die("$0: $_[0] doesn't exist for autoversioning!\n");
-  }
-
-}
-
-1;
deleted file mode 100644
--- a/js/src/config/autoconf.mk.in
+++ /dev/null
@@ -1,6 +0,0 @@
-ifndef INCLUDED_AUTOCONF_MK
-INCLUDED_AUTOCONF_MK = 1
-include $(DEPTH)/config/emptyvars.mk
-@ALLSUBSTS@
-include $(topsrcdir)/config/baseconfig.mk
-endif
deleted file mode 100644
--- a/js/src/config/baseconfig.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
-
-ifneq (,$(filter /%,$(TOP_DIST)))
-DIST = $(TOP_DIST)
-else
-ifeq (.,$(DEPTH))
-DIST = $(TOP_DIST)
-else
-DIST = $(DEPTH)/$(TOP_DIST)
-endif
-endif
-
-# We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't
-# manually use it before config.mk inclusion
-_OBJ_SUFFIX := $(OBJ_SUFFIX)
-OBJ_SUFFIX = $(error config/config.mk needs to be included before using OBJ_SUFFIX)
-
-ifeq ($(HOST_OS_ARCH),WINNT)
-# We only support building with pymake or a non-msys gnu make version
-# strictly above 4.0.
-ifndef .PYMAKE
-ifeq (a,$(firstword a$(subst /, ,$(abspath .))))
-$(error MSYS make is not supported)
-endif
-# 4.0- happens to be greater than 4.0, lower than the mozmake version,
-# and lower than 4.0.1 or 4.1, whatever next version of gnu make will
-# be released.
-ifneq (4.0-,$(firstword $(sort 4.0- $(MAKE_VERSION))))
-$(error Make version too old. Only versions strictly greater than 4.0 are supported.)
-endif
-endif
-ifeq (a,$(firstword a$(subst /, ,$(srcdir))))
-$(error MSYS-style srcdir are not supported for Windows builds.)
-endif
-endif # WINNT
-
-ifdef .PYMAKE
-include_deps = $(eval -includedeps $(1))
-else
-include_deps = $(eval -include $(1))
-endif
deleted file mode 100644
--- a/js/src/config/check-sync-dirs.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# 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/.
-
-# check-sync-dirs.py --- check that one directory is an exact subset of another
-#
-# Usage: python check-sync-dirs.py COPY ORIGINAL
-#
-# Check that the files present in the directory tree COPY are exact
-# copies of their counterparts in the directory tree ORIGINAL.  COPY
-# need not have all the files in ORIGINAL, but COPY may not have files
-# absent from ORIGINAL.
-# 
-# Each directory in COPY may have a file named
-# 'check-sync-exceptions', which lists files in COPY that need not be
-# the same as the corresponding file in ORIGINAL, or exist at all in
-# ORIGINAL.  (The 'check-sync-exceptions' file itself is always
-# treated as exceptional.)  Blank lines and '#' comments in the file
-# are ignored.
-
-import sys
-import os
-from os.path import join
-import filecmp
-import textwrap
-import fnmatch
-
-if len(sys.argv) != 3:
-    print >> sys.stderr, 'TEST-UNEXPECTED-FAIL | check-sync-dirs.py | Usage: %s COPY ORIGINAL' % sys.argv[0]
-    sys.exit(1)
-
-copy = os.path.abspath(sys.argv[1])
-original = os.path.abspath(sys.argv[2])
-
-# Return the contents of FILENAME, a 'check-sync-exceptions' file, as
-# a dictionary whose keys are exactly the list of filenames, along
-# with the basename of FILENAME itself.  If FILENAME does not exist,
-# return the empty dictionary.
-def read_exceptions(filename):
-    if (os.path.exists(filename)):
-        f = file(filename)
-        exceptions = {}
-        for line in f:
-            line = line.strip()
-            if line != '' and line[0] != '#':
-                exceptions[line] = None
-        exceptions[os.path.basename (filename)] = None
-        f.close()
-        return exceptions
-    else:
-        return {}
-
-# Return true if FILENAME matches any pattern in the list of filename
-# patterns PATTERNS.
-def fnmatch_any(filename, patterns):
-    for pattern in patterns:
-        if fnmatch.fnmatch(filename, pattern):
-            return True
-    return False
-
-# Check the contents of the directory tree COPY against ORIGINAL.  For each
-# file that differs, apply REPORT to COPY, ORIGINAL, and the file's
-# relative path.  COPY and ORIGINAL should be absolute.  Ignore files 
-# that match patterns given in the list IGNORE.
-def check(copy, original):
-    os.chdir(copy)
-    for (dirpath, dirnames, filenames) in os.walk('.'):
-        exceptions = read_exceptions(join(dirpath, 'check-sync-exceptions'))
-        for dirname in dirnames:
-            if fnmatch_any(dirname, exceptions):
-                dirnames.remove(dirname)
-                break
-        for filename in filenames:
-            if fnmatch_any(filename, exceptions):
-                continue
-            relative_name = join(dirpath, filename)
-            original_name = join(original, relative_name)
-            if (os.path.exists(original_name)
-                and filecmp.cmp(relative_name, original_name, False)):
-                continue
-            report(copy, original, relative_name)
-
-differences_found = False
-
-# Print an error message for DIFFERING, which was found to differ
-# between COPY and ORIGINAL.  Set the global variable differences_found.
-def report(copy, original, differing):
-    global differences_found
-    if not differences_found:
-        print >> sys.stderr, 'TEST-UNEXPECTED-FAIL | check-sync-dirs.py | build file copies are not in sync\n' \
-                             'TEST-INFO | check-sync-dirs.py | file(s) found in:               %s\n' \
-                             'TEST-INFO | check-sync-dirs.py | differ from their originals in: %s' \
-                             % (copy, original)
-    print >> sys.stderr, 'TEST-INFO | check-sync-dirs.py | differing file:                 %s' % differing
-    differences_found = True
-
-check(copy, original)
-
-if differences_found:
-    msg = '''In general, the files in '%s' should always be exact copies of
-originals in '%s'.  A change made to one should also be made to the
-other.  See 'check-sync-dirs.py' for more details.''' \
-         % (copy, original)
-    print >> sys.stderr, textwrap.fill(msg, 75)
-    sys.exit(1)
-
-print >> sys.stderr, 'TEST-PASS | check-sync-dirs.py | %s <= %s' % (copy, original)
-sys.exit(0)
deleted file mode 100644
--- a/js/src/config/check-sync-exceptions
+++ /dev/null
@@ -1,27 +0,0 @@
-Makefile.in
-Makefile
-autoconf.mk.in
-autoconf.mk
-baseconfig.mk
-check-sync-dirs.py
-static-checking-config.mk
-nsinstall
-nsinstall.exe
-host_nsinstall.o
-host_pathsub.o
-moz.build
-
-# This is a copy of nspr's config/make-system-wrappers.pl.
-make-system-wrappers.pl
-system_wrappers_js
-
-# Ignore detritus left lying around by editing tools.
-*~
-.#*
-#*#
-*.orig
-*.rej
-
-# Ignore "compiled" python files
-*.pyc
-*.pyo
deleted file mode 100755
--- a/js/src/config/check_source_count.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-# 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/.
-
-
-# Usage: check_source_count.py SEARCH_TERM COUNT ERROR_LOCATION REPLACEMENT [FILES...]
-#   Checks that FILES contains exactly COUNT matches of SEARCH_TERM. If it does
-#   not, an error message is printed, quoting ERROR_LOCATION, which should
-#   probably be the filename and line number of the erroneous call to
-#   check_source_count.py.
-from __future__ import print_function
-import sys
-import os
-import re
-
-search_string = sys.argv[1]
-expected_count = int(sys.argv[2])
-error_location = sys.argv[3]
-replacement = sys.argv[4]
-files = sys.argv[5:]
-
-details = {}
-
-count = 0
-for f in files:
-    text = file(f).read()
-    match = re.findall(search_string, text)
-    if match:
-        num = len(match)
-        count += num
-        details[f] = num
-
-if count == expected_count:
-    print("TEST-PASS | check_source_count.py {0} | {1}"
-          .format(search_string, expected_count))
-
-else:
-    print("TEST-UNEXPECTED-FAIL | check_source_count.py {0} | "
-          .format(search_string),
-          end='')
-    if count < expected_count:
-        print("There are fewer occurrences of /{0}/ than expected. "
-              "This may mean that you have removed some, but forgotten to "
-              "account for it {1}.".format(search_string, error_location))
-    else:
-        print("There are more occurrences of /{0}/ than expected. We're trying "
-              "to prevent an increase in the number of {1}'s, using {2} if "
-              "possible. If it is unavoidable, you should update the expected "
-              "count {3}.".format(search_string, search_string, replacement, 
-                                 error_location))
-
-    print("Expected: {0}; found: {1}".format(expected_count, count))
-    for k in sorted(details):
-        print("Found {0} occurences in {1}".format(details[k],k))
-    sys.exit(-1)
-
deleted file mode 100644
--- a/js/src/config/check_spidermonkey_style.py
+++ /dev/null
@@ -1,588 +0,0 @@
-# vim: set ts=8 sts=4 et sw=4 tw=99:
-# 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/.
-
-#----------------------------------------------------------------------------
-# This script checks various aspects of SpiderMonkey code style.  The current checks are as
-# follows.
-#
-# We check the following things in headers.
-#
-# - No cyclic dependencies.
-#
-# - No normal header should #include a inlines.h/-inl.h file.
-#
-# - #ifndef wrappers should have the right form. (XXX: not yet implemented)
-#   - Every header file should have one.
-#   - The guard name used should be appropriate for the filename.
-#
-# We check the following things in all files.
-#
-# - #includes should have full paths, e.g. "jit/Ion.h", not "Ion.h".
-#
-# - #includes should use the appropriate form for system headers (<...>) and
-#   local headers ("...").
-#
-# - #includes should be ordered correctly.
-#   - Each one should be in the correct section.
-#   - Alphabetical order should be used within sections.
-#   - Sections should be in the right order.
-#   Note that the presence of #if/#endif blocks complicates things, to the
-#   point that it's not always clear where a conditionally-compiled #include
-#   statement should go, even to a human.  Therefore, we check the #include
-#   statements within each #if/#endif block (including nested ones) in
-#   isolation, but don't try to do any order checking between such blocks.
-#----------------------------------------------------------------------------
-
-from __future__ import print_function
-
-import difflib
-import os
-import re
-import subprocess
-import sys
-import traceback
-
-# We don't bother checking files in these directories, because they're (a) auxiliary or (b)
-# imported code that doesn't follow our coding style.
-ignored_js_src_dirs = [
-   'js/src/config/',            # auxiliary stuff
-   'js/src/ctypes/libffi/',     # imported code
-   'js/src/devtools/',          # auxiliary stuff
-   'js/src/editline/',          # imported code
-   'js/src/gdb/',               # auxiliary stuff
-   'js/src/vtune/'              # imported code
-]
-
-# We ignore #includes of these files, because they don't follow the usual rules.
-included_inclnames_to_ignore = set([
-    'ffi.h',                    # generated in ctypes/libffi/
-    'devtools/sharkctl.h',      # we ignore devtools/ in general
-    'devtools/Instruments.h',   # we ignore devtools/ in general
-    'double-conversion.h',      # strange MFBT case
-    'javascript-trace.h',       # generated in $OBJDIR if HAVE_DTRACE is defined
-    'jsautokw.h',               # generated in $OBJDIR
-    'jsautooplen.h',            # generated in $OBJDIR
-    'jscustomallocator.h',      # provided by embedders;  allowed to be missing
-    'js-config.h',              # generated in $OBJDIR
-    'pratom.h',                 # NSPR
-    'prcvar.h',                 # NSPR
-    'prinit.h',                 # NSPR
-    'prlink.h',                 # NSPR
-    'prlock.h',                 # NSPR
-    'prprf.h',                  # NSPR
-    'prthread.h',               # NSPR
-    'prtypes.h',                # NSPR
-    'selfhosted.out.h',         # generated in $OBJDIR
-    'unicode/locid.h',          # ICU
-    'unicode/numsys.h',         # ICU
-    'unicode/ucal.h',           # ICU
-    'unicode/uclean.h',         # ICU
-    'unicode/ucol.h',           # ICU
-    'unicode/udat.h',           # ICU
-    'unicode/udatpg.h',         # ICU
-    'unicode/uenum.h',          # ICU
-    'unicode/unum.h',           # ICU
-    'unicode/ustring.h',        # ICU
-    'unicode/utypes.h',         # ICU
-    'vtune/VTuneWrapper.h'      # VTune
-])
-
-# These files have additional constraints on where they are #included, so we
-# ignore #includes of them when checking #include ordering.
-oddly_ordered_inclnames = set([
-    'ctypes/typedefs.h',        # Included multiple times in the body of ctypes/CTypes.h
-    'jsautokw.h',               # Included in the body of frontend/TokenStream.h
-    'jswin.h',                  # Must be #included before <psapi.h>
-    'machine/endian.h',         # Must be included after <sys/types.h> on BSD
-    'winbase.h',                # Must precede other system headers(?)
-    'windef.h'                  # Must precede other system headers(?)
-])
-
-# The files in tests/style/ contain code that fails this checking in various
-# ways.  Here is the output we expect.  If the actual output differs from
-# this, one of the following must have happened.
-# - New SpiderMonkey code violates one of the checked rules.
-# - The tests/style/ files have changed without expected_output being changed
-#   accordingly.
-# - This script has been broken somehow.
-#
-expected_output = '''\
-js/src/tests/style/BadIncludes2.h:1: error:
-    vanilla header includes an inline-header file "tests/style/BadIncludes2-inl.h"
-
-js/src/tests/style/BadIncludes.h:3: error:
-    the file includes itself
-
-js/src/tests/style/BadIncludes.h:6: error:
-    "BadIncludes2.h" is included using the wrong path;
-    did you forget a prefix, or is the file not yet committed?
-
-js/src/tests/style/BadIncludes.h:8: error:
-    <tests/style/BadIncludes2.h> should be included using
-    the #include "..." form
-
-js/src/tests/style/BadIncludes.h:10: error:
-    "stdio.h" is included using the wrong path;
-    did you forget a prefix, or is the file not yet committed?
-
-js/src/tests/style/BadIncludesOrder-inl.h:5:6: error:
-    "vm/Interpreter-inl.h" should be included after "jsscriptinlines.h"
-
-js/src/tests/style/BadIncludesOrder-inl.h:6:7: error:
-    "jsscriptinlines.h" should be included after "js/Value.h"
-
-js/src/tests/style/BadIncludesOrder-inl.h:7:8: error:
-    "js/Value.h" should be included after "ds/LifoAlloc.h"
-
-js/src/tests/style/BadIncludesOrder-inl.h:8:9: error:
-    "ds/LifoAlloc.h" should be included after "jsapi.h"
-
-js/src/tests/style/BadIncludesOrder-inl.h:9:10: error:
-    "jsapi.h" should be included after <stdio.h>
-
-js/src/tests/style/BadIncludesOrder-inl.h:10:11: error:
-    <stdio.h> should be included after "mozilla/HashFunctions.h"
-
-js/src/tests/style/BadIncludesOrder-inl.h:27:28: error:
-    "jsobj.h" should be included after "jsfun.h"
-
-(multiple files): error:
-    header files form one or more cycles
-
-   tests/style/HeaderCycleA1.h
-   -> tests/style/HeaderCycleA2.h
-      -> tests/style/HeaderCycleA3.h
-         -> tests/style/HeaderCycleA1.h
-
-   tests/style/HeaderCycleB1-inl.h
-   -> tests/style/HeaderCycleB2-inl.h
-      -> tests/style/HeaderCycleB3-inl.h
-         -> tests/style/HeaderCycleB4-inl.h
-            -> tests/style/HeaderCycleB1-inl.h
-            -> tests/style/jsheadercycleB5inlines.h
-               -> tests/style/HeaderCycleB1-inl.h
-      -> tests/style/HeaderCycleB4-inl.h
-
-'''.splitlines(True)
-
-actual_output = []
-
-
-def out(*lines):
-    for line in lines:
-        actual_output.append(line + '\n')
-
-
-def error(filename, linenum, *lines):
-    location = filename
-    if linenum is not None:
-        location += ':' + str(linenum)
-    out(location + ': error:')
-    for line in (lines):
-        out('    ' + line)
-    out('')
-
-
-class FileKind(object):
-    C = 1
-    CPP = 2
-    INL_H = 3
-    H = 4
-    TBL = 5
-    MSG = 6
-
-    @staticmethod
-    def get(filename):
-        if filename.endswith('.c'):
-            return FileKind.C
-
-        if filename.endswith('.cpp'):
-            return FileKind.CPP
-
-        if filename.endswith(('inlines.h', '-inl.h', 'Inlines.h')):
-            return FileKind.INL_H
-
-        if filename.endswith('.h'):
-            return FileKind.H
-
-        if filename.endswith('.tbl'):
-            return FileKind.TBL
-
-        if filename.endswith('.msg'):
-            return FileKind.MSG
-
-        error(filename, None, 'unknown file kind')
-
-
-def get_all_filenames():
-    '''Get a list of all the files in the (Mercurial or Git) repository.'''
-    cmds = [['hg', 'manifest', '-q'], ['git', 'ls-files', '--full-name', '../..']]
-    for cmd in cmds:
-        try:
-            all_filenames = subprocess.check_output(cmd, universal_newlines=True,
-                                                    stderr=subprocess.PIPE).split('\n')
-            return all_filenames
-        except:
-            continue
-    else:
-        raise Exception('failed to run any of the repo manifest commands', cmds)
-
-
-def check_style():
-    # We deal with two kinds of name.
-    # - A "filename" is a full path to a file from the repository root.
-    # - An "inclname" is how a file is referred to in a #include statement.
-    #
-    # Examples (filename -> inclname)
-    # - "mfbt/Attributes.h"  -> "mozilla/Attributes.h"
-    # - "js/public/Vector.h" -> "js/Vector.h"
-    # - "js/src/vm/String.h" -> "vm/String.h"
-
-    mfbt_inclnames = set()      # type: set(inclname)
-    js_names = dict()           # type: dict(filename, inclname)
-
-    # Select the appropriate files.
-    for filename in get_all_filenames():
-        if filename.startswith('mfbt/') and filename.endswith('.h'):
-            inclname = 'mozilla/' + filename[len('mfbt/'):]
-            mfbt_inclnames.add(inclname)
-
-        if filename.startswith('js/public/') and filename.endswith('.h'):
-            inclname = 'js/' + filename[len('js/public/'):]
-            js_names[filename] = inclname
-
-        if filename.startswith('js/src/') and \
-           not filename.startswith(tuple(ignored_js_src_dirs)) and \
-           filename.endswith(('.c', '.cpp', '.h', '.tbl', '.msg')):
-            inclname = filename[len('js/src/'):]
-            js_names[filename] = inclname
-
-    all_inclnames = mfbt_inclnames | set(js_names.values())
-
-    edges = dict()      # type: dict(inclname, set(inclname))
-
-    # We don't care what's inside the MFBT files, but because they are
-    # #included from JS files we have to add them to the inclusion graph.
-    for inclname in mfbt_inclnames:
-        edges[inclname] = set()
-
-    # Process all the JS files.
-    for filename in js_names.keys():
-        inclname = js_names[filename]
-        file_kind = FileKind.get(filename)
-        if file_kind == FileKind.C or file_kind == FileKind.CPP or \
-           file_kind == FileKind.H or file_kind == FileKind.INL_H:
-            included_h_inclnames = set()    # type: set(inclname)
-
-            # This script is run in js/src/, so prepend '../../' to get to the root of the Mozilla
-            # source tree.
-            with open(os.path.join('../..', filename)) as f:
-                do_file(filename, inclname, file_kind, f, all_inclnames, included_h_inclnames)
-
-        edges[inclname] = included_h_inclnames
-
-    find_cycles(all_inclnames, edges)
-
-    # Compare expected and actual output.
-    difflines = difflib.unified_diff(expected_output, actual_output,
-                                     fromfile='check_spider_monkey_style.py expected output',
-                                       tofile='check_spider_monkey_style.py actual output')
-    ok = True
-    for diffline in difflines:
-        ok = False
-        print(diffline, end='')
-
-    return ok
-
-
-def module_name(name):
-    '''Strip the trailing .cpp, .h, inlines.h or -inl.h from a filename.'''
-
-    return name.replace('inlines.h', '').replace('-inl.h', '').replace('.h', '').replace('.cpp', '')
-
-
-def is_module_header(enclosing_inclname, header_inclname):
-    '''Determine if an included name is the "module header", i.e. should be
-    first in the file.'''
-
-    module = module_name(enclosing_inclname)
-
-    # Normal case, e.g. module == "foo/Bar", header_inclname == "foo/Bar.h".
-    if module == module_name(header_inclname):
-        return True
-
-    # A public header, e.g. module == "foo/Bar", header_inclname == "js/Bar.h".
-    m = re.match(r'js\/(.*)\.h', header_inclname)
-    if m is not None and module.endswith('/' + m.group(1)):
-        return True
-
-    return False
-
-
-class Include(object):
-    '''Important information for a single #include statement.'''
-
-    def __init__(self, inclname, linenum, is_system):
-        self.inclname = inclname
-        self.linenum = linenum
-        self.is_system = is_system
-
-    def isLeaf(self):
-        return True
-
-    def section(self, enclosing_inclname):
-        '''Identify which section inclname belongs to.
-
-        The section numbers are as follows.
-          0. Module header (e.g. jsfoo.h or jsfooinlines.h within jsfoo.cpp)
-          1. mozilla/Foo.h
-          2. <foo.h> or <foo>
-          3. jsfoo.h, prmjtime.h, etc
-          4. foo/Bar.h
-          5. jsfooinlines.h
-          6. foo/Bar-inl.h
-          7. non-.h, e.g. *.tbl, *.msg
-        '''
-
-        if self.is_system:
-            return 2
-
-        if not self.inclname.endswith('.h'):
-            return 7
-
-        # A couple of modules have the .h file in js/ and the .cpp file elsewhere and so need
-        # special handling.
-        if is_module_header(enclosing_inclname, self.inclname):
-            return 0
-
-        if '/' in self.inclname:
-            if self.inclname.startswith('mozilla/'):
-                return 1
-
-            if self.inclname.endswith('-inl.h'):
-                return 6
-
-            return 4
-
-        if self.inclname.endswith('inlines.h'):
-            return 5
-
-        return 3
-
-    def quote(self):
-        if self.is_system:
-            return '<' + self.inclname + '>'
-        else:
-            return '"' + self.inclname + '"'
-
-
-class HashIfBlock(object):
-    '''Important information about a #if/#endif block.
-
-    A #if/#endif block is the contents of a #if/#endif (or similar) section.
-    The top-level block, which is not within a #if/#endif pair, is also
-    considered a block.
-
-    Each leaf is either an Include (representing a #include), or another
-    nested HashIfBlock.'''
-    def __init__(self):
-        self.kids = []
-
-    def isLeaf(self):
-        return False
-
-
-def do_file(filename, inclname, file_kind, f, all_inclnames, included_h_inclnames):
-    block_stack = [HashIfBlock()]
-
-    # Extract the #include statements as a tree of IBlocks and IIncludes.
-    for linenum, line in enumerate(f, start=1):
-        # Look for a |#include "..."| line.
-        m = re.match(r'\s*#\s*include\s+"([^"]*)"', line)
-        if m is not None:
-            block_stack[-1].kids.append(Include(m.group(1), linenum, False))
-
-        # Look for a |#include <...>| line.
-        m = re.match(r'\s*#\s*include\s+<([^>]*)>', line)
-        if m is not None:
-            block_stack[-1].kids.append(Include(m.group(1), linenum, True))
-
-        # Look for a |#{if,ifdef,ifndef}| line.
-        m = re.match(r'\s*#\s*(if|ifdef|ifndef)\b', line)
-        if m is not None:
-            # Open a new block.
-            new_block = HashIfBlock()
-            block_stack[-1].kids.append(new_block)
-            block_stack.append(new_block)
-
-        # Look for a |#{elif,else}| line.
-        m = re.match(r'\s*#\s*(elif|else)\b', line)
-        if m is not None:
-            # Close the current block, and open an adjacent one.
-            block_stack.pop()
-            new_block = HashIfBlock()
-            block_stack[-1].kids.append(new_block)
-            block_stack.append(new_block)
-
-        # Look for a |#endif| line.
-        m = re.match(r'\s*#\s*endif\b', line)
-        if m is not None:
-            # Close the current block.
-            block_stack.pop()
-
-    def check_include_statement(include):
-        '''Check the style of a single #include statement.'''
-
-        if include.is_system:
-            # Check it is not a known local file (in which case it's probably a system header).
-            if include.inclname in included_inclnames_to_ignore or \
-               include.inclname in all_inclnames:
-                error(filename, include.linenum,
-                      include.quote() + ' should be included using',
-                      'the #include "..." form')
-
-        else:
-            if include.inclname not in included_inclnames_to_ignore:
-                included_kind = FileKind.get(include.inclname)
-
-                # Check the #include path has the correct form.
-                if include.inclname not in all_inclnames:
-                    error(filename, include.linenum,
-                          include.quote() + ' is included ' + 'using the wrong path;',
-                          'did you forget a prefix, or is the file not yet committed?')
-
-                # Record inclusions of .h files for cycle detection later.
-                # (Exclude .tbl and .msg files.)
-                elif included_kind == FileKind.H or included_kind == FileKind.INL_H:
-                    included_h_inclnames.add(include.inclname)
-
-                # Check a H file doesn't #include an INL_H file.
-                if file_kind == FileKind.H and included_kind == FileKind.INL_H:
-                    error(filename, include.linenum,
-                          'vanilla header includes an inline-header file ' + include.quote())
-
-                # Check a file doesn't #include itself.  (We do this here because the cycle
-                # detection below doesn't detect this case.)
-                if inclname == include.inclname:
-                    error(filename, include.linenum, 'the file includes itself')
-
-    def check_includes_order(include1, include2):
-        '''Check the ordering of two #include statements.'''
-
-        if include1.inclname in oddly_ordered_inclnames or \
-           include2.inclname in oddly_ordered_inclnames:
-            return
-
-        section1 = include1.section(inclname)
-        section2 = include2.section(inclname)
-        if (section1 > section2) or \
-           ((section1 == section2) and (include1.inclname.lower() > include2.inclname.lower())):
-            error(filename, str(include1.linenum) + ':' + str(include2.linenum),
-                  include1.quote() + ' should be included after ' + include2.quote())
-
-    # The #include statements in the files in assembler/ and yarr/ have all manner of implicit
-    # ordering requirements.  Boo.  Ignore them.
-    skip_order_checking = inclname.startswith(('assembler/', 'yarr/'))
-
-    # Check the extracted #include statements, both individually, and the ordering of
-    # adjacent pairs that live in the same block.
-    def pair_traverse(prev, this):
-        if this.isLeaf():
-            check_include_statement(this)
-            if prev is not None and prev.isLeaf() and not skip_order_checking:
-                check_includes_order(prev, this)
-        else:
-            for prev2, this2 in zip([None] + this.kids[0:-1], this.kids):
-                pair_traverse(prev2, this2)
-
-    pair_traverse(None, block_stack[-1])
-
-
-def find_cycles(all_inclnames, edges):
-    '''Find and draw any cycles.'''
-
-    SCCs = tarjan(all_inclnames, edges)
-
-    # The various sorted() calls below ensure the output is deterministic.
-
-    def draw_SCC(c):
-        cset = set(c)
-        drawn = set()
-        def draw(v, indent):
-            out('   ' * indent + ('-> ' if indent else '   ') + v)
-            if v in drawn:
-                return
-            drawn.add(v)
-            for succ in sorted(edges[v]):
-                if succ in cset:
-                    draw(succ, indent + 1)
-        draw(sorted(c)[0], 0)
-        out('')
-
-    have_drawn_an_SCC = False
-    for scc in sorted(SCCs):
-        if len(scc) != 1:
-            if not have_drawn_an_SCC:
-                error('(multiple files)', None, 'header files form one or more cycles')
-                have_drawn_an_SCC = True
-
-            draw_SCC(scc)
-
-
-# Tarjan's algorithm for finding the strongly connected components (SCCs) of a graph.
-# https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm
-def tarjan(V, E):
-    vertex_index = {}
-    vertex_lowlink = {}
-    index = 0
-    S = []
-    all_SCCs = []
-
-    def strongconnect(v, index):
-        # Set the depth index for v to the smallest unused index
-        vertex_index[v] = index
-        vertex_lowlink[v] = index
-        index += 1
-        S.append(v)
-
-        # Consider successors of v
-        for w in E[v]:
-            if w not in vertex_index:
-                # Successor w has not yet been visited; recurse on it
-                index = strongconnect(w, index)
-                vertex_lowlink[v] = min(vertex_lowlink[v], vertex_lowlink[w])
-            elif w in S:
-                # Successor w is in stack S and hence in the current SCC
-                vertex_lowlink[v] = min(vertex_lowlink[v], vertex_index[w])
-
-        # If v is a root node, pop the stack and generate an SCC
-        if vertex_lowlink[v] == vertex_index[v]:
-            i = S.index(v)
-            scc = S[i:]
-            del S[i:]
-            all_SCCs.append(scc)
-
-        return index
-
-    for v in V:
-        if v not in vertex_index:
-            index = strongconnect(v, index)
-
-    return all_SCCs
-
-
-def main():
-    ok = check_style()
-
-    if ok:
-        print('TEST-PASS | check_spidermonkey_style.py | ok')
-    else:
-        print('TEST-UNEXPECTED-FAIL | check_spidermonkey_style.py | actual output does not match expected output;  diff is above')
-
-    sys.exit(0 if ok else 1)
-
-
-if __name__ == '__main__':
-    main()
deleted file mode 100644
--- a/js/src/config/check_vanilla_allocations.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# vim: set ts=8 sts=4 et sw=4 tw=79:
-# 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/.
-
-#----------------------------------------------------------------------------
-# All heap allocations in SpiderMonkey must go through js_malloc, js_calloc,
-# js_realloc, and js_free.  This is so that any embedder who uses a custom
-# allocator (by defining JS_USE_CUSTOM_ALLOCATOR) will see all heap allocation
-# go through that custom allocator.
-#
-# Therefore, the presence of any calls to "vanilla" allocation/free functions
-# (e.g. malloc(), free()) is a bug.
-#
-# This script checks for the presence of such disallowed vanilla
-# allocation/free function in SpiderMonkey when it's built as a library.  It
-# relies on |nm| from the GNU binutils, and so only works on Linux, but one
-# platform is good enough to catch almost all violations.
-#
-# This checking is only 100% reliable in a JS_USE_CUSTOM_ALLOCATOR build in
-# which the default definitions of js_malloc et al (in Utility.h) -- which call
-# malloc et al -- are replaced with empty definitions.  This is because the
-# presence and possible inlining of the default js_malloc et al can cause
-# malloc/calloc/realloc/free calls show up in unpredictable places.
-#
-# Unfortunately, that configuration cannot be tested on Mozilla's standard
-# testing infrastructure.  Instead, by default this script only tests that none
-# of the other vanilla allocation/free functions (operator new, memalign, etc)
-# are present.  If given the --aggressive flag, it will also check for
-# malloc/calloc/realloc/free.
-#
-# Note:  We don't check for |operator delete| and |operator delete[]|.  These
-# can be present somehow due to virtual destructors, but this is not too
-# because vanilla delete/delete[] calls don't make sense without corresponding
-# vanilla new/new[] calls, and any explicit calls will be caught by Valgrind's
-# mismatched alloc/free checking.
-#----------------------------------------------------------------------------
-
-from __future__ import print_function
-
-import argparse
-import re
-import subprocess
-import sys
-
-# The obvious way to implement this script is to search for occurrences of
-# malloc et al, succeed if none are found, and fail is some are found.
-# However, "none are found" does not necessarily mean "none are present" --
-# this script could be buggy.  (Or the output format of |nm| might change in
-# the future.)
-#
-# So jsutil.cpp deliberately contains a (never-called) function that contains a
-# single use of all the vanilla allocation/free functions.  And this script
-# fails if it (a) finds uses of those functions in files other than jsutil.cpp,
-# *or* (b) fails to find them in jsutil.cpp.
-
-# Tracks overall success of the test.
-has_failed = False
-
-
-def fail(msg):
-    print('TEST-UNEXPECTED-FAIL | check_vanilla_allocations.py |', msg)
-    global has_failed
-    has_failed = True
-
-
-def main():
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--aggressive', action='store_true',
-                        help='also check for malloc, calloc, realloc and free')
-    parser.add_argument('file', type=str,
-                        help='name of the file to check')
-    args = parser.parse_args()
-
-    # Run |nm|.  Options:
-    # -u: show only undefined symbols
-    # -C: demangle symbol names
-    # -l: show a filename and line number for each undefined symbol
-    cmd = ['nm', '-u', '-C', '-l', args.file]
-    lines = subprocess.check_output(cmd, universal_newlines=True,
-                                    stderr=subprocess.PIPE).split('\n')
-
-    # alloc_fns contains all the vanilla allocation/free functions that we look
-    # for. Regexp chars are escaped appropriately.
-
-    alloc_fns = [
-        # Matches |operator new(unsigned T)|, where |T| is |int| or |long|.
-        r'operator new\(unsigned',
-
-        # Matches |operator new[](unsigned T)|, where |T| is |int| or |long|.
-        r'operator new\[\]\(unsigned',
-
-        r'memalign',
-        # These two aren't available on all Linux configurations.
-        #r'posix_memalign',
-        #r'aligned_alloc',
-        r'valloc',
-        r'strdup'
-    ]
-
-    if args.aggressive:
-        alloc_fns += [
-            r'malloc',
-            r'calloc',
-            r'realloc',
-            r'free'
-        ]
-
-    # This is like alloc_fns, but regexp chars are not escaped.
-    alloc_fns_unescaped = [fn.translate(None, r'\\') for fn in alloc_fns]
-
-    # This regexp matches the relevant lines in the output of |nm|, which look
-    # like the following.
-    #
-    #   U malloc  /path/to/objdir/dist/include/js/Utility.h:142
-    #
-    alloc_fns_re = r'U (' + r'|'.join(alloc_fns) + r').*\/([\w\.]+):(\d+)$'
-
-    # This tracks which allocation/free functions have been seen in jsutil.cpp.
-    jsutil_cpp = set([])
-
-    for line in lines:
-        m = re.search(alloc_fns_re, line)
-        if m is None:
-            continue
-
-        fn = m.group(1)
-        filename = m.group(2)
-        linenum = m.group(3)
-        if filename == 'jsutil.cpp':
-            jsutil_cpp.add(fn)
-        else:
-            # An allocation is present in a non-special file.  Fail!
-            fail("'" + fn + "' present at " + filename + ':' + linenum)
-
-
-    # Check that all functions we expect are used in jsutil.cpp.  (This will
-    # fail if the function-detection code breaks at any point.)
-    for fn in alloc_fns_unescaped:
-        if fn not in jsutil_cpp:
-            fail("'" + fn + "' isn't used as expected in jsutil.cpp")
-        else:
-            jsutil_cpp.remove(fn)
-
-    # This should never happen, but check just in case.
-    if jsutil_cpp:
-        fail('unexpected allocation fns used in jsutil.cpp: ' +
-             ', '.join(jsutil_cpp))
-
-    if has_failed:
-        sys.exit(1)
-
-    print('TEST-PASS | check_vanilla_allocations.py | ok')
-    sys.exit(0)
-
-
-if __name__ == '__main__':
-    main()
-
deleted file mode 100644
--- a/js/src/config/config.mk
+++ /dev/null
@@ -1,910 +0,0 @@
-#
-# 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/.
-
-#
-# config.mk
-#
-# Determines the platform and builds the macros needed to load the
-# appropriate platform-specific .mk file, then defines all (most?)
-# of the generic macros.
-#
-
-# Define an include-at-most-once flag
-ifdef INCLUDED_CONFIG_MK
-$(error Do not include config.mk twice!)
-endif
-INCLUDED_CONFIG_MK = 1
-
-EXIT_ON_ERROR = set -e; # Shell loops continue past errors without this.
-
-ifndef topsrcdir
-topsrcdir	= $(DEPTH)
-endif
-
-ifndef INCLUDED_AUTOCONF_MK
-include $(DEPTH)/config/autoconf.mk
-endif
-
--include $(DEPTH)/.mozconfig.mk
-
-# Integrate with mozbuild-generated make files. We first verify that no
-# variables provided by the automatically generated .mk files are
-# present. If they are, this is a violation of the separation of
-# responsibility between Makefile.in and mozbuild files.
-_MOZBUILD_EXTERNAL_VARIABLES := \
-  ANDROID_GENERATED_RESFILES \
-  ANDROID_RES_DIRS \
-  CMSRCS \
-  CMMSRCS \
-  CPP_UNIT_TESTS \
-  DIRS \
-  EXTRA_PP_COMPONENTS \
-  EXTRA_PP_JS_MODULES \
-  FORCE_SHARED_LIB \
-  FORCE_STATIC_LIB \
-  FINAL_LIBRARY \
-  HOST_CSRCS \
-  HOST_CMMSRCS \
-  HOST_LIBRARY_NAME \
-  HOST_PROGRAM \
-  HOST_SIMPLE_PROGRAMS \
-  IS_COMPONENT \
-  JAR_MANIFEST \
-  JAVA_JAR_TARGETS \
-  JS_MODULES_PATH \
-  LIBRARY_NAME \
-  LIBXUL_LIBRARY \
-  MODULE \
-  MSVC_ENABLE_PGO \
-  NO_DIST_INSTALL \
-  PARALLEL_DIRS \
-  PROGRAM \
-  SDK_HEADERS \
-  SIMPLE_PROGRAMS \
-  TEST_DIRS \
-  TIERS \
-  TOOL_DIRS \
-  XPCSHELL_TESTS \
-  XPIDL_MODULE \
-  $(NULL)
-
-_DEPRECATED_VARIABLES := \
-  ANDROID_RESFILES \
-  MOCHITEST_FILES_PARTS \
-  MOCHITEST_BROWSER_FILES_PARTS \
-  SHORT_LIBNAME \
-  $(NULL)
-
-ifndef EXTERNALLY_MANAGED_MAKE_FILE
-# Using $(firstword) may not be perfect. But it should be good enough for most
-# scenarios.
-_current_makefile = $(CURDIR)/$(firstword $(MAKEFILE_LIST))
-
-$(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES),$(if $(filter file override,$(subst $(NULL) ,_,$(origin $(var)))),\
-    $(error Variable $(var) is defined in $(_current_makefile). It should only be defined in moz.build files),\
-    ))
-
-$(foreach var,$(_DEPRECATED_VARIABLES),$(if $(filter file override,$(subst $(NULL) ,_,$(origin $(var)))),\
-    $(error Variable $(var) is defined in $(_current_makefile). This variable has been deprecated. It does nothing. It must be removed in order to build)\
-    ))
-
-# Import the automatically generated backend file. If this file doesn't exist,
-# the backend hasn't been properly configured. We want this to be a fatal
-# error, hence not using "-include".
-ifndef STANDALONE_MAKEFILE
-GLOBAL_DEPS += backend.mk
-include backend.mk
-endif
-
-# Freeze the values specified by moz.build to catch them if they fail.
-
-$(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES),$(eval $(var)_FROZEN := '$($(var))'))
-$(foreach var,$(_DEPRECATED_VARIABLES),$(eval $(var)_FROZEN := '$($(var))'))
-
-CHECK_MOZBUILD_VARIABLES = $(foreach var,$(_MOZBUILD_EXTERNAL_VARIABLES), \
-  $(if $(subst $($(var)_FROZEN),,'$($(var))'), \
-	  $(error Variable $(var) is defined in $(_current_makefile). It should only be defined in moz.build files),\
-  )) $(foreach var,$(_DEPRECATED_VARIABLES), \
-	$(if $(subst $($(var)_FROZEN),,'$($(var))'), \
-    $(error Variable $(var) is defined in $(_current_makefile). This variable has been deprecated. It does nothing. It must be removed in order to build),\
-    ))
-
-endif
-
-space = $(NULL) $(NULL)
-
-# Include defs.mk files that can be found in $(srcdir)/$(DEPTH),
-# $(srcdir)/$(DEPTH-1), $(srcdir)/$(DEPTH-2), etc., and $(srcdir)
-# where $(DEPTH-1) is one level less of depth, $(DEPTH-2), two, etc.
-# i.e. for DEPTH=../../.., DEPTH-1 is ../.. and DEPTH-2 is ..
-# These defs.mk files are used to define variables in a directory
-# and all its subdirectories, recursively.
-__depth := $(subst /, ,$(DEPTH))
-ifeq (.,$(__depth))
-__depth :=
-endif
-$(foreach __d,$(__depth) .,$(eval __depth = $(wordlist 2,$(words $(__depth)),$(__depth))$(eval -include $(subst $(space),/,$(strip $(srcdir) $(__depth) defs.mk)))))
-
-COMMA = ,
-
-# Sanity check some variables
-CHECK_VARS := \
- XPI_NAME \
- LIBRARY_NAME \
- MODULE \
- DEPTH \
- XPI_PKGNAME \
- INSTALL_EXTENSION_ID \
- SHARED_LIBRARY_NAME \
- STATIC_LIBRARY_NAME \
- $(NULL)
-
-# checks for internal spaces or trailing spaces in the variable
-# named by $x
-check-variable = $(if $(filter-out 0 1,$(words $($(x))z)),$(error Spaces are not allowed in $(x)))
-
-$(foreach x,$(CHECK_VARS),$(check-variable))
-
-ifndef INCLUDED_FUNCTIONS_MK
-include $(topsrcdir)/config/makefiles/functions.mk
-endif
-
-RM = rm -f
-
-# LIBXUL_DIST is not defined under js/src, thus we make it mean DIST there.
-LIBXUL_DIST ?= $(DIST)
-
-# FINAL_TARGET specifies the location into which we copy end-user-shipped
-# build products (typelibs, components, chrome). It may already be specified by
-# a moz.build file.
-#
-# If XPI_NAME is set, the files will be shipped to $(DIST)/xpi-stage/$(XPI_NAME)
-# instead of $(DIST)/bin. In both cases, if DIST_SUBDIR is set, the files will be
-# shipped to a $(DIST_SUBDIR) subdirectory.
-FINAL_TARGET ?= $(if $(XPI_NAME),$(DIST)/xpi-stage/$(XPI_NAME),$(DIST)/bin)$(DIST_SUBDIR:%=/%)
-# Override the stored value for the check to make sure that the variable is not
-# redefined in the Makefile.in value.
-FINAL_TARGET_FROZEN := '$(FINAL_TARGET)'
-
-ifdef XPI_NAME
-DEFINES += -DXPI_NAME=$(XPI_NAME)
-endif
-
-# The VERSION_NUMBER is suffixed onto the end of the DLLs we ship.
-VERSION_NUMBER		= 50
-
-ifeq ($(HOST_OS_ARCH),WINNT)
-win_srcdir	:= $(subst $(topsrcdir),$(WIN_TOP_SRC),$(srcdir))
-BUILD_TOOLS	= $(WIN_TOP_SRC)/build/unix
-else
-win_srcdir	:= $(srcdir)
-BUILD_TOOLS	= $(topsrcdir)/build/unix
-endif
-
-CONFIG_TOOLS	= $(MOZ_BUILD_ROOT)/config
-AUTOCONF_TOOLS	= $(topsrcdir)/build/autoconf
-
-# Disable MOZ_PSEUDO_DERECURSE when it contains no-pymake and we're running
-# pymake. This can be removed when no-pymake is removed from the default in
-# build/autoconf/compiler-opts.m4.
-ifdef .PYMAKE
-comma = ,
-ifneq (,$(filter no-pymake,$(subst $(comma), ,$(MOZ_PSEUDO_DERECURSE))))
-MOZ_PSEUDO_DERECURSE :=
-endif
-endif
-
-# Disable MOZ_PSEUDO_DERECURSE on PGO builds until it's fixed.
-ifneq (,$(MOZ_PROFILE_USE)$(MOZ_PROFILE_GENERATE))
-MOZ_PSEUDO_DERECURSE :=
-endif
-
-#
-# Strip off the excessively long version numbers on these platforms,
-# but save the version to allow multiple versions of the same base
-# platform to be built in the same tree.
-#
-ifneq (,$(filter FreeBSD HP-UX Linux NetBSD OpenBSD SunOS,$(OS_ARCH)))
-OS_RELEASE	:= $(basename $(OS_RELEASE))
-
-# Allow the user to ignore the OS_VERSION, which is usually irrelevant.
-ifdef WANT_MOZILLA_CONFIG_OS_VERSION
-OS_VERS		:= $(suffix $(OS_RELEASE))
-OS_VERSION	:= $(shell echo $(OS_VERS) | sed 's/-.*//')
-endif
-
-endif
-
-OS_CONFIG	:= $(OS_ARCH)$(OS_RELEASE)
-
-ifdef _MSC_VER
-CC_WRAPPER ?= $(call py_action,cl)
-CXX_WRAPPER ?= $(call py_action,cl)
-endif # _MSC_VER
-
-CC := $(CC_WRAPPER) $(CC)
-CXX := $(CXX_WRAPPER) $(CXX)
-MKDIR ?= mkdir
-SLEEP ?= sleep
-TOUCH ?= touch
-
-ifdef .PYMAKE
-PYCOMMANDPATH += $(PYTHON_SITE_PACKAGES)
-endif
-
-PYTHON_PATH = $(PYTHON) $(topsrcdir)/config/pythonpath.py
-
-# determine debug-related options
-_DEBUG_ASFLAGS :=
-_DEBUG_CFLAGS :=
-_DEBUG_LDFLAGS :=
-
-ifdef MOZ_DEBUG
-  _DEBUG_CFLAGS += $(MOZ_DEBUG_ENABLE_DEFS)
-  XULPPFLAGS += $(MOZ_DEBUG_ENABLE_DEFS)
-else
-  _DEBUG_CFLAGS += $(MOZ_DEBUG_DISABLE_DEFS)
-  XULPPFLAGS += $(MOZ_DEBUG_DISABLE_DEFS)
-endif
-
-ifneq (,$(MOZ_DEBUG)$(MOZ_DEBUG_SYMBOLS))
-  ifeq ($(AS),yasm)
-    ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
-      _DEBUG_ASFLAGS += -g cv8
-    else
-      ifneq ($(OS_ARCH),Darwin)
-        _DEBUG_ASFLAGS += -g dwarf2
-      endif
-    endif
-  else
-    _DEBUG_ASFLAGS += $(MOZ_DEBUG_FLAGS)
-  endif
-  _DEBUG_CFLAGS += $(MOZ_DEBUG_FLAGS)
-  _DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS)
-endif
-
-MOZALLOC_LIB = $(call EXPAND_LIBNAME_PATH,mozalloc,$(DIST)/lib)
-
-ASFLAGS += $(_DEBUG_ASFLAGS)
-OS_CFLAGS += $(_DEBUG_CFLAGS)
-OS_CXXFLAGS += $(_DEBUG_CFLAGS)
-OS_LDFLAGS += $(_DEBUG_LDFLAGS)
-
-# XXX: What does this? Bug 482434 filed for better explanation.
-ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
-ifdef MOZ_DEBUG
-ifneq (,$(MOZ_BROWSE_INFO)$(MOZ_BSCFILE))
-OS_CFLAGS += -FR
-OS_CXXFLAGS += -FR
-endif
-else # ! MOZ_DEBUG
-
-# MOZ_DEBUG_SYMBOLS generates debug symbols in separate PDB files.
-# Used for generating an optimized build with debugging symbols.
-# Used in the Windows nightlies to generate symbols for crash reporting.
-ifdef MOZ_DEBUG_SYMBOLS
-OS_CXXFLAGS += -UDEBUG -DNDEBUG
-OS_CFLAGS += -UDEBUG -DNDEBUG
-ifdef HAVE_64BIT_OS
-OS_LDFLAGS += -DEBUG -OPT:REF,ICF
-else
-OS_LDFLAGS += -DEBUG -OPT:REF
-endif
-endif
-
-#
-# Handle trace-malloc and DMD in optimized builds.
-# No opt to give sane callstacks.
-#
-ifneq (,$(NS_TRACE_MALLOC)$(MOZ_DMD))
-MOZ_OPTIMIZE_FLAGS=-Zi -Od -UDEBUG -DNDEBUG
-ifdef HAVE_64BIT_OS
-OS_LDFLAGS = -DEBUG -OPT:REF,ICF
-else
-OS_LDFLAGS = -DEBUG -OPT:REF
-endif
-endif # NS_TRACE_MALLOC || MOZ_DMD
-
-endif # MOZ_DEBUG
-
-# We don't build a static CRT when building a custom CRT,
-# it appears to be broken. So don't link to jemalloc if
-# the Makefile wants static CRT linking.
-ifeq ($(MOZ_MEMORY)_$(USE_STATIC_LIBS),1_1)
-# Disable default CRT libs and add the right lib path for the linker
-MOZ_GLUE_LDFLAGS=
-endif
-
-endif # WINNT && !GNU_CC
-
-ifdef MOZ_GLUE_PROGRAM_LDFLAGS
-DEFINES += -DMOZ_GLUE_IN_PROGRAM
-else
-MOZ_GLUE_PROGRAM_LDFLAGS=$(MOZ_GLUE_LDFLAGS)
-endif
-
-#
-# Build using PIC by default
-#
-_ENABLE_PIC=1
-
-# Determine if module being compiled is destined
-# to be merged into libxul
-
-ifeq ($(FINAL_LIBRARY),xul)
-  ifdef LIBXUL_LIBRARY
-    $(error FINAL_LIBRARY is "xul", LIBXUL_LIBRARY is implied)
-  endif
-  LIBXUL_LIBRARY := 1
-endif
-
-ifdef LIBXUL_LIBRARY
-ifdef IS_COMPONENT
-$(error IS_COMPONENT is set, but is not compatible with LIBXUL_LIBRARY)
-endif
-FORCE_STATIC_LIB=1
-endif
-
-# If we are building this component into an extension/xulapp, it cannot be
-# statically linked. In the future we may want to add a xulapp meta-component
-# build option.
-
-ifdef XPI_NAME
-ifdef IS_COMPONENT
-EXPORT_LIBRARY=
-FORCE_STATIC_LIB=
-FORCE_SHARED_LIB=1
-endif
-endif
-
-ifndef SHARED_LIBRARY_NAME
-ifdef LIBRARY_NAME
-SHARED_LIBRARY_NAME=$(LIBRARY_NAME)
-endif
-endif
-
-ifndef STATIC_LIBRARY_NAME
-ifdef LIBRARY_NAME
-STATIC_LIBRARY_NAME=$(LIBRARY_NAME)
-endif
-endif
-
-# PGO on MSVC is opt-in
-ifdef _MSC_VER
-ifndef MSVC_ENABLE_PGO
-NO_PROFILE_GUIDED_OPTIMIZE = 1
-endif
-endif
-
-# No sense in profiling tools
-ifdef INTERNAL_TOOLS
-NO_PROFILE_GUIDED_OPTIMIZE = 1
-endif
-
-# Don't build SIMPLE_PROGRAMS with PGO, since they don't need it anyway,
-# and we don't have the same build logic to re-link them in the second pass.
-ifdef SIMPLE_PROGRAMS
-NO_PROFILE_GUIDED_OPTIMIZE = 1
-endif
-
-# No sense in profiling unit tests
-ifdef CPP_UNIT_TESTS
-NO_PROFILE_GUIDED_OPTIMIZE = 1
-endif
-
-# Enable profile-based feedback
-ifneq (1,$(NO_PROFILE_GUIDED_OPTIMIZE))
-ifdef MOZ_PROFILE_GENERATE
-OS_CFLAGS += $(if $(filter $(notdir $<),$(notdir $(NO_PROFILE_GUIDED_OPTIMIZE))),,$(PROFILE_GEN_CFLAGS))
-OS_CXXFLAGS += $(if $(filter $(notdir $<),$(notdir $(NO_PROFILE_GUIDED_OPTIMIZE))),,$(PROFILE_GEN_CFLAGS))
-OS_LDFLAGS += $(PROFILE_GEN_LDFLAGS)
-ifeq (WINNT,$(OS_ARCH))
-AR_FLAGS += -LTCG
-endif
-endif # MOZ_PROFILE_GENERATE
-
-ifdef MOZ_PROFILE_USE
-OS_CFLAGS += $(if $(filter $(notdir $<),$(notdir $(NO_PROFILE_GUIDED_OPTIMIZE))),,$(PROFILE_USE_CFLAGS))
-OS_CXXFLAGS += $(if $(filter $(notdir $<),$(notdir $(NO_PROFILE_GUIDED_OPTIMIZE))),,$(PROFILE_USE_CFLAGS))
-OS_LDFLAGS += $(PROFILE_USE_LDFLAGS)
-ifeq (WINNT,$(OS_ARCH))
-AR_FLAGS += -LTCG
-endif
-endif # MOZ_PROFILE_USE
-endif # NO_PROFILE_GUIDED_OPTIMIZE
-
-
-# Does the makefile specifies the internal XPCOM API linkage?
-ifneq (,$(MOZILLA_INTERNAL_API)$(LIBXUL_LIBRARY))
-DEFINES += -DMOZILLA_INTERNAL_API
-endif
-
-# Force XPCOM/widget/gfx methods to be _declspec(dllexport) when we're
-# building libxul libraries
-ifdef LIBXUL_LIBRARY
-DEFINES += \
-	  -DIMPL_LIBXUL \
-		$(NULL)
-
-ifndef JS_SHARED_LIBRARY
-DEFINES += -DSTATIC_EXPORTABLE_JS_API
-endif
-endif
-
-MAKE_JARS_FLAGS = \
-	-t $(topsrcdir) \
-	-f $(MOZ_CHROME_FILE_FORMAT) \
-	$(NULL)
-
-ifdef USE_EXTENSION_MANIFEST
-MAKE_JARS_FLAGS += -e
-endif
-
-TAR_CREATE_FLAGS = -chf
-
-ifeq ($(OS_ARCH),OS2)
-TAR_CREATE_FLAGS = -cf
-endif
-
-#
-# Personal makefile customizations go in these optional make include files.
-#
-MY_CONFIG	:= $(DEPTH)/config/myconfig.mk
-MY_RULES	:= $(DEPTH)/config/myrules.mk
-
-#
-# Default command macros; can be overridden in <arch>.mk.
-#
-CCC = $(CXX)
-
-# Java macros
-JAVA_GEN_DIR  = _javagen
-JAVA_DIST_DIR = $(DEPTH)/$(JAVA_GEN_DIR)
-JAVA_IFACES_PKG_NAME = org/mozilla/interfaces
-
-OS_INCLUDES += $(MOZ_JPEG_CFLAGS) $(MOZ_PNG_CFLAGS) $(MOZ_ZLIB_CFLAGS) $(MOZ_PIXMAN_CFLAGS)
-
-# NSPR_CFLAGS and NSS_CFLAGS must appear ahead of OS_INCLUDES to avoid Linux
-# builds wrongly picking up system NSPR/NSS header files.
-INCLUDES = \
-  -I$(srcdir) \
-  -I. \
-  $(LOCAL_INCLUDES) \
-  -I$(DIST)/include \
-  $(if $(LIBXUL_SDK),-I$(LIBXUL_SDK)/include) \
-  $(NSPR_CFLAGS) $(NSS_CFLAGS) \
-  $(OS_INCLUDES) \
-  $(NULL)
-
-include $(topsrcdir)/config/static-checking-config.mk
-
-CFLAGS		= $(OS_CPPFLAGS) $(OS_CFLAGS)
-CXXFLAGS	= $(OS_CPPFLAGS) $(OS_CXXFLAGS)
-LDFLAGS		= $(OS_LDFLAGS) $(MOZ_FIX_LINK_PATHS)
-
-# Allow each module to override the *default* optimization settings
-# by setting MODULE_OPTIMIZE_FLAGS if the developer has not given
-# arguments to --enable-optimize
-ifdef MOZ_OPTIMIZE
-ifeq (1,$(MOZ_OPTIMIZE))
-ifdef MODULE_OPTIMIZE_FLAGS
-CFLAGS		+= $(MODULE_OPTIMIZE_FLAGS)
-CXXFLAGS	+= $(MODULE_OPTIMIZE_FLAGS)
-else
-ifneq (,$(if $(MOZ_PROFILE_GENERATE)$(MOZ_PROFILE_USE),$(MOZ_PGO_OPTIMIZE_FLAGS)))
-CFLAGS		+= $(MOZ_PGO_OPTIMIZE_FLAGS)
-CXXFLAGS	+= $(MOZ_PGO_OPTIMIZE_FLAGS)
-else
-CFLAGS		+= $(MOZ_OPTIMIZE_FLAGS)
-CXXFLAGS	+= $(MOZ_OPTIMIZE_FLAGS)
-endif # neq (,$(MOZ_PROFILE_GENERATE)$(MOZ_PROFILE_USE))
-endif # MODULE_OPTIMIZE_FLAGS
-else
-CFLAGS		+= $(MOZ_OPTIMIZE_FLAGS)
-CXXFLAGS	+= $(MOZ_OPTIMIZE_FLAGS)
-endif # MOZ_OPTIMIZE == 1
-LDFLAGS		+= $(MOZ_OPTIMIZE_LDFLAGS)
-endif # MOZ_OPTIMIZE
-
-ifdef CROSS_COMPILE
-HOST_CFLAGS	+= $(HOST_OPTIMIZE_FLAGS)
-else
-ifdef MOZ_OPTIMIZE
-ifeq (1,$(MOZ_OPTIMIZE))
-ifdef MODULE_OPTIMIZE_FLAGS
-HOST_CFLAGS	+= $(MODULE_OPTIMIZE_FLAGS)
-else
-HOST_CFLAGS	+= $(MOZ_OPTIMIZE_FLAGS)
-endif # MODULE_OPTIMIZE_FLAGS
-else
-HOST_CFLAGS	+= $(MOZ_OPTIMIZE_FLAGS)
-endif # MOZ_OPTIMIZE == 1
-endif # MOZ_OPTIMIZE
-endif # CROSS_COMPILE
-
-CFLAGS += $(MOZ_FRAMEPTR_FLAGS)
-CXXFLAGS += $(MOZ_FRAMEPTR_FLAGS)
-
-# Check for FAIL_ON_WARNINGS & FAIL_ON_WARNINGS_DEBUG (Shorthand for Makefiles
-# to request that we use the 'warnings as errors' compile flags)
-
-# NOTE: First, we clear FAIL_ON_WARNINGS[_DEBUG] if we're doing a Windows PGO
-# build, since WARNINGS_AS_ERRORS has been suspected of causing isuses in that
-# situation. (See bug 437002.)
-ifeq (WINNT_1,$(OS_ARCH)_$(MOZ_PROFILE_GENERATE)$(MOZ_PROFILE_USE))
-FAIL_ON_WARNINGS_DEBUG=
-FAIL_ON_WARNINGS=
-endif # WINNT && (MOS_PROFILE_GENERATE ^ MOZ_PROFILE_USE)
-
-# Now, check for debug version of flag; it turns on normal flag in debug builds.
-ifdef FAIL_ON_WARNINGS_DEBUG
-ifdef MOZ_DEBUG
-FAIL_ON_WARNINGS = 1
-endif # MOZ_DEBUG
-endif # FAIL_ON_WARNINGS_DEBUG
-
-# Check for normal version of flag, and add WARNINGS_AS_ERRORS if it's set to 1.
-ifdef FAIL_ON_WARNINGS
-CXXFLAGS += $(WARNINGS_AS_ERRORS)
-CFLAGS   += $(WARNINGS_AS_ERRORS)
-endif # FAIL_ON_WARNINGS
-
-ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
-#// Currently, unless USE_STATIC_LIBS is defined, the multithreaded
-#// DLL version of the RTL is used...
-#//
-#//------------------------------------------------------------------------
-ifdef USE_STATIC_LIBS
-RTL_FLAGS=-MT          # Statically linked multithreaded RTL
-ifneq (,$(MOZ_DEBUG)$(NS_TRACE_MALLOC))
-ifndef MOZ_NO_DEBUG_RTL
-RTL_FLAGS=-MTd         # Statically linked multithreaded MSVC4.0 debug RTL
-endif
-endif # MOZ_DEBUG || NS_TRACE_MALLOC
-
-else # !USE_STATIC_LIBS
-
-RTL_FLAGS=-MD          # Dynamically linked, multithreaded RTL
-ifneq (,$(MOZ_DEBUG)$(NS_TRACE_MALLOC))
-ifndef MOZ_NO_DEBUG_RTL
-RTL_FLAGS=-MDd         # Dynamically linked, multithreaded MSVC4.0 debug RTL
-endif
-endif # MOZ_DEBUG || NS_TRACE_MALLOC
-endif # USE_STATIC_LIBS
-endif # WINNT && !GNU_CC
-
-ifeq ($(OS_ARCH),Darwin)
-# Compiling ObjC requires an Apple compiler anyway, so it's ok to set
-# host CMFLAGS here.
-HOST_CMFLAGS += -fobjc-exceptions
-HOST_CMMFLAGS += -fobjc-exceptions
-OS_COMPILE_CMFLAGS += -fobjc-exceptions
-OS_COMPILE_CMMFLAGS += -fobjc-exceptions
-ifeq ($(MOZ_WIDGET_TOOLKIT),uikit)
-OS_COMPILE_CMFLAGS += -fobjc-abi-version=2 -fobjc-legacy-dispatch
-OS_COMPILE_CMMFLAGS += -fobjc-abi-version=2 -fobjc-legacy-dispatch
-endif
-endif
-
-COMPILE_CFLAGS	= $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(DSO_CFLAGS) $(DSO_PIC_CFLAGS) $(RTL_FLAGS) $(OS_CPPFLAGS) $(OS_COMPILE_CFLAGS) $(CFLAGS) $(EXTRA_COMPILE_FLAGS)
-COMPILE_CXXFLAGS = $(STL_FLAGS) $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(DSO_CFLAGS) $(DSO_PIC_CFLAGS) $(RTL_FLAGS) $(OS_CPPFLAGS) $(OS_COMPILE_CXXFLAGS) $(CXXFLAGS) $(EXTRA_COMPILE_FLAGS)
-COMPILE_CMFLAGS = $(OS_COMPILE_CMFLAGS) $(EXTRA_COMPILE_FLAGS)
-COMPILE_CMMFLAGS = $(OS_COMPILE_CMMFLAGS) $(EXTRA_COMPILE_FLAGS)
-ASFLAGS += $(EXTRA_ASSEMBLER_FLAGS)
-
-ifndef CROSS_COMPILE
-HOST_CFLAGS += $(RTL_FLAGS)
-endif
-
-#
-# Name of the binary code directories
-#
-# Override defaults
-
-# We need to know where to find the libraries we
-# put on the link line for binaries, and should
-# we link statically or dynamic?  Assuming dynamic for now.
-
-ifneq (WINNT_,$(OS_ARCH)_$(GNU_CC))
-LIBS_DIR	= -L$(DIST)/bin -L$(DIST)/lib
-ifdef LIBXUL_SDK
-LIBS_DIR	+= -L$(LIBXUL_SDK)/bin -L$(LIBXUL_SDK)/lib
-endif
-endif
-
-# Default location of include files
-ifndef LIBXUL_SDK
-IDL_PARSER_DIR = $(topsrcdir)/xpcom/idl-parser
-IDL_PARSER_CACHE_DIR = $(DEPTH)/xpcom/idl-parser
-else
-IDL_PARSER_DIR = $(LIBXUL_SDK)/sdk/bin
-IDL_PARSER_CACHE_DIR = $(LIBXUL_SDK)/sdk/bin
-endif
-
-SDK_LIB_DIR = $(DIST)/sdk/lib
-SDK_BIN_DIR = $(DIST)/sdk/bin
-
-DEPENDENCIES	= .md
-
-MOZ_COMPONENT_LIBS=$(XPCOM_LIBS) $(MOZ_COMPONENT_NSPR_LIBS)
-
-ifdef MACOSX_DEPLOYMENT_TARGET
-export MACOSX_DEPLOYMENT_TARGET
-endif # MACOSX_DEPLOYMENT_TARGET
-
-ifdef MOZ_USING_CCACHE
-ifdef CLANG_CXX
-export CCACHE_CPP2=1
-endif
-endif
-
-# Set link flags according to whether we want a console.
-ifdef MOZ_WINCONSOLE
-ifeq ($(MOZ_WINCONSOLE),1)
-ifeq ($(OS_ARCH),OS2)
-BIN_FLAGS	+= -Zlinker -PM:VIO
-endif
-ifeq ($(OS_ARCH),WINNT)
-ifdef GNU_CC
-WIN32_EXE_LDFLAGS	+= -mconsole
-else
-WIN32_EXE_LDFLAGS	+= -SUBSYSTEM:CONSOLE
-endif
-endif
-else # MOZ_WINCONSOLE
-ifeq ($(OS_ARCH),OS2)
-BIN_FLAGS	+= -Zlinker -PM:PM
-endif
-ifeq ($(OS_ARCH),WINNT)
-ifdef GNU_CC
-WIN32_EXE_LDFLAGS	+= -mwindows
-else
-WIN32_EXE_LDFLAGS	+= -SUBSYSTEM:WINDOWS
-endif
-endif
-endif
-endif
-
-ifdef _MSC_VER
-ifeq ($(CPU_ARCH),x86_64)
-# set stack to 2MB on x64 build.  See bug 582910
-WIN32_EXE_LDFLAGS	+= -STACK:2097152
-endif
-endif
-
-# If we're building a component on MSVC, we don't want to generate an
-# import lib, because that import lib will collide with the name of a
-# static version of the same library.
-ifeq ($(GNU_LD)$(OS_ARCH),WINNT)
-ifdef IS_COMPONENT
-LDFLAGS += -IMPLIB:fake.lib
-DELETE_AFTER_LINK = fake.lib fake.exp
-endif
-endif
-
-#
-# Include any personal overrides the user might think are needed.
-#
--include $(topsrcdir)/$(MOZ_BUILD_APP)/app-config.mk
--include $(MY_CONFIG)
-
-######################################################################
-
-GARBAGE		+= $(DEPENDENCIES) core $(wildcard core.[0-9]*) $(wildcard *.err) $(wildcard *.pure) $(wildcard *_pure_*.o) Templates.DB
-
-ifeq ($(OS_ARCH),Darwin)
-ifndef NSDISTMODE
-NSDISTMODE=absolute_symlink
-endif
-PWD := $(CURDIR)
-endif
-
-NSINSTALL_PY := $(PYTHON) $(abspath $(topsrcdir)/config/nsinstall.py)
-# For Pymake, wherever we use nsinstall.py we're also going to try to make it
-# a native command where possible. Since native commands can't be used outside
-# of single-line commands, we continue to provide INSTALL for general use.
-# Single-line commands should be switched over to install_cmd.
-NSINSTALL_NATIVECMD := %nsinstall nsinstall
-
-ifdef NSINSTALL_BIN
-NSINSTALL = $(NSINSTALL_BIN)
-else
-ifeq (OS2,$(CROSS_COMPILE)$(OS_ARCH))
-NSINSTALL = $(MOZ_TOOLS_DIR)/nsinstall
-else
-ifeq ($(HOST_OS_ARCH),WINNT)
-NSINSTALL = $(NSINSTALL_PY)
-else
-NSINSTALL = $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX)
-endif # WINNT
-endif # OS2
-endif # NSINSTALL_BIN
-
-
-ifeq (,$(CROSS_COMPILE)$(filter-out WINNT OS2, $(OS_ARCH)))
-INSTALL = $(NSINSTALL) -t
-ifdef .PYMAKE
-install_cmd = $(NSINSTALL_NATIVECMD) -t $(1)
-endif # .PYMAKE
-
-else
-
-# This isn't laid out as conditional directives so that NSDISTMODE can be
-# target-specific.
-INSTALL         = $(if $(filter copy, $(NSDISTMODE)), $(NSINSTALL) -t, $(if $(filter absolute_symlink, $(NSDISTMODE)), $(NSINSTALL) -L $(PWD), $(NSINSTALL) -R))
-
-endif # WINNT/OS2
-
-# The default for install_cmd is simply INSTALL
-install_cmd ?= $(INSTALL) $(1)
-
-# Use nsinstall in copy mode to install files on the system
-SYSINSTALL	= $(NSINSTALL) -t
-# This isn't necessarily true, just here
-sysinstall_cmd = install_cmd
-
-#
-# Localization build automation
-#
-
-# Because you might wish to "make locales AB_CD=ab-CD", we don't hardcode
-# MOZ_UI_LOCALE directly, but use an intermediate variable that can be
-# overridden by the command line. (Besides, AB_CD is prettier).
-AB_CD = $(MOZ_UI_LOCALE)
-
-ifndef L10NBASEDIR
-  L10NBASEDIR = $(error L10NBASEDIR not defined by configure)
-else
-  IS_LANGUAGE_REPACK = 1
-endif
-
-EXPAND_LOCALE_SRCDIR = $(if $(filter en-US,$(AB_CD)),$(topsrcdir)/$(1)/en-US,$(or $(realpath $(L10NBASEDIR)),$(abspath $(L10NBASEDIR)))/$(AB_CD)/$(subst /locales,,$(1)))
-
-ifdef relativesrcdir
-LOCALE_SRCDIR ?= $(call EXPAND_LOCALE_SRCDIR,$(relativesrcdir))
-endif
-
-ifdef relativesrcdir
-MAKE_JARS_FLAGS += --relativesrcdir=$(relativesrcdir)
-ifneq (en-US,$(AB_CD))
-ifdef LOCALE_MERGEDIR
-MAKE_JARS_FLAGS += --locale-mergedir=$(LOCALE_MERGEDIR)
-endif
-ifdef IS_LANGUAGE_REPACK
-MAKE_JARS_FLAGS += --l10n-base=$(L10NBASEDIR)/$(AB_CD)
-endif
-else
-MAKE_JARS_FLAGS += -c $(LOCALE_SRCDIR)
-endif # en-US
-else
-MAKE_JARS_FLAGS += -c $(LOCALE_SRCDIR)
-endif # ! relativesrcdir
-
-ifdef LOCALE_MERGEDIR
-MERGE_FILE = $(firstword \
-  $(wildcard $(LOCALE_MERGEDIR)/$(subst /locales,,$(relativesrcdir))/$(1)) \
-  $(wildcard $(LOCALE_SRCDIR)/$(1)) \
-  $(srcdir)/en-US/$(1) )
-else
-MERGE_FILE = $(LOCALE_SRCDIR)/$(1)
-endif
-MERGE_FILES = $(foreach f,$(1),$(call MERGE_FILE,$(f)))
-
-ifeq (OS2,$(OS_ARCH))
-RUN_TEST_PROGRAM = $(topsrcdir)/build/os2/test_os2.cmd '$(LIBXUL_DIST)'
-else
-ifneq (WINNT,$(OS_ARCH))
-RUN_TEST_PROGRAM = $(LIBXUL_DIST)/bin/run-mozilla.sh
-endif # ! WINNT
-endif # ! OS2
-
-#
-# Java macros
-#
-
-# Make sure any compiled classes work with at least JVM 1.4
-JAVAC_FLAGS += -source 1.4
-
-ifdef MOZ_DEBUG
-JAVAC_FLAGS += -g
-endif
-
-CREATE_PRECOMPLETE_CMD = $(PYTHON) $(abspath $(topsrcdir)/config/createprecomplete.py)
-
-# MDDEPDIR is the subdirectory where dependency files are stored
-MDDEPDIR := .deps
-
-EXPAND_LIBS_EXEC = $(PYTHON) $(topsrcdir)/config/expandlibs_exec.py $(if $@,--depend $(MDDEPDIR)/$@.pp --target $@)
-EXPAND_LIBS_GEN = $(PYTHON) $(topsrcdir)/config/expandlibs_gen.py $(if $@,--depend $(MDDEPDIR)/$@.pp)
-EXPAND_AR = $(EXPAND_LIBS_EXEC) --extract -- $(AR)
-EXPAND_CC = $(EXPAND_LIBS_EXEC) --uselist -- $(CC)
-EXPAND_CCC = $(EXPAND_LIBS_EXEC) --uselist -- $(CCC)
-EXPAND_LD = $(EXPAND_LIBS_EXEC) --uselist -- $(LD)
-EXPAND_MKSHLIB_ARGS = --uselist
-ifdef SYMBOL_ORDER
-EXPAND_MKSHLIB_ARGS += --symbol-order $(SYMBOL_ORDER)
-endif
-EXPAND_MKSHLIB = $(EXPAND_LIBS_EXEC) $(EXPAND_MKSHLIB_ARGS) -- $(MKSHLIB)
-
-ifneq (,$(MOZ_LIBSTDCXX_TARGET_VERSION)$(MOZ_LIBSTDCXX_HOST_VERSION))
-ifneq ($(OS_ARCH),Darwin)
-CHECK_STDCXX = objdump -p $(1) | grep -e 'GLIBCXX_3\.4\.\(9\|[1-9][0-9]\)' > /dev/null && echo 'TEST-UNEXPECTED-FAIL | | We do not want these libstdc++ symbols to be used:' && objdump -T $(1) | grep -e 'GLIBCXX_3\.4\.\(9\|[1-9][0-9]\)' && exit 1 || exit 0
-endif
-
-ifdef MOZ_LIBSTDCXX_TARGET_VERSION
-EXTRA_LIBS += $(call EXPAND_LIBNAME_PATH,stdc++compat,$(DEPTH)/build/unix/stdc++compat)
-endif
-ifdef MOZ_LIBSTDCXX_HOST_VERSION
-HOST_EXTRA_LIBS += $(call EXPAND_LIBNAME_PATH,host_stdc++compat,$(DEPTH)/build/unix/stdc++compat)
-endif
-endif
-
-# autoconf.mk sets OBJ_SUFFIX to an error to avoid use before including
-# this file
-OBJ_SUFFIX := $(_OBJ_SUFFIX)
-
-# PGO builds with GCC build objects with instrumentation in a first pass,
-# then objects optimized, without instrumentation, in a second pass. If
-# we overwrite the ojects from the first pass with those from the second,
-# we end up not getting instrumentation data for better optimization on
-# incremental builds. As a consequence, we use a different object suffix
-# for the first pass.
-ifndef NO_PROFILE_GUIDED_OPTIMIZE
-ifdef MOZ_PROFILE_GENERATE
-ifdef GNU_CC
-OBJ_SUFFIX := i_o
-endif
-endif
-endif
-
-# EXPAND_LIBNAME - $(call EXPAND_LIBNAME,foo)
-# expands to $(LIB_PREFIX)foo.$(LIB_SUFFIX) or -lfoo, depending on linker
-# arguments syntax. Should only be used for system libraries
-
-# EXPAND_LIBNAME_PATH - $(call EXPAND_LIBNAME_PATH,foo,dir)
-# expands to dir/$(LIB_PREFIX)foo.$(LIB_SUFFIX)
-
-# EXPAND_MOZLIBNAME - $(call EXPAND_MOZLIBNAME,foo)
-# expands to $(DIST)/lib/$(LIB_PREFIX)foo.$(LIB_SUFFIX)
-
-ifdef GNU_CC
-EXPAND_LIBNAME = $(addprefix -l,$(1))
-else
-EXPAND_LIBNAME = $(foreach lib,$(1),$(LIB_PREFIX)$(lib).$(LIB_SUFFIX))
-endif
-EXPAND_LIBNAME_PATH = $(foreach lib,$(1),$(2)/$(LIB_PREFIX)$(lib).$(LIB_SUFFIX))
-EXPAND_MOZLIBNAME = $(foreach lib,$(1),$(DIST)/lib/$(LIB_PREFIX)$(lib).$(LIB_SUFFIX))
-
-PLY_INCLUDE = -I$(topsrcdir)/other-licenses/ply
-
-export CL_INCLUDES_PREFIX
-# Make sure that the build system can handle non-ASCII characters
-# in environment variables to prevent it from breking silently on
-# non-English systems.
-export NONASCII
-
-ifdef MOZ_GTK2_CFLAGS
-MOZ_GTK2_CFLAGS := -I$(topsrcdir)/widget/gtk/compat $(MOZ_GTK2_CFLAGS)
-endif
-
-DEFINES += -DNO_NSPR_10_SUPPORT
-
-ifdef IS_GYP_DIR
-LOCAL_INCLUDES += \
-  -I$(topsrcdir)/ipc/chromium/src \
-  -I$(topsrcdir)/ipc/glue \
-  -I$(DEPTH)/ipc/ipdl/_ipdlheaders \
-  $(NULL)
-
-ifeq (WINNT,$(OS_TARGET))
-# These get set via VC project file settings for normal GYP builds.
-DEFINES += -DUNICODE -D_UNICODE
-LOCAL_INCLUDES += -I'$(MOZ_DIRECTX_SDK_PATH)/include'
-endif
-
-STL_FLAGS=
-# Skip most Mozilla-specific include locations.
-INCLUDES = -I. $(LOCAL_INCLUDES) -I$(DEPTH)/dist/include
-endif
deleted file mode 100644
--- a/js/src/config/emptyvars.mk.in
+++ /dev/null
@@ -1,1 +0,0 @@
-@ALLEMPTYSUBSTS@
deleted file mode 100644
--- a/js/src/config/expandlibs.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# 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/.
-
-'''Expandlibs is a system that allows to replace some libraries with a
-descriptor file containing some linking information about them.
-
-The descriptor file format is as follows:
----8<-----
-OBJS = a.o b.o ...
-LIBS = libfoo.a libbar.a ...
---->8-----
-
-(In the example above, OBJ_SUFFIX is o and LIB_SUFFIX is a).
-
-Expandlibs also canonicalizes how to pass libraries to the linker, such
-that only the ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} form needs to be used:
-given a list of files, expandlibs will replace items with the form
-${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} following these rules:
-
-- If a ${DLL_PREFIX}${ROOT}.${DLL_SUFFIX} or
-  ${DLL_PREFIX}${ROOT}.${IMPORT_LIB_SUFFIX} file exists, use that instead
-- If the ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} file exists, use it
-- If a ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX}.${LIB_DESC_SUFFIX} file exists,
-  replace ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} with the OBJS and LIBS the
-  descriptor contains. And for each of these LIBS, also apply the same
-  rules.
-'''
-from __future__ import with_statement
-import sys, os, errno
-import expandlibs_config as conf
-
-def ensureParentDir(file):
-    '''Ensures the directory parent to the given file exists'''
-    dir = os.path.dirname(file)
-    if dir and not os.path.exists(dir):
-        try:
-            os.makedirs(dir)
-        except OSError, error:
-            if error.errno != errno.EEXIST:
-                raise
-
-def relativize(path):
-    '''Returns a path relative to the current working directory, if it is
-    shorter than the given path'''
-    def splitpath(path):
-        dir, file = os.path.split(path)
-        if os.path.splitdrive(dir)[1] == os.sep:
-            return [file]
-        return splitpath(dir) + [file]
-
-    if not os.path.exists(path):
-        return path
-    curdir = splitpath(os.path.abspath(os.curdir))
-    abspath = splitpath(os.path.abspath(path))
-    while curdir and abspath and curdir[0] == abspath[0]:
-        del curdir[0]
-        del abspath[0]
-    if not curdir and not abspath:
-        return '.'
-    relpath = os.path.join(*[os.pardir for i in curdir] + abspath)
-    if len(path) > len(relpath):
-        return relpath
-    return path
-
-def isObject(path):
-    '''Returns whether the given path points to an object file, that is,
-    ends with OBJ_SUFFIX or .i_o'''
-    return os.path.splitext(path)[1] in [conf.OBJ_SUFFIX, '.i_o']
-
-def isDynamicLib(path):
-    '''Returns whether the given path points to a dynamic library, that is,
-    ends with DLL_SUFFIX.'''
-    # On mac, the xul library is named XUL, instead of libxul.dylib. Assume any
-    # file by that name is a dynamic library.
-    return os.path.splitext(path)[1] == conf.DLL_SUFFIX or os.path.basename(path) == 'XUL'
-
-class LibDescriptor(dict):
-    KEYS = ['OBJS', 'LIBS']
-
-    def __init__(self, content=None):
-        '''Creates an instance of a lib descriptor, initialized with contents
-        from a list of strings when given. This is intended for use with
-        file.readlines()'''
-        if isinstance(content, list) and all([isinstance(item, str) for item in content]):
-            pass
-        elif content is not None:
-            raise TypeError("LibDescriptor() arg 1 must be None or a list of strings")
-        super(LibDescriptor, self).__init__()
-        for key in self.KEYS:
-            self[key] = []
-        if not content:
-            return
-        for key, value in [(s.strip() for s in item.split('=', 2)) for item in content if item.find('=') >= 0]:
-            if key in self.KEYS:
-                self[key] = value.split()
-
-    def __str__(self):
-        '''Serializes the lib descriptor'''
-        return '\n'.join('%s = %s' % (k, ' '.join(self[k])) for k in self.KEYS if len(self[k]))
-
-class ExpandArgs(list):
-    def __init__(self, args):
-        '''Creates a clone of the |args| list and performs file expansion on
-        each item it contains'''
-        super(ExpandArgs, self).__init__()
-        for arg in args:
-            self += self._expand(arg)
-
-    def _expand(self, arg):
-        '''Internal function doing the actual work'''
-        (root, ext) = os.path.splitext(arg)
-        if ext != conf.LIB_SUFFIX or not os.path.basename(root).startswith(conf.LIB_PREFIX):
-            return [relativize(arg)]
-        if len(conf.IMPORT_LIB_SUFFIX):
-            dll = root + conf.IMPORT_LIB_SUFFIX
-        else:
-            dll = root.replace(conf.LIB_PREFIX, conf.DLL_PREFIX, 1) + conf.DLL_SUFFIX
-        if os.path.exists(dll):
-            return [relativize(dll)]
-        if os.path.exists(arg):
-            return [relativize(arg)]
-        return self._expand_desc(arg)
-
-    def _expand_desc(self, arg):
-        '''Internal function taking care of lib descriptor expansion only'''
-        if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
-            with open(arg + conf.LIBS_DESC_SUFFIX, 'r') as f:
-                desc = LibDescriptor(f.readlines())
-            objs = [relativize(o) for o in desc['OBJS']]
-            for lib in desc['LIBS']:
-                objs += self._expand(lib)
-            return objs
-        return [arg]
-
-class ExpandLibsDeps(ExpandArgs):
-    '''Same as ExpandArgs, but also adds the library descriptor to the list'''
-    def _expand_desc(self, arg):
-        objs = super(ExpandLibsDeps, self)._expand_desc(arg)
-        if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
-            objs += [relativize(arg + conf.LIBS_DESC_SUFFIX)]
-        return objs
-
-if __name__ == '__main__':
-    print " ".join(ExpandArgs(sys.argv[1:]))
deleted file mode 100644
--- a/js/src/config/expandlibs_config.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# 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/.
-
-from buildconfig import substs
-
-def normalize_suffix(suffix):
-    '''Returns a normalized suffix, i.e. ensures it starts with a dot and
-    doesn't starts or ends with whitespace characters'''
-    value = suffix.strip()
-    if len(value) and not value.startswith('.'):
-        value = '.' + value
-    return value
-
-# Variables from the build system
-AR = substs['AR']
-AR_EXTRACT = substs['AR_EXTRACT'].replace('$(AR)', AR)
-DLL_PREFIX = substs['DLL_PREFIX']
-LIB_PREFIX = substs['LIB_PREFIX']
-OBJ_SUFFIX = normalize_suffix(substs['OBJ_SUFFIX'])
-LIB_SUFFIX = normalize_suffix(substs['LIB_SUFFIX'])
-DLL_SUFFIX = normalize_suffix(substs['DLL_SUFFIX'])
-IMPORT_LIB_SUFFIX = normalize_suffix(substs['IMPORT_LIB_SUFFIX'])
-LIBS_DESC_SUFFIX = normalize_suffix(substs['LIBS_DESC_SUFFIX'])
-EXPAND_LIBS_LIST_STYLE = substs['EXPAND_LIBS_LIST_STYLE']
-EXPAND_LIBS_ORDER_STYLE = substs['EXPAND_LIBS_ORDER_STYLE']
-LD_PRINT_ICF_SECTIONS = substs['LD_PRINT_ICF_SECTIONS']
deleted file mode 100644
--- a/js/src/config/expandlibs_exec.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# 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/.
-
-'''expandlibs-exec.py applies expandlibs rules, and some more (see below) to
-a given command line, and executes that command line with the expanded
-arguments.
-
-With the --extract argument (useful for e.g. $(AR)), it extracts object files
-from static libraries (or use those listed in library descriptors directly).
-
-With the --uselist argument (useful for e.g. $(CC)), it replaces all object
-files with a list file. This can be used to avoid limitations in the length
-of a command line. The kind of list file format used depends on the
-EXPAND_LIBS_LIST_STYLE variable: 'list' for MSVC style lists (@file.list)
-or 'linkerscript' for GNU ld linker scripts.
-See https://bugzilla.mozilla.org/show_bug.cgi?id=584474#c59 for more details.
-
-With the --symbol-order argument, followed by a file name, it will add the
-relevant linker options to change the order in which the linker puts the
-symbols appear in the resulting binary. Only works for ELF targets.
-'''
-from __future__ import with_statement
-import sys
-import os
-from expandlibs import (
-    ExpandArgs,
-    relativize,
-    isDynamicLib,
-    isObject,
-    ensureParentDir,
-    ExpandLibsDeps,
-)
-import expandlibs_config as conf
-from optparse import OptionParser
-import subprocess
-import tempfile
-import shutil
-import subprocess
-import re
-from mozbuild.makeutil import Makefile
-
-# The are the insert points for a GNU ld linker script, assuming a more
-# or less "standard" default linker script. This is not a dict because
-# order is important.
-SECTION_INSERT_BEFORE = [
-  ('.text', '.fini'),
-  ('.rodata', '.rodata1'),
-  ('.data.rel.ro', '.dynamic'),
-  ('.data', '.data1'),
-]
-
-class ExpandArgsMore(ExpandArgs):
-    ''' Meant to be used as 'with ExpandArgsMore(args) as ...: '''
-    def __enter__(self):
-        self.tmp = []
-        return self
-        
-    def __exit__(self, type, value, tb):
-        '''Automatically remove temporary files'''
-        for tmp in self.tmp:
-            if os.path.isdir(tmp):
-                shutil.rmtree(tmp, True)
-            else:
-                os.remove(tmp)
-
-    def extract(self):
-        self[0:] = self._extract(self)
-
-    def _extract(self, args):
-        '''When a static library name is found, either extract its contents
-        in a temporary directory or use the information found in the
-        corresponding lib descriptor.
-        '''
-        ar_extract = conf.AR_EXTRACT.split()
-        newlist = []
-        for arg in args:
-            if os.path.splitext(arg)[1] == conf.LIB_SUFFIX:
-                if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
-                    newlist += self._extract(self._expand_desc(arg))
-                    continue
-                elif os.path.exists(arg) and (len(ar_extract) or conf.AR == 'lib'):
-                    tmp = tempfile.mkdtemp(dir=os.curdir)
-                    self.tmp.append(tmp)
-                    if conf.AR == 'lib':
-                        out = subprocess.check_output([conf.AR, '-NOLOGO', '-LIST', arg])
-                        files = out.splitlines()
-                        # If lib -list returns a list full of dlls, it's an
-                        # import lib.
-                        if all(isDynamicLib(f) for f in files):
-                            newlist += [arg]
-                            continue
-                        for f in files:
-                            subprocess.call([conf.AR, '-NOLOGO', '-EXTRACT:%s' % f, os.path.abspath(arg)], cwd=tmp)
-                    else:
-                        subprocess.call(ar_extract + [os.path.abspath(arg)], cwd=tmp)
-                    objs = []
-                    for root, dirs, files in os.walk(tmp):
-                        objs += [relativize(os.path.join(root, f)) for f in files if isObject(f)]
-                    newlist += sorted(objs)
-                    continue
-            newlist += [arg]
-        return newlist
-
-    def makelist(self):
-        '''Replaces object file names with a temporary list file, using a
-        list format depending on the EXPAND_LIBS_LIST_STYLE variable
-        '''
-        objs = [o for o in self if isObject(o)]
-        if not len(objs): return
-        fd, tmp = tempfile.mkstemp(suffix=".list",dir=os.curdir)
-        if conf.EXPAND_LIBS_LIST_STYLE == "linkerscript":
-            content = ['INPUT("%s")\n' % obj for obj in objs]
-            ref = tmp
-        elif conf.EXPAND_LIBS_LIST_STYLE == "filelist":
-            content = ["%s\n" % obj for obj in objs]
-            ref = "-Wl,-filelist," + tmp
-        elif conf.EXPAND_LIBS_LIST_STYLE == "list":
-            content = ["%s\n" % obj for obj in objs]
-            ref = "@" + tmp
-        else:
-            os.close(fd)
-            os.remove(tmp)
-            return
-        self.tmp.append(tmp)
-        f = os.fdopen(fd, "w")
-        f.writelines(content)
-        f.close()
-        idx = self.index(objs[0])
-        newlist = self[0:idx] + [ref] + [item for item in self[idx:] if item not in objs]
-        self[0:] = newlist
-
-    def _getFoldedSections(self):
-        '''Returns a dict about folded sections.
-        When section A and B are folded into section C, the dict contains:
-        { 'A': 'C',
-          'B': 'C',
-          'C': ['A', 'B'] }'''
-        if not conf.LD_PRINT_ICF_SECTIONS:
-            return {}
-
-        proc = subprocess.Popen(self + [conf.LD_PRINT_ICF_SECTIONS], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
-        (stdout, stderr) = proc.communicate()
-        result = {}
-        # gold's --print-icf-sections output looks like the following:
-        # ld: ICF folding section '.section' in file 'file.o'into '.section' in file 'file.o'
-        # In terms of words, chances are this will change in the future,
-        # especially considering "into" is misplaced. Splitting on quotes
-        # seems safer.
-        for l in stderr.split('\n'):
-            quoted = l.split("'")
-            if len(quoted) > 5 and quoted[1] != quoted[5]:
-                result[quoted[1]] = [quoted[5]]
-                if quoted[5] in result:
-                    result[quoted[5]].append(quoted[1])
-                else:
-                    result[quoted[5]] = [quoted[1]]
-        return result
-
-    def _getOrderedSections(self, ordered_symbols):
-        '''Given an ordered list of symbols, returns the corresponding list
-        of sections following the order.'''
-        if not conf.EXPAND_LIBS_ORDER_STYLE in ['linkerscript', 'section-ordering-file']:
-            raise Exception('EXPAND_LIBS_ORDER_STYLE "%s" is not supported' % conf.EXPAND_LIBS_ORDER_STYLE)
-        finder = SectionFinder([arg for arg in self if isObject(arg) or os.path.splitext(arg)[1] == conf.LIB_SUFFIX])
-        folded = self._getFoldedSections()
-        sections = set()
-        ordered_sections = []
-        for symbol in ordered_symbols:
-            symbol_sections = finder.getSections(symbol)
-            all_symbol_sections = []
-            for section in symbol_sections:
-                if section in folded:
-                    if isinstance(folded[section], str):
-                        section = folded[section]
-                    all_symbol_sections.append(section)
-                    all_symbol_sections.extend(folded[section])
-                else:
-                    all_symbol_sections.append(section)
-            for section in all_symbol_sections:
-                if not section in sections:
-                    ordered_sections.append(section)
-                    sections.add(section)
-        return ordered_sections
-
-    def orderSymbols(self, order):
-        '''Given a file containing a list of symbols, adds the appropriate
-        argument to make the linker put the symbols in that order.'''
-        with open(order) as file:
-            sections = self._getOrderedSections([l.strip() for l in file.readlines() if l.strip()])
-        split_sections = {}
-        linked_sections = [s[0] for s in SECTION_INSERT_BEFORE]
-        for s in sections:
-            for linked_section in linked_sections:
-                if s.startswith(linked_section):
-                    if linked_section in split_sections:
-                        split_sections[linked_section].append(s)
-                    else:
-                        split_sections[linked_section] = [s]
-                    break
-        content = []
-        # Order is important
-        linked_sections = [s for s in linked_sections if s in split_sections]
-
-        if conf.EXPAND_LIBS_ORDER_STYLE == 'section-ordering-file':
-            option = '-Wl,--section-ordering-file,%s'
-            content = sections
-            for linked_section in linked_sections:
-                content.extend(split_sections[linked_section])
-                content.append('%s.*' % linked_section)
-                content.append(linked_section)
-
-        elif conf.EXPAND_LIBS_ORDER_STYLE == 'linkerscript':
-            option = '-Wl,-T,%s'
-            section_insert_before = dict(SECTION_INSERT_BEFORE)
-            for linked_section in linked_sections:
-                content.append('SECTIONS {')
-                content.append('  %s : {' % linked_section)
-                content.extend('    *(%s)' % s for s in split_sections[linked_section])
-                content.append('  }')
-                content.append('}')
-                content.append('INSERT BEFORE %s' % section_insert_before[linked_section])
-        else:
-            raise Exception('EXPAND_LIBS_ORDER_STYLE "%s" is not supported' % conf.EXPAND_LIBS_ORDER_STYLE)
-
-        fd, tmp = tempfile.mkstemp(dir=os.curdir)
-        f = os.fdopen(fd, "w")
-        f.write('\n'.join(content)+'\n')
-        f.close()
-        self.tmp.append(tmp)
-        self.append(option % tmp)
-
-class SectionFinder(object):
-    '''Instances of this class allow to map symbol names to sections in
-    object files.'''
-
-    def __init__(self, objs):
-        '''Creates an instance, given a list of object files.'''
-        if not conf.EXPAND_LIBS_ORDER_STYLE in ['linkerscript', 'section-ordering-file']:
-            raise Exception('EXPAND_LIBS_ORDER_STYLE "%s" is not supported' % conf.EXPAND_LIBS_ORDER_STYLE)
-        self.mapping = {}
-        for obj in objs:
-            if not isObject(obj) and os.path.splitext(obj)[1] != conf.LIB_SUFFIX:
-                raise Exception('%s is not an object nor a static library' % obj)
-            for symbol, section in SectionFinder._getSymbols(obj):
-                sym = SectionFinder._normalize(symbol)
-                if sym in self.mapping:
-                    if not section in self.mapping[sym]:
-                        self.mapping[sym].append(section)
-                else:
-                    self.mapping[sym] = [section]
-
-    def getSections(self, symbol):
-        '''Given a symbol, returns a list of sections containing it or the
-        corresponding thunks. When the given symbol is a thunk, returns the
-        list of sections containing its corresponding normal symbol and the
-        other thunks for that symbol.'''
-        sym = SectionFinder._normalize(symbol)
-        if sym in self.mapping:
-            return self.mapping[sym]
-        return []
-
-    @staticmethod
-    def _normalize(symbol):
-        '''For normal symbols, return the given symbol. For thunks, return
-        the corresponding normal symbol.'''
-        if re.match('^_ZThn[0-9]+_', symbol):
-            return re.sub('^_ZThn[0-9]+_', '_Z', symbol)
-        return symbol
-
-    @staticmethod
-    def _getSymbols(obj):
-        '''Returns a list of (symbol, section) contained in the given object
-        file.'''
-        proc = subprocess.Popen(['objdump', '-t', obj], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
-        (stdout, stderr) = proc.communicate()
-        syms = []
-        for line in stdout.splitlines():
-            # Each line has the following format:
-            # <addr> [lgu!][w ][C ][W ][Ii ][dD ][FfO ] <section>\t<length> <symbol>
-            tmp = line.split(' ',1)
-            # This gives us ["<addr>", "[lgu!][w ][C ][W ][Ii ][dD ][FfO ] <section>\t<length> <symbol>"]
-            # We only need to consider cases where "<section>\t<length> <symbol>" is present,
-            # and where the [FfO] flag is either F (function) or O (object).
-            if len(tmp) > 1 and len(tmp[1]) > 6 and tmp[1][6] in ['O', 'F']:
-                tmp = tmp[1][8:].split()
-                # That gives us ["<section>","<length>", "<symbol>"]
-                syms.append((tmp[-1], tmp[0]))
-        return syms
-
-def print_command(out, args):
-    print >>out, "Executing: " + " ".join(args)
-    for tmp in [f for f in args.tmp if os.path.isfile(f)]:
-        print >>out, tmp + ":"
-        with open(tmp) as file:
-            print >>out, "".join(["    " + l for l in file.readlines()])
-    out.flush()
-
-def main():
-    parser = OptionParser()
-    parser.add_option("--depend", dest="depend", metavar="FILE",
-        help="generate dependencies for the given execution and store it in the given file")
-    parser.add_option("--target", dest="target", metavar="FILE",
-        help="designate the target for dependencies")
-    parser.add_option("--extract", action="store_true", dest="extract",
-        help="when a library has no descriptor file, extract it first, when possible")
-    parser.add_option("--uselist", action="store_true", dest="uselist",
-        help="use a list file for objects when executing a command")
-    parser.add_option("--verbose", action="store_true", dest="verbose",
-        help="display executed command and temporary files content")
-    parser.add_option("--symbol-order", dest="symbol_order", metavar="FILE",
-        help="use the given list of symbols to order symbols in the resulting binary when using with a linker")
-
-    (options, args) = parser.parse_args()
-
-    if not options.target:
-        options.depend = False
-    if options.depend:
-        deps = ExpandLibsDeps(args)
-        # Filter out common command wrappers
-        while os.path.basename(deps[0]) in ['ccache', 'distcc']:
-            deps.pop(0)
-        # Remove command
-        deps.pop(0)
-    with ExpandArgsMore(args) as args:
-        if options.extract:
-            args.extract()
-        if options.symbol_order:
-            args.orderSymbols(options.symbol_order)
-        if options.uselist:
-            args.makelist()
-
-        if options.verbose:
-            print_command(sys.stderr, args)
-        try:
-            proc = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
-        except Exception, e:
-            print >>sys.stderr, 'error: Launching', args, ':', e
-            raise e
-        (stdout, stderr) = proc.communicate()
-        if proc.returncode and not options.verbose:
-            print_command(sys.stderr, args)
-        sys.stderr.write(stdout)
-        sys.stderr.flush()
-        if proc.returncode:
-            exit(proc.returncode)
-    if not options.depend:
-        return
-    ensureParentDir(options.depend)
-    mk = Makefile()
-    deps = [dep for dep in deps if os.path.isfile(dep) and dep != options.target]
-    no_dynamic_lib = [dep for dep in deps if not isDynamicLib(dep)]
-    mk.create_rule([options.target]).add_dependencies(no_dynamic_lib)
-    if len(deps) != len(no_dynamic_lib):
-        mk.create_rule(['%s_order_only' % options.target]).add_dependencies(dep for dep in deps if isDynamicLib(dep))
-
-    with open(options.depend, 'w') as depfile:
-        mk.dump(depfile, removal_guard=True)
-
-if __name__ == '__main__':
-    main()
deleted file mode 100644
--- a/js/src/config/expandlibs_gen.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# 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/.
-
-'''Given a list of object files and library names, prints a library
-descriptor to standard output'''
-
-from __future__ import with_statement
-import sys
-import os
-import expandlibs_config as conf
-from expandlibs import LibDescriptor, isObject, ensureParentDir, ExpandLibsDeps
-from optparse import OptionParser
-
-def generate(args):
-    desc = LibDescriptor()
-    for arg in args:
-        if isObject(arg):
-            if os.path.exists(arg):
-                desc['OBJS'].append(os.path.abspath(arg))
-            else:
-                raise Exception("File not found: %s" % arg)
-        elif os.path.splitext(arg)[1] == conf.LIB_SUFFIX:
-            if os.path.exists(arg) or os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
-                desc['LIBS'].append(os.path.abspath(arg))
-            else:
-                raise Exception("File not found: %s" % arg)
-    return desc
-
-if __name__ == '__main__':
-    parser = OptionParser()
-    parser.add_option("--depend", dest="depend", metavar="FILE",
-        help="generate dependencies for the given execution and store it in the given file")
-    parser.add_option("-o", dest="output", metavar="FILE",
-        help="send output to the given file")
-
-    (options, args) = parser.parse_args()
-    if not options.output:
-        raise Exception("Missing option: -o")
-
-    ensureParentDir(options.output)
-    with open(options.output, 'w') as outfile:
-        print >>outfile, generate(args)
-    if options.depend:
-        ensureParentDir(options.depend)
-        with open(options.depend, 'w') as depfile:
-            deps = ExpandLibsDeps(args)
-            depfile.write("%s : %s\n" % (options.output, ' '.join(deps)))
-            for dep in deps:
-                depfile.write("%s :\n" % dep)
deleted file mode 100644
--- a/js/src/config/find_OOM_errors.py
+++ /dev/null
@@ -1,352 +0,0 @@
-#!/usr/bin/env python
-# 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/.
-from __future__ import print_function
-
-usage = """%prog: A test for OOM conditions in the shell.
-
-%prog finds segfaults and other errors caused by incorrect handling of
-allocation during OOM (out-of-memory) conditions.
-"""
-
-help = """Check for regressions only. This runs a set of files with a known
-number of OOM errors (specified by REGRESSION_COUNT), and exits with a non-zero
-result if more or less errors are found. See js/src/Makefile.in for invocation.
-"""
-
-
-import hashlib
-import re
-import shlex
-import subprocess
-import sys
-import threading
-import time
-
-from optparse import OptionParser
-
-#####################################################################
-# Utility functions
-#####################################################################
-def run(args, stdin=None):
-  class ThreadWorker(threading.Thread):
-    def __init__(self, pipe):
-      super(ThreadWorker, self).__init__()
-      self.all = ""
-      self.pipe = pipe
-      self.setDaemon(True)
-
-    def run(self):
-      while True:
-        line = self.pipe.readline()
-        if line == '': break
-        else:
-          self.all += line
-
-  try:
-    if type(args) == str:
-      args = shlex.split(args)
-
-    args = [str(a) for a in args] # convert to strs
-
-    stdin_pipe = subprocess.PIPE if stdin else None
-    proc = subprocess.Popen(args, stdin=stdin_pipe, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    if stdin_pipe:
-      proc.stdin.write(stdin)
-      proc.stdin.close()
-
-    stdout_worker = ThreadWorker(proc.stdout)
-    stderr_worker = ThreadWorker(proc.stderr)
-    stdout_worker.start()
-    stderr_worker.start()
-
-    proc.wait()
-    stdout_worker.join()
-    stderr_worker.join()
-
-  except KeyboardInterrupt as e:
-    sys.exit(-1)
-
-  stdout, stderr = stdout_worker.all, stderr_worker.all
-  result = (stdout, stderr, proc.returncode)
-  return result
-
-def get_js_files():
-  (out, err, exit) = run('find ../jit-test/tests -name "*.js"')
-  if (err, exit) != ("", 0):
-    sys.exit("Wrong directory, run from an objdir")
-  return out.split()
-
-
-
-#####################################################################
-# Blacklisting
-#####################################################################
-def in_blacklist(sig):
-  return sig in blacklist
-
-def add_to_blacklist(sig):
-  blacklist[sig] = blacklist.get(sig, 0)
-  blacklist[sig] += 1
-
-# How often is a particular lines important for this.
-def count_lines():
-  """Keep track of the amount of times individual lines occur, in order to
-     prioritize the errors which occur most frequently."""
-  counts = {}
-  for string,count in blacklist.items():
-    for line in string.split("\n"):
-      counts[line] = counts.get(line, 0) + count
-
-  lines = []
-  for k,v in counts.items():
-    lines.append("{0:6}: {1}".format(v, k))
-
-  lines.sort()
-
-  countlog = file("../OOM_count_log", "w")
-  countlog.write("\n".join(lines))
-  countlog.flush()
-  countlog.close()
-
-
-#####################################################################
-# Output cleaning
-#####################################################################
-def clean_voutput(err):
-  # Skip what we can't reproduce
-  err = re.sub(r"^--\d+-- run: /usr/bin/dsymutil \"shell/js\"$", "", err, flags=re.MULTILINE)
-  err = re.sub(r"^==\d+==", "", err, flags=re.MULTILINE)
-  err = re.sub(r"^\*\*\d+\*\*", "", err, flags=re.MULTILINE)
-  err = re.sub(r"^\s+by 0x[0-9A-Fa-f]+: ", "by: ", err, flags=re.MULTILINE)
-  err = re.sub(r"^\s+at 0x[0-9A-Fa-f]+: ", "at: ", err, flags=re.MULTILINE)
-  err = re.sub(r"(^\s+Address 0x)[0-9A-Fa-f]+( is not stack'd)", r"\1\2", err, flags=re.MULTILINE)
-  err = re.sub(r"(^\s+Invalid write of size )\d+", r"\1x", err, flags=re.MULTILINE)
-  err = re.sub(r"(^\s+Invalid read of size )\d+", r"\1x", err, flags=re.MULTILINE)
-  err = re.sub(r"(^\s+Address 0x)[0-9A-Fa-f]+( is )\d+( bytes inside a block of size )[0-9,]+( free'd)", r"\1\2\3\4", err, flags=re.MULTILINE)
-
-  # Skip the repeating bit due to the segfault
-  lines = []
-  for l in err.split('\n'):
-    if l == " Process terminating with default action of signal 11 (SIGSEGV)":
-      break
-    lines.append(l)
-  err = '\n'.join(lines)
-
-  return err
-
-def remove_failed_allocation_backtraces(err):
-  lines = []
-
-  add = True
-  for l in err.split('\n'):
-
-    # Set start and end conditions for including text
-    if l == " The site of the failed allocation is:":
-      add = False
-    elif l[:2] not in ['by: ', 'at:']:
-      add = True
-
-    if add:
-      lines.append(l)
-
-
-  err = '\n'.join(lines)
-
-  return err
-
-
-def clean_output(err):
-  err = re.sub(r"^js\(\d+,0x[0-9a-f]+\) malloc: \*\*\* error for object 0x[0-9a-f]+: pointer being freed was not allocated\n\*\*\* set a breakppoint in malloc_error_break to debug\n$", "pointer being freed was not allocated", err, flags=re.MULTILINE)
-
-  return err
-
-
-#####################################################################
-# Consts, etc
-#####################################################################
-
-command_template = 'shell/js' \
-                 + ' -m -j -p' \
-                 + ' -e "const platform=\'darwin\'; const libdir=\'../jit-test/lib/\';"' \
-                 + ' -f ../jit-test/lib/prolog.js' \
-                 + ' -f {0}'
-
-
-# Blacklists are things we don't want to see in our logs again (though we do
-# want to count them when they happen). Whitelists we do want to see in our
-# logs again, principally because the information we have isn't enough.
-
-blacklist = {}
-add_to_blacklist(r"('', '', 1)") # 1 means OOM if the shell hasn't launched yet.
-add_to_blacklist(r"('', 'out of memory\n', 1)")
-
-whitelist = set()
-whitelist.add(r"('', 'out of memory\n', -11)") # -11 means OOM
-whitelist.add(r"('', 'out of memory\nout of memory\n', -11)")
-
-
-
-#####################################################################
-# Program
-#####################################################################
-
-# Options
-parser = OptionParser(usage=usage)
-parser.add_option("-r", "--regression", action="store", metavar="REGRESSION_COUNT", help=help,
-                  type="int", dest="regression", default=None)
-                  
-(OPTIONS, args) = parser.parse_args()
-
-
-if OPTIONS.regression != None:
-  # TODO: This should be expanded as we get a better hang of the OOM problems.
-  # For now, we'll just check that the number of OOMs in one short file does not
-  # increase.
-  files = ["../jit-test/tests/arguments/args-createontrace.js"]
-else:
-  files = get_js_files()
-
-  # Use a command-line arg to reduce the set of files
-  if len (args):
-    files = [f for f in files if f.find(args[0]) != -1]
-
-
-if OPTIONS.regression == None:
-  # Don't use a logfile, this is automated for tinderbox.
-  log = file("../OOM_log", "w")
-
-
-num_failures = 0
-for f in files:
-
-  # Run it once to establish boundaries
-  command = (command_template + ' -O').format(f)
-  out, err, exit = run(command)
-  max = re.match(".*OOM max count: (\d+).*", out, flags=re.DOTALL).groups()[0]
-  max = int(max)
-  
-  # OOMs don't recover well for the first 20 allocations or so.
-  # TODO: revisit this.
-  for i in range(20, max): 
-
-    if OPTIONS.regression == None:
-      print("Testing allocation {0}/{1} in {2}".format(i,max,f))
-    else:
-      sys.stdout.write('.') # something short for tinderbox, no space or \n
-
-    command = (command_template + ' -A {0}').format(f, i)
-    out, err, exit = run(command)
-
-    # Success (5 is SM's exit code for controlled errors)
-    if exit == 5 and err.find("out of memory") != -1:
-      continue
-
-    # Failure
-    else:
-
-      if OPTIONS.regression != None:
-        # Just count them
-        num_failures += 1
-        continue
-
-      #########################################################################
-      # The regression tests ends above. The rest of this is for running  the
-      # script manually.
-      #########################################################################
-
-      problem = str((out, err, exit))
-      if in_blacklist(problem) and problem not in whitelist:
-        add_to_blacklist(problem)
-        continue
-
-      add_to_blacklist(problem)
-
-
-      # Get valgrind output for a good stack trace
-      vcommand = "valgrind --dsymutil=yes -q --log-file=OOM_valgrind_log_file " + command
-      run(vcommand)
-      vout = file("OOM_valgrind_log_file").read()
-      vout = clean_voutput(vout)
-      sans_alloc_sites = remove_failed_allocation_backtraces(vout)
-
-      # Don't print duplicate information
-      if in_blacklist(sans_alloc_sites):
-        add_to_blacklist(sans_alloc_sites)
-        continue
-
-      add_to_blacklist(sans_alloc_sites)
-
-      log.write ("\n")
-      log.write ("\n")
-      log.write ("=========================================================================")
-      log.write ("\n")
-      log.write ("An allocation failure at\n\tallocation {0}/{1} in {2}\n\t"
-                 "causes problems (detected using bug 624094)"
-                 .format(i, max, f))
-      log.write ("\n")
-      log.write ("\n")
-
-      log.write ("Command (from obj directory, using patch from bug 624094):\n  " + command)
-      log.write ("\n")
-      log.write ("\n")
-      log.write ("stdout, stderr, exitcode:\n  " + problem)
-      log.write ("\n")
-      log.write ("\n")
-
-      double_free = err.find("pointer being freed was not allocated") != -1
-      oom_detected = err.find("out of memory") != -1
-      multiple_oom_detected = err.find("out of memory\nout of memory") != -1
-      segfault_detected = exit == -11
-
-      log.write ("Diagnosis: ")
-      log.write ("\n")
-      if multiple_oom_detected:
-        log.write ("  - Multiple OOMs reported")
-        log.write ("\n")
-      if segfault_detected:
-        log.write ("  - segfault")
-        log.write ("\n")
-      if not oom_detected:
-        log.write ("  - No OOM checking")
-        log.write ("\n")
-      if double_free:
-        log.write ("  - Double free")
-        log.write ("\n")
-
-      log.write ("\n")
-
-      log.write ("Valgrind info:\n" + vout)
-      log.write ("\n")
-      log.write ("\n")
-      log.flush()
-
-  if OPTIONS.regression == None:
-    count_lines()
-
-print()
-
-# Do the actual regression check
-if OPTIONS.regression != None:
-  expected_num_failures = OPTIONS.regression
-
-  if num_failures != expected_num_failures:
-
-    print("TEST-UNEXPECTED-FAIL |", end='')
-    if num_failures > expected_num_failures:
-      print("More out-of-memory errors were found ({0}) than expected ({1}). "
-            "This probably means an allocation site has been added without a "
-            "NULL-check. If this is unavoidable, you can account for it by "
-            "updating Makefile.in.".format(num_failures, expected_num_failures),
-            end='')
-    else:
-      print("Congratulations, you have removed {0} out-of-memory error(s) "
-            "({1} remain)! Please account for it by updating Makefile.in." 
-            .format(expected_num_failures - num_failures, num_failures),
-            end='')
-    sys.exit(-1)
-  else:
-    print('TEST-PASS | find_OOM_errors | Found the expected number of OOM '
-          'errors ({0})'.format(expected_num_failures))
-
deleted file mode 100644
--- a/js/src/config/gcc_hidden.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/* 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/. */
-
-/* Begin all files as hidden visibility */
-#pragma GCC visibility push(hidden)
deleted file mode 100644
--- a/js/src/config/make-system-wrappers.pl
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/perl
-#
-# 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/.
-
-$output_dir = shift;
-
-while (<STDIN>) {
-    chomp;
-    if (-e "$output_dir/$_") {
-	next;
-    }
-
-    if (/(.*)\/[^\/*]/) {
-	mkdir "$output_dir/$1";
-    }
-
-    open OUT, ">$output_dir/$_";
-    print OUT "#pragma GCC system_header\n";  # suppress include_next warning
-    print OUT "#pragma GCC visibility push(default)\n";
-    print OUT "#include_next \<$_\>\n";
-    print OUT "#pragma GCC visibility pop\n";
-    close OUT;
-}
-
deleted file mode 100644
--- a/js/src/config/makefiles/autotargets.mk
+++ /dev/null
@@ -1,94 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-#
-
-ifndef INCLUDED_AUTOTARGETS_MK #{
-
-# Conditional does not wrap the entire file so multiple
-# includes will be able to accumulate dependencies.
-
-###########################################################################
-#      AUTO_DEPS - A list of deps/targets drived from other macros.
-###########################################################################
-
-MKDIR ?= mkdir -p
-TOUCH ?= touch
-
-# declare for local use, rules.mk may not have been loaded
-space = $(NULL) $(NULL)
-
-# Deps will be considered intermediate when used as a pre-requisite for
-# wildcard targets.  Inhibit their removal, mkdir -p is a standalone op.
-.PRECIOUS: %/.mkdir.done
-
-#########################
-##---]  FUNCTIONS  [---##
-#########################
-
-# Squeeze can be overzealous, restore root for abspath
-getPathPrefix =$(if $(filter /%,$(1)),/)
-
-# Squeeze '//' from the path, easily created by string functions
-_slashSqueeze =$(foreach val,$(getargv),$(call getPathPrefix,$(val))$(subst $(space),/,$(strip $(subst /,$(space),$(val)))))
-
-# Squeeze extraneous directory slashes from the path
-#  o protect embedded spaces within the path
-#  o replace //+ sequences with /
-slash_strip = \
-  $(strip \
-    $(subst <--[**]-->,$(space),\
-	$(call _slashSqueeze,\
-    $(subst $(space),<--[**]-->,$(1))\
-  )))
-
-# Extract directory path from a dependency file.
-mkdir_stem =$(foreach val,$(getargv),$(subst /.mkdir.done,$(NULL),$(val)))
-
-## Generate timestamp file for threadsafe directory creation
-mkdir_deps =$(foreach dir,$(getargv),$(call slash_strip,$(dir)/.mkdir.done))
-
-#######################
-##---]  TARGETS  [---##
-#######################
-
-%/.mkdir.done: # mkdir -p -p => mkdir -p
-	$(subst $(space)-p,$(null),$(MKDIR)) -p '$(dir $@)'
-# Make the timestamp old enough for not being a problem with symbolic links
-# targets depending on it. Use Jan 3, 1980 to accomodate any timezone where
-# 198001010000 would translate to something older than FAT epoch.
-	@$(TOUCH) -t 198001030000 '$@'
-
-# A handful of makefiles are attempting "mkdir dot".
-# tbpl/valgrind builds are using this target
-# https://bugzilla.mozilla.org/show_bug.cgi?id=837754
-.mkdir.done:
-	@echo 'WARNING: $(MKDIR) -dot- requested by $(MAKE) -C $(CURDIR) $(MAKECMDGOALS)'
-	@$(TOUCH) -t 198001030000 '$@'
-
-INCLUDED_AUTOTARGETS_MK = 1
-endif #}
-
-
-## Accumulate deps and cleanup
-ifneq (,$(GENERATED_DIRS))
-  GENERATED_DIRS := $(strip $(sort $(GENERATED_DIRS)))
-  tmpauto :=$(call mkdir_deps,GENERATED_DIRS)
-  GENERATED_DIRS_DEPS +=$(tmpauto)
-  GARBAGE_DIRS        +=$(GENERATED_DIRS)
-endif
-
-#################################################################
-# One ring/dep to rule them all:
-#   config/rules.mk::all target is available by default
-#   Add $(AUTO_DEPS) as an explicit target dependency when needed.
-#################################################################
-
-AUTO_DEPS +=$(GENERATED_DIRS_DEPS)
-AUTO_DEPS := $(strip $(sort $(AUTO_DEPS)))
-
-# Complain loudly if deps have not loaded so getargv != $(NULL)
-$(call requiredfunction,getargv)
deleted file mode 100644
--- a/js/src/config/makefiles/debugmake.mk
+++ /dev/null
@@ -1,121 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-#
-
-###########################################################################
-## Intent: Helper targets for displaying variables and state information
-###########################################################################
-
-# Support usage outside of config/rules.mk
-ifndef INCLUDED_DEBUGMAKE_MK #{
-
-define shell_quote
-'$(subst ','\'',$(1))'
-endef
-
-echo-variable-%:
-	@echo $(call shell_quote,$($*))
-
-echo-tiers:
-	@echo $(TIERS)
-
-echo-tier-dirs:
-	@$(foreach tier,$(TIERS),echo '$(tier):'; echo '  dirs: $(tier_$(tier)_dirs)'; $(if $(tier_$(tier)_staticdirs),echo '  staticdirs: $(tier_$(tier)_staticdirs)';) )
-
-echo-dirs:
-	@echo $(call shell_quote,$(DIRS))
-
-define print_var
-@printf '%20s = %s\n' $1 $(call shell_quote,$($1))
-
-endef
-
-define print_vars
-$(foreach var,$1,$(call print_var,$(var)))
-endef
-
-showtargs:
-ifneq (,$(filter $(PROGRAM) $(HOST_PROGRAM) $(SIMPLE_PROGRAMS) $(HOST_LIBRARY) $(LIBRARY) $(SHARED_LIBRARY),$(TARGETS)))
-	@echo --------------------------------------------------------------------------------
-	$(call print_vars,\
-		PROGRAM \
-		SIMPLE_PROGRAMS \
-		LIBRARY \
-		SHARED_LIBRARY \
-		SHARED_LIBRARY_LIBS \
-		LIBS \
-		DEF_FILE \
-		IMPORT_LIBRARY \
-		STATIC_LIBS \
-		EXTRA_DSO_LDOPTS \
-		DEPENDENT_LIBS \
-	)
-	@echo --------------------------------------------------------------------------------
-endif
-	$(LOOP_OVER_PARALLEL_DIRS)
-	$(LOOP_OVER_DIRS)
-	$(LOOP_OVER_TOOL_DIRS)
-
-showbuild:
-	$(call print_vars,\
-		MOZ_BUILD_ROOT \
-		MOZ_WIDGET_TOOLKIT \
-		CC \
-		CXX \
-		CCC \
-		CPP \
-		LD \
-		AR \
-		IMPLIB \
-		FILTER \
-		MKSHLIB \
-		MKCSHLIB \
-		RC \
-		MC \
-		CFLAGS \
-		OS_CFLAGS \
-		COMPILE_CFLAGS \
-		CXXFLAGS \
-		OS_CXXFLAGS \
-		COMPILE_CXXFLAGS \
-		COMPILE_CMFLAGS \
-		COMPILE_CMMFLAGS \
-		LDFLAGS \
-		OS_LDFLAGS \
-		DSO_LDOPTS \
-		OS_INCLUDES \
-		OS_LIBS \
-		EXTRA_LIBS \
-		BIN_FLAGS \
-		INCLUDES \
-		DEFINES \
-		ACDEFINES \
-		BIN_SUFFIX \
-		LIB_SUFFIX \
-		DLL_SUFFIX \
-		IMPORT_LIB_SUFFIX \
-		INSTALL \
-		VPATH \
-	)
-
-showhost:
-	$(call print_vars,\
-		HOST_CC \
-		HOST_CXX \
-		HOST_CFLAGS \
-		HOST_LDFLAGS \
-		HOST_LIBS \
-		HOST_EXTRA_LIBS \
-		HOST_EXTRA_DEPS \
-		HOST_PROGRAM \
-		HOST_OBJS \
-		HOST_PROGOBJS \
-		HOST_LIBRARY \
-	)
-
-INCLUDED_DEBUGMAKE_MK = 1
-endif #}
deleted file mode 100644
--- a/js/src/config/makefiles/functions.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# 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/.
-
-#
-# functions.mk
-#
-# Defines functions that are needed by various Makefiles throughout the build
-# system, which are needed before config.mk can be included.
-#
-
-# Define an include-at-most-once flag
-ifdef INCLUDED_FUNCTIONS_MK
-$(error Do not include functions.mk twice!)
-endif
-INCLUDED_FUNCTIONS_MK = 1
-
-core_abspath = $(error core_abspath is unsupported, use $$(abspath) instead)
-core_realpath = $(error core_realpath is unsupported)
-
-core_winabspath = $(error core_winabspath is unsupported)
-
-# Run a named Python build action. The first argument is the name of the build
-# action. The second argument are the arguments to pass to the action (space
-# delimited arguments). e.g.
-#
-#   libs::
-#       $(call py_action,purge_manifests,_build_manifests/purge/foo.manifest)
-ifdef .PYMAKE
-py_action = %mozbuild.action.$(1) main $(2)
-else
-py_action = $(PYTHON) -m mozbuild.action.$(1) $(2)
-endif
deleted file mode 100644
--- a/js/src/config/makefiles/java-build.mk
+++ /dev/null
@@ -1,113 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-
-ifndef INCLUDED_JAVA_BUILD_MK #{
-
-ifdef JAVAFILES #{
-GENERATED_DIRS += classes
-
-export:: classes
-classes: $(call mkdir_deps,classes)
-endif #} JAVAFILES
-
-
-ifdef ANDROID_APK_NAME #{
-android_res_dirs := $(addprefix $(srcdir)/,$(or $(ANDROID_RES_DIRS),res))
-_ANDROID_RES_FLAG := $(addprefix -S ,$(android_res_dirs))
-_ANDROID_ASSETS_FLAG := $(addprefix -A ,$(ANDROID_ASSETS_DIR))
-
-GENERATED_DIRS += classes
-
-classes.dex: $(call mkdir_deps,classes)
-classes.dex: R.java
-classes.dex: $(ANDROID_APK_NAME).ap_
-classes.dex: $(JAVAFILES)
-	$(JAVAC) $(JAVAC_FLAGS) -d classes $(filter %.java,$^)
-	$(DX) --dex --output=$@ classes $(ANDROID_EXTRA_JARS)
-
-# R.java and $(ANDROID_APK_NAME).ap_ are both produced by aapt.  To
-# save an aapt invocation, we produce them both at the same time.
-
-R.java: .aapt.deps
-$(ANDROID_APK_NAME).ap_: .aapt.deps
-
-# This uses the fact that Android resource directories list all
-# resource files one subdirectory below the parent resource directory.
-android_res_files := $(wildcard $(addsuffix /*,$(wildcard $(addsuffix /*,$(android_res_dirs)))))
-
-.aapt.deps: AndroidManifest.xml $(android_res_files) $(wildcard $(ANDROID_ASSETS_DIR))
-	$(AAPT) package -f -M $< -I $(ANDROID_SDK)/android.jar $(_ANDROID_RES_FLAG) $(_ANDROID_ASSETS_FLAG) \
-		-J ${@D} \
-		-F $(ANDROID_APK_NAME).ap_
-	@$(TOUCH) $@
-
-$(ANDROID_APK_NAME)-unsigned-unaligned.apk: $(ANDROID_APK_NAME).ap_ classes.dex
-	cp $< $@
-	$(ZIP) -0 $@ classes.dex
-
-$(ANDROID_APK_NAME)-unaligned.apk: $(ANDROID_APK_NAME)-unsigned-unaligned.apk
-	cp $< $@
-	$(DEBUG_JARSIGNER) $@
-
-$(ANDROID_APK_NAME).apk: $(ANDROID_APK_NAME)-unaligned.apk
-	$(ZIPALIGN) -f -v 4 $< $@
-
-GARBAGE += \
-  R.java \
-  classes.dex  \
-  $(ANDROID_APK_NAME).ap_ \
-  $(ANDROID_APK_NAME)-unsigned-unaligned.apk \
-  $(ANDROID_APK_NAME)-unaligned.apk \
-  $(ANDROID_APK_NAME).apk \
-  $(NULL)
-
-JAVA_CLASSPATH := $(ANDROID_SDK)/android.jar
-ifdef ANDROID_EXTRA_JARS #{
-JAVA_CLASSPATH := $(JAVA_CLASSPATH):$(subst $(NULL) ,:,$(strip $(ANDROID_EXTRA_JARS)))
-endif #} ANDROID_EXTRA_JARS
-
-# Include Android specific java flags, instead of what's in rules.mk.
-include $(topsrcdir)/config/android-common.mk
-endif #} ANDROID_APK_NAME
-
-
-ifdef JAVA_JAR_TARGETS #{
-# Arg 1: Output target name with .jar suffix, like jars/jarfile.jar.
-#        Intermediate class files are generated in jars/jarfile-classes.
-# Arg 2: Java sources list.  We use VPATH and $^ so sources can be
-#        relative to $(srcdir) or $(CURDIR).
-# Arg 3: List of extra jars to link against.  We do not use VPATH so
-#        jars must be relative to $(CURDIR).
-# Arg 4: Additional JAVAC_FLAGS.
-define java_jar_template
-$(1): $(2) $(3)
-	$$(REPORT_BUILD)
-	@$$(NSINSTALL) -D $(1:.jar=)-classes
-	@$$(if $$(filter-out .,$$(@D)),$$(NSINSTALL) -D $$(@D))
-	$$(JAVAC) $$(JAVAC_FLAGS)\
-    $(4)\
-		-d $(1:.jar=)-classes\
-		$(if $(strip $(3)),-classpath $(subst $(NULL) ,:,$(strip $(3))))\
-		$$(filter %.java,$$^)
-	$$(JAR) cMf $$@ -C $(1:.jar=)-classes .
-
-GARBAGE += $(1)
-
-GARBAGE_DIRS += $(1:.jar=)-classes
-endef
-
-$(foreach jar,$(JAVA_JAR_TARGETS),\
-  $(if $($(jar)_DEST),,$(error Missing $(jar)_DEST))\
-  $(if $($(jar)_JAVAFILES),,$(error Missing $(jar)_JAVAFILES))\
-  $(eval $(call java_jar_template,$($(jar)_DEST),$($(jar)_JAVAFILES) $($(jar)_PP_JAVAFILES),$($(jar)_EXTRA_JARS),$($(jar)_JAVAC_FLAGS)))\
-)
-endif #} JAVA_JAR_TARGETS
-
-
-INCLUDED_JAVA_BUILD_MK := 1
-
-endif #} INCLUDED_JAVA_BUILD_MK
deleted file mode 100644
--- a/js/src/config/makefiles/makeutils.mk
+++ /dev/null
@@ -1,121 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-
-## Identify function argument types
-istype =$(if $(value ${1}),list,scalar)
-isval  =$(if $(filter-out list,$(call istype,${1})),true)
-isvar  =$(if $(filter-out scalar,$(call istype,${1})),true)
-
-# Access up to 9 arguments passed, option needed to emulate $*
-# Inline for function expansion, do not use $(call )
-argv  =$(strip
-argv +=$(if $(1), $(1))$(if $(2), $(2))$(if $(3), $(3))$(if $(4), $(4))
-argv +=$(if $(5), $(5))$(if $(6), $(6))$(if $(7), $(7))$(if $(8), $(8))
-argv +=$(if $(9), $(9))
-argv +=$(if $(10), $(error makeutils.mk::argv can only handle 9 arguments))
-argv +=)
-
-###########################################################################
-## Access function args as a simple list, inline within user functions.
-## Usage: $(info ** $(call banner,$(getargv)))
-##    $(call banner,scalar)
-##    $(call banner,list0 list1 list2)
-##    $(call banner,ref) ; ref=foo bar tans
-## getarglist() would be a more accurate name but is longer to type
-getargv = $(if $(call isvar,$(1)),$($(1)),$(argv))
-
-###########################################################################
-# Strip [n] leading options from an argument list.  This will allow passing
-# extra args to user functions that will not propogate to sub-$(call )'s
-# Usage: $(call subargv,2)
-subargv =$(wordlist $(1),$(words $(getargv)),$(getargv))
-
-###########################################################################
-# Intent: Display a distinct banner heading in the output stream
-# Usage: $(call banner,BUILDING: foo bar tans)
-# Debug:
-#   target-preqs = \
-#     $(call banner,target-preqs-BEGIN) \
-#     foo bar tans \
-#     $(call banner,target-preqs-END) \
-#     $(NULL)
-#   target: $(target-preqs)
-
-banner = \
-$(info ) \
-$(info ***************************************************************************) \
-$(info ** $(getargv)) \
-$(info ***************************************************************************) \
-$(NULL)
-
-#####################################################################
-# Intent: Determine if a string or pattern is contained in a list
-# Usage: strcmp  - $(call if_XinY,clean,$(MAKECMDGOALS))
-#      : pattern - $(call if_XinY,clean%,$(MAKECMDGOALS))
-is_XinY =$(filter $(1),$(call subargv,3,$(getargv)))
-
-#####################################################################
-# Provide an alternate var to support testing
-ifdef MAKEUTILS_UNIT_TEST
-  mcg_goals=TEST_MAKECMDGOALS
-else
-  mcg_goals=MAKECMDGOALS
-endif
-
-# Intent: Conditionals for detecting common/tier target use
-isTargetStem       = $(sort \
-  $(foreach var,$(getargv),\
-    $(foreach pat,$(var)% %$(var),\
-      $(call is_XinY,$(pat),${$(mcg_goals)})\
-  )))
-isTargetStemClean  = $(call isTargetStem,clean)
-isTargetStemExport = $(call isTargetStem,export)
-isTargetStemLibs   = $(call isTargetStem,libs)
-isTargetStemTools  = $(call isTargetStem,tools)
-
-##################################################
-# Intent: Validation functions / unit test helpers
-
-errorifneq =$(if $(subst $(strip $(1)),$(NULL),$(strip $(2))),$(error expected [$(1)] but found [$(2)]))
-
-# Intent: verify function declaration exists
-requiredfunction =$(foreach func,$(1) $(2) $(3) $(4) $(5) $(6) $(7) $(8) $(9),$(if $(value $(func)),$(NULL),$(error required function [$(func)] is unavailable)))
-
-
-
-## http://www.gnu.org/software/make/manual/make.html#Call-Function
-## Usage: o = $(call map,origin,o map $(MAKE))
-map = $(foreach val,$(2),$(call $(1),$(val)))
-
-
-## Disable checking for clean targets
-ifeq (,$(filter %clean clean%,$(MAKECMDGOALS))) #{
-
-# Usage: $(call checkIfEmpty,[error|warning] foo NULL bar)
-checkIfEmpty =$(foreach var,$(wordlist 2,100,$(argv)),$(if $(strip $($(var))),$(NOP),$(call $(1),Variable $(var) does not contain a value)))
-
-# Usage: $(call errorIfEmpty,foo NULL bar)
-errorIfEmpty =$(call checkIfEmpty,error $(argv))
-warnIfEmpty  =$(call checkIfEmpty,warning $(argv))
-
-endif #}
-
-###########################################################################
-## Common makefile library loader
-###########################################################################
-topORerr =$(if $(topsrcdir),$(topsrcdir),$(error topsrcdir is not defined))
-
-ifdef USE_AUTOTARGETS_MK # mkdir_deps
-  include $(topORerr)/config/makefiles/autotargets.mk
-endif
-
-ifdef USE_RCS_MK
-  include $(topORerr)/config/makefiles/rcs.mk
-endif
-
-## copy(src, dst): recursive copy
-copy_dir = (cd $(1)/. && $(TAR) $(TAR_CREATE_FLAGS) - .) | (cd $(2)/. && tar -xf -)
deleted file mode 100644
--- a/js/src/config/makefiles/mochitest.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-
-ifndef INCLUDED_TESTS_MOCHITEST_MK #{
-
-#   $1- test directory name
-#   $2- optional: if passed dot used to flatten directory hierarchy copy
-# else- relativesrcdir
-mochitestdir = \
-    $(strip \
-      $(if $(2),$(DEPTH)/_tests/testing/mochitest/$1/. \
-        ,$(DEPTH)/_tests/testing/mochitest/$1/$(relativesrcdir) \
-    ))
-
-
-ifdef MOCHITEST_FILES
-MOCHITEST_DEST := $(call mochitestdir,tests)
-INSTALL_TARGETS += MOCHITEST
-endif
-
-ifdef MOCHITEST_CHROME_FILES
-MOCHITEST_CHROME_DEST := $(call mochitestdir,chrome)
-INSTALL_TARGETS += MOCHITEST_CHROME
-endif
-
-ifdef MOCHITEST_BROWSER_FILES
-MOCHITEST_BROWSER_DEST := $(call mochitestdir,browser)
-INSTALL_TARGETS += MOCHITEST_BROWSER
-endif
-
-ifdef MOCHITEST_A11Y_FILES
-MOCHITEST_A11Y_DEST := $(call mochitestdir,a11y)
-INSTALL_TARGETS += MOCHITEST_A11Y
-endif
-
-ifdef MOCHITEST_METRO_FILES
-MOCHITEST_METRO_DEST := $(call mochitestdir,metro)
-INSTALL_TARGETS += MOCHITEST_METRO
-endif
-
-ifdef MOCHITEST_ROBOCOP_FILES
-MOCHITEST_ROBOCOP_DEST := $(call mochitestdir,tests/robocop,flat_hierarchy)
-INSTALL_TARGETS += MOCHITEST_ROBOCOP
-endif
-
-INCLUDED_TESTS_MOCHITEST_MK := 1
-
-endif #} INCLUDED_TESTS_MOCHITEST_MK
deleted file mode 100644
--- a/js/src/config/makefiles/nonrecursive.mk
+++ /dev/null
@@ -1,68 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-
-# The purpose of this file is to pull in non-recursive targets when performing
-# a partial tree (not top-level) build. This will allow people to continue to
-# build individual directories while some of the targets may not be normally
-# defined in that make file.
-#
-# Non-recursive targets are attached to existing make targets. The
-# NONRECURSIVE_TARGETS variable lists the make targets that modified. For
-# each target in this list, the NONRECURSIVE_TARGET_<target> variable will
-# contain a list of partial variable names. We will then look in variables
-# named NONRECURSIVE_TARGETS_<target>_<fragment>_* for information describing
-# how to evaluate non-recursive make targets.
-#
-# Targets are defined by the following variables:
-#
-#   FILE - The make file to evaluate. This is equivalent to
-#      |make -f <FILE>|
-#   DIRECTORY - The directory whose Makefile to evaluate. This is
-#      equivalent to |make -C <DIRECTORY>|.
-#   TARGETS - Targets to evaluate in that make file.
-#
-# Only 1 of FILE or DIRECTORY may be defined.
-#
-# For example:
-#
-# NONRECURSIVE_TARGETS = export libs
-# NONRECURSIVE_TARGETS_export = headers
-# NONRECURSIVE_TARGETS_export_headers_FILE = /path/to/exports.mk
-# NONRECURSIVE_TARGETS_export_headers_TARGETS = $(DIST)/include/foo.h $(DIST)/include/bar.h
-# NONRECURSIVE_TARGETS_libs = cppsrcs
-# NONRECURSIVE_TARGETS_libs_cppsrcs_DIRECTORY = $(DEPTH)/foo
-# NONRECURSIVE_TARGETS_libs_cppsrcs_TARGETS = /path/to/foo.o /path/to/bar.o
-#
-# Will get turned into the following:
-#
-# exports::
-#     $(MAKE) -C $(DEPTH) -f /path/to/exports.mk $(DIST)/include/foo.h $(DIST)/include/bar.h
-#
-# libs::
-#     $(MAKE) -C $(DEPTH)/foo /path/to/foo.o /path/to/bar.o
-
-ifndef INCLUDED_NONRECURSIVE_MK
-
-define define_nonrecursive_target
-$(1)::
-	$$(MAKE) -C $(or $(4),$$(DEPTH)) $(addprefix -f ,$(3)) $(2)
-endef
-
-$(foreach target,$(NONRECURSIVE_TARGETS), \
-    $(foreach entry,$(NONRECURSIVE_TARGETS_$(target)), \
-        $(eval $(call define_nonrecursive_target, \
-            $(target), \
-            $(NONRECURSIVE_TARGETS_$(target)_$(entry)_TARGETS), \
-            $(NONRECURSIVE_TARGETS_$(target)_$(entry)_FILE), \
-            $(NONRECURSIVE_TARGETS_$(target)_$(entry)_DIRECTORY), \
-        )) \
-    ) \
-)
-
-INCLUDED_NONRECURSIVE_MK := 1
-endif
-
deleted file mode 100644
--- a/js/src/config/makefiles/rcs.mk
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-#
-
-ifdef USE_RCS_MK #{
-
-ifndef INCLUDED_RCS_MK #{
-
-MOZ_RCS_TYPE_HG ?= $(notdir $(wildcard $(topsrcdir)/.hg))
-MOZ_RCS_TYPE_GIT ?= $(notdir $(wildcard $(topsrcdir)/.git))
-
-
-###########################################################################
-# HAVE_MERCURIAL_RCS
-###########################################################################
-ifeq (.hg,$(MOZ_RCS_TYPE_HG)) #{
-
-# Intent: Retrieve the http:// repository path for a directory.
-# Usage: $(call getSourceRepo[,repo_dir|args])
-# Args:
-#   path (optional): repository to query.  Defaults to $(topsrcdir)
-getSourceRepo = \
-  $(call FUNC_getSourceRepo,$(if $(1),cd $(1) && hg,hg --repository $(topsrcdir)))
-
-# return: http://hg.mozilla.org/mozilla-central
-FUNC_getSourceRepo = \
-  $(strip \
-    $(patsubst %/,%,\
-    $(patsubst ssh://%,http://%,\
-    $(firstword $(shell $(getargv) showconfig paths.default))\
-    )))
-
-#} HAVE_MERCURIAL_RCS
-
-###########################################################################
-# HAVE_GIT_RCS
-###########################################################################
-else ifeq (.git,$(MOZ_RCS_TYPE_GIT)) #{
-
-GIT ?= git
-getSourceRepo = \
-  $(shell cd $(topsrcdir) && $(GIT) rev-parse --verify HEAD)
-
-endif #} HAVE_GIT_RCS
-
-
-INCLUDED_RCS_MK := 1
-endif #}
-
-endif #}
deleted file mode 100644
--- a/js/src/config/makefiles/target_binaries.mk
+++ /dev/null
@@ -1,122 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-
-ifdef EXPORT_LIBRARY
-ifeq ($(EXPORT_LIBRARY),1)
-ifdef IS_COMPONENT
-EXPORT_LIBRARY = $(DEPTH)/staticlib/components
-else
-EXPORT_LIBRARY = $(DEPTH)/staticlib
-endif
-else
-# If EXPORT_LIBRARY has a value, we'll be installing there. We also need to cleanup there
-GARBAGE += $(foreach lib,$(LIBRARY),$(EXPORT_LIBRARY)/$(lib))
-endif
-endif # EXPORT_LIBRARY
-
-binaries libs:: $(SUBMAKEFILES) $(TARGETS)
-ifndef NO_DIST_INSTALL
-ifdef SHARED_LIBRARY
-ifdef IS_COMPONENT
-	$(INSTALL) $(IFLAGS2) $(SHARED_LIBRARY) $(FINAL_TARGET)/components
-ifndef NO_COMPONENTS_MANIFEST
-	$(call py_action,buildlist,$(FINAL_TARGET)/chrome.manifest 'manifest components/components.manifest')
-	$(call py_action,buildlist,$(FINAL_TARGET)/components/components.manifest 'binary-component $(SHARED_LIBRARY)')
-endif
-endif # IS_COMPONENT
-endif # SHARED_LIBRARY
-endif # !NO_DIST_INSTALL
-
-ifndef NO_DIST_INSTALL
-
-ifneq (,$(strip $(PROGRAM)$(SIMPLE_PROGRAMS)))
-PROGRAMS_EXECUTABLES = $(SIMPLE_PROGRAMS) $(PROGRAM)
-PROGRAMS_DEST ?= $(FINAL_TARGET)
-PROGRAMS_TARGET := binaries libs
-INSTALL_TARGETS += PROGRAMS
-endif
-
-ifdef LIBRARY
-ifdef EXPORT_LIBRARY
-LIBRARY_FILES = $(LIBRARY)
-LIBRARY_DEST ?= $(EXPORT_LIBRARY)
-LIBRARY_TARGET = binaries libs
-INSTALL_TARGETS += LIBRARY
-endif
-ifdef DIST_INSTALL
-ifdef IS_COMPONENT
-$(error Shipping static component libs makes no sense.)
-else
-DIST_LIBRARY_FILES = $(LIBRARY)
-DIST_LIBRARY_DEST ?= $(DIST)/lib
-DIST_LIBRARY_TARGET = binaries libs
-INSTALL_TARGETS += DIST_LIBRARY
-endif
-endif # DIST_INSTALL
-endif # LIBRARY
-
-
-ifdef SHARED_LIBRARY
-ifndef IS_COMPONENT
-SHARED_LIBRARY_FILES = $(SHARED_LIBRARY)
-SHARED_LIBRARY_DEST ?= $(FINAL_TARGET)
-SHARED_LIBRARY_TARGET = binaries libs
-INSTALL_TARGETS += SHARED_LIBRARY
-
-ifneq (,$(filter OS2 WINNT,$(OS_ARCH)))
-ifndef NO_INSTALL_IMPORT_LIBRARY
-IMPORT_LIB_FILES = $(IMPORT_LIBRARY)
-endif # NO_INSTALL_IMPORT_LIBRARY
-else
-IMPORT_LIB_FILES = $(SHARED_LIBRARY)
-endif
-
-IMPORT_LIB_DEST ?= $(DIST)/lib
-IMPORT_LIB_TARGET = binaries libs
-ifdef IMPORT_LIB_FILES
-INSTALL_TARGETS += IMPORT_LIB
-endif
-
-endif # ! IS_COMPONENT
-endif # SHARED_LIBRARY
-
-ifneq (,$(strip $(HOST_SIMPLE_PROGRAMS)$(HOST_PROGRAM)))
-HOST_PROGRAMS_EXECUTABLES = $(HOST_SIMPLE_PROGRAMS) $(HOST_PROGRAM)
-HOST_PROGRAMS_DEST ?= $(DIST)/host/bin
-HOST_PROGRAMS_TARGET = binaries libs
-INSTALL_TARGETS += HOST_PROGRAMS
-endif
-
-ifdef HOST_LIBRARY
-HOST_LIBRARY_FILES = $(HOST_LIBRARY)
-HOST_LIBRARY_DEST ?= $(DIST)/host/lib
-HOST_LIBRARY_TARGET = binaries libs
-INSTALL_TARGETS += HOST_LIBRARY
-endif
-
-endif # !NO_DIST_INSTALL
-
-ifdef MOZ_PSEUDO_DERECURSE
-BINARIES_INSTALL_TARGETS := $(foreach category,$(INSTALL_TARGETS),$(if $(filter binaries,$($(category)_TARGET)),$(category)))
-
-# Fill a dependency file with all the binaries installed somewhere in $(DIST)
-# and with dependencies on the relevant backend files.
-BINARIES_PP := $(MDDEPDIR)/binaries.pp
-
-$(BINARIES_PP): Makefile $(wildcard backend.mk) $(call mkdir_deps,$(MDDEPDIR))
-	@echo '$(strip $(foreach category,$(BINARIES_INSTALL_TARGETS),\
-		$(foreach file,$($(category)_FILES) $($(category)_EXECUTABLES),\
-			$($(category)_DEST)/$(notdir $(file)): $(file)%\
-		)\
-	))binaries: Makefile $(wildcard backend.mk)' | tr % '\n' > $@
-
-else
-binaries::
-	$(error The binaries target is not supported without MOZ_PSEUDO_DERECURSE)
-endif
-
-# EOF
deleted file mode 100644
--- a/js/src/config/milestone.pl
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/perl -w
-# 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/.
-
-use Getopt::Long;
-
-use strict;
-use vars qw(
-            $OBJDIR
-            $SRCDIR
-            $TOPSRCDIR
-            $SCRIPTDIR
-            @TEMPLATE_FILE
-            $MILESTONE_FILE
-            $MILESTONE
-            $MILESTONE_NUM
-            @MILESTONE_PARTS
-            $MINI_VERSION
-            $MICRO_VERSION
-            $opt_debug
-            $opt_template
-            $opt_uaversion
-            $opt_symbolversion
-            $opt_help
-            );
-
-$SCRIPTDIR = $0;
-$SCRIPTDIR =~ s/[^\/]*$//;
-push(@INC,$SCRIPTDIR);
-
-require "Moz/Milestone.pm";
-
-&GetOptions('topsrcdir=s' => \$TOPSRCDIR, 'srcdir=s' => \$SRCDIR, 'objdir=s' => \$OBJDIR, 'debug', 'help', 'template', 'uaversion', 'symbolversion');
-
-if (defined($opt_help)) {
-    &usage();
-    exit;
-}
-
-if (defined($opt_template)) {
-    @TEMPLATE_FILE = @ARGV;
-    if ($opt_debug) {
-        print("TEMPLATE_FILE = --@TEMPLATE_FILE--\n");
-    }
-}
-
-if (!defined($SRCDIR)) { $SRCDIR = '.'; }
-if (!defined($OBJDIR)) { $OBJDIR = '.'; }
-
-$MILESTONE_FILE  = "$TOPSRCDIR/config/milestone.txt";
-@MILESTONE_PARTS = (0, 0, 0, 0);
-
-#
-# Grab milestone (top line of $MILESTONE_FILE that starts with a digit)
-#
-my $milestone = Moz::Milestone::getOfficialMilestone($MILESTONE_FILE);
-
-if (@TEMPLATE_FILE) {
-  my $TFILE;
-
-  foreach $TFILE (@TEMPLATE_FILE) {
-    my $BUILT_FILE = "$OBJDIR/$TFILE";
-    $TFILE = "$SRCDIR/$TFILE.tmpl";
-
-    if (-e $TFILE) {
-
-      Moz::Milestone::build_file($TFILE,$BUILT_FILE);
-
-    } else {
-      warn("$0:  No such file $TFILE!\n");
-    }
-  }
-} elsif(defined($opt_uaversion)) {
-  # Only expose the major milestone in the UA string, hide the patch level
-  # (bugs 572659 and 870868).
-  my $uaversion = Moz::Milestone::getMilestoneMajor($milestone) . ".0";
-  print "$uaversion\n";
-} elsif(defined($opt_symbolversion)) {
-  # Only expose major milestone and alpha version. Used for symbol versioning
-  # on Linux.
-  my $symbolversion = Moz::Milestone::getMilestoneMajor($milestone) .
-                      Moz::Milestone::getMilestoneABWithNum($milestone);
-  print "$symbolversion\n";
-} else {
-  print "$milestone\n";
-}
-
-sub usage() {
-  print <<END
-`milestone.pl [--topsrcdir TOPSRCDIR] [--objdir OBJDIR] [--srcdir SRCDIR] --template [file list] --uaversion --symbolversion`  # will build file list from .tmpl files
-END
-    ;
-}
deleted file mode 100644
--- a/js/src/config/milestone.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Holds the current milestone.
-# Should be in the format of
-#
-#    x.x.x
-#    x.x.x.x
-#    x.x.x+
-#
-# Referenced by milestone.pl.
-# Hopefully I'll be able to automate replacement of *all*
-# hardcoded milestones in the tree from these two files.
-#--------------------------------------------------------
-
-29.0a1
deleted file mode 100644
--- a/js/src/config/moz.build
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-CONFIGURE_SUBST_FILES += [
-    'autoconf.mk',
-    'emptyvars.mk',
-]
-
-NO_DIST_INSTALL = True
-# For sanity's sake, we compile nsinstall without the wrapped system
-# headers, so that we can use it to set up the wrapped system headers.
-NO_VISIBILITY_FLAGS = True
-
-if CONFIG['HOST_OS_ARCH'] != 'WINNT':
-    HOST_SOURCES += [
-        'nsinstall.c',
-        'pathsub.c',
-    ]
-    HOST_PROGRAM = 'nsinstall_real'
-
-# Force wrap zlib system header if building js as a shared library.
-if CONFIG['JS_SHARED_LIBRARY'] or CONFIG['MOZ_NATIVE_ZLIB']:
-    DEFINES['MOZ_NATIVE_ZLIB'] = 1
-
-if CONFIG['MOZ_SHARED_ICU']:
-    DEFINES['MOZ_SHARED_ICU'] = True
deleted file mode 100644
--- a/js/src/config/nsinstall.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* 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/. */
-/*
-** Netscape portable install command.
-**
-** Brendan Eich, 7/20/95
-*/
-#include <stdio.h>  /* OSF/1 requires this before grp.h, so put it first */
-#include <assert.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <dirent.h>
-#include <limits.h>
-#include <grp.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <utime.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "pathsub.h"
-
-#ifdef HAVE_GETOPT_H
-#include <getopt.h>
-#endif
-
-#ifdef SUNOS4
-#include "sunos4.h"
-#endif
-
-#ifdef NEXTSTEP
-#include <bsd/libc.h>
-#endif
-
-#ifdef __QNX__
-#include <unix.h>
-#endif
-
-#ifdef NEED_S_ISLNK
-#if !defined(S_ISLNK) && defined(S_IFLNK)
-#define S_ISLNK(a)	(((a) & S_IFMT) == S_IFLNK)
-#endif
-#endif
-
-#ifndef _DIRECTORY_SEPARATOR
-#define _DIRECTORY_SEPARATOR "/"
-#endif /* _DIRECTORY_SEPARATOR */
-
-#ifdef NEED_FCHMOD_PROTO
-extern int fchmod(int fildes, mode_t mode);
-#endif
-
-static void
-usage(void)
-{
-    fprintf(stderr,
-	"usage: %s [-C cwd] [-L linkprefix] [-m mode] [-o owner] [-g group]\n"
-	"       %*s [-DdltR] file [file ...] directory\n",
-	program, (int) strlen(program), "");
-    exit(2);
-}
-
-static int
-mkdirs(char *path, mode_t mode)
-{
-    char *cp;
-    struct stat sb;
-    int res;
-    int l;
-
-    /* strip trailing "/." */
-    l = strlen(path);
-    if(l > 1 && path[l - 1] == '.' && path[l - 2] == '/')
-        path[l - 2] = 0;
-
-    while (*path == '/' && path[1] == '/')
-	path++;
-    for (cp = strrchr(path, '/'); cp && cp != path && *(cp - 1) == '/'; cp--);
-    if (cp && cp != path) {
-	*cp = '\0';
-	if ((lstat(path, &sb) < 0 || !S_ISDIR(sb.st_mode)) &&
-	    mkdirs(path, mode) < 0) {
-	    return -1;
-	}
-	*cp = '/';
-    }
-    
-    res = mkdir(path, mode);
-    if ((res != 0) && (errno == EEXIST))
-      return 0;
-    else
-      return res;
-}
-
-static uid_t
-touid(char *owner)
-{
-    struct passwd *pw;
-    uid_t uid;
-    char *cp;
-
-    pw = getpwnam(owner);
-    if (pw)
-	return pw->pw_uid;
-    uid = strtol(owner, &cp, 0);
-    if (uid == 0 && cp == owner)
-	fail("cannot find uid for %s", owner);
-    return uid;
-}
-
-static gid_t
-togid(char *group)
-{
-    struct group *gr;
-    gid_t gid;
-    char *cp;
-
-    gr = getgrnam(group);
-    if (gr)
-	return gr->gr_gid;
-    gid = strtol(group, &cp, 0);
-    if (gid == 0 && cp == group)
-	fail("cannot find gid for %s", group);
-    return gid;
-}
-
-static void
-copyfile( char *name, char *toname, mode_t mode, char *group, char *owner,
-          int dotimes, uid_t uid, gid_t gid )
-{
-  int fromfd, tofd = -1, cc, wc, exists;
-  char buf[BUFSIZ], *bp;
-  struct stat sb, tosb;
-  struct utimbuf utb;
-
-  exists = (lstat(toname, &tosb) == 0);
-
-  fromfd = open(name, O_RDONLY);
-  if (fromfd < 0 || fstat(fromfd, &sb) < 0)
-    fail("cannot access %s", name);
-  if (exists) {
-    if (S_ISREG(tosb.st_mode)) {
-      /* See if we can open it. This is more reliable than 'access'. */
-      tofd = open(toname, O_CREAT | O_WRONLY, 0666);
-    }
-    if (tofd < 0) {
-      (void) (S_ISDIR(tosb.st_mode) ? rmdir : unlink)(toname);
-    }
-  }
-  if (tofd < 0) {
-    tofd = open(toname, O_CREAT | O_WRONLY, 0666);
-    if (tofd < 0)
-      fail("cannot create %s", toname);
-  }
-
-  bp = buf;
-  while ((cc = read(fromfd, bp, sizeof buf)) > 0)
-  {
-    while ((wc = write(tofd, bp, (unsigned int)cc)) > 0)
-    {
-      if ((cc -= wc) == 0)
-        break;
-      bp += wc;
-    }
-    if (wc < 0)
-      fail("cannot write to %s", toname);
-  }
-  if (cc < 0)
-    fail("cannot read from %s", name);
-
-  if (ftruncate(tofd, sb.st_size) < 0)
-    fail("cannot truncate %s", toname);
-#if !defined(VMS)
-  if (dotimes)
-  {
-    utb.actime = sb.st_atime;
-    utb.modtime = sb.st_mtime;
-    if (utime(toname, &utb) < 0)
-      fail("cannot set times of %s", toname);
-  }
-#ifdef HAVE_FCHMOD
-  if (fchmod(tofd, mode) < 0)
-#else
-  if (chmod(toname, mode) < 0)
-#endif
-    fail("cannot change mode of %s", toname);
-#endif
-  if ((owner || group) && fchown(tofd, uid, gid) < 0)
-    fail("cannot change owner of %s", toname);
-
-  /* Must check for delayed (NFS) write errors on close. */
-  if (close(tofd) < 0)
-    fail("cannot write to %s", toname);
-  close(fromfd);
-#if defined(VMS)
-  if (chmod(toname, (mode & (S_IREAD | S_IWRITE))) < 0)
-    fail("cannot change mode of %s", toname);
-  if (dotimes)
-  {
-    utb.actime = sb.st_atime;
-    utb.modtime = sb.st_mtime;
-    if (utime(toname, &utb) < 0)
-      fail("cannot set times of %s", toname);
-  }
-#endif
-}
-
-static void
-copydir( char *from, char *to, mode_t mode, char *group, char *owner,
-         int dotimes, uid_t uid, gid_t gid)
-{
-  int i;
-  DIR *dir;
-  struct dirent *ep;
-  struct stat sb;
-  char *base, *destdir, *direntry, *destentry;
-
-  base = xbasename(from);
-
-  /* create destination directory */
-  destdir = xmalloc((unsigned int)(strlen(to) + 1 + strlen(base) + 1));
-  sprintf(destdir, "%s%s%s", to, _DIRECTORY_SEPARATOR, base);
-  if (mkdirs(destdir, mode) != 0) {
-    fail("cannot make directory %s\n", destdir);
-    free(destdir);
-    return;
-  }
-
-  if (!(dir = opendir(from))) {
-    fail("cannot open directory %s\n", from);
-    free(destdir);
-    return;
-  }
-
-  direntry = xmalloc((unsigned int)PATH_MAX);
-  destentry = xmalloc((unsigned int)PATH_MAX);
-
-  while ((ep = readdir(dir)))
-  {
-    if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
-      continue;
-
-    sprintf(direntry, "%s/%s", from, ep->d_name);
-    sprintf(destentry, "%s%s%s", destdir, _DIRECTORY_SEPARATOR, ep->d_name);
-
-    if (stat(direntry, &sb) == 0 && S_ISDIR(sb.st_mode))
-      copydir( direntry, destdir, mode, group, owner, dotimes, uid, gid );
-    else
-      copyfile( direntry, destentry, mode, group, owner, dotimes, uid, gid );
-  }
-
-  free(destdir);
-  free(direntry);
-  free(destentry);
-  closedir(dir);
-}
-
-int
-main(int argc, char **argv)
-{
-    int onlydir, dodir, dolink, dorelsymlink, dotimes, opt, len, lplen, tdlen, bnlen, exists, fromfd, tofd, cc, wc;
-    mode_t mode = 0755;
-    char *linkprefix, *owner, *group, *cp, *cwd, *todir, *toname, *name, *base, *linkname, *bp, buf[BUFSIZ];
-    uid_t uid;
-    gid_t gid;
-    struct stat sb, tosb, fromsb;
-    struct utimbuf utb;
-
-    program = argv[0];
-    cwd = linkname = linkprefix = owner = group = 0;
-    onlydir = dodir = dolink = dorelsymlink = dotimes = lplen = 0;
-
-    while ((opt = getopt(argc, argv, "C:DdlL:Rm:o:g:t")) != EOF) {
-	switch (opt) {
-	  case 'C':
-	    cwd = optarg;
-	    break;
-	  case 'D':
-	    onlydir = 1;
-	    break;
-	  case 'd':
-	    dodir = 1;
-	    break;
-	  case 'L':
-	    linkprefix = optarg;
-	    lplen = strlen(linkprefix);
-	    dolink = 1;
-	    break;
-	  case 'R':
-	    dolink = dorelsymlink = 1;
-	    break;
-	  case 'm':
-	    mode = strtoul(optarg, &cp, 8);
-	    if (mode == 0 && cp == optarg)
-		usage();
-	    break;
-	  case 'o':
-	    owner = optarg;
-	    break;
-	  case 'g':
-	    group = optarg;
-	    break;
-	  case 't':
-	    dotimes = 1;
-	    break;
-	  default:
-	    usage();
-	}
-    }
-
-    argc -= optind;
-    argv += optind;
-    if (argc < 2 - onlydir)
-	usage();
-
-    todir = argv[argc-1];
-    if ((stat(todir, &sb) < 0 || !S_ISDIR(sb.st_mode)) &&
-	mkdirs(todir, 0777) < 0) {
-	fail("cannot make directory %s", todir);
-    }
-    if (onlydir)
-	return 0;
-
-    if (!cwd) {
-#ifndef NEEDS_GETCWD
-#ifndef GETCWD_CANT_MALLOC
-	cwd = getcwd(0, PATH_MAX);
-#else
-	cwd = malloc(PATH_MAX + 1);
-	cwd = getcwd(cwd, PATH_MAX);
-#endif
-#else
-	cwd = malloc(PATH_MAX + 1);
-	cwd = getwd(cwd);
-#endif
-    }
-
-    xchdir(todir);
-#ifndef NEEDS_GETCWD
-#ifndef GETCWD_CANT_MALLOC
-    todir = getcwd(0, PATH_MAX);
-#else
-    todir = malloc(PATH_MAX + 1);
-    todir = getcwd(todir, PATH_MAX);
-#endif
-#else
-    todir = malloc(PATH_MAX + 1);
-    todir = getwd(todir);
-#endif
-    tdlen = strlen(todir);
-    xchdir(cwd);
-    tdlen = strlen(todir);
-
-    uid = owner ? touid(owner) : (uid_t)(-1);
-    gid = group ? togid(group) : (gid_t)(-1);
-
-    while (--argc > 0) {
-	name = *argv++;
-	len = strlen(name);
-	base = xbasename(name);
-	bnlen = strlen(base);
-	toname = xmalloc((unsigned int)(tdlen + 1 + bnlen + 1));
-	sprintf(toname, "%s%s%s", todir, _DIRECTORY_SEPARATOR, base);
-	exists = (lstat(toname, &tosb) == 0);
-
-	if (dodir) {
-	    /* -d means create a directory, always */
-	    if (exists && !S_ISDIR(tosb.st_mode)) {
-		(void) unlink(toname);
-		exists = 0;
-	    }
-	    if (!exists && mkdir(toname, mode) < 0)
-		fail("cannot make directory %s", toname);
-	    if ((owner || group) && chown(toname, uid, gid) < 0)
-		fail("cannot change owner of %s", toname);
-	} else if (dolink) {
-            if (access(name, R_OK) != 0) {
-                fail("cannot access %s", name);
-            }
-	    if (*name == '/') {
-		/* source is absolute pathname, link to it directly */
-		linkname = 0;
-	    } else {
-		if (linkprefix) {
-		    /* -L prefixes names with a $cwd arg. */
-		    len += lplen + 1;
-		    linkname = xmalloc((unsigned int)(len + 1));
-		    sprintf(linkname, "%s/%s", linkprefix, name);
-		} else if (dorelsymlink) {
-		    /* Symlink the relative path from todir to source name. */
-		    linkname = xmalloc(PATH_MAX);
-
-		    if (*todir == '/') {
-			/* todir is absolute: skip over common prefix. */
-			lplen = relatepaths(todir, cwd, linkname);
-			strcpy(linkname + lplen, name);
-		    } else {
-			/* todir is named by a relative path: reverse it. */
-			reversepath(todir, name, len, linkname);
-			xchdir(cwd);
-		    }
-
-		    len = strlen(linkname);
-		}
-		name = linkname;
-	    }
-
-	    /* Check for a pre-existing symlink with identical content. */
-	    if ((exists && (!S_ISLNK(tosb.st_mode) ||
-						readlink(toname, buf, sizeof buf) != len ||
-						strncmp(buf, name, (unsigned int)len) != 0)) || 
-			((stat(name, &fromsb) == 0) && 
-			 (fromsb.st_mtime > tosb.st_mtime))) {
-		(void) (S_ISDIR(tosb.st_mode) ? rmdir : unlink)(toname);
-		exists = 0;
-	    }
-	    if (!exists && symlink(name, toname) < 0)
-		fail("cannot make symbolic link %s", toname);
-#ifdef HAVE_LCHOWN
-	    if ((owner || group) && lchown(toname, uid, gid) < 0)
-		fail("cannot change owner of %s", toname);
-#endif
-
-	    if (linkname) {
-		free(linkname);
-		linkname = 0;
-	    }
-	} else {
-	    /* Copy from name to toname, which might be the same file. */
-      if( stat(name, &sb) == 0 && S_IFDIR & sb.st_mode )
-      {
-        /* then is directory: must explicitly create destination dir  */
-        /*  and manually copy files over                              */
-        copydir( name, todir, mode, group, owner, dotimes, uid, gid );
-      } 
-      else
-      {
-        copyfile(name, toname, mode, group, owner, dotimes, uid, gid);
-      }
-    }
-
-	free(toname);
-    }
-
-    free(cwd);
-    free(todir);
-    return 0;
-}
deleted file mode 100644
--- a/js/src/config/nsinstall.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# 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/.
-
-# This is a partial python port of nsinstall.
-# It's intended to be used when there's no natively compile nsinstall
-# available, and doesn't intend to be fully equivalent.
-# Its major use is for l10n repackaging on systems that don't have
-# a full build environment set up.
-# The basic limitation is, it doesn't even try to link and ignores
-# all related options.
-from __future__ import print_function
-from optparse import OptionParser
-import os
-import os.path
-import sys
-import shutil
-import stat
-
-def _nsinstall_internal(argv):
-  usage = "usage: %prog [options] arg1 [arg2 ...] target-directory"
-  p = OptionParser(usage=usage)
-
-  p.add_option('-D', action="store_true",
-               help="Create a single directory only")
-  p.add_option('-t', action="store_true",
-               help="Preserve time stamp")
-  p.add_option('-m', action="store",
-               help="Set mode", metavar="mode")
-  p.add_option('-d', action="store_true",
-               help="Create directories in target")
-  p.add_option('-R', action="store_true",
-               help="Use relative symbolic links (ignored)")
-  p.add_option('-L', action="store", metavar="linkprefix",
-               help="Link prefix (ignored)")
-  p.add_option('-X', action="append", metavar="file",
-               help="Ignore a file when installing a directory recursively.")
-
-  # The remaining arguments are not used in our tree, thus they're not
-  # implented.
-  def BadArg(option, opt, value, parser):
-    parser.error('option not supported: {0}'.format(opt))
-    
-  p.add_option('-C', action="callback", metavar="CWD",
-               callback=BadArg,
-               help="NOT SUPPORTED")
-  p.add_option('-o', action="callback", callback=BadArg,
-               help="Set owner (NOT SUPPORTED)", metavar="owner")
-  p.add_option('-g', action="callback", callback=BadArg,
-               help="Set group (NOT SUPPORTED)", metavar="group")
-
-  (options, args) = p.parse_args(argv)
-
-  if options.m:
-    # mode is specified
-    try:
-      options.m = int(options.m, 8)
-    except:
-      sys.stderr.write('nsinstall: {0} is not a valid mode\n'
-                       .format(options.m))
-      return 1
-
-  # just create one directory?
-  def maybe_create_dir(dir, mode, try_again):
-    dir = os.path.abspath(dir)
-    if os.path.exists(dir):
-      if not os.path.isdir(dir):
-        print('nsinstall: {0} is not a directory'.format(dir), file=sys.stderr)
-        return 1
-      if mode:
-        os.chmod(dir, mode)
-      return 0
-
-    try:
-      if mode:
-        os.makedirs(dir, mode)
-      else:
-        os.makedirs(dir)
-    except Exception as e:
-      # We might have hit EEXIST due to a race condition (see bug 463411) -- try again once
-      if try_again:
-        return maybe_create_dir(dir, mode, False)
-      print("nsinstall: failed to create directory {0}: {1}".format(dir, e))
-      return 1
-    else:
-      return 0
-
-  if options.X:
-    options.X = [os.path.abspath(p) for p in options.X]
-
-  if options.D:
-    return maybe_create_dir(args[0], options.m, True)
-
-  # nsinstall arg1 [...] directory
-  if len(args) < 2:
-    p.error('not enough arguments')
-
-  def copy_all_entries(entries, target):
-    for e in entries:
-      e = os.path.abspath(e)
-      if options.X and e in options.X:
-        continue
-
-      dest = os.path.join(target, os.path.basename(e))
-      dest = os.path.abspath(dest)
-      handleTarget(e, dest)
-      if options.m:
-        os.chmod(dest, options.m)
-
-  # set up handler
-  if options.d:
-    # we're supposed to create directories
-    def handleTarget(srcpath, targetpath):
-      # target directory was already created, just use mkdir
-      os.mkdir(targetpath)
-  else:
-    # we're supposed to copy files
-    def handleTarget(srcpath, targetpath):
-      if os.path.isdir(srcpath):
-        if not os.path.exists(targetpath):
-          os.mkdir(targetpath)
-        entries = [os.path.join(srcpath, e) for e in os.listdir(srcpath)]
-        copy_all_entries(entries, targetpath)
-        # options.t is not relevant for directories
-        if options.m:
-          os.chmod(targetpath, options.m)
-      else:
-        if os.path.exists(targetpath):
-          # On Windows, read-only files can't be deleted
-          os.chmod(targetpath, stat.S_IWUSR)
-          os.remove(targetpath)
-        if options.t:
-          shutil.copy2(srcpath, targetpath)
-        else:
-          shutil.copy(srcpath, targetpath)
-
-  # the last argument is the target directory
-  target = args.pop()
-  # ensure target directory (importantly, we do not apply a mode to the directory
-  # because we want to copy files into it and the mode might be read-only)
-  rv = maybe_create_dir(target, None, True)
-  if rv != 0:
-    return rv
-
-  copy_all_entries(args, target)
-  return 0
-
-# nsinstall as a native command is always UTF-8
-def nsinstall(argv):
-  return _nsinstall_internal([unicode(arg, "utf-8") for arg in argv])
-
-if __name__ == '__main__':
-  # sys.argv corrupts characters outside the system code page on Windows
-  # <http://bugs.python.org/issue2128>. Use ctypes instead. This is also
-  # useful because switching to Unicode strings makes python use the wide
-  # Windows APIs, which is what we want here since the wide APIs normally do a
-  # better job at handling long paths and such.
-  if sys.platform == "win32":
-    import ctypes
-    from ctypes import wintypes
-    GetCommandLine = ctypes.windll.kernel32.GetCommandLineW
-    GetCommandLine.argtypes = []
-    GetCommandLine.restype = wintypes.LPWSTR
-
-    CommandLineToArgv = ctypes.windll.shell32.CommandLineToArgvW
-    CommandLineToArgv.argtypes = [wintypes.LPWSTR, ctypes.POINTER(ctypes.c_int)]
-    CommandLineToArgv.restype = ctypes.POINTER(wintypes.LPWSTR)
-
-    argc = ctypes.c_int(0)
-    argv_arr = CommandLineToArgv(GetCommandLine(), ctypes.byref(argc))
-    # The first argv will be "python", the second will be the .py file
-    argv = argv_arr[1:argc.value]
-  else:
-    # For consistency, do it on Unix as well
-    if sys.stdin.encoding is not None:
-      argv = [unicode(arg, sys.stdin.encoding) for arg in sys.argv]
-    else:
-      argv = [unicode(arg) for arg in sys.argv]
-
-  sys.exit(_nsinstall_internal(argv[1:]))
deleted file mode 100644
--- a/js/src/config/pathsub.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* 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/. */
-/*
-** Pathname subroutines.
-**
-** Brendan Eich, 8/29/95
-*/
-#include <assert.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include "pathsub.h"
-
-#ifdef USE_REENTRANT_LIBC
-#include <libc_r.h>
-#endif
-
-#ifdef SUNOS4
-#include "sunos4.h"
-#endif
-
-#ifndef D_INO
-#define D_INO	d_ino
-#endif
-
-char *program;
-
-void
-fail(char *format, ...)
-{
-    int error;
-    va_list ap;
-
-#ifdef USE_REENTRANT_LIBC
-    R_STRERROR_INIT_R();
-#endif
-
-    error = errno;
-    fprintf(stderr, "%s: ", program);
-    va_start(ap, format);
-    vfprintf(stderr, format, ap);
-    va_end(ap);
-    if (error) {
-
-#ifdef USE_REENTRANT_LIBC
-    R_STRERROR_R(errno);
-	fprintf(stderr, ": %s", r_strerror_r);
-#else
-	fprintf(stderr, ": %s", strerror(errno));
-#endif
-    }
-
-    putc('\n', stderr);
-    exit(1);
-}
-
-char *
-getcomponent(char *path, char *name)
-{
-    if (*path == '\0')
-	return 0;
-    if (*path == '/') {
-	*name++ = '/';
-    } else {
-	do {
-	    *name++ = *path++;
-	} while (*path != '/' && *path != '\0');
-    }
-    *name = '\0';
-    while (*path == '/')
-	path++;
-    return path;
-}
-
-#ifdef LAME_READDIR
-#include <sys/param.h>
-/*
-** The static buffer in Unixware's readdir is too small.
-*/
-struct dirent *readdir(DIR *d)
-{
-        static struct dirent *buf = NULL;
-
-        if(buf == NULL)
-                buf = (struct dirent *) malloc(sizeof(struct dirent) + MAXPATHLEN);
-        return(readdir_r(d, buf));
-}
-#endif
-
-char *
-ino2name(ino_t ino)
-{
-    DIR *dp;
-    struct dirent *ep;
-    char *name;
-
-    dp = opendir("..");
-    if (!dp)
-	fail("cannot read parent directory");
-    for (;;) {
-	if (!(ep = readdir(dp)))
-	    fail("cannot find current directory");
-	if (ep->D_INO == ino)
-	    break;
-    }
-    name = xstrdup(ep->d_name);
-    closedir(dp);
-    return name;
-}
-
-void *
-xmalloc(size_t size)
-{
-    void *p = malloc(size);
-    if (!p)
-	fail("cannot allocate %u bytes", size);
-    return p;
-}
-
-char *
-xstrdup(char *s)
-{
-    return strcpy(xmalloc(strlen(s) + 1), s);
-}
-
-char *
-xbasename(char *path)
-{
-    char *cp;
-
-    while ((cp = strrchr(path, '/')) && cp[1] == '\0')
-	*cp = '\0';
-    if (!cp) return path;
-    return cp + 1;
-}
-
-void
-xchdir(char *dir)
-{
-    if (chdir(dir) < 0)
-	fail("cannot change directory to %s", dir);
-}
-
-int
-relatepaths(char *from, char *to, char *outpath)
-{
-    char *cp, *cp2;
-    int len;
-    char buf[NAME_MAX];
-
-    assert(*from == '/' && *to == '/');
-    for (cp = to, cp2 = from; *cp == *cp2; cp++, cp2++)
-	if (*cp == '\0')
-	    break;
-    while (cp[-1] != '/')
-	cp--, cp2--;
-    if (cp - 1 == to) {
-	/* closest common ancestor is /, so use full pathname */
-	len = strlen(strcpy(outpath, to));
-	if (outpath[len] != '/') {
-	    outpath[len++] = '/';
-	    outpath[len] = '\0';
-	}
-    } else {
-	len = 0;
-	while ((cp2 = getcomponent(cp2, buf)) != 0) {
-	    strcpy(outpath + len, "../");
-	    len += 3;
-	}
-	while ((cp = getcomponent(cp, buf)) != 0) {
-	    sprintf(outpath + len, "%s/", buf);
-	    len += strlen(outpath + len);
-	}
-    }
-    return len;
-}
-
-void
-reversepath(char *inpath, char *name, int len, char *outpath)
-{
-    char *cp, *cp2;
-    char buf[NAME_MAX];
-    struct stat sb;
-
-    cp = strcpy(outpath + PATH_MAX - (len + 1), name);
-    cp2 = inpath;
-    while ((cp2 = getcomponent(cp2, buf)) != 0) {
-	if (strcmp(buf, ".") == 0)
-	    continue;
-	if (strcmp(buf, "..") == 0) {
-	    if (stat(".", &sb) < 0)
-		fail("cannot stat current directory");
-	    name = ino2name(sb.st_ino);
-	    len = strlen(name);
-	    cp -= len + 1;
-	    strcpy(cp, name);
-	    cp[len] = '/';
-	    free(name);
-	    xchdir("..");
-	} else {
-	    cp -= 3;
-	    strncpy(cp, "../", 3);
-	    xchdir(buf);
-	}
-    }
-    strcpy(outpath, cp);
-}
deleted file mode 100644
--- a/js/src/config/pathsub.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* 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/. */
-
-#ifndef pathsub_h___
-#define pathsub_h___
-/*
-** Pathname subroutines.
-**
-** Brendan Eich, 8/29/95
-*/
-#include <limits.h>
-#include <sys/types.h>
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-/*
- * Just prevent stupidity
- */
-#undef NAME_MAX
-#define NAME_MAX 256
-
-extern char *program;
-
-extern void fail(char *format, ...);
-extern char *getcomponent(char *path, char *name);
-extern char *ino2name(ino_t ino);
-extern void *xmalloc(size_t size);
-extern char *xstrdup(char *s);
-extern char *xbasename(char *path);
-extern void xchdir(char *dir);
-
-/* Relate absolute pathnames from and to returning the result in outpath. */
-extern int relatepaths(char *from, char *to, char *outpath);
-
-/* XXX changes current working directory -- caveat emptor */
-extern void reversepath(char *inpath, char *name, int len, char *outpath);
-
-#endif /* pathsub_h___ */
deleted file mode 100644
--- a/js/src/config/pythonpath.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# 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/.
-
-"""
-Run a python script, adding extra directories to the python path.
-"""
-
-
-def main(args):
-    def usage():
-        print >>sys.stderr, "pythonpath.py -I directory script.py [args...]"
-        sys.exit(150)
-
-    paths = []
-
-    while True:
-        try:
-            arg = args[0]
-        except IndexError:
-            usage()
-
-        if arg == '-I':
-            args.pop(0)
-            try:
-                path = args.pop(0)
-            except IndexError:
-                usage()
-
-            paths.append(os.path.abspath(path))
-            continue
-
-        if arg.startswith('-I'):
-            paths.append(os.path.abspath(args.pop(0)[2:]))
-            continue
-
-        break
-
-    script = args[0]
-
-    sys.path[0:0] = [os.path.abspath(os.path.dirname(script))] + paths
-    sys.argv = args
-    sys.argc = len(args)
-
-    frozenglobals['__name__'] = '__main__'
-    frozenglobals['__file__'] = script
-
-    execfile(script, frozenglobals)
-
-# Freeze scope here ... why this makes things work I have no idea ...
-frozenglobals = globals()
-
-import sys, os
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
deleted file mode 100644
--- a/js/src/config/rebuild_check.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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/.
-
-import os
-import errno
-
-def mtime(path):
-    try:
-        return os.stat(path).st_mtime
-    except OSError as e:
-        if e.errno == errno.ENOENT:
-            return -1
-        raise
-
-def rebuild_check(args):
-    target = args[0]
-    deps = args[1:]
-    t = mtime(target)
-    if t < 0:
-        print target
-        return
-
-    newer = []
-    removed = []
-    for dep in deps:
-        deptime = mtime(dep)
-        if deptime < 0:
-            removed.append(dep)
-        elif mtime(dep) > t:
-            newer.append(dep)
-
-    if newer and removed:
-        print 'Rebuilding %s because %s changed and %s was removed' % (target, ', '.join(newer), ', '.join(removed))
-    elif newer:
-        print 'Rebuilding %s because %s changed' % (target, ', '.join(newer))
-    elif removed:
-        print 'Rebuilding %s because %s was removed' % (target, ', '.join(removed))
-    else:
-        print 'Rebuilding %s for an unknown reason' % target
-
-if __name__ == '__main__':
-    import sys
-    rebuild_check(sys.argv[1:])
deleted file mode 100644
--- a/js/src/config/recurse.mk
+++ /dev/null
@@ -1,243 +0,0 @@
-# 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/.
-
-ifndef INCLUDED_RULES_MK
-include $(topsrcdir)/config/rules.mk
-endif
-
-# The traditional model of directory traversal with make is as follows:
-#   make -C foo
-#     Entering foo
-#     make -C bar
-#       Entering foo/bar
-#     make -C baz
-#       Entering foo/baz
-#   make -C qux
-#     Entering qux
-#
-# Pseudo derecurse transforms the above into:
-#   make -C foo
-#   make -C foo/bar
-#   make -C foo/baz
-#   make -C qux
-
-# MOZ_PSEUDO_DERECURSE can have values other than 1.
-ifeq (1_.,$(if $(MOZ_PSEUDO_DERECURSE),1)_$(DEPTH))
-
-include root.mk
-
-# Disable build status for mach in top directories without TIERS.
-# In practice this disables it when recursing under js/src, which confuses mach.
-ifndef TIERS
-BUILDSTATUS =
-endif
-
-# Main rules (export, compile, binaries, libs and tools) call recurse_* rules.
-# This wrapping is only really useful for build status.
-compile binaries libs export tools::
-	$(call BUILDSTATUS,TIER_START $@ $($@_subtiers))
-	+$(MAKE) recurse_$@
-	$(call BUILDSTATUS,TIER_FINISH $@)
-
-# Carefully avoid $(eval) type of rule generation, which makes pymake slower
-# than necessary.
-# Get current tier and corresponding subtiers from the data in root.mk.
-CURRENT_TIER := $(filter $(foreach tier,compile binaries libs export tools,recurse_$(tier) $(tier)-deps),$(MAKECMDGOALS))
-ifneq (,$(filter-out 0 1,$(words $(CURRENT_TIER))))
-$(error $(CURRENT_TIER) not supported on the same make command line)
-endif
-CURRENT_TIER := $(subst recurse_,,$(CURRENT_TIER:-deps=))
-CURRENT_SUBTIERS := $($(CURRENT_TIER)_subtiers)
-
-# The rules here are doing directory traversal, so we don't want further
-# recursion to happen when running make -C subdir $tier. But some make files
-# further call make -C something else, and sometimes expect recursion to
-# happen in that case (see browser/metro/locales/Makefile.in for example).
-# Conveniently, every invocation of make increases MAKELEVEL, so only stop
-# recursion from happening at current MAKELEVEL + 1.
-ifdef CURRENT_TIER
-ifeq (0,$(MAKELEVEL))
-export NO_RECURSE_MAKELEVEL=1
-else
-export NO_RECURSE_MAKELEVEL=$(word $(MAKELEVEL),2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
-endif
-endif
-
-# Get all directories traversed for all subtiers in the current tier, or use
-# directly the $(*_dirs) variables available in root.mk when there is no
-# TIERS (like for js/src).
-CURRENT_DIRS := $(or $($(CURRENT_TIER)_dirs),$(foreach subtier,$(CURRENT_SUBTIERS),$($(CURRENT_TIER)_subtier_$(subtier))))
-
-ifneq (,$(filter binaries libs,$(CURRENT_TIER)))
-WANT_STAMPS = 1
-STAMP_TOUCH = $(TOUCH) $(@D)/binaries
-endif
-
-# Subtier delimiter rules
-$(addprefix subtiers/,$(addsuffix _start/$(CURRENT_TIER),$(CURRENT_SUBTIERS))): subtiers/%_start/$(CURRENT_TIER): $(if $(WANT_STAMPS),$(call mkdir_deps,subtiers/%_start))
-	$(call BUILDSTATUS,SUBTIER_START $(CURRENT_TIER) $* $(if $(BUG_915535_FIXED),$($(CURRENT_TIER)_subtier_$*)))
-	@$(STAMP_TOUCH)
-
-$(addprefix subtiers/,$(addsuffix _finish/$(CURRENT_TIER),$(CURRENT_SUBTIERS))): subtiers/%_finish/$(CURRENT_TIER): $(if $(WANT_STAMPS),$(call mkdir_deps,subtiers/%_finish))
-	$(call BUILDSTATUS,SUBTIER_FINISH $(CURRENT_TIER) $*)
-	@$(STAMP_TOUCH)
-
-$(addprefix subtiers/,$(addsuffix /$(CURRENT_TIER),$(CURRENT_SUBTIERS))): %/$(CURRENT_TIER): $(if $(WANT_STAMPS),$(call mkdir_deps,%))
-	@$(STAMP_TOUCH)
-
-GARBAGE_DIRS += subtiers
-
-# Recursion rule for all directories traversed for all subtiers in the
-# current tier.
-# root.mk defines subtier_of_* variables, that map a normalized subdir path to
-# a subtier name (e.g. subtier_of_memory_jemalloc = base)
-$(addsuffix /$(CURRENT_TIER),$(CURRENT_DIRS)): %/$(CURRENT_TIER):
-ifdef BUG_915535_FIXED
-	$(call BUILDSTATUS,TIERDIR_START $(CURRENT_TIER) $(subtier_of_$(subst /,_,$*)) $*)
-endif
-	+@$(MAKE) -C $* $(if $(filter $*,$(tier_$(subtier_of_$(subst /,_,$*))_staticdirs)),,$(CURRENT_TIER))
-# Ensure existing stamps are up-to-date, but don't create one if submake didn't create one.
-	$(if $(wildcard $@),@$(STAMP_TOUCH))
-ifdef BUG_915535_FIXED
-	$(call BUILDSTATUS,TIERDIR_FINISH $(CURRENT_TIER) $(subtier_of_$(subst /,_,$*)) $*)
-endif
-
-# Dummy rules for possibly inexisting dependencies for the above tier targets
-$(addsuffix /Makefile,$(CURRENT_DIRS)) $(addsuffix /backend.mk,$(CURRENT_DIRS)):
-
-# The export tier requires nsinstall, which is built from config. So every
-# subdirectory traversal needs to happen after traversing config.
-ifeq ($(CURRENT_TIER),export)
-$(addsuffix /$(CURRENT_TIER),$(filter-out config,$(CURRENT_DIRS))): config/$(CURRENT_TIER)
-endif
-
-ifdef COMPILE_ENVIRONMENT
-ifneq (,$(filter libs binaries,$(CURRENT_TIER)))
-# When doing a "libs" build, target_libs.mk ensures the interesting dependency data
-# is available in the "binaries" stamp. Once recursion is done, aggregate all that
-# dependency info so that stamps depend on relevant files and relevant other stamps.
-# When doing a "binaries" build, the aggregate dependency file and those stamps are
-# used and allow to skip recursing directories where changes are not going to require
-# rebuild. A few directories, however, are still traversed all the time, mostly, the
-# gyp managed ones and js/src.
-# A few things that are not traversed by a "binaries" build, but should, in an ideal
-# world, are nspr, nss, icu and ffi.
-recurse_$(CURRENT_TIER):
-	@$(MAKE) binaries-deps
-
-# Creating binaries-deps.mk directly would make us build it twice: once when beginning
-# the build because of the include, and once at the end because of the stamps.
-binaries-deps: $(addsuffix /binaries,$(CURRENT_DIRS))
-	@$(call py_action,link_deps,-o $@.mk --group-by-depfile --topsrcdir $(topsrcdir) --topobjdir $(DEPTH) --dist $(DIST) --guard $(addprefix ',$(addsuffix ',$^)))
-	@$(TOUCH) $@
-
-ifeq (recurse_binaries,$(MAKECMDGOALS))
-$(call include_deps,binaries-deps.mk)
-endif
-
-endif
-
-DIST_GARBAGE += binaries-deps.mk binaries-deps
-
-endif
-
-else
-
-# Don't recurse if MAKELEVEL is NO_RECURSE_MAKELEVEL as defined above, but
-# still recurse for externally managed make files (gyp-generated ones).
-ifeq ($(EXTERNALLY_MANAGED_MAKE_FILE)_$(NO_RECURSE_MAKELEVEL),_$(MAKELEVEL))
-
-compile binaries libs export tools::
-
-else
-#########################
-# Tier traversal handling
-#########################
-
-ifdef TIERS
-
-libs export tools::
-	$(call BUILDSTATUS,TIER_START $@ $(filter-out $(if $(filter export,$@),,precompile),$(TIERS)))
-	$(foreach tier,$(TIERS), $(if $(filter-out libs_precompile tools_precompile,$@_$(tier)), \
-		$(call BUILDSTATUS,SUBTIER_START $@ $(tier) $(if $(filter libs,$@),$(tier_$(tier)_staticdirs)) $(tier_$(tier)_dirs)) \
-		$(if $(filter libs,$@),$(foreach dir, $(tier_$(tier)_staticdirs), $(call TIER_DIR_SUBMAKE,$@,$(tier),$(dir),,1))) \
-		$(foreach dir, $(tier_$(tier)_dirs), $(call TIER_DIR_SUBMAKE,$@,$(tier),$(dir),$@)) \
-		$(call BUILDSTATUS,SUBTIER_FINISH $@ $(tier))))
-	$(call BUILDSTATUS,TIER_FINISH $@)
-
-else
-
-define CREATE_SUBTIER_TRAVERSAL_RULE
-PARALLEL_DIRS_$(1) = $$(addsuffix _$(1),$$(PARALLEL_DIRS))
-
-.PHONY: $(1) $$(PARALLEL_DIRS_$(1))
-
-ifdef PARALLEL_DIRS
-$$(PARALLEL_DIRS_$(1)): %_$(1): %/Makefile
-	+@$$(call SUBMAKE,$(1),$$*)
-endif
-
-$(1):: $$(SUBMAKEFILES)
-ifdef PARALLEL_DIRS
-	+@$(MAKE) $$(PARALLEL_DIRS_$(1))
-endif
-	$$(LOOP_OVER_DIRS)
-
-endef
-
-$(foreach subtier,export compile binaries libs tools,$(eval $(call CREATE_SUBTIER_TRAVERSAL_RULE,$(subtier))))
-
-tools export:: $(SUBMAKEFILES)
-	$(LOOP_OVER_TOOL_DIRS)
-
-endif # ifdef TIERS
-
-endif # ifeq ($(EXTERNALLY_MANAGED_MAKE_FILE)_$(NO_RECURSE_MAKELEVEL),_$(MAKELEVEL))
-
-endif # ifeq (1_.,$(MOZ_PSEUDO_DERECURSE)_$(DEPTH))
-
-ifdef MOZ_PSEUDO_DERECURSE
-ifdef EXTERNALLY_MANAGED_MAKE_FILE
-# gyp-managed directories
-recurse_targets := $(addsuffix /binaries,$(DIRS) $(PARALLEL_DIRS))
-else
-ifeq (.,$(DEPTH))
-# top-level directories
-recurse_targets := $(addsuffix /binaries,$(binaries_dirs))
-ifdef recurse_targets
-# only js/src has binaries_dirs, and we want to adjust paths for it.
-want_abspaths = 1
-endif
-endif
-endif
-
-ifdef COMPILE_ENVIRONMENT
-
-# Aggregate all dependency files relevant to a binaries build except in
-# the mozilla top-level directory.
-ifneq (_.,$(recurse_targets)_$(DEPTH))
-ALL_DEP_FILES := \
-  $(BINARIES_PP) \
-  $(addsuffix .pp,$(addprefix $(MDDEPDIR)/,$(sort \
-    $(TARGETS) \
-    $(filter-out $(SOBJS) $(ASOBJS) $(EXCLUDED_OBJS),$(OBJ_TARGETS)) \
-  ))) \
-  $(recurse_targets) \
-  $(NULL)
-endif
-
-binaries libs:: $(TARGETS) $(BINARIES_PP)
-ifneq (_.,$(recurse_targets)_$(DEPTH))
-	@$(if $(or $(recurse_targets),$^),$(call py_action,link_deps,-o binaries --group-all $(if $(want_abspaths),--abspaths )--topsrcdir $(topsrcdir) --topobjdir $(DEPTH) --dist $(DIST) $(ALL_DEP_FILES)))
-endif
-
-endif
-
-endif # ifdef MOZ_PSEUDO_DERECURSE
-
-recurse:
-	@$(RECURSED_COMMAND)
-	$(LOOP_OVER_PARALLEL_DIRS)
-	$(LOOP_OVER_DIRS)
-	$(LOOP_OVER_TOOL_DIRS)
deleted file mode 100644
--- a/js/src/config/rules.mk
+++ /dev/null
@@ -1,1703 +0,0 @@
-# -*- makefile -*-
-# vim:set ts=8 sw=8 sts=8 noet:
-#
-# 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/.
-#
-
-ifndef topsrcdir
-$(error topsrcdir was not set))
-endif
-
-# Define an include-at-most-once flag
-ifdef INCLUDED_RULES_MK
-$(error Do not include rules.mk twice!)
-endif
-INCLUDED_RULES_MK = 1
-
-# Make sure that anything that needs to be defined in moz.build wasn't
-# overwritten.
-_eval_for_side_effects := $(CHECK_MOZBUILD_VARIABLES)
-
-ifndef MOZILLA_DIR
-MOZILLA_DIR = $(topsrcdir)
-endif
-
-ifndef INCLUDED_CONFIG_MK
-include $(topsrcdir)/config/config.mk
-endif
-
-ifndef INCLUDED_VERSION_MK
-include $(topsrcdir)/config/version.mk
-endif
-
-USE_AUTOTARGETS_MK = 1
-include $(topsrcdir)/config/makefiles/makeutils.mk
-
-# Only build with Pymake (not GNU make) on Windows.
-ifeq ($(HOST_OS_ARCH),WINNT)
-ifndef L10NBASEDIR
-ifndef .PYMAKE
-$(error Pymake is required to build on Windows. Run |./mach build| to \
-automatically use pymake or invoke pymake directly via \
-|python build/pymake/make.py|.)
-endif
-endif
-endif
-
-ifdef REBUILD_CHECK
-ifdef .PYMAKE
-REPORT_BUILD = @%rebuild_check rebuild_check $@ $^
-else
-REPORT_BUILD = $(info $(shell $(PYTHON) $(MOZILLA_DIR)/config/rebuild_check.py $@ $^))
-endif
-else
-REPORT_BUILD = $(info $(notdir $@))
-endif
-
-ifeq ($(OS_ARCH),OS2)
-EXEC			=
-else
-EXEC			= exec
-endif
-
-# Don't copy xulrunner files at install time, when using system xulrunner
-ifdef SYSTEM_LIBXUL
-  SKIP_COPY_XULRUNNER=1
-endif
-
-# ELOG prints out failed command when building silently (gmake -s). Pymake
-# prints out failed commands anyway, so ELOG just makes things worse by
-# forcing shell invocations.
-ifndef .PYMAKE
-ifneq (,$(findstring s, $(filter-out --%, $(MAKEFLAGS))))
-  ELOG := $(EXEC) sh $(BUILD_TOOLS)/print-failed-commands.sh
-else
-  ELOG :=
-endif # -s
-else
-  ELOG :=
-endif # ifndef .PYMAKE
-
-_VPATH_SRCS = $(abspath $<)
-
-################################################################################
-# Testing frameworks support
-################################################################################
-
-testxpcobjdir = $(DEPTH)/_tests/xpcshell
-
-ifdef ENABLE_TESTS
-
-# Add test directories to the regular directories list. TEST_DIRS should
-# arguably have the same status as TOOL_DIRS and other *_DIRS variables. It is
-# coded this way until Makefiles stop using the "ifdef ENABLE_TESTS; DIRS +="
-# convention.
-#
-# The current developer workflow expects tests to be updated when processing
-# the default target. If we ever change this implementation, the behavior
-# should be preserved or the change should be widely communicated. A
-# consequence of not processing test dir targets during the default target is
-# that changes to tests may not be updated and code could assume to pass
-# locally against non-current test code.
-DIRS += $(TEST_DIRS)
-
-ifndef INCLUDED_TESTS_MOCHITEST_MK #{
-  include $(topsrcdir)/config/makefiles/mochitest.mk
-endif #}
-
-ifdef CPP_UNIT_TESTS
-ifdef COMPILE_ENVIRONMENT
-
-# Compile the tests to $(DIST)/bin.  Make lots of niceties available by default
-# through TestHarness.h, by modifying the list of includes and the libs against
-# which stuff links.
-CPPSRCS += $(CPP_UNIT_TESTS)
-CPP_UNIT_TEST_BINS := $(CPP_UNIT_TESTS:.cpp=$(BIN_SUFFIX))
-SIMPLE_PROGRAMS += $(CPP_UNIT_TEST_BINS)
-INCLUDES += -I$(DIST)/include/testing
-LIBS += $(XPCOM_GLUE_LDOPTS) $(NSPR_LIBS)
-
-ifndef MOZ_PROFILE_GENERATE
-libs:: $(CPP_UNIT_TEST_BINS) $(call mkdir_deps,$(DIST)/cppunittests)
-	$(NSINSTALL) $(CPP_UNIT_TEST_BINS) $(DIST)/cppunittests
-endif
-
-cppunittests-remote: DM_TRANS?=adb
-cppunittests-remote:
-	@if [ '${TEST_DEVICE}' != '' -o '$(DM_TRANS)' = 'adb' ]; then \
-		$(PYTHON) -u $(topsrcdir)/testing/remotecppunittests.py \
-			--xre-path=$(DEPTH)/dist/bin \
-			--localLib=$(DEPTH)/dist/$(MOZ_APP_NAME) \
-			--dm_trans=$(DM_TRANS) \
-			--deviceIP=${TEST_DEVICE} \
-			$(subst .cpp,$(BIN_SUFFIX),$(CPP_UNIT_TESTS)) $(EXTRA_TEST_ARGS); \
-	else \
-		echo 'please prepare your host with environment variables for TEST_DEVICE'; \
-	fi
-
-endif # COMPILE_ENVIRONMENT
-endif # CPP_UNIT_TESTS
-
-.PHONY: check
-
-ifdef PYTHON_UNIT_TESTS
-
-RUN_PYTHON_UNIT_TESTS := $(addsuffix -run,$(PYTHON_UNIT_TESTS))
-
-.PHONY: $(RUN_PYTHON_UNIT_TESTS)
-
-check:: $(RUN_PYTHON_UNIT_TESTS)
-
-$(RUN_PYTHON_UNIT_TESTS): %-run: %
-	@PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $<
-
-endif # PYTHON_UNIT_TESTS
-
-endif # ENABLE_TESTS
-
-
-#
-# Library rules
-#
-# If FORCE_STATIC_LIB is set, build a static library.
-# Otherwise, build a shared library.
-#
-
-ifndef LIBRARY
-ifdef STATIC_LIBRARY_NAME
-REAL_LIBRARY		:= $(LIB_PREFIX)$(STATIC_LIBRARY_NAME).$(LIB_SUFFIX)
-# Only build actual library if it is installed in DIST/lib or SDK
-ifeq (,$(SDK_LIBRARY)$(DIST_INSTALL)$(NO_EXPAND_LIBS))
-LIBRARY			:= $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX)
-else
-LIBRARY			:= $(REAL_LIBRARY) $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX)
-endif
-endif # STATIC_LIBRARY_NAME
-endif # LIBRARY
-
-ifndef HOST_LIBRARY
-ifdef HOST_LIBRARY_NAME
-HOST_LIBRARY		:= $(LIB_PREFIX)$(HOST_LIBRARY_NAME).$(LIB_SUFFIX)
-endif
-endif
-
-ifdef LIBRARY
-ifdef FORCE_SHARED_LIB
-ifdef MKSHLIB
-
-ifdef LIB_IS_C_ONLY
-MKSHLIB			= $(MKCSHLIB)
-endif
-
-ifneq (,$(filter OS2 WINNT,$(OS_ARCH)))
-IMPORT_LIBRARY		:= $(LIB_PREFIX)$(SHARED_LIBRARY_NAME).$(IMPORT_LIB_SUFFIX)
-endif
-
-ifdef MAKE_FRAMEWORK
-SHARED_LIBRARY		:= $(SHARED_LIBRARY_NAME)
-else
-SHARED_LIBRARY		:= $(DLL_PREFIX)$(SHARED_LIBRARY_NAME)$(DLL_SUFFIX)
-endif
-
-ifeq ($(OS_ARCH),OS2)
-DEF_FILE		:= $(SHARED_LIBRARY:.dll=.def)
-endif
-
-EMBED_MANIFEST_AT=2
-
-endif # MKSHLIB
-endif # FORCE_SHARED_LIB
-endif # LIBRARY
-
-ifdef FORCE_STATIC_LIB
-ifndef FORCE_SHARED_LIB
-SHARED_LIBRARY		:= $(NULL)
-DEF_FILE		:= $(NULL)
-IMPORT_LIBRARY		:= $(NULL)
-endif
-endif
-
-ifdef FORCE_SHARED_LIB
-ifndef FORCE_STATIC_LIB
-LIBRARY := $(NULL)
-endif
-endif
-
-ifeq ($(OS_ARCH),WINNT)
-ifndef GNU_CC
-
-#
-# Unless we're building SIMPLE_PROGRAMS, all C++ files share a PDB file per
-# directory. For parallel builds, this PDB file is shared and locked by
-# MSPDBSRV.EXE, starting with MSVC8 SP1. If you're using MSVC 7.1 or MSVC8
-# without SP1, don't do parallel builds.
-#
-# The final PDB for libraries and programs is created by the linker and uses
-# a different name from the single PDB file created by the compiler. See
-# bug 462740.
-#
-
-ifdef SIMPLE_PROGRAMS
-COMPILE_PDBFILE = $(basename $(@F)).pdb
-else
-COMPILE_PDBFILE = generated.pdb
-endif
-
-LINK_PDBFILE = $(basename $(@F)).pdb
-ifdef MOZ_DEBUG
-CODFILE=$(basename $(@F)).cod
-endif
-
-ifdef DEFFILE
-OS_LDFLAGS += -DEF:$(call normalizepath,$(DEFFILE))
-EXTRA_DEPS += $(DEFFILE)
-endif
-
-else #!GNU_CC
-
-ifdef DEFFILE
-OS_LDFLAGS += $(call normalizepath,$(DEFFILE))
-EXTRA_DEPS += $(DEFFILE)
-endif
-
-endif # !GNU_CC
-
-endif # WINNT
-
-ifeq ($(SOLARIS_SUNPRO_CXX),1)
-ifeq (86,$(findstring 86,$(OS_TEST)))
-OS_LDFLAGS += -M $(topsrcdir)/config/solaris_ia32.map
-endif # x86
-endif # Solaris Sun Studio C++
-
-ifeq ($(HOST_OS_ARCH),WINNT)
-HOST_PDBFILE=$(basename $(@F)).pdb
-endif
-
-# Don't build SIMPLE_PROGRAMS during the MOZ_PROFILE_GENERATE pass
-ifdef MOZ_PROFILE_GENERATE
-EXCLUDED_OBJS := $(SIMPLE_PROGRAMS:$(BIN_SUFFIX)=.$(OBJ_SUFFIX))
-SIMPLE_PROGRAMS :=
-endif
-
-ifdef COMPILE_ENVIRONMENT
-ifndef TARGETS
-TARGETS			= $(LIBRARY) $(SHARED_LIBRARY) $(PROGRAM) $(SIMPLE_PROGRAMS) $(HOST_LIBRARY) $(HOST_PROGRAM) $(HOST_SIMPLE_PROGRAMS)
-endif
-
-COBJS = $(notdir $(CSRCS:.c=.$(OBJ_SUFFIX)))
-SOBJS = $(notdir $(SSRCS:.S=.$(OBJ_SUFFIX)))
-# CPPSRCS can have different extensions (eg: .cpp, .cc)
-CPPOBJS = $(notdir $(addsuffix .$(OBJ_SUFFIX),$(basename $(CPPSRCS))))
-CMOBJS = $(notdir $(CMSRCS:.m=.$(OBJ_SUFFIX)))
-CMMOBJS = $(notdir $(CMMSRCS:.mm=.$(OBJ_SUFFIX)))
-ASOBJS = $(notdir $(ASFILES:.$(ASM_SUFFIX)=.$(OBJ_SUFFIX)))
-ifndef OBJS
-_OBJS = $(COBJS) $(SOBJS) $(CPPOBJS) $(CMOBJS) $(CMMOBJS) $(ASOBJS)
-OBJS = $(strip $(_OBJS))
-endif
-
-HOST_COBJS = $(addprefix host_,$(notdir $(HOST_CSRCS:.c=.$(OBJ_SUFFIX))))
-# HOST_CPPOBJS can have different extensions (eg: .cpp, .cc)
-HOST_CPPOBJS = $(addprefix host_,$(notdir $(addsuffix .$(OBJ_SUFFIX),$(basename $(HOST_CPPSRCS)))))
-HOST_CMOBJS = $(addprefix host_,$(notdir $(HOST_CMSRCS:.m=.$(OBJ_SUFFIX))))
-HOST_CMMOBJS = $(addprefix host_,$(notdir $(HOST_CMMSRCS:.mm=.$(OBJ_SUFFIX))))
-ifndef HOST_OBJS
-_HOST_OBJS = $(HOST_COBJS) $(HOST_CPPOBJS) $(HOST_CMOBJS) $(HOST_CMMOBJS)
-HOST_OBJS = $(strip $(_HOST_OBJS))
-endif
-else
-LIBRARY :=
-SHARED_LIBRARY :=
-IMPORT_LIBRARY :=
-REAL_LIBRARY :=
-PROGRAM :=
-SIMPLE_PROGRAMS :=
-HOST_LIBRARY :=
-HOST_PROGRAM :=
-HOST_SIMPLE_PROGRAMS :=
-SDK_BINARY := $(filter %.py,$(SDK_BINARY))
-SDK_LIBRARY :=
-endif
-
-ALL_TRASH = \
-	$(GARBAGE) $(TARGETS) $(OBJS) $(PROGOBJS) LOGS TAGS a.out \
-	$(filter-out $(ASFILES),$(OBJS:.$(OBJ_SUFFIX)=.s)) $(OBJS:.$(OBJ_SUFFIX)=.ii) \
-	$(OBJS:.$(OBJ_SUFFIX)=.i) $(OBJS:.$(OBJ_SUFFIX)=.i_o) \
-	$(HOST_PROGOBJS) $(HOST_OBJS) $(IMPORT_LIBRARY) $(DEF_FILE)\
-	$(EXE_DEF_FILE) so_locations _gen _stubs $(wildcard *.res) $(wildcard *.RES) \
-	$(wildcard *.pdb) $(CODFILE) $(IMPORT_LIBRARY) \
-	$(SHARED_LIBRARY:$(DLL_SUFFIX)=.exp) $(wildcard *.ilk) \
-	$(PROGRAM:$(BIN_SUFFIX)=.exp) $(SIMPLE_PROGRAMS:$(BIN_SUFFIX)=.exp) \
-	$(PROGRAM:$(BIN_SUFFIX)=.lib) $(SIMPLE_PROGRAMS:$(BIN_SUFFIX)=.lib) \
-	$(SIMPLE_PROGRAMS:$(BIN_SUFFIX)=.$(OBJ_SUFFIX)) \
-	$(wildcard gts_tmp_*) $(LIBRARY:%.a=.%.timestamp)
-ALL_TRASH_DIRS = \
-	$(GARBAGE_DIRS) /no-such-file
-
-ifdef QTDIR
-GARBAGE                 += $(MOCSRCS)
-endif
-
-ifdef SIMPLE_PROGRAMS
-GARBAGE			+= $(SIMPLE_PROGRAMS:%=%.$(OBJ_SUFFIX))
-endif
-
-ifdef HOST_SIMPLE_PROGRAMS
-GARBAGE			+= $(HOST_SIMPLE_PROGRAMS:%=%.$(OBJ_SUFFIX))
-endif
-
-#
-# the Solaris WorkShop template repository cache.  it occasionally can get
-# out of sync, so targets like clobber should kill it.
-#
-ifeq ($(SOLARIS_SUNPRO_CXX),1)
-GARBAGE_DIRS += SunWS_cache
-endif
-
-ifdef MOZ_UPDATE_XTERM
-# Its good not to have a newline at the end of the titlebar string because it
-# makes the make -s output easier to read.  Echo -n does not work on all
-# platforms, but we can trick printf into doing it.
-UPDATE_TITLE = printf '\033]0;%s in %s\007' $(1) $(relativesrcdir)/$(2) ;
-endif
-
-ifdef MACH
-ifndef NO_BUILDSTATUS_MESSAGES
-define BUILDSTATUS
-@echo 'BUILDSTATUS $1'
-
-endef
-endif
-endif
-
-define SUBMAKE # $(call SUBMAKE,target,directory,static)
-+@$(UPDATE_TITLE)
-+$(MAKE) $(if $(2),-C $(2)) $(1)
-
-endef # The extra line is important here! don't delete it
-
-define TIER_DIR_SUBMAKE
-$(call BUILDSTATUS,TIERDIR_START  $(1) $(2) $(3))
-$(call SUBMAKE,$(4),$(3),$(5))
-$(call BUILDSTATUS,TIERDIR_FINISH $(1) $(2) $(3))
-
-endef # Ths empty line is important.
-
-ifneq (,$(strip $(DIRS)))
-LOOP_OVER_DIRS = \
-  $(foreach dir,$(DIRS),$(call SUBMAKE,$@,$(dir)))
-endif
-
-# we only use this for the makefiles target and other stuff that doesn't matter
-ifneq (,$(strip $(PARALLEL_DIRS)))
-LOOP_OVER_PARALLEL_DIRS = \
-  $(foreach dir,$(PARALLEL_DIRS),$(call SUBMAKE,$@,$(dir)))
-endif
-
-ifneq (,$(strip $(TOOL_DIRS)))
-LOOP_OVER_TOOL_DIRS = \
-  $(foreach dir,$(TOOL_DIRS),$(call SUBMAKE,$@,$(dir)))
-endif
-
-#
-# Now we can differentiate between objects used to build a library, and
-# objects used to build an executable in the same directory.
-#
-ifndef PROGOBJS
-PROGOBJS		= $(OBJS)
-endif
-
-ifndef HOST_PROGOBJS
-HOST_PROGOBJS		= $(HOST_OBJS)
-endif
-
-GARBAGE_DIRS    += $(wildcard $(CURDIR)/$(MDDEPDIR))
-
-#
-# Tags: emacs (etags), vi (ctags)
-# TAG_PROGRAM := ctags -L -
-#
-TAG_PROGRAM		= xargs etags -a
-
-#
-# Turn on C++ linking if we have any .cpp or .mm files
-# (moved this from config.mk so that config.mk can be included
-#  before the CPPSRCS are defined)
-#
-ifneq ($(HOST_CPPSRCS)$(HOST_CMMSRCS),)
-HOST_CPP_PROG_LINK	= 1
-endif
-
-#
-# This will strip out symbols that the component should not be
-# exporting from the .dynsym section.
-#
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += $(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS)
-endif # IS_COMPONENT
-
-#
-# MacOS X specific stuff
-#
-
-ifeq ($(OS_ARCH),Darwin)
-ifdef SHARED_LIBRARY
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS	+= -bundle
-else
-EXTRA_DSO_LDOPTS	+= -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module
-endif
-endif
-endif
-
-#
-# On NetBSD a.out systems, use -Bsymbolic.  This fixes what would otherwise be
-# fatal symbol name clashes between components.
-#
-ifeq ($(OS_ARCH),NetBSD)
-ifeq ($(DLL_SUFFIX),.so.1.0)
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-endif
-endif
-endif
-
-ifeq ($(OS_ARCH),FreeBSD)
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-endif
-endif
-
-ifeq ($(OS_ARCH),NetBSD)
-ifneq (,$(filter arc cobalt hpcmips mipsco newsmips pmax sgimips,$(OS_TEST)))
-ifneq (,$(filter layout/%,$(relativesrcdir)))
-OS_CFLAGS += -Wa,-xgot
-OS_CXXFLAGS += -Wa,-xgot
-endif
-endif
-endif
-
-#
-# HP-UXBeOS specific section: for COMPONENTS only, add -Bsymbolic flag
-# which uses internal symbols first
-#
-ifeq ($(OS_ARCH),HP-UX)
-ifdef IS_COMPONENT
-ifeq ($(GNU_CC)$(GNU_CXX),)
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-ifneq ($(HAS_EXTRAEXPORTS),1)
-MKSHLIB  += -Wl,+eNSGetModule -Wl,+eerrno
-MKCSHLIB += +eNSGetModule +eerrno
-ifneq ($(OS_TEST),ia64)
-MKSHLIB  += -Wl,+e_shlInit
-MKCSHLIB += +e_shlInit
-endif # !ia64
-endif # !HAS_EXTRAEXPORTS
-endif # non-gnu compilers
-endif # IS_COMPONENT
-endif # HP-UX
-
-ifeq ($(OS_ARCH),AIX)
-ifdef IS_COMPONENT
-ifneq ($(HAS_EXTRAEXPORTS),1)
-MKSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall
-MKCSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall
-endif # HAS_EXTRAEXPORTS
-endif # IS_COMPONENT
-endif # AIX
-
-#
-# Linux: add -Bsymbolic flag for components
-#
-ifeq ($(OS_ARCH),Linux)
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-endif
-endif
-
-#
-# GNU doesn't have path length limitation
-#
-
-ifeq ($(OS_ARCH),GNU)
-OS_CPPFLAGS += -DPATH_MAX=1024 -DMAXPATHLEN=1024
-endif
-
-#
-# MINGW32
-#
-ifeq ($(OS_ARCH),WINNT)
-ifdef GNU_CC
-ifndef IS_COMPONENT
-DSO_LDOPTS += -Wl,--out-implib -Wl,$(IMPORT_LIBRARY)
-endif
-endif
-endif
-
-ifeq ($(USE_TVFS),1)
-IFLAGS1 = -rb
-IFLAGS2 = -rb
-else
-IFLAGS1 = -m 644
-IFLAGS2 = -m 755
-endif
-
-ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
-OUTOPTION = -Fo# eol
-PREPROCESS_OPTION = -P -Fi# eol
-else
-OUTOPTION = -o # eol
-PREPROCESS_OPTION = -E -o #eol
-endif # WINNT && !GNU_CC
-
-ifneq (,$(filter ml%,$(AS)))
-ASOUTOPTION = -Fo# eol
-else
-ASOUTOPTION = -o # eol
-endif
-
-ifeq (,$(CROSS_COMPILE))
-HOST_OUTOPTION = $(OUTOPTION)
-else
-HOST_OUTOPTION = -o # eol
-endif
-################################################################################
-
-# Ensure the build config is up to date. This is done automatically when builds
-# are performed through |mach build|. The check here is to catch people not
-# using mach. If we ever enforce builds through mach, this code can be removed.
-ifndef MOZBUILD_BACKEND_CHECKED
-ifndef MACH
-ifndef TOPLEVEL_BUILD
-$(DEPTH)/backend.RecursiveMakeBackend:
-	$(error Build configuration changed. Build with |mach build| or run |mach build-backend| to regenerate build config)
-
-include $(DEPTH)/backend.RecursiveMakeBackend.pp
-
-default:: $(DEPTH)/backend.RecursiveMakeBackend
-
-export MOZBUILD_BACKEND_CHECKED=1
-endif
-endif
-endif
-
-# The root makefile doesn't want to do a plain export/libs, because
-# of the tiers and because of libxul. Suppress the default rules in favor
-# of something else. Makefiles which use this var *must* provide a sensible
-# default rule before including rules.mk
-ifndef SUPPRESS_DEFAULT_RULES
-default all::
-	$(MAKE) export
-ifdef MOZ_PSEUDO_DERECURSE
-ifdef COMPILE_ENVIRONMENT
-	$(MAKE) compile
-endif
-endif
-	$(MAKE) libs
-	$(MAKE) tools
-endif # SUPPRESS_DEFAULT_RULES
-
-ifeq ($(findstring s,$(filter-out --%, $(MAKEFLAGS))),)
-ECHO := echo
-QUIET :=
-else
-ECHO := true
-QUIET := -q
-endif
-
-# Do everything from scratch
-everything::
-	$(MAKE) clean
-	$(MAKE) all
-
-ifneq (,$(filter-out %.$(LIB_SUFFIX),$(SHARED_LIBRARY_LIBS)))
-$(error SHARED_LIBRARY_LIBS must contain .$(LIB_SUFFIX) files only)
-endif
-
-HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(HOST_LIBS))
-
-# Dependencies which, if modified, should cause everything to rebuild
-GLOBAL_DEPS += Makefile $(DEPTH)/config/autoconf.mk $(topsrcdir)/config/config.mk
-
-##############################################
-ifdef COMPILE_ENVIRONMENT
-OBJ_TARGETS = $(OBJS) $(PROGOBJS) $(HOST_OBJS) $(HOST_PROGOBJS)
-
-compile:: $(OBJ_TARGETS)
-
-include $(topsrcdir)/config/makefiles/target_binaries.mk
-endif
-
-ifdef IS_TOOL_DIR
-# One would think "tools:: libs" would work, but it turns out that combined with
-# bug 907365, this makes make forget to run some rules sometimes.
-tools::
-	@$(MAKE) libs
-endif
-
-##############################################
-ifneq (1,$(NO_PROFILE_GUIDED_OPTIMIZE))
-ifdef MOZ_PROFILE_USE
-ifeq ($(OS_ARCH)_$(GNU_CC), WINNT_)
-# When building with PGO, we have to make sure to re-link
-# in the MOZ_PROFILE_USE phase if we linked in the
-# MOZ_PROFILE_GENERATE phase. We'll touch this pgo.relink
-# file in the link rule in the GENERATE phase to indicate
-# that we need a relink.
-ifdef SHARED_LIBRARY
-$(SHARED_LIBRARY): pgo.relink
-endif
-ifdef PROGRAM
-$(PROGRAM): pgo.relink
-endif
-
-# In the second pass, we need to merge the pgc files into the pgd file.
-# The compiler would do this for us automatically if they were in the right
-# place, but they're in dist/bin.
-ifneq (,$(SHARED_LIBRARY)$(PROGRAM))
-export::
-ifdef PROGRAM
-	$(PYTHON) $(topsrcdir)/build/win32/pgomerge.py \
-	  $(PROGRAM:$(BIN_SUFFIX)=) $(DIST)/bin
-endif
-ifdef SHARED_LIBRARY
-	$(PYTHON) $(topsrcdir)/build/win32/pgomerge.py \
-	  $(SHARED_LIBRARY_NAME) $(DIST)/bin
-endif
-endif # SHARED_LIBRARY || PROGRAM
-endif # WINNT_
-endif # MOZ_PROFILE_USE
-ifdef MOZ_PROFILE_GENERATE
-# Clean up profiling data during PROFILE_GENERATE phase
-export::
-ifeq ($(OS_ARCH)_$(GNU_CC), WINNT_)
-	$(foreach pgd,$(wildcard *.pgd),pgomgr -clear $(pgd);)
-else
-ifdef GNU_CC
-	-$(RM) *.gcda
-endif
-endif
-endif
-
-ifneq (,$(MOZ_PROFILE_GENERATE)$(MOZ_PROFILE_USE))
-ifdef GNU_CC
-# Force rebuilding libraries and programs in both passes because each
-# pass uses different object files.
-$(PROGRAM) $(SHARED_LIBRARY) $(LIBRARY): FORCE
-endif
-endif
-
-endif # NO_PROFILE_GUIDED_OPTIMIZE
-
-##############################################
-
-checkout:
-	$(MAKE) -C $(topsrcdir) -f client.mk checkout
-
-clean clobber realclean clobber_all::
-	-$(RM) $(ALL_TRASH)
-	-$(RM) -r $(ALL_TRASH_DIRS)
-
-ifdef TIERS
-clean clobber realclean clobber_all distclean::
-	$(foreach dir, \
-		$(foreach tier, $(TIERS), $(tier_$(tier)_staticdirs) $(tier_$(tier)_dirs)), \
-		-$(call SUBMAKE,$@,$(dir)))
-else
-clean clobber realclean clobber_all distclean::
-	$(foreach dir,$(PARALLEL_DIRS) $(DIRS) $(TOOL_DIRS),-$(call SUBMAKE,$@,$(dir)))
-
-distclean::
-	$(foreach dir,$(PARALLEL_DIRS) $(DIRS) $(TOOL_DIRS),-$(call SUBMAKE,$@,$(dir)))
-endif
-
-distclean::
-	-$(RM) -r $(ALL_TRASH_DIRS)
-	-$(RM) $(ALL_TRASH)  \
-	Makefile .HSancillary \
-	$(wildcard *.$(OBJ_SUFFIX)) $(wildcard *.ho) $(wildcard host_*.o*) \
-	$(wildcard *.$(LIB_SUFFIX)) $(wildcard *$(DLL_SUFFIX)) \
-	$(wildcard *.$(IMPORT_LIB_SUFFIX))
-ifeq ($(OS_ARCH),OS2)
-	-$(RM) $(PROGRAM:.exe=.map)
-endif
-
-alltags:
-	$(RM) TAGS
-	find $(topsrcdir) -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' -o -name '*.idl' \) -print | $(TAG_PROGRAM)
-
-#
-# PROGRAM = Foo
-# creates OBJS, links with LIBS to create Foo
-#
-$(PROGRAM): $(PROGOBJS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS)
-	$(REPORT_BUILD)
-	@$(RM) $@.manifest
-ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
-	$(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
-ifdef MSMANIFEST_TOOL
-	@if test -f $@.manifest; then \
-		if test -f '$(srcdir)/$@.manifest'; then \
-			echo 'Embedding manifest from $(srcdir)/$@.manifest and $@.manifest'; \
-			mt.exe -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' $@.manifest -OUTPUTRESOURCE:$@\;1; \
-		else \
-			echo 'Embedding manifest from $@.manifest'; \
-			mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
-		fi; \
-	elif test -f '$(srcdir)/$@.manifest'; then \
-		echo 'Embedding manifest from $(srcdir)/$@.manifest'; \
-		mt.exe -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' -OUTPUTRESOURCE:$@\;1; \
-	fi
-endif	# MSVC with manifest tool
-ifdef MOZ_PROFILE_GENERATE
-# touch it a few seconds into the future to work around FAT's
-# 2-second granularity
-	touch -t `date +%Y%m%d%H%M.%S -d 'now+5seconds'` pgo.relink
-endif
-else # !WINNT || GNU_CC
-	$(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) $(STLPORT_LIBS)
-	@$(call CHECK_STDCXX,$@)
-endif # WINNT && !GNU_CC
-
-ifdef ENABLE_STRIP
-	$(STRIP) $(STRIP_FLAGS) $@
-endif
-ifdef MOZ_POST_PROGRAM_COMMAND
-	$(MOZ_POST_PROGRAM_COMMAND) $@
-endif
-
-$(HOST_PROGRAM): $(HOST_PROGOBJS) $(HOST_LIBS_DEPS) $(HOST_EXTRA_DEPS) $(GLOBAL_DEPS)
-	$(REPORT_BUILD)
-ifeq (_WINNT,$(GNU_CC)_$(HOST_OS_ARCH))
-	$(EXPAND_LIBS_EXEC) -- $(HOST_LD) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $(HOST_OBJS) $(WIN32_EXE_LDFLAGS) $(HOST_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-ifdef MSMANIFEST_TOOL
-	@if test -f $@.manifest; then \
-		if test -f '$(srcdir)/$@.manifest'; then \
-			echo 'Embedding manifest from $(srcdir)/$@.manifest and $@.manifest'; \
-			mt.exe -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' $@.manifest -OUTPUTRESOURCE:$@\;1; \
-		else \
-			echo 'Embedding manifest from $@.manifest'; \
-			mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
-		fi; \
-	elif test -f '$(srcdir)/$@.manifest'; then \
-		echo 'Embedding manifest from $(srcdir)/$@.manifest'; \
-		mt.exe -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' -OUTPUTRESOURCE:$@\;1; \
-	fi
-endif	# MSVC with manifest tool
-else
-ifeq ($(HOST_CPP_PROG_LINK),1)
-	$(EXPAND_LIBS_EXEC) -- $(HOST_CXX) -o $@ $(HOST_CXXFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-else
-	$(EXPAND_LIBS_EXEC) -- $(HOST_CC) -o $@ $(HOST_CFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-endif # HOST_CPP_PROG_LINK
-endif
-
-#
-# This is an attempt to support generation of multiple binaries
-# in one directory, it assumes everything to compile Foo is in
-# Foo.o (from either Foo.c or Foo.cpp).
-#
-# SIMPLE_PROGRAMS = Foo Bar
-# creates Foo.o Bar.o, links with LIBS to create Foo, Bar.
-#
-$(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(EXTRA_DEPS) $(GLOBAL_DEPS)
-	$(REPORT_BUILD)
-ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
-	$(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
-ifdef MSMANIFEST_TOOL
-	@if test -f $@.manifest; then \
-		mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
-		rm -f $@.manifest; \
-	fi
-endif	# MSVC with manifest tool
-else
-	$(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(STLPORT_LIBS)
-	@$(call CHECK_STDCXX,$@)
-endif # WINNT && !GNU_CC
-
-ifdef ENABLE_STRIP
-	$(STRIP) $(STRIP_FLAGS) $@
-endif
-ifdef MOZ_POST_PROGRAM_COMMAND
-	$(MOZ_POST_PROGRAM_COMMAND) $@
-endif
-
-$(HOST_SIMPLE_PROGRAMS): host_%$(HOST_BIN_SUFFIX): host_%.$(OBJ_SUFFIX) $(HOST_LIBS_DEPS) $(HOST_EXTRA_DEPS) $(GLOBAL_DEPS)
-	$(REPORT_BUILD)
-ifeq (WINNT_,$(HOST_OS_ARCH)_$(GNU_CC))
-	$(EXPAND_LIBS_EXEC) -- $(HOST_LD) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-else
-ifneq (,$(HOST_CPPSRCS)$(USE_HOST_CXX))
-	$(EXPAND_LIBS_EXEC) -- $(HOST_CXX) $(HOST_OUTOPTION)$@ $(HOST_CXXFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-else
-	$(EXPAND_LIBS_EXEC) -- $(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_CFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-endif
-endif
-
-ifdef DTRACE_PROBE_OBJ
-EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
-OBJS += $(DTRACE_PROBE_OBJ)
-endif
-
-$(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
-	$(REPORT_BUILD)
-	$(RM) $(LIBRARY)
-	$(EXPAND_AR) $(AR_FLAGS) $(OBJS) $(SHARED_LIBRARY_LIBS)
-
-$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
-# When we only build a library descriptor, blow out any existing library
-	$(REPORT_BUILD)
-	$(if $(filter %.$(LIB_SUFFIX),$(LIBRARY)),,$(RM) $(REAL_LIBRARY) $(EXPORT_LIBRARY:%=%/$(REAL_LIBRARY)))
-	$(EXPAND_LIBS_GEN) -o $@ $(OBJS) $(SHARED_LIBRARY_LIBS)
-
-ifeq ($(OS_ARCH),WINNT)
-# Import libraries are created by the rules creating shared libraries.
-# The rules to copy them to $(DIST)/lib depend on $(IMPORT_LIBRARY),
-# but make will happily consider the import library before it is refreshed
-# when rebuilding the corresponding shared library. Defining an empty recipe
-# for import libraries forces make to wait for the shared library recipe to
-# have run before considering other targets that depend on the import library.
-# See bug 795204.
-$(IMPORT_LIBRARY): $(SHARED_LIBRARY) ;
-endif
-
-ifeq ($(OS_ARCH),OS2)
-$(DEF_FILE): $(OBJS) $(SHARED_LIBRARY_LIBS)
-	$(RM) $@
-	echo LIBRARY $(SHARED_LIBRARY_NAME) INITINSTANCE TERMINSTANCE > $@
-	echo PROTMODE >> $@
-	echo CODE    LOADONCALL MOVEABLE DISCARDABLE >> $@
-	echo DATA    PRELOAD MOVEABLE MULTIPLE NONSHARED >> $@
-	echo EXPORTS >> $@
-
-	$(ADD_TO_DEF_FILE)
-
-$(IMPORT_LIBRARY): $(SHARED_LIBRARY)
-	$(REPORT_BUILD)
-	$(RM) $@
-	$(IMPLIB) $@ $^
-endif # OS/2
-
-$(HOST_LIBRARY): $(HOST_OBJS) Makefile
-	$(REPORT_BUILD)
-	$(RM) $@
-	$(EXPAND_LIBS_EXEC) --extract -- $(HOST_AR) $(HOST_AR_FLAGS) $(HOST_OBJS)
-
-ifdef HAVE_DTRACE
-ifndef XP_MACOSX
-ifdef DTRACE_PROBE_OBJ
-ifndef DTRACE_LIB_DEPENDENT
-NON_DTRACE_OBJS := $(filter-out $(DTRACE_PROBE_OBJ),$(OBJS))
-$(DTRACE_PROBE_OBJ): $(NON_DTRACE_OBJS)
-	dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
-endif
-endif
-endif
-endif
-
-# On Darwin (Mac OS X), dwarf2 debugging uses debug info left in .o files,
-# so instead of deleting .o files after repacking them into a dylib, we make
-# symlinks back to the originals. The symlinks are a no-op for stabs debugging,
-# so no need to conditionalize on OS version or debugging format.
-
-$(SHARED_LIBRARY): $(OBJS) $(DEF_FILE) $(RESFILE) $(LIBRARY) $(EXTRA_DEPS) $(GLOBAL_DEPS)
-	$(REPORT_BUILD)
-ifndef INCREMENTAL_LINKER
-	$(RM) $@
-endif
-ifdef DTRACE_LIB_DEPENDENT
-ifndef XP_MACOSX
-	dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o  $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
-endif
-	$(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS))
-	@$(RM) $(DTRACE_PROBE_OBJ)
-else # ! DTRACE_LIB_DEPENDENT
-	$(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS))
-endif # DTRACE_LIB_DEPENDENT
-	@$(call CHECK_STDCXX,$@)
-
-ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
-ifdef MSMANIFEST_TOOL
-ifdef EMBED_MANIFEST_AT
-	@if test -f $@.manifest; then \
-		mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;$(EMBED_MANIFEST_AT); \
-		rm -f $@.manifest; \
-	fi
-endif   # EMBED_MANIFEST_AT
-endif	# MSVC with manifest tool
-ifdef MOZ_PROFILE_GENERATE
-	touch -t `date +%Y%m%d%H%M.%S -d 'now+5seconds'` pgo.relink
-endif
-endif	# WINNT && !GCC
-	@$(RM) foodummyfilefoo $(DELETE_AFTER_LINK)
-	chmod +x $@
-ifdef ENABLE_STRIP
-	$(STRIP) $(STRIP_FLAGS) $@
-endif
-ifdef MOZ_POST_DSO_LIB_COMMAND
-	$(MOZ_POST_DSO_LIB_COMMAND) $@
-endif
-
-ifeq ($(SOLARIS_SUNPRO_CC),1)
-_MDDEPFILE = $(MDDEPDIR)/$(@F).pp
-
-define MAKE_DEPS_AUTO_CC
-if test -d $(@D); then \
-	echo 'Building deps for $< using Sun Studio cc'; \
-	$(CC) $(COMPILE_CFLAGS) -xM  $< >$(_MDDEPFILE) ; \
-	$(PYTHON) $(topsrcdir)/build/unix/add_phony_targets.py $(_MDDEPFILE) ; \
-fi
-endef
-define MAKE_DEPS_AUTO_CXX
-if test -d $(@D); then \
-	echo 'Building deps for $< using Sun Studio CC'; \
-	$(CXX) $(COMPILE_CXXFLAGS) -xM $< >$(_MDDEPFILE) ; \
-	$(PYTHON) $(topsrcdir)/build/unix/add_phony_targets.py $(_MDDEPFILE) ; \
-fi
-endef
-endif # Sun Studio on Solaris
-
-# The object file is in the current directory, and the source file can be any
-# relative path. This macro adds the dependency obj: src for each source file.
-# This dependency must be first for the $< flag to work correctly, and the
-# rules that have commands for these targets must not list any other
-# prerequisites, or they will override the $< variable.
-define src_objdep
-$(basename $2$(notdir $1)).$(OBJ_SUFFIX): $1 $$(call mkdir_deps,$$(MDDEPDIR))
-endef
-$(foreach f,$(CSRCS) $(SSRCS) $(CPPSRCS) $(CMSRCS) $(CMMSRCS) $(ASFILES),$(eval $(call src_objdep,$(f))))
-$(foreach f,$(HOST_CSRCS) $(HOST_CPPSRCS) $(HOST_CMSRCS) $(HOST_CMMSRCS),$(eval $(call src_objdep,$(f),host_)))
-
-$(OBJS) $(HOST_OBJS) $(PROGOBJS) $(HOST_PROGOBJS): $(GLOBAL_DEPS)
-
-# Rules for building native targets must come first because of the host_ prefix
-$(HOST_COBJS):
-	$(REPORT_BUILD)
-	$(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
-
-$(HOST_CPPOBJS):
-	$(REPORT_BUILD)
-	$(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CXXFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
-
-$(HOST_CMOBJS):
-	$(REPORT_BUILD)
-	$(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CFLAGS) $(HOST_CMFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
-
-$(HOST_CMMOBJS):
-	$(REPORT_BUILD)
-	$(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CXXFLAGS) $(HOST_CMMFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
-
-$(COBJS):
-	$(REPORT_BUILD)
-	@$(MAKE_DEPS_AUTO_CC)
-	$(ELOG) $(CC) $(OUTOPTION)$@ -c $(COMPILE_CFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-# DEFINES and ACDEFINES are needed here to enable conditional compilation of Q_OBJECTs:
-# 'moc' only knows about #defines it gets on the command line (-D...), not in
-# included headers like mozilla-config.h
-$(filter moc_%.cpp,$(CPPSRCS)): moc_%.cpp: %.h
-	$(REPORT_BUILD)
-	$(ELOG) $(MOC) $(DEFINES) $(ACDEFINES) $< $(OUTOPTION)$@
-
-$(filter moc_%.cc,$(CPPSRCS)): moc_%.cc: %.cc
-	$(REPORT_BUILD)
-	$(ELOG) $(MOC) $(DEFINES) $(ACDEFINES) $(_VPATH_SRCS:.cc=.h) $(OUTOPTION)$@
-
-$(filter qrc_%.cpp,$(CPPSRCS)): qrc_%.cpp: %.qrc
-	$(REPORT_BUILD)
-	$(ELOG) $(RCC) -name $* $< $(OUTOPTION)$@
-
-ifdef ASFILES
-# The AS_DASH_C_FLAG is needed cause not all assemblers (Solaris) accept
-# a '-c' flag.
-$(ASOBJS):
-	$(REPORT_BUILD)
-	$(AS) $(ASOUTOPTION)$@ $(ASFLAGS) $(AS_DASH_C_FLAG) $(_VPATH_SRCS)
-endif
-
-$(SOBJS):
-	$(REPORT_BUILD)
-	$(AS) -o $@ $(ASFLAGS) $(LOCAL_INCLUDES) $(TARGET_LOCAL_INCLUDES) -c $<
-
-$(CPPOBJS):
-	$(REPORT_BUILD)
-	@$(MAKE_DEPS_AUTO_CXX)
-	$(ELOG) $(CCC) $(OUTOPTION)$@ -c $(COMPILE_CXXFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(CMMOBJS):
-	$(REPORT_BUILD)
-	@$(MAKE_DEPS_AUTO_CXX)
-	$(ELOG) $(CCC) -o $@ -c $(COMPILE_CXXFLAGS) $(COMPILE_CMMFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(CMOBJS):
-	$(REPORT_BUILD)
-	@$(MAKE_DEPS_AUTO_CC)
-	$(ELOG) $(CC) -o $@ -c $(COMPILE_CFLAGS) $(COMPILE_CMFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(filter %.s,$(CPPSRCS:%.cpp=%.s)): %.s: %.cpp $(call mkdir_deps,$(MDDEPDIR))
-	$(REPORT_BUILD)
-	$(CCC) -S $(COMPILE_CXXFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(filter %.s,$(CPPSRCS:%.cc=%.s)): %.s: %.cc $(call mkdir_deps,$(MDDEPDIR))
-	$(REPORT_BUILD)
-	$(CCC) -S $(COMPILE_CXXFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(filter %.s,$(CSRCS:%.c=%.s)): %.s: %.c $(call mkdir_deps,$(MDDEPDIR))
-	$(REPORT_BUILD)
-	$(CC) -S $(COMPILE_CFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(filter %.i,$(CPPSRCS:%.cpp=%.i)): %.i: %.cpp $(call mkdir_deps,$(MDDEPDIR))
-	$(REPORT_BUILD)
-	$(CCC) -C $(PREPROCESS_OPTION)$@ $(COMPILE_CXXFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(filter %.i,$(CPPSRCS:%.cc=%.i)): %.i: %.cc $(call mkdir_deps,$(MDDEPDIR))
-	$(REPORT_BUILD)
-	$(CCC) -C $(PREPROCESS_OPTION)$@ $(COMPILE_CXXFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(filter %.i,$(CSRCS:%.c=%.i)): %.i: %.c $(call mkdir_deps,$(MDDEPDIR))
-	$(REPORT_BUILD)
-	$(CC) -C $(PREPROCESS_OPTION)$@ $(COMPILE_CFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(filter %.i,$(CMMSRCS:%.mm=%.i)): %.i: %.mm $(call mkdir_deps,$(MDDEPDIR))
-	$(REPORT_BUILD)
-	$(CCC) -C $(PREPROCESS_OPTION)$@ $(COMPILE_CXXFLAGS) $(COMPILE_CMMFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
-
-$(RESFILE): %.res: %.rc
-	$(REPORT_BUILD)
-	@echo Creating Resource file: $@
-ifeq ($(OS_ARCH),OS2)
-	$(RC) $(RCFLAGS:-D%=-d %) -i $(subst /,\,$(srcdir)) -r $< $@
-else
-ifdef GNU_CC
-	$(RC) $(RCFLAGS) $(filter-out -U%,$(DEFINES)) $(INCLUDES:-I%=--include-dir %) $(OUTOPTION)$@ $(_VPATH_SRCS)
-else
-	$(RC) $(RCFLAGS) -r $(DEFINES) $(INCLUDES) $(OUTOPTION)$@ $(_VPATH_SRCS)
-endif
-endif
-
-# Cancel GNU make built-in implicit rules
-ifndef .PYMAKE
-MAKEFLAGS += -r
-endif
-
-ifneq (,$(filter OS2 WINNT,$(OS_ARCH)))
-SEP := ;
-else
-SEP := :
-endif
-
-EMPTY :=
-SPACE := $(EMPTY) $(EMPTY)
-
-# MSYS has its own special path form, but javac expects the source and class
-# paths to be in the DOS form (i.e. e:/builds/...).  This function does the
-# appropriate conversion on Windows, but is a noop on other systems.
-ifeq ($(HOST_OS_ARCH),WINNT)
-#  We use 'pwd -W' to get DOS form of the path.  However, since the given path
-#  could be a file or a non-existent path, we cannot call 'pwd -W' directly
-#  on the path.  Instead, we extract the root path (i.e. "c:/"), call 'pwd -W'
-#  on it, then merge with the rest of the path.
-root-path = $(shell echo $(1) | sed -e 's|\(/[^/]*\)/\?\(.*\)|\1|')
-non-root-path = $(shell echo $(1) | sed -e 's|\(/[^/]*\)/\?\(.*\)|\2|')
-normalizepath = $(foreach p,$(1),$(if $(filter /%,$(1)),$(patsubst %/,%,$(shell cd $(call root-path,$(1)) && pwd -W))/$(call non-root-path,$(1)),$(1)))
-else
-normalizepath = $(1)
-endif
-
-###############################################################################
-# Java rules
-###############################################################################
-ifneq (,$(JAVAFILES)$(ANDROID_RESFILES)$(ANDROID_APKNAME)$(JAVA_JAR_TARGETS))
-  include $(topsrcdir)/config/makefiles/java-build.mk
-endif
-
-###############################################################################
-# Bunch of things that extend the 'export' rule (in order):
-###############################################################################
-
-ifneq ($(XPI_NAME),)
-$(FINAL_TARGET):
-	$(NSINSTALL) -D $@
-
-export:: $(FINAL_TARGET)
-endif
-
-################################################################################
-# Copy each element of PREF_JS_EXPORTS
-
-# The default location for PREF_JS_EXPORTS is the gre prefs directory.
-PREF_DIR = defaults/pref
-
-# If DIST_SUBDIR is defined it indicates that app and gre dirs are
-# different and that we are building app related resources. Hence,
-# PREF_DIR should point to the app prefs location.
-ifneq (,$(DIST_SUBDIR)$(XPI_NAME)$(LIBXUL_SDK))
-PREF_DIR = defaults/preferences
-endif
-
-# on win32, pref files need CRLF line endings... see bug 206029
-ifeq (WINNT,$(OS_ARCH))
-PREF_PPFLAGS += --line-endings=crlf
-endif
-
-ifneq ($(PREF_JS_EXPORTS),)
-ifndef NO_DIST_INSTALL
-PREF_JS_EXPORTS_PATH := $(FINAL_TARGET)/$(PREF_DIR)
-PREF_JS_EXPORTS_FLAGS := $(PREF_PPFLAGS)
-PP_TARGETS += PREF_JS_EXPORTS
-endif
-endif
-
-################################################################################
-# Copy each element of AUTOCFG_JS_EXPORTS to $(FINAL_TARGET)/defaults/autoconfig
-
-ifneq ($(AUTOCFG_JS_EXPORTS),)
-ifndef NO_DIST_INSTALL
-AUTOCFG_JS_EXPORTS_FILES := $(AUTOCFG_JS_EXPORTS)
-AUTOCFG_JS_EXPORTS_DEST := $(FINAL_TARGET)/defaults/autoconfig
-AUTOCFG_JS_EXPORTS_TARGET := export
-INSTALL_TARGETS += AUTOCFG_JS_EXPORTS
-endif
-endif
-
-################################################################################
-# Install a linked .xpt into the appropriate place.
-# This should ideally be performed by the non-recursive idl make file. Some day.
-ifdef XPT_NAME #{
-
-ifndef NO_DIST_INSTALL
-_XPT_NAME_FILES := $(DEPTH)/config/makefiles/xpidl/xpt/$(XPT_NAME)
-_XPT_NAME_DEST := $(FINAL_TARGET)/components
-INSTALL_TARGETS += _XPT_NAME
-
-ifndef NO_INTERFACES_MANIFEST
-libs:: $(call mkdir_deps,$(FINAL_TARGET)/components)
-	$(call py_action,buildlist,$(FINAL_TARGET)/components/interfaces.manifest 'interfaces $(XPT_NAME)')
-	$(call py_action,buildlist,$(FINAL_TARGET)/chrome.manifest 'manifest components/interfaces.manifest')
-endif
-endif
-
-endif #} XPT_NAME
-
-################################################################################
-# Copy each element of EXTRA_COMPONENTS to $(FINAL_TARGET)/components
-ifneq (,$(filter %.js,$(EXTRA_COMPONENTS) $(EXTRA_PP_COMPONENTS)))
-ifeq (,$(filter %.manifest,$(EXTRA_COMPONENTS) $(EXTRA_PP_COMPONENTS)))
-ifndef NO_JS_MANIFEST
-$(error .js component without matching .manifest. See https://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0)
-endif
-endif
-endif
-
-ifdef EXTRA_COMPONENTS
-libs:: $(EXTRA_COMPONENTS)
-ifndef NO_DIST_INSTALL
-EXTRA_COMPONENTS_FILES := $(EXTRA_COMPONENTS)
-EXTRA_COMPONENTS_DEST := $(FINAL_TARGET)/components
-INSTALL_TARGETS += EXTRA_COMPONENTS
-endif
-
-endif
-
-ifdef EXTRA_PP_COMPONENTS
-ifndef NO_DIST_INSTALL
-EXTRA_PP_COMPONENTS_PATH := $(FINAL_TARGET)/components
-PP_TARGETS += EXTRA_PP_COMPONENTS
-endif
-endif
-
-EXTRA_MANIFESTS = $(filter %.manifest,$(EXTRA_COMPONENTS) $(EXTRA_PP_COMPONENTS))
-ifneq (,$(EXTRA_MANIFESTS))
-libs:: $(call mkdir_deps,$(FINAL_TARGET))
-	$(call py_action,buildlist,$(FINAL_TARGET)/chrome.manifest $(patsubst %,'manifest components/%',$(notdir $(EXTRA_MANIFESTS))))
-endif
-
-################################################################################
-# Copy each element of EXTRA_JS_MODULES to
-# $(FINAL_TARGET)/$(JS_MODULES_PATH). JS_MODULES_PATH defaults to "modules"
-# if it is undefined.
-JS_MODULES_PATH ?= modules
-FINAL_JS_MODULES_PATH := $(FINAL_TARGET)/$(JS_MODULES_PATH)
-
-ifdef EXTRA_JS_MODULES
-ifndef NO_DIST_INSTALL
-EXTRA_JS_MODULES_FILES := $(EXTRA_JS_MODULES)
-EXTRA_JS_MODULES_DEST := $(FINAL_JS_MODULES_PATH)
-INSTALL_TARGETS += EXTRA_JS_MODULES
-endif
-endif
-
-ifdef EXTRA_PP_JS_MODULES
-ifndef NO_DIST_INSTALL
-EXTRA_PP_JS_MODULES_PATH := $(FINAL_JS_MODULES_PATH)
-PP_TARGETS += EXTRA_PP_JS_MODULES
-endif
-endif
-
-################################################################################
-# Copy testing-only JS modules to appropriate destination.
-#
-# For each file defined in TESTING_JS_MODULES, copy it to
-# objdir/_tests/modules/. If TESTING_JS_MODULE_DIR is defined, that path
-# wlll be appended to the output directory.
-
-ifdef ENABLE_TESTS
-ifdef TESTING_JS_MODULES
-testmodulesdir = $(DEPTH)/_tests/modules/$(TESTING_JS_MODULE_DIR)
-
-GENERATED_DIRS += $(testmodulesdir)
-
-ifndef NO_DIST_INSTALL
-TESTING_JS_MODULES_FILES := $(TESTING_JS_MODULES)
-TESTING_JS_MODULES_DEST := $(testmodulesdir)
-INSTALL_TARGETS += TESTING_JS_MODULES
-endif
-
-endif
-endif
-
-################################################################################
-# SDK
-
-ifneq (,$(SDK_LIBRARY))
-ifndef NO_DIST_INSTALL
-SDK_LIBRARY_FILES := $(SDK_LIBRARY)
-SDK_LIBRARY_DEST := $(SDK_LIB_DIR)
-INSTALL_TARGETS += SDK_LIBRARY
-endif
-endif # SDK_LIBRARY
-
-ifneq (,$(strip $(SDK_BINARY)))
-ifndef NO_DIST_INSTALL
-SDK_BINARY_FILES := $(SDK_BINARY)
-SDK_BINARY_DEST := $(SDK_BIN_DIR)
-INSTALL_TARGETS += SDK_BINARY
-endif
-endif # SDK_BINARY
-
-################################################################################
-# CHROME PACKAGING
-
-chrome::
-	$(MAKE) realchrome
-	$(LOOP_OVER_PARALLEL_DIRS)
-	$(LOOP_OVER_DIRS)
-	$(LOOP_OVER_TOOL_DIRS)
-
-$(FINAL_TARGET)/chrome: $(call mkdir_deps,$(FINAL_TARGET)/chrome)
-
-ifneq (,$(JAR_MANIFEST))
-ifndef NO_DIST_INSTALL
-
-ifdef XPI_NAME
-ifdef XPI_ROOT_APPID
-# For add-on packaging we may specify that an application
-# sub-dir should be added to the root chrome manifest with
-# a specific application id.
-MAKE_JARS_FLAGS += --root-manifest-entry-appid='$(XPI_ROOT_APPID)'
-endif
-
-# if DIST_SUBDIR is defined but XPI_ROOT_APPID is not there's
-# no way langpacks will get packaged right, so error out.
-ifneq (,$(DIST_SUBDIR))
-ifndef XPI_ROOT_APPID
-$(error XPI_ROOT_APPID is not defined - langpacks will break.)
-endif
-endif
-endif
-
-libs realchrome:: $(FINAL_TARGET)/chrome
-	$(call py_action,jar_maker,\
-	  $(QUIET) -j $(FINAL_TARGET)/chrome \
-	  $(MAKE_JARS_FLAGS) $(XULPPFLAGS) $(DEFINES) $(ACDEFINES) \
-	  $(JAR_MANIFEST))
-
-endif
-
-# This is a temporary check to ensure patches relying on the old behavior
-# of silently picking up jar.mn files continue to work.
-else # No JAR_MANIFEST
-ifneq (,$(wildcard $(srcdir)/jar.mn))
-$(error $(srcdir) contains a jar.mn file but this file is not declared in a JAR_MANIFESTS variable in a moz.build file)
-endif
-endif
-
-ifneq ($(DIST_FILES),)
-DIST_FILES_PATH := $(FINAL_TARGET)
-DIST_FILES_FLAGS := $(XULAPP_DEFINES)
-PP_TARGETS += DIST_FILES
-endif
-
-ifneq ($(DIST_CHROME_FILES),)
-DIST_CHROME_FILES_PATH := $(FINAL_TARGET)/chrome
-DIST_CHROME_FILES_FLAGS := $(XULAPP_DEFINES)
-PP_TARGETS += DIST_CHROME_FILES
-endif
-
-ifneq ($(XPI_PKGNAME),)
-tools realchrome::
-ifdef STRIP_XPI
-ifndef MOZ_DEBUG
-	@echo 'Stripping $(XPI_PKGNAME) package directory...'
-	@echo $(FINAL_TARGET)
-	@cd $(FINAL_TARGET) && find . ! -type d \
-			! -name '*.js' \
-			! -name '*.xpt' \
-			! -name '*.gif' \
-			! -name '*.jpg' \
-			! -name '*.png' \
-			! -name '*.xpm' \
-			! -name '*.txt' \
-			! -name '*.rdf' \
-			! -name '*.sh' \
-			! -name '*.properties' \
-			! -name '*.dtd' \
-			! -name '*.html' \
-			! -name '*.xul' \
-			! -name '*.css' \
-			! -name '*.xml' \
-			! -name '*.jar' \
-			! -name '*.dat' \
-			! -name '*.tbl' \
-			! -name '*.src' \
-			! -name '*.reg' \
-			$(PLATFORM_EXCLUDE_LIST) \
-			-exec $(STRIP) $(STRIP_FLAGS) {} >/dev/null 2>&1 \;
-endif
-endif
-	@echo 'Packaging $(XPI_PKGNAME).xpi...'
-	cd $(FINAL_TARGET) && $(ZIP) -qr ../$(XPI_PKGNAME).xpi *
-endif
-
-ifdef INSTALL_EXTENSION_ID
-ifndef XPI_NAME
-$(error XPI_NAME must be set for INSTALL_EXTENSION_ID)
-endif
-
-tools::
-	$(RM) -r '$(DIST)/bin$(DIST_SUBDIR:%=/%)/extensions/$(INSTALL_EXTENSION_ID)'
-	$(NSINSTALL) -D '$(DIST)/bin$(DIST_SUBDIR:%=/%)/extensions/$(INSTALL_EXTENSION_ID)'
-	$(call copy_dir,$(FINAL_TARGET),$(DIST)/bin$(DIST_SUBDIR:%=/%)/extensions/$(INSTALL_EXTENSION_ID))
-
-endif
-
-#############################################################################
-# MDDEPDIR is the subdirectory where all the dependency files are placed.
-#   This uses a make rule (instead of a macro) to support parallel
-#   builds (-jN). If this were done in the LOOP_OVER_DIRS macro, two
-#   processes could simultaneously try to create the same directory.
-#
-#   We use $(CURDIR) in the rule's target to ensure that we don't find
-#   a dependency directory in the source tree via VPATH (perhaps from
-#   a previous build in the source tree) and thus neglect to create a
-#   dependency directory in the object directory, where we really need
-#   it.
-
-ifneq (,$(filter-out all chrome default export realchrome clean clobber clobber_all distclean realclean,$(MAKECMDGOALS)))
-MDDEPEND_FILES		:= $(strip $(wildcard $(addprefix $(MDDEPDIR)/,$(EXTRA_MDDEPEND_FILES) $(addsuffix .pp,$(notdir $(sort $(OBJS) $(PROGOBJS) $(HOST_OBJS) $(HOST_PROGOBJS))) $(TARGETS)))))
-
-ifneq (,$(MDDEPEND_FILES))
-$(call include_deps,$(MDDEPEND_FILES))
-endif
-
-endif
-
-
-ifneq (,$(filter export,$(MAKECMDGOALS)))
-MDDEPEND_FILES		:= $(strip $(wildcard $(addprefix $(MDDEPDIR)/,$(EXTRA_EXPORT_MDDEPEND_FILES))))
-
-ifneq (,$(MDDEPEND_FILES))
-$(call include_deps,$(MDDEPEND_FILES))
-endif
-
-endif
-
-#############################################################################
-
--include $(topsrcdir)/$(MOZ_BUILD_APP)/app-rules.mk
--include $(MY_RULES)
-
-#
-# Generate Emacs tags in a file named TAGS if ETAGS was set in $(MY_CONFIG)
-# or in $(MY_RULES)
-#
-ifdef ETAGS
-ifneq ($(CSRCS)$(CPPSRCS)$(HEADERS),)
-all:: TAGS
-TAGS:: $(CSRCS) $(CPPSRCS) $(HEADERS)
-	$(ETAGS) $(CSRCS) $(CPPSRCS) $(HEADERS)
-endif
-endif
-
-################################################################################
-# Install/copy rules
-#
-# The INSTALL_TARGETS variable contains a list of all install target
-# categories. Each category defines a list of files and executables, and an
-# install destination,
-#
-# FOO_FILES := foo bar
-# FOO_EXECUTABLES := baz
-# FOO_DEST := target_path
-# INSTALL_TARGETS += FOO
-#
-# Additionally, a FOO_TARGET variable may be added to indicate the target for
-# which the files and executables are installed. Default is "libs".
-#
-# Finally, a FOO_KEEP_PATH variable may be set to 1 to indicate the paths given
-# in FOO_FILES/FOO_EXECUTABLES are to be kept at the destination. That is,
-# if FOO_FILES is bar/baz/qux.h, and FOO_DEST is $(DIST)/include, the installed
-# file would be $(DIST)/include/bar/baz/qux.h instead of $(DIST)/include/qux.h
-
-# If we're using binary nsinstall and it's not built yet, fallback to python nsinstall.
-ifneq (,$(filter $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX),$(install_cmd)))
-ifeq (,$(wildcard $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX)))
-nsinstall_is_usable = $(if $(wildcard $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX)),yes)
-
-define install_cmd_override
-$(1): install_cmd = $$(if $$(nsinstall_is_usable),$$(INSTALL),$$(NSINSTALL_PY)) $$(1)
-endef
-endif
-endif
-
-install_target_tier = $(or $($(1)_TARGET),libs)
-INSTALL_TARGETS_TIERS := $(sort $(foreach category,$(INSTALL_TARGETS),$(call install_target_tier,$(category))))
-
-install_target_result = $($(1)_DEST:%/=%)/$(if $($(1)_KEEP_PATH),$(2),$(notdir $(2)))
-install_target_files = $(foreach file,$($(1)_FILES),$(call install_target_result,$(category),$(file)))
-install_target_executables = $(foreach file,$($(1)_EXECUTABLES),$(call install_target_result,$(category),$(file)))
-
-# Work around a GNU make 3.81 bug where it gives $< the wrong value.
-# See details in bug 934864.
-define create_dependency
-$(1): $(2)
-$(1): $(2)
-endef
-
-define install_target_template
-$(call install_cmd_override,$(2))
-$(call create_dependency,$(2),$(1))
-endef
-
-$(foreach category,$(INSTALL_TARGETS),\
-  $(if $($(category)_DEST),,$(error Missing $(category)_DEST)) \
-  $(foreach tier,$(call install_target_tier,$(category)),\
-    $(eval INSTALL_TARGETS_FILES_$(tier) += $(call install_target_files,$(category))) \
-    $(eval INSTALL_TARGETS_EXECUTABLES_$(tier) += $(call install_target_executables,$(category))) \
-  ) \
-  $(foreach file,$($(category)_FILES) $($(category)_EXECUTABLES), \
-    $(eval $(call install_target_template,$(file),$(call install_target_result,$(category),$(file)))) \
-  ) \
-)
-
-$(foreach tier,$(INSTALL_TARGETS_TIERS), \
-  $(eval $(tier):: $(INSTALL_TARGETS_FILES_$(tier)) $(INSTALL_TARGETS_EXECUTABLES_$(tier))) \
-)
-
-install_targets_sanity = $(if $(filter-out $(notdir $@),$(notdir $(<))),$(error Looks like $@ has an unexpected dependency on $< which breaks INSTALL_TARGETS))
-
-$(sort $(foreach tier,$(INSTALL_TARGETS_TIERS),$(INSTALL_TARGETS_FILES_$(tier)))):
-	$(install_targets_sanity)
-	$(call install_cmd,$(IFLAGS1) '$<' '$(@D)')
-
-$(sort $(foreach tier,$(INSTALL_TARGETS_TIERS),$(INSTALL_TARGETS_EXECUTABLES_$(tier)))):
-	$(install_targets_sanity)
-	$(call install_cmd,$(IFLAGS2) '$<' '$(@D)')
-
-################################################################################
-# Preprocessing rules
-#
-# The PP_TARGETS variable contains a list of all preprocessing target
-# categories. Each category has associated variables listing input files, the
-# output directory, extra preprocessor flags, and so on. For example:
-#
-#   FOO := input-file
-#   FOO_PATH := target-directory
-#   FOO_FLAGS := -Dsome_flag
-#   PP_TARGETS += FOO
-#
-# If PP_TARGETS lists a category name <C> (like FOO, above), then we consult the
-# following make variables to see what to do:
-#
-# - <C> lists input files to be preprocessed with mozbuild.action.preprocessor.
-#   We search VPATH for the names given here. If an input file name ends in
-#   '.in', that suffix is omitted from the output file name.
-#
-# - <C>_PATH names the directory in which to place the preprocessed output
-#   files. We create this directory if it does not already exist. Setting
-#   this variable is optional; if unset, we install the files in $(CURDIR).
-#
-# - <C>_FLAGS lists flags to pass to mozbuild.action.preprocessor, in addition
-#   to the usual bunch. Setting this variable is optional.
-#
-# - <C>_TARGET names the 'make' target that should depend on creating the output
-#   files. Setting this variable is optional; if unset, we preprocess the
-#   files for the 'libs' target.
-#
-# - <C>_KEEP_PATH may be set to 1 to indicate the paths given in <C> are to be
-#   kept under <C>_PATH. That is, if <C> is bar/baz/qux.h.in and <C>_PATH is
-#   $(DIST)/include, the preprocessed file would be $(DIST)/include/bar/baz/qux.h
-#   instead of $(DIST)/include/qux.h.
-
-pp_target_tier = $(or $($(1)_TARGET),libs)
-PP_TARGETS_TIERS := $(sort $(foreach category,$(PP_TARGETS),$(call pp_target_tier,$(category))))
-
-pp_target_result = $(or $($(1)_PATH:%/=%),$(CURDIR))/$(if $($(1)_KEEP_PATH),$(2:.in=),$(notdir $(2:.in=)))
-pp_target_results = $(foreach file,$($(1)),$(call pp_target_result,$(category),$(file)))
-
-$(foreach category,$(PP_TARGETS), \
-  $(foreach tier,$(call pp_target_tier,$(category)), \
-    $(eval PP_TARGETS_RESULTS_$(tier) += $(call pp_target_results,$(category))) \
-  ) \
-  $(foreach file,$($(category)), \
-    $(eval $(call create_dependency,$(call pp_target_result,$(category),$(file)), \
-                                    $(file) $(GLOBAL_DEPS))) \
-  ) \
-  $(eval $(call pp_target_results,$(category)): PP_TARGET_FLAGS=$($(category)_FLAGS)) \
-)
-
-$(foreach tier,$(PP_TARGETS_TIERS), \
-  $(eval $(tier):: $(PP_TARGETS_RESULTS_$(tier))) \
-)
-
-PP_TARGETS_ALL_RESULTS := $(sort $(foreach tier,$(PP_TARGETS_TIERS),$(PP_TARGETS_RESULTS_$(tier))))
-$(PP_TARGETS_ALL_RESULTS):
-	$(if $(filter-out $(notdir $@),$(notdir $(<:.in=))),$(error Looks like $@ has an unexpected dependency on $< which breaks PP_TARGETS))
-	$(RM) '$@'
-	$(call py_action,preprocessor,--depend $(MDDEPDIR)/$(@F).pp $(PP_TARGET_FLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) '$<' -o '$@')
-
-# The depfile is based on the filename, and we don't want conflicts. So check
-# there's only one occurrence of any given filename in PP_TARGETS_ALL_RESULTS.
-PP_TARGETS_ALL_RESULT_NAMES := $(notdir $(PP_TARGETS_ALL_RESULTS))
-$(foreach file,$(sort $(PP_TARGETS_ALL_RESULT_NAMES)), \
-  $(if $(filter-out 1,$(words $(filter $(file),$(PP_TARGETS_ALL_RESULT_NAMES)))), \
-    $(error Multiple preprocessing rules are creating a $(file) file) \
-  ) \
-)
-
-ifneq (,$(filter $(PP_TARGETS_TIERS) $(PP_TARGETS_ALL_RESULTS),$(MAKECMDGOALS)))
-# If the depfile for a preprocessed file doesn't exist, add a dep to force
-# re-preprocessing.
-$(foreach file,$(PP_TARGETS_ALL_RESULTS), \
-  $(if $(wildcard $(MDDEPDIR)/$(notdir $(file)).pp), \
-    , \
-    $(eval $(file): FORCE) \
-  ) \
-)
-
-MDDEPEND_FILES := $(strip $(wildcard $(addprefix $(MDDEPDIR)/,$(addsuffix .pp,$(notdir $(PP_TARGETS_ALL_RESULTS))))))
-
-ifneq (,$(MDDEPEND_FILES))
-$(call include_deps,$(MDDEPEND_FILES))
-endif
-
-endif
-
-# Pull in non-recursive targets if this is a partial tree build.
-ifndef TOPLEVEL_BUILD
-include $(topsrcdir)/config/makefiles/nonrecursive.mk
-endif
-
-################################################################################
-# Special gmake rules.
-################################################################################
-
-
-#
-# Re-define the list of default suffixes, so gmake won't have to churn through
-# hundreds of built-in suffix rules for stuff we don't need.
-#
-.SUFFIXES:
-
-#
-# Fake targets.  Always run these rules, even if a file/directory with that
-# name already exists.
-#
-.PHONY: all alltags boot checkout chrome realchrome clean clobber clobber_all export install libs makefiles realclean run_apprunner tools $(DIRS) $(TOOL_DIRS) FORCE
-
-# Used as a dependency to force targets to rebuild
-FORCE:
-
-# Delete target if error occurs when building target
-.DELETE_ON_ERROR:
-
-tags: TAGS
-
-TAGS: $(CSRCS) $(CPPSRCS) $(wildcard *.h)
-	-etags $(CSRCS) $(CPPSRCS) $(wildcard *.h)
-	$(LOOP_OVER_PARALLEL_DIRS)
-	$(LOOP_OVER_DIRS)
-
-ifndef INCLUDED_DEBUGMAKE_MK #{
-  ## Only parse when an echo* or show* target is requested
-  ifneq (,$(call isTargetStem,echo,show))
-    include $(topsrcdir)/config/makefiles/debugmake.mk
-  endif #}
-endif #}
-
-documentation:
-	@cd $(DEPTH)
-	$(DOXYGEN) $(DEPTH)/config/doxygen.cfg
-
-ifdef ENABLE_TESTS
-check::
-	$(LOOP_OVER_PARALLEL_DIRS)
-	$(LOOP_OVER_DIRS)
-	$(LOOP_OVER_TOOL_DIRS)
-endif
-
-
-FREEZE_VARIABLES = \
-  CSRCS \
-  CPPSRCS \
-  EXPORTS \
-  DIRS \
-  LIBRARY \
-  MODULE \
-  TIERS \
-  EXTRA_COMPONENTS \
-  EXTRA_PP_COMPONENTS \
-  MOCHITEST_FILES \
-  MOCHITEST_CHROME_FILES \
-  MOCHITEST_BROWSER_FILES \
-  MOCHITEST_A11Y_FILES \
-  MOCHITEST_METRO_FILES \
-  MOCHITEST_ROBOCOP_FILES \
-  $(NULL)
-
-$(foreach var,$(FREEZE_VARIABLES),$(eval $(var)_FROZEN := '$($(var))'))
-
-CHECK_FROZEN_VARIABLES = $(foreach var,$(FREEZE_VARIABLES), \
-  $(if $(subst $($(var)_FROZEN),,'$($(var))'),$(error Makefile variable '$(var)' changed value after including rules.mk. Was $($(var)_FROZEN), now $($(var)).)))
-
-libs export::
-	$(CHECK_FROZEN_VARIABLES)
-
-PURGECACHES_DIRS ?= $(DIST)/bin
-ifdef MOZ_WEBAPP_RUNTIME
-PURGECACHES_DIRS += $(DIST)/bin/webapprt
-endif
-
-PURGECACHES_FILES = $(addsuffix /.purgecaches,$(PURGECACHES_DIRS))
-
-default all:: $(PURGECACHES_FILES)
-
-$(PURGECACHES_FILES):
-	if test -d $(@D) ; then touch $@ ; fi
-
-.DEFAULT_GOAL := $(or $(OVERRIDE_DEFAULT_GOAL),default)
-
-#############################################################################
-# Derived targets and dependencies
-
-include $(topsrcdir)/config/makefiles/autotargets.mk
-ifneq ($(NULL),$(AUTO_DEPS))
-  default all libs tools export:: $(AUTO_DEPS)
-endif
-
-export:: $(GENERATED_FILES)
-
-GARBAGE += $(GENERATED_FILES)
deleted file mode 100644
--- a/js/src/config/solaris_ia32.map
+++ /dev/null
@@ -1,5 +0,0 @@
-# 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/.
-
-hwcap_1 = OVERRIDE;
deleted file mode 100644
--- a/js/src/config/static-checking-config.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# 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/.
-
-DEHYDRA_SCRIPT = $(topsrcdir)/config/static-checking.js
-
-DEHYDRA_MODULES = \
-  $(NULL)
-
-TREEHYDRA_MODULES = \
-  $(topsrcdir)/jsstack.js \
-  $(NULL)
-
-DEHYDRA_ARG_PREFIX=-fplugin-arg-gcc_treehydra-
-
-DEHYDRA_ARGS = \
-  $(DEHYDRA_ARG_PREFIX)script=$(DEHYDRA_SCRIPT) \
-  $(DEHYDRA_ARG_PREFIX)topsrcdir=$(topsrcdir) \
-  $(DEHYDRA_ARG_PREFIX)objdir=$(DEPTH) \
-  $(DEHYDRA_ARG_PREFIX)dehydra-modules=$(subst $(NULL) ,$(COMMA),$(strip $(DEHYDRA_MODULES))) \
-  $(DEHYDRA_ARG_PREFIX)treehydra-modules=$(subst $(NULL) ,$(COMMA),$(strip $(TREEHYDRA_MODULES))) \
-  $(NULL)
-
-DEHYDRA_FLAGS = -fplugin=$(DEHYDRA_PATH) $(DEHYDRA_ARGS)
-
-ifdef DEHYDRA_PATH
-OS_CXXFLAGS += $(DEHYDRA_FLAGS)
-endif
-
-ifdef ENABLE_CLANG_PLUGIN
-# Load the clang plugin from the mozilla topsrcdir. This implies that the clang
-# plugin is only usable if we're building js/src under mozilla/, though.
-CLANG_PLUGIN := $(DEPTH)/../../build/clang-plugin/$(DLL_PREFIX)clang-plugin$(DLL_SUFFIX)
-OS_CXXFLAGS += -Xclang -load -Xclang $(CLANG_PLUGIN) -Xclang -add-plugin -Xclang moz-check
-OS_CFLAGS += -Xclang -load -Xclang $(CLANG_PLUGIN) -Xclang -add-plugin -Xclang moz-check
-endif
deleted file mode 100644
--- a/js/src/config/static-checking.js
+++ /dev/null
@@ -1,147 +0,0 @@
-/* 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/. */
-
-/**
- * A script for GCC-dehydra to analyze the Mozilla codebase and catch
- * patterns that are incorrect, but which cannot be detected by a compiler. */
-
-/**
- * Activate Treehydra outparams analysis if running in Treehydra.
- */
-
-function treehydra_enabled() {
-  return this.hasOwnProperty('TREE_CODE');
-}
-
-sys.include_path.push(options.topsrcdir);
-
-include('string-format.js');
-
-let modules = [];
-
-function LoadModules(modulelist)
-{
-  if (modulelist == "")
-    return;
-
-  let modulenames = modulelist.split(',');
-  for each (let modulename in modulenames) {
-    let module = { __proto__: this };
-    include(modulename, module);
-    modules.push(module);
-  }
-}
-
-LoadModules(options['dehydra-modules']);
-if (treehydra_enabled())
-  LoadModules(options['treehydra-modules']);
-
-function process_type(c)
-{
-  for each (let module in modules)
-    if (module.hasOwnProperty('process_type'))
-      module.process_type(c);
-}
-
-function hasAttribute(c, attrname)
-{
-  var attr;
-
-  if (c.attributes === undefined)
-    return false;
-
-  for each (attr in c.attributes)
-    if (attr.name == 'user' && attr.value[0] == attrname)
-      return true;
-
-  return false;
-}
-
-// This is useful for detecting method overrides
-function signaturesMatch(m1, m2)
-{
-  if (m1.shortName != m2.shortName)
-    return false;
-
-  if ((!!m1.isVirtual) != (!!m2.isVirtual))
-    return false;
-  
-  if (m1.isStatic != m2.isStatic)
-    return false;
-  
-  let p1 = m1.type.parameters;
-  let p2 = m2.type.parameters;
-
-  if (p1.length != p2.length)
-    return false;
-  
-  for (let i = 0; i < p1.length; ++i)
-    if (!params_match(p1[i], p2[i]))
-      return false;
-
-  return true;
-}
-
-function params_match(p1, p2)
-{
-  [p1, p2] = unwrap_types(p1, p2);
-
-  for (let i in p1)
-    if (i == "type" && !types_match(p1.type, p2.type))
-      return false;
-    else if (i != "type" && p1[i] !== p2[i])
-      return false;
-
-  for (let i in p2)
-    if (!(i in p1))
-      return false;
-
-  return true;
-}
-
-function types_match(t1, t2)
-{
-  if (!t1 || !t2)
-    return false;
-
-  [t1, t2] = unwrap_types(t1, t2);
-
-  return t1 === t2;
-}
-
-function unwrap_types(t1, t2)
-{
-  while (t1.variantOf)
-    t1 = t1.variantOf;
-
-  while (t2.variantOf)
-    t2 = t2.variantOf;
-
-  return [t1, t2];
-}
-
-const forward_functions = [
-  'process_type',
-  'process_tree_type',
-  'process_decl',
-  'process_tree_decl',
-  'process_function',
-  'process_tree',
-  'process_cp_pre_genericize',
-  'input_end'
-];
-
-function setup_forwarding(n)
-{
-  this[n] = function() {
-    for each (let module in modules) {
-      if (module.hasOwnProperty(n)) {
-        module[n].apply(this, arguments);
-      }
-    }
-  }
-}
-
-for each (let n in forward_functions)
-  setup_forwarding(n);
deleted file mode 100644
--- a/js/src/config/string-format.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/* 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/. */
-
-String.prototype.format = function string_format() {
-  // there are two modes of operation... unnamed indices are read in order;
-  // named indices using %(name)s. The two styles cannot be mixed.
-  // Unnamed indices can be passed as either a single argument to this function,
-  // multiple arguments to this function, or as a single array argument
-  let curindex = 0;
-  let d;
-
-  if (arguments.length > 1) {
-    d = arguments;
-  }
-  else
-    d = arguments[0];
-
-  function r(s, key, type) {
-    if (type == '%')
-      return '%';
-    
-    let v;
-    if (key == "") {
-      if (curindex == -1)
-        throw Error("Cannot mix named and positional indices in string formatting.");
-
-      if (curindex == 0 && (!(d instanceof Object) || !(0 in d))) {
-        v = d;
-      }
-      else if (!(curindex in d))
-        throw Error("Insufficient number of items in format, requesting item %i".format(curindex));
-      else {
-        v = d[curindex];
-      }
-
-      ++curindex;
-    }
-    else {
-      key = key.slice(1, -1);
-      if (curindex > 0)
-        throw Error("Cannot mix named and positional indices in string formatting.");
-      curindex = -1;
-
-      if (!(key in d))
-        throw Error("Key '%s' not present during string substitution.".format(key));
-      v = d[key];
-    }
-    switch (type) {
-    case "s":
-      if (v === undefined)
-        return "<undefined>";
-      return v.toString();
-    case "r":
-      return uneval(v);
-    case "i":
-      return parseInt(v);
-    case "f":
-      return Number(v);
-    default:
-      throw Error("Unexpected format character '%s'.".format(type));
-    }
-  }
-  return this.replace(/%(\([^)]+\))?(.)/g, r);
-};
deleted file mode 100644
--- a/js/src/config/system-headers
+++ /dev/null
@@ -1,1147 +0,0 @@
-nspr.h
-plarena.h
-plarenas.h
-plbase64.h
-plerror.h
-plgetopt.h
-plhash.h
-plstr.h
-pratom.h
-prbit.h
-prclist.h
-prcmon.h
-prcountr.h
-prcpucfg.h
-prcvar.h
-prdtoa.h
-prenv.h
-prerr.h
-prerror.h
-prinet.h
-prinit.h
-prinrval.h
-prio.h
-pripcsem.h
-private
-prlink.h
-prlock.h
-prlog.h
-prlong.h
-prmem.h
-prmon.h
-prmwait.h
-prnetdb.h
-prolock.h
-prpdce.h
-prprf.h
-prproces.h
-prrng.h
-prrwlock.h
-prshm.h
-prshma.h
-prsystem.h
-prthread.h
-prtime.h
-prtpool.h
-prtrace.h
-prtypes.h
-prvrsion.h
-prwin16.h
-base64.h
-blapit.h
-cert.h
-certdb.h
-certt.h
-ciferfam.h
-cmmf.h
-cmmft.h
-cms.h
-cmsreclist.h
-cmst.h
-crmf.h
-crmft.h
-cryptohi.h
-cryptoht.h
-ecl-exp.h
-hasht.h
-jar-ds.h
-jar.h
-jarfile.h
-key.h
-keyhi.h
-keyt.h
-keythi.h
-nss.h
-nssb64.h
-nssb64t.h
-nssbase.h
-nssbaset.h
-nssck.api
-nssckbi.h
-nssckepv.h
-nssckft.h
-nssckfw.h
-nssckfwc.h
-nssckfwt.h
-nssckg.h
-nssckmdt.h
-nssckt.h
-nssilckt.h
-nssilock.h
-nsslocks.h
-nssrwlk.h
-nssrwlkt.h
-nssutil.h
-ocsp.h
-ocspt.h
-p12.h
-p12plcy.h
-p12t.h
-pk11func.h
-pk11pqg.h
-pk11priv.h
-pk11pub.h
-pk11sdr.h
-pkcs11.h
-pkcs11f.h
-pkcs11n.h
-pkcs11p.h
-pkcs11t.h
-pkcs11u.h
-pkcs12.h
-pkcs12t.h
-pkcs7t.h
-portreg.h
-preenc.h
-secasn1.h
-secasn1t.h
-seccomon.h
-secder.h
-secdert.h
-secdig.h
-secdigt.h
-secerr.h
-sechash.h
-secitem.h
-secmime.h
-secmod.h
-secmodt.h
-secoid.h
-secoidt.h
-secpkcs5.h
-secpkcs7.h
-secport.h
-shsign.h
-smime.h
-ssl.h
-sslerr.h
-sslproto.h
-sslt.h
-utilmodt.h
-utilpars.h
-utilparst.h
-utilrename.h
-A4Stuff.h
-activscp.h
-AEDataModel.h
-AEObjects.h
-AEPackObject.h
-AERegistry.h
-AEUtils.h
-afxcmn.h
-afxcoll.h
-afxcview.h
-afxdisp.h
-afxdtctl.h
-afxext.h
-afxmt.h
-afxpriv.h
-afxtempl.h
-afxwin.h
-algorithm
-Aliases.h
-all.h
-alloca.h
-alloc.h
-alsa/asoundlib.h
-android/log.h
-ansi_parms.h
-a.out.h
-app/Cursor.h
-Appearance.h
-AppFileInfo.h
-AppKit.h
-AppleEvents.h
-Application.h
-app/Message.h
-app/MessageRunner.h
-arpa/inet.h
-arpa/nameser.h
-asm/sigcontext.h
-asm/signal.h
-ASRegistry.h
-assert.h
-atk/atk.h
-atlcom.h
-atlconv.h
-atlctl.cpp
-atlctl.h
-ATLCTL.H
-atlhost.h
-atlimpl.cpp
-atlwin.cpp
-ATSTypes.h
-ATSUnicode.h
-Balloons.h
-base/pblock.h
-base/PCR_Base.h
-base/session.h
-basetyps.h
-be/app/Application.h
-Beep.h
-be/kernel/image.h
-be/kernel/OS.h
-bfd.h
-Bitmap.h
-bitset
-blapi.h
-bsd/libc.h
-bsd/syscall.h
-bstring.h
-builtin.h
-Button.h
-byteswap.h
-#if MOZ_TREE_CAIRO!=1
-#define WRAP_CAIRO_HEADERS
-#endif
-#ifdef WRAP_CAIRO_HEADERS
-pixman.h
-cairo.h
-cairo-atsui.h
-cairo-beos.h
-cairo-ft.h
-cairo-glitz.h
-cairo-os2.h
-cairo-pdf.h
-cairo-ps.h
-cairo-tee.h
-cairo-quartz.h
-cairo-win32.h
-cairo-xlib.h
-cairo-xlib-xrender.h
-cairo-directfb.h
-cairo-qpainter.h
-#endif
-dfiff.h
-exception
-ffi.h
-fusion/reactor.h
-fusion/property.h
-fusion/conf.h
-fusion/build.h
-fusion/hash.h
-fusion/shm/shm.h
-fusion/shm/shm_internal.h
-fusion/shm/pool.h
-fusion/ref.h
-fusion/fusion_internal.h
-fusion/lock.h
-fusion/types.h
-fusion/vector.h
-fusion/call.h
-fusion/shmalloc.h
-fusion/protocol.h
-fusion/fusion.h
-fusion/arena.h
-fusion/object.h
-dgiff.h
-direct/util.h
-direct/memcpy.h
-direct/interface.h
-direct/conf.h
-direct/tree.h
-direct/signals.h
-direct/build.h
-direct/interface_implementation.h
-direct/utf8.h
-direct/serial.h
-direct/hash.h
-direct/direct.h
-direct/clock.h
-direct/types.h
-direct/mem.h
-direct/thread.h
-direct/debug.h
-direct/stream.h
-direct/messages.h
-direct/trace.h
-direct/modules.h
-direct/log.h
-direct/system.h
-direct/list.h
-dfb_types.h
-directfb_strings.h
-directfb_keyboard.h
-callconv.h
-Carbon/Carbon.h
-CarbonEvents.h
-Carbon.h
-cassert
-c_asm.h
-cctype
-cderr.h
-cerrno
-CFBase.h
-CFBundle.h
-CFData.h
-CFDictionary.h
-cf.h
-CFNumber.h
-CFPlugIn.h
-CFPreferences.h
-CFString.h
-CFURL.h
-CGAffineTransform.h
-CheckBox.h
-climits
-Clipboard.h
-cmplrs/stsupport.h
-Cocoa/Cocoa.h
-CodeFragments.h
-comdef.h
-commctrl.h
-COMMCTRL.H
-commdlg.h
-compat.h
-condapi.h
-ConditionalMacros.h
-config.h
-conio.h
-console.h
-ControlDefinitions.h
-Controls.h
-CoreFoundation/CoreFoundation.h
-CoreServices/CoreServices.h
-CPalmRec.cpp
-Cpalmrec.h
-CPCatgry.cpp
-CPDbBMgr.h
-CPString.cpp
-CPString.h
-crtdbg.h
-crt_externs.h
-crypt.h
-cstddef
-cstdio
-cstdlib
-cstring
-ctime
-ctype.h
-curl/curl.h
-curl/easy.h
-curses.h
-cxxabi.h
-DateTimeUtils.h
-dbus/dbus.h
-dbus/dbus-glib.h
-dbus/dbus-glib-lowlevel.h
-ddeml.h
-Debug.h
-deque
-dem.h
-descrip.h
-Devices.h
-Dialogs.h
-direct.h
-dirent.h
-DiskInit.h
-dlfcn.h
-dlgs.h
-dl.h
-docobj.h
-dos/dosextens.h
-dos.h
-Drag.h
-DriverServices.h
-DriverSynchronization.h
-DropInPanel.h
-dvidef.h
-elf.h
-endian.h
-Entry.h
-errno.h
-Errors.h
-Events.h
-exdisp.h
-ExDisp.h
-exe386.h
-execinfo.h
-extras.h
-fabdef.h
-fcntl.h
-features.h
-fibdef.h
-File.h
-filehdr.h
-files.h
-Files.h
-FindDirectory.h
-Finder.h
-FinderRegistry.h
-FixMath.h
-float.h
-fnmatch.h
-Folders.h
-fontconfig/fontconfig.h
-fontconfig/fcfreetype.h
-Font.h
-Fonts.h
-fp.h
-fpieee.h
-frame/log.h
-frame/req.h
-freetype/freetype.h
-freetype/ftcache.h
-freetype/ftglyph.h
-freetype/ftsynth.h
-freetype/ftoutln.h
-freetype/ttnameid.h
-freetype/tttables.h
-freetype/t1tables.h
-freetype/ftlcdfil.h
-freetype/ftsizes.h
-freetype/ftadvanc.h
-freetype/ftbitmap.h
-freetype/ftxf86.h
-freetype.h
-ftcache.h
-ftglyph.h
-ftsynth.h
-ftoutln.h
-ttnameid.h
-tttables.h
-t1tables.h
-ftlcdfil.h
-ftsizes.h
-ftadvanc.h
-ftbitmap.h
-ftxf86.h
-fribidi/fribidi.h
-FSp_fopen.h
-fstream
-fstream.h
-ft2build.h
-fts.h
-gconf/gconf-client.h
-Gdiplus.h
-gdk/gdk.h
-gdk/gdkkeysyms.h
-gdk/gdkprivate.h
-gdk/gdkx.h
-gdk/gdkdirectfb.h
-gdk-pixbuf/gdk-pixbuf.h
-Gestalt.h
-getopt.h
-glibconfig.h
-glib.h
-glib-object.h
-gmodule.h
-gnome.h
-gnu/libc-version.h
-grp.h
-gssapi_generic.h
-gssapi/gssapi_generic.h
-gssapi/gssapi.h
-gssapi.h
-gtk/gtk.h
-gtk/gtkx.h
-gtk/gtkprinter.h
-gtk/gtkprintjob.h
-gtk/gtkprintunixdialog.h
-HIToolbox/HIToolbox.h
-hlink.h
-ia64/sys/inline.h
-Icons.h
-iconv.h
-ieeefp.h
-ifaddrs.h
-image.h
-imagehlp.h
-imm.h
-initguid.h
-InterfaceDefs.h
-InternetConfig.h
-IntlResources.h
-ints.h
-intshcut.h
-inttypes.h
-iodef.h
-io.h
-IOKit/IOKitLib.h
-IOKit/IOMessage.h
-IOKit/pwr_mgt/IOPMLib.h
-iomanip
-ios
-iosfwd
-iostream
-iostream.h
-iterator
-JavaControl.h
-JavaEmbedding/JavaControl.h
-JavaVM/jni.h
-JManager.h
-JNIEnvTests.h
-jni.h
-#if MOZ_NATIVE_JPEG==1
-jpeglib.h
-#endif
-JVMManagerTests.h
-Kerberos/Kerberos.h
-kernel/image.h
-kernel/OS.h
-LAction.h
-langinfo.h
-LApplication.h
-LArray.h
-LArrayIterator.h
-LAttachable.h
-LAttachment.h
-LaunchServices.h
-lber.h
-LBroadcaster.h
-LButton.h
-lcache.h
-LCaption.h
-LCheckBox.h
-LCicnButton.h
-LClipboard.h
-LCommander.h
-LComparator.h
-LControl.h
-ldap.h
-ldaplog.h
-ldappr.h
-ldap_ssl.h
-LDataStream.h
-ldfcn.h
-LDialogBox.h
-ldif.h
-LDocApplication.h
-LDocument.h
-LDragAndDrop.h
-LDragTask.h
-LEditField.h
-LEditText.h
-LEventDispatcher.h
-LFile.h
-LFileStream.h
-LFileTypeList.h
-LFocusBox.h
-LGrafPortView.h
-LHandleStream.h
-libc_r.h
-libelf.h
-libelf/libelf.h
-libgen.h
-libgnome/gnome-url.h
-libgnome/libgnome.h
-libgnomeui/gnome-icon-lookup.h
-libgnomeui/gnome-icon-theme.h
-libgnomeui/gnome-ui-init.h
-libgnomevfs/gnome-vfs-file-info.h
-libgnomevfs/gnome-vfs.h
-libgnomevfs/gnome-vfs-init.h
-libgnomevfs/gnome-vfs-mime.h
-libgnomevfs/gnome-vfs-mime-handlers.h
-libgnomevfs/gnome-vfs-mime-utils.h
-libgnomevfs/gnome-vfs-ops.h
-libgnomevfs/gnome-vfs-standard-callbacks.h
-lib$routines.h
-limits
-limits.h
-link.h
-linux/kernel.h
-linux/limits.h
-linux/rtc.h
-linux/version.h
-list
-List.h
-Lists.h
-LListBox.h
-LListener.h
-LMenuBar.h
-LMenu.h
-LModelDirector.h
-LModelObject.h
-LModelProperty.h
-loader.h
-locale
-locale.h
-LOffscreenView.h
-logkeys.h
-logstrng.h
-Looper.h
-LowMem.h
-LPane.h
-LPeriodical.h
-LPicture.h
-LPlaceHolder.h
-LPrintout.h
-LProgressBar.h
-LPushButton.h
-LRadioGroup.h
-LRadioGroupView.h
-LRunArray.h
-LScroller.h
-LSharable.h
-LSingleDoc.h
-LStaticText.h
-LStdControl.h
-LStream.h
-LString.h
-LTabGroup.h
-LTabGroupView.h
-LTableArrayStorage.h
-LTableMonoGeometry.h
-LTableSingleSelector.h
-LTableView.h
-LTextEditView.h
-LTextTableView.h
-LUndoer.h
-LVariableArray.h
-LView.h
-LWindow.h
-m68881.h
-MacErrors.h
-MacHeadersCarbon.h
-machine/ansi.h
-machine/builtins.h
-machine/clock.h
-machine/endian.h
-machine/frame.h
-machine/inline.h
-machine/limits.h
-machine/signal.h
-machine/trap.h
-mach/mach_host.h
-mach/mach_init.h
-mach/mach_interface.h
-mach/mach_port.h
-mach-o/dyld.h
-MacLocales.h
-MacMemory.h
-MacTCP.h
-MacTypes.h
-MacWindows.h
-malloc.h
-malloc_np.h
-map
-mapicode.h
-mapidefs.h
-mapiguid.h
-mapi.h
-mapitags.h
-mapiutil.h
-mapix.h
-Math64.h
-math.h
-mbstring.h
-mem.h
-memory
-memory.h
-Memory.h
-MenuBar.h
-Menu.h
-Menus.h
-Message.h
-Mime.h
-MixedMode.h
-mlang.h
-mmsystem.h
-model.h
-Movies.h
-mpw/errno.h
-mshtmhst.h
-mshtml.h
-mswsock.h
-Multiprocessing.h
-mutex.h
-Navigation.h
-ncompat.h
-ncurses.h
-netCore.h
-netdb.h
-net/if.h
-netinet/in.h
-netinet/in_systm.h
-netinet/tcp.h
-new
-newexe.h
-new.h
-nl_types.h
-NodeInfo.h
-nsswitch.h
-objbase.h
-objidl.h
-Objsafe.h
-ojiapitests.h
-ole2.h
-oleidl.h
-OpenGL/OpenGL.h
-OpenTptInternet.h
-OpenTransport.h
-os2.h
-OS.h
-osreldate.h
-ostream
-OSUtils.h
-Packages.h
-Palettes.h
-PALM_CMN.H
-pango/pango-modules.h
-pango/pangocairo.h
-pango/pangofc-decoder.h
-pango/pangofc-font.h
-pango/pangofc-fontmap.h
-pango/pango-break.h
-pango/pango-fontmap.h
-pango/pango.h
-pango/pangoxft.h
-pango/pango-utils.h
-pascal.h
-Patches.h
-Path.h
-pcfs/pc_dir.h
-Pgenerr.h
-PGenErr.h
-Ph.h
-PLStringFuncs.h
-PMApplication.h
-pmddim.h
-poll.h
-Polygon.h
-portable.h
-Power.h
-PP_ClassHeaders.cp
-PP_Constants.h
-PPCToolbox.h
-PP_DebugHeaders.cp
-PP_KeyCodes.h
-PP_Macros.h
-PP_Messages.h
-PP_Prefix.h
-PP_Resources.h
-PP_Types.h
-Printing.h
-Print/PMPrintingDialogExtensions.h
-private/qucomextra_p.h
-Processes.h
-process.h
-Process.h
-proto/dos.h
-proto/exec.h
-psap.h
-Pt.h
-pthread.h
-pthread_np.h
-pulse/pulseaudio.h
-pwd.h
-Python.h
-QDOffscreen.h
-queue
-Quickdraw.h
-QuickDraw.h
-QuickTimeComponents.h
-quipu/attr.h
-rasdlg.h
-raserror.h
-ras.h
-regex.h
-Region.h
-resolv.h
-Resources.h
-Retrace.h
-rld_interface.h
-rmsdef.h
-Roster.h
-rpc.h
-rpcproxy.h
-rpc/types.h
-sane/sane.h
-sane/sanei.h
-sane/saneopts.h
-Scrap.h
-Screen.h
-Script.h
-ScrollBar.h
-sec.h
-secrng.h
-security.h
-secutil.h
-semaphore.h
-servprov.h
-set
-setjmp.h
-SFNTLayoutTypes.h
-SFNTTypes.h
-share.h
-shellapi.h
-shlguid.h
-shlobj.h
-sigcontext.h
-signal.h
-SimpleGameSound.h
-SIOUX.h
-size_t.h
-sndio.h
-someincludefile.h
-Sound.h
-soundcard.h
-sqlite3.h
-ssdef.h
-sstream
-stack
-StandardFile.h
-starlet.h
-stat.h
-statreg.cpp
-statreg.h
-stdarg.h
-stdbool.h
-stddef.h
-stdint.h
-stdio.h
-stdlib.h
-storage/FindDirectory.h
-StorageKit.h
-string
-StringCompare.h
-string.h
-String.h
-strings.h
-Strings.h
-StringView.h
-stropts.h
-strstrea.h
-structs.h
-stsdef.h
-SupportDefs.h
-support/String.h
-support/SupportDefs.h
-support/TLS.h
-svrcore.h
-symconst.h
-sym.h
-synch.h
-syncmgr.h
-sys/atomic_op.h
-sys/bitypes.h
-sys/byteorder.h
-syscall.h
-sys/cdefs.h
-sys/cfgodm.h
-sys/elf.h
-sys/endian.h
-sys/errno.h
-sys/fault.h
-sys/fcntl.h
-sys/file.h
-sys/filio.h
-sys/frame.h
-sys/immu.h
-sys/inttypes.h
-sys/ioccom.h
-sys/ioctl.h
-sys/ipc.h
-sys/ldr.h
-sys/link.h
-sys/locking.h
-syslog.h
-sys/lwp.h
-sys/machine.h
-sys/mman.h
-sys/mmu.h
-sys/mount.h
-sys/mpctl.h
-sys/param.h
-sys/pda.h
-sys/poll.h
-sys/ppc.h
-sys/prctl.h
-sys/priv.h
-sys/procfs.h
-sys/pstat.h
-sys/ptrace.h
-sys/queue.h
-sys/quota.h
-sys/reboot.h
-sys/reg.h
-sys/regset.h
-sys/resource.h
-sys/sched.h
-sys/select.h
-sys/sem.h
-sys/sendfile.h
-sys/shm.h
-sys/siginfo.h
-sys/signal.h
-sys/socket.h
-sys/sockio.h
-sys/sparc/frame.h
-sys/stack.h
-sys/statfs.h
-sys/stat.h
-sys/statvfs.h
-sys/syscall.h
-sys/sysctl.h
-sys/sysinfo.h
-sys/sysmp.h
-sys/syssgi.h
-sys/system_properties.h
-sys/systeminfo.h
-sys/timeb.h
-sys/time.h
-sys/times.h
-sys/ttycom.h
-sys/types.h
-sys/ucontext.h
-sys/uio.h
-sys/un.h
-sys/unistd.h
-sys/utsname.h
-sys/vfs.h
-sys/wait.h
-tables.h
-TArray.h
-TArrayIterator.h
-task.h
-tchar.h
-TCHAR.H
-termios.h
-TextCommon.h
-TextEdit.h
-TextEncodingConverter.h
-TextServices.h
-TextUtils.h
-TextView.h
-th/PCR_Th.h
-thread.h
-ThreadManagerTests.h
-Threads.h
-time.h
-Timer.h
-tlhelp32.h
-ToolUtils.h
-tr1/functional
-trace.h
-Traps.h
-typeinfo
-types.h
-Types.h
-UAppleEventsMgr.h
-UAttachments.h
-ucontext.h
-uconv.h
-UCursor.h
-ucx$inetdef.h
-UDebugging.h
-UDesktop.h
-UDrawingState.h
-UDrawingUtils.h
-UEnvironment.h
-UEventMgr.h
-UException.h
-UExtractFromAEDesc.h
-UGWorld.h
-UKeyFilters.h
-ulocks.h
-ulserrno.h
-UMemoryMgr.h
-UModalDialogs.h
-UNavServicesDialogs.h
-UnicodeBlockObjects.h
-UnicodeConverter.h
-UnicodeUtilities.h
-unidef.h
-unikbd.h
-unistd.h
-unix.h
-unixio.h
-unixlib.h
-unknwn.h
-UPrinting.h
-UQuickTime.h
-UReanimator.h
-URegions.h
-URegistrar.h
-UResourceMgr.h
-utility
-urlhist.h
-urlmon.h
-UScrap.h
-UScreenPort.h
-UTCUtils.h
-UTETextAction.h
-UTEViewTextAction.h
-UTextEdit.h
-UTextTraits.h
-utility
-utime.h
-UWindows.h
-values.h
-varargs.h
-vcclr.h
-vector
-View.h
-Volume.h
-wab.h
-wait.h
-wchar.h
-wctype.h
-winbase.h
-win/compobj.h
-windef.h
-Window.h
-windows.h
-Windows.h
-windowsx.h
-Wininet.h
-winnls.h
-winperf.h
-winreg.h
-Winreg.h
-winsock2.h
-winsock.h
-winspool.h
-winsvc.h
-winuser.h
-winver.h
-wmem.h
-workbench/startup.h
-wtypes.h
-wx/image.h
-wx/listctrl.h
-wx/log.h
-wx/toolbar.h
-wx/wx.h
-wx/xrc/xmlres.h
-X11/cursorfont.h
-X11/extensions/Print.h
-X11/extensions/shape.h
-X11/extensions/scrnsaver.h
-X11/extensions/XShm.h
-X11/extensions/Xrender.h
-X11/extensions/Xdamage.h
-X11/extensions/Xcomposite.h
-X11/Intrinsic.h
-X11/keysymdef.h
-X11/keysym.h
-X11/Shell.h
-X11/StringDefs.h
-X11/Xatom.h
-X11/Xft/Xft.h
-X11/Xfuncproto.h
-X11/X.h
-X11/XKBlib.h
-X11/Xlib.h
-X11/Xlibint.h
-X11/Xlocale.h
-X11/Xos.h
-X11/Xutil.h
-xpt_struct.h
-xpt_xdr.h
-zmouse.h
-speex/speex_resampler.h
-soundtouch/SoundTouch.h
-#if MOZ_NATIVE_PNG==1
-png.h
-#endif
-#if MOZ_NATIVE_ZLIB==1
-zlib.h
-#endif
-#ifdef MOZ_ENABLE_STARTUP_NOTIFICATION
-libsn/sn.h
-libsn/sn-common.h
-libsn/sn-launchee.h
-libsn/sn-launcher.h
-libsn/sn-monitor.h
-libsn/sn-util.h
-#endif
-#if MOZ_NATIVE_HUNSPELL==1
-hunspell.hxx
-#endif
-#if MOZ_NATIVE_BZ2==1
-bzlib.h
-#endif
-#ifdef MOZ_ENABLE_GIO
-gio/gio.h
-#endif
-#if MOZ_NATIVE_LIBEVENT==1
-event.h
-#else
-sys/event.h
-#endif
-#ifdef MOZ_ENABLE_LIBPROXY
-proxy.h
-#endif
-#ifdef MOZ_ENABLE_CONTENTMANAGER
-SelectSingleContentItemPage.h
-SelectMultipleContentItemsPage.h
-QtSparql/qsparqlconnection.h
-QtSparql/qsparqlquery.h
-QtSparql/qsparqlresult.h
-#endif
-
-#if MOZ_TREE_PIXMAN!=1
-pixman.h
-#endif
-#if MOZ_ENABLE_MEEGOTOUCHSHARE
-shareuiinterface.h
-#endif
-#if MOZ_NATIVE_LIBVPX==1
-vpx/vpx_codec.h
-vpx/vpx_decoder.h
-vpx/vpx_encoder.h
-vpx/vp8cx.h
-vpx/vp8dx.h
-#endif
-#ifdef GKMEDIAS_SHARED_LIBRARY
-vpx/vpx_codec.h
-vpx/vpx_decoder.h
-vpx/vpx_encoder.h
-vpx/vp8cx.h
-vpx/vp8dx.h
-vorbis/codec.h
-theora/theoradec.h
-tremor/ivorbiscodec.h
-ogg/ogg.h
-ogg/os_types.h
-nestegg/nestegg.h
-cubeb/cubeb.h
-#endif
-gst/gst.h
-gst/app/gstappsink.h
-gst/app/gstappsrc.h
-gst/video/video.h
-sys/msg.h
-sys/ipc.h
-sys/thr.h
-sys/user.h
-kvm.h
-spawn.h
-err.h
-xlocale.h
-#ifdef MOZ_SHARED_ICU
-unicode/locid.h
-unicode/numsys.h
-unicode/ucal.h
-unicode/uclean.h
-unicode/ucol.h
-unicode/udat.h
-unicode/udatpg.h
-unicode/uenum.h
-unicode/unum.h
-unicode/ustring.h
-unicode/utypes.h
-#endif
-libutil.h
deleted file mode 100644
--- a/js/src/config/version.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-# 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/.
-
-ifndef INCLUDED_VERSION_MK
-INCLUDED_VERSION_MK=1
-
-# Windows gmake build:
-# Build default .rc file if $(RESFILE) isn't defined.
-# TODO:
-# PBI      : Private build info.  Not used currently.
-#            Guessing the best way would be to set an env var.
-# BINARY   : Binary name.  Not used currently.
-ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
-ifndef RESFILE
-RCFILE=./module.rc
-RESFILE=./module.res
-_RC_STRING = -QUIET 1 -DEPTH $(DEPTH) -TOPSRCDIR $(topsrcdir) -OBJDIR . -SRCDIR $(srcdir) -DISPNAME $(MOZ_APP_DISPLAYNAME) -APPVERSION $(MOZ_APP_VERSION)
-ifdef MOZILLA_OFFICIAL
-_RC_STRING += -OFFICIAL 1
-endif
-ifdef MOZ_DEBUG
-_RC_STRING += -DEBUG 1
-endif
-ifdef PROGRAM
-_RC_STRING += -BINARY $(PROGRAM)
-else
-ifdef _PROGRAM
-_RC_STRING += -BINARY $(_PROGRAM)
-else
-ifdef SHARED_LIBRARY
-_RC_STRING += -BINARY $(SHARED_LIBRARY)
-endif
-endif
-endif
-ifdef RCINCLUDE
-_RC_STRING += -RCINCLUDE $(srcdir)/$(RCINCLUDE)
-endif
-
-GARBAGE += $(RESFILE) $(RCFILE)
-
-#dummy target so $(RCFILE) doesn't become the default =P
-all::
-
-$(RCFILE): $(RCINCLUDE) $(topsrcdir)/config/version_win.pl
-	$(PERL) $(topsrcdir)/config/version_win.pl $(_RC_STRING)
-
-endif  # RESFILE
-endif  # Windows
-
-endif
deleted file mode 100755
--- a/js/src/config/version_win.pl
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/perl -w
-
-# 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/.
-
-#use diagnostics;
-require strict;
-my $dir = $0;
-$dir =~ s/[^\/]*$//;
-push(@INC, "$dir");
-require "Moz/Milestone.pm";
-use Getopt::Long;
-use Getopt::Std;
-use POSIX;
-
-# Calculate the number of days since Jan. 1, 2000 from a buildid string
-sub daysFromBuildID
-{
-    my ($buildid,) = @_;
-
-    my ($y, $m, $d, $h) = ($buildid =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/);
-    $d || die("Unrecognized buildid string.");
-
-    my $secondstodays = 60 * 60 * 24;
-    return sprintf("%d",
-		   (POSIX::mktime(00, 00, 00, $d, $m - 1, $y - 1900) -
-		    POSIX::mktime(00, 00, 00, 01, 00, 100)) / $secondstodays);
-}
-
-#Creates version resource file
-
-#Paramaters are passed on the command line:
-
-#Example: -MODNAME nsToolkitCompsModule -DEBUG=1
-
-# DEBUG - Mozilla's global debug variable - tells if its debug version
-# OFFICIAL - tells Mozilla is building a milestone or nightly
-# MSTONE - tells which milestone is being built;
-# OBJDIR - Holds the object directory;
-# MODNAME - tells what the name of the module is like nsBMPModule
-# DEPTH - Holds the path to the root obj dir
-# TOPSRCDIR - Holds the path to the root mozilla dir
-# SRCDIR - Holds module.ver and source
-# BINARY - Holds the name of the binary file
-# DISPNAME - Holds the display name of the built application
-# APPVERSION - Holds the version string of the built application
-# RCINCLUDE - Holds the name of the RC File to include or ""
-# QUIET - Turns off output
-
-#Description and Comment come from module.ver
-#Bug 23560
-#http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/rc_7x2d.asp
-
-#Get next .ver file entry
-sub getNextEntry
-{
-	while (<VERFILE>) 
-	{ 
-		my $mline = $_;
-		($mline) = split(/#/,$mline);
-		my ($entry, $value)=split(/=/,$mline,2);
-		if (defined($entry))
-		{
-			if (defined($value))
-			{
-				$entry =~ s/^\s*(.*?)\s*$/$1/;
-				$value =~ s/^\s*(.*?)\s*$/$1/;
-				return ($entry,$value);
-			}
-		}
-	}
-	return undef;
-}
-
-my ($quiet,$objdir,$debug,$official,$milestone,$buildid,$module,$binary,$depth,$rcinclude,$srcdir,$fileversion,$productversion);
-
-GetOptions( "QUIET" => \$quiet,
-		"DEBUG=s" => \$debug,
-		"OFFICIAL=s" => \$official,
-		"MSTONE=s" => \$milestone,
-		"MODNAME=s" => \$module,
-		"BINARY=s" => \$binary,
-		"DISPNAME=s" => \$displayname,
-		"APPVERSION=s" => \$appversion,
-		"SRCDIR=s" => \$srcdir,
-		"TOPSRCDIR=s" => \$topsrcdir,
-		"DEPTH=s" => \$depth,
-		"RCINCLUDE=s" => \$rcinclude,
-		"OBJDIR=s" => \$objdir);
-if (!defined($debug)) {$debug="";}
-if (!defined($official)) {$official="";}
-if (!defined($milestone)) {$milestone="";}
-if (!defined($module)) {$module="";}
-if (!defined($binary)) {$binary="";}
-if (!defined($displayname)) {$displayname="Mozilla";}
-if (!defined($appversion)) {$appversion=$milestone;}
-if (!defined($depth)) {$depth=".";}
-if (!defined($rcinclude)) {$rcinclude="";}
-if (!defined($objdir)) {$objdir=".";}
-if (!defined($srcdir)) {$srcdir=".";}
-if (!defined($topsrcdir)) {$topsrcdir=".";}
-my $mfversion = "Personal";
-my $mpversion = "Personal";
-my @fileflags = ("0");
-my $comment="";
-my $description="";
-if (!defined($module))
-{
-	$module = $binary;
-	($module) = split(/\./,$module);
-}
-
-my $bufferstr="    ";
-
-my $MILESTONE_FILE = "$topsrcdir/config/milestone.txt";
-my $BUILDID_FILE = "$depth/config/buildid";
-
-#Read module.ver file
-#Version file overrides for WIN32:
-#WIN32_MODULE_COMMENT
-#WIN32_MODULE_DESCRIPTION
-#WIN32_MODULE_FILEVERSION
-#WIN32_MODULE_COMPANYNAME
-#WIN32_MODULE_FILEVERSION_STRING
-#WIN32_MODULE_NAME
-#WIN32_MODULE_COPYRIGHT
-#WIN32_MODULE_TRADEMARKS
-#WIN32_MODULE_ORIGINAL_FILENAME
-#WIN32_MODULE_PRODUCTNAME
-#WIN32_MODULE_PRODUCTVERSION
-#WIN32_MODULE_PRODUCTVERSION_STRING
-
-#Override values obtained from the .ver file
-my $override_comment;
-my $override_description;
-my $override_fileversion;
-my $override_company;
-my $override_mfversion;
-my $override_module;
-my $override_copyright;
-my $override_trademarks;
-my $override_filename;
-my $override_productname;
-my $override_productversion;
-my $override_mpversion;
-if (open(VERFILE, "<$srcdir/module.ver")) 
-{
-
-	my ($a,$b) = getNextEntry();
-	while (defined($a))
-	{
-		if ($a eq "WIN32_MODULE_COMMENT") { $override_comment = $b; }
-		if ($a eq "WIN32_MODULE_DESCRIPTION") { $override_description = $b; }
-		if ($a eq "WIN32_MODULE_FILEVERSION") { $override_fileversion = $b; }
-		if ($a eq "WIN32_MODULE_COMPANYNAME") { $override_company = $b; }
-		if ($a eq "WIN32_MODULE_FILEVERSION_STRING") { $override_mfversion = $b; }
-		if ($a eq "WIN32_MODULE_NAME") { $override_module = $b; }
-		if ($a eq "WIN32_MODULE_COPYRIGHT") { $override_copyright = $b; }
-		if ($a eq "WIN32_MODULE_TRADEMARKS") { $override_trademarks = $b; }
-		if ($a eq "WIN32_MODULE_ORIGINAL_FILENAME") { $override_filename = $b; }
-		if ($a eq "WIN32_MODULE_PRODUCTNAME") { $override_productname = $b; }
-		if ($a eq "WIN32_MODULE_PRODUCTVERSION") { $override_productversion = $b; }
-		if ($a eq "WIN32_MODULE_PRODUCTVERSION_STRING") { $override_mpversion = $b; }
-		($a,$b) = getNextEntry();
-	}
-	close(VERFILE)
-}
-else
-{
-	if (!$quiet || $quiet ne "1") { print "$bufferstr" . "WARNING: No module.ver file included ($module, $binary). Default values used\n"; }
-}
-#Get rid of trailing and leading whitespace
-$debug =~ s/^\s*(.*)\s*$/$1/;