[tor-commits] [tor-browser/tor-browser-31.3.0esr-4.0-1] Revert "Bug 762358 - Re-run configure when mozconfig changed in a significant way. r=gps a=NPOTB"

gk at torproject.org gk at torproject.org
Mon Dec 1 08:27:01 UTC 2014


commit 811add0090f95de6e1fa3700fb55e8bc57802a52
Author: Georg Koppen <gk at torproject.org>
Date:   Mon Dec 1 08:59:35 2014 +0100

    Revert "Bug 762358 - Re-run configure when mozconfig changed in a significant way. r=gps a=NPOTB"
    
    This reverts commit 87d09ba73a620931ffbe2576064aae55a961b097. It seems
    it breaks our deterministic build setup running |configure| again
    during |make build|. The former does not like being run under
    libfaketime but the latter needs to be in order to get reproducible
    builds.
---
 build/autoconf/altoptions.m4                       |   43 +------
 build/autoconf/mozconfig-find                      |   76 +++++++++++++
 build/autoconf/mozconfig2client-mk                 |   76 +++++++++++++
 build/autoconf/mozconfig2configure                 |  103 +++++++++++++++++
 client.mk                                          |   50 ++++++---
 python/mozbuild/mozbuild/base.py                   |   38 ++-----
 python/mozbuild/mozbuild/mach_commands.py          |  118 ++++----------------
 python/mozbuild/mozbuild/mozconfig.py              |  101 ++++++-----------
 python/mozbuild/mozbuild/mozconfig_loader          |    8 --
 python/mozbuild/mozbuild/test/backend/common.py    |    8 --
 .../mozbuild/test/frontend/test_emitter.py         |    8 --
 python/mozbuild/mozbuild/test/test_base.py         |   75 +++----------
 python/mozbuild/mozbuild/test/test_mozconfig.py    |   56 +---------
 testing/xpcshell/selftest.py                       |    1 -
 14 files changed, 381 insertions(+), 380 deletions(-)

diff --git a/build/autoconf/altoptions.m4 b/build/autoconf/altoptions.m4
index 6c40ad6..3dc8c6e 100644
--- a/build/autoconf/altoptions.m4
+++ b/build/autoconf/altoptions.m4
@@ -116,42 +116,7 @@ echo "
 dnl MOZ_READ_MYCONFIG() - Read in 'myconfig.sh' file
 AC_DEFUN([MOZ_READ_MOZCONFIG],
 [AC_REQUIRE([AC_INIT_BINSH])dnl
-inserted=
-dnl Shell is hard, so here is what the following does:
-dnl - Reset $@ (command line arguments)
-dnl - Add the configure options from mozconfig to $@ one by one
-dnl - Add the original command line arguments after that, one by one
-dnl
-dnl There are several tricks involved:
-dnl - It is not possible to preserve the whitespaces in $@ by assigning to
-dnl   another variable, so the two first steps above need to happen in the first
-dnl   iteration of the third step.
-dnl - We always want the configure options to be added, so the loop must be
-dnl   iterated at least once, so we add a dummy argument first, and discard it.
-dnl - something | while read line ... makes the while run in a subshell, meaning
-dnl   that anything it does is not propagated to the main shell, so we can't do
-dnl   set -- foo there. As a consequence, what the while loop reading mach
-dnl   environment output does is output a set of shell commands for the main shell
-dnl   to eval.
-dnl - Extra care is due when lines from mach environment output contain special
-dnl   shell characters, so we use ' for quoting and ensure no ' end up in between
-dnl   the quoting mark unescaped.
-dnl Some of the above is directly done in mach environment --format=configure.
-failed_eval() {
-  echo "Failed eval'ing the following:"
-  $(dirname [$]0)/[$1]/mach environment --format=configure
-  exit 1
-}
-
-set -- dummy "[$]@"
-for ac_option
-do
-  if test -z "$inserted"; then
-    set --
-    eval "$($(dirname [$]0)/[$1]/mach environment --format=configure)" || failed_eval
-    inserted=1
-  else
-    set -- "[$]@" "$ac_option"
-  fi
-done
-])
+# Read in '.mozconfig' script to set the initial options.
+# See the mozconfig2configure script for more details.
+_AUTOCONF_TOOLS_DIR=`dirname [$]0`/[$1]/build/autoconf
+. $_AUTOCONF_TOOLS_DIR/mozconfig2configure])
diff --git a/build/autoconf/mozconfig-find b/build/autoconf/mozconfig-find
new file mode 100755
index 0000000..97dd90c
--- /dev/null
+++ b/build/autoconf/mozconfig-find
@@ -0,0 +1,76 @@
+#! /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/.
+
+# mozconfigfind - Loads options from .mozconfig onto configure's
+#    command-line. The .mozconfig file is searched for in the 
+#    order:
+#       If $MOZCONFIG is set, use that.
+#       If one of $TOPSRCDIR/.mozconfig or $TOPSRCDIR/mozconfig exists, use it.
+#       If both exist, or if various legacy locations contain a mozconfig, error.
+#       Otherwise, use the default build options.
+#
+topsrcdir=$1
+
+abspath() {
+  if uname -s | grep -q MINGW; then
+    # We have no way to figure out whether we're in gmake or pymake right
+    # now. gmake gives us Unix-style paths while pymake gives us Windows-style
+    # paths, so attempt to handle both.
+    regexes='^\([A-Za-z]:\|\\\\\|\/\) ^\/'
+  else
+    regexes='^\/'
+  fi
+
+  for regex in $regexes; do
+    if echo $1 | grep -q $regex; then
+      echo $1
+      return
+    fi
+  done
+
+  # If we're at this point, we have a relative path
+  echo `pwd`/$1
+}
+
+if [ -n "$MOZCONFIG" ] && ! [ -f "$MOZCONFIG" ]; then
+  echo "Specified MOZCONFIG \"$MOZCONFIG\" does not exist!" 1>&2
+  exit 1
+fi
+
+if [ -n "$MOZ_MYCONFIG" ]; then
+  echo "Your environment currently has the MOZ_MYCONFIG variable set to \"$MOZ_MYCONFIG\". MOZ_MYCONFIG is no longer supported. Please use MOZCONFIG instead." 1>&2
+  exit 1
+fi
+
+if [ -z "$MOZCONFIG" ] && [ -f "$topsrcdir/.mozconfig" ] && [ -f "$topsrcdir/mozconfig" ]; then
+  echo "Both \$topsrcdir/.mozconfig and \$topsrcdir/mozconfig are supported, but you must choose only one. Please remove the other." 1>&2
+  exit 1
+fi
+
+for _config in "$MOZCONFIG" \
+               "$topsrcdir/.mozconfig" \
+               "$topsrcdir/mozconfig"
+do
+  if test -f "$_config"; then
+    abspath $_config
+    exit 0
+  fi
+done
+
+# We used to support a number of other implicit .mozconfig locations. We now
+# detect if we were about to use any of these locations and issue an error if we
+# find any.
+for _config in "$topsrcdir/mozconfig.sh" \
+               "$topsrcdir/myconfig.sh" \
+               "$HOME/.mozconfig" \
+               "$HOME/.mozconfig.sh" \
+               "$HOME/.mozmyconfig.sh"
+do
+  if test -f "$_config"; then
+    echo "You currently have a mozconfig at \"$_config\". This implicit location is no longer supported. Please move it to $topsrcdir/.mozconfig or specify it explicitly via \$MOZCONFIG." 1>&2
+    exit 1
+  fi
+done
diff --git a/build/autoconf/mozconfig2client-mk b/build/autoconf/mozconfig2client-mk
new file mode 100755
index 0000000..aaf8de1
--- /dev/null
+++ b/build/autoconf/mozconfig2client-mk
@@ -0,0 +1,76 @@
+#! /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/.
+
+# mozconfig2client-mk - Translates .mozconfig into options for client.mk.
+#    Prints defines to stdout.
+#
+# See mozconfig2configure for more details
+
+print_header() {
+  cat <<EOF
+# gmake
+# This file is automatically generated for client.mk.
+# Do not edit. Edit $FOUND_MOZCONFIG instead.
+
+EOF
+}
+
+ac_add_options() {
+  for _opt
+  do
+    case "$_opt" in
+    --target=*)
+      echo $_opt | sed s/--target/CONFIG_GUESS/
+      ;;
+    *)
+      echo "# $_opt is used by configure (not client.mk)"
+      ;;
+    esac
+  done
+}
+
+ac_add_app_options() {
+  echo "# $* is used by configure (not client.mk)"
+}
+
+mk_add_options() {
+  for _opt
+  do
+    # Escape shell characters, space, tab, dollar, quote, backslash,
+    # and substitute '@<word>@' with '$(<word>)'.
+    _opt=`echo "$_opt" | sed -e 's/\([\"\\]\)/\\\\\1/g; s/@\([^@]*\)@/\$(\1)/g;'`
+    echo $_opt;
+  done
+}
+
+# Main
+#--------------------------------------------------
+
+scriptdir=`dirname $0`
+topsrcdir=$1
+
+# If the path changes, configure should be rerun
+echo "# PATH=$PATH"
+
+# If FOUND_MOZCONFIG isn't set, look for it and make sure the script doesn't error out
+isfoundset=${FOUND_MOZCONFIG+yes}
+if [ -z $isfoundset ]; then
+  FOUND_MOZCONFIG=`$scriptdir/mozconfig-find $topsrcdir`
+  if [ $? -ne 0 ]; then
+    echo '$(error Fix above errors before continuing.)'
+  else
+    isfoundset=yes
+  fi
+fi
+
+if [ -n $isfoundset ]; then
+  if [ "$FOUND_MOZCONFIG" ]
+  then
+    print_header
+    . "$FOUND_MOZCONFIG"
+    echo "FOUND_MOZCONFIG := $FOUND_MOZCONFIG"
+  fi
+fi
diff --git a/build/autoconf/mozconfig2configure b/build/autoconf/mozconfig2configure
new file mode 100755
index 0000000..99623b6
--- /dev/null
+++ b/build/autoconf/mozconfig2configure
@@ -0,0 +1,103 @@
+#! /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/.
+
+# mozconfig2configure - Loads options from .mozconfig onto configure's
+#    command-line. See mozconfig-find for how the config file is
+#    found
+#
+#    The options from .mozconfig are inserted into the command-line
+#    before the real command-line options. This way the real options
+#    will override any .mozconfig options.
+#
+# .mozconfig is a shell script. To add an option to configure's
+#    command-line use the pre-defined function, ac_add_options,
+#
+#       ac_add_options  <configure-option> [<configure-option> ... ]
+#
+#    For example,
+#
+#       ac_add_options --with-pthreads --enable-debug
+#
+# ac_add_options can be called multiple times in .mozconfig.
+#    Each call adds more options to configure's command-line.
+
+# Note: $_AUTOCONF_TOOLS_DIR must be defined in the script that includes this.
+
+ac_add_options() {
+  for _opt
+  do
+    # Escape shell characters, space, tab, dollar, quote, backslash, parentheses.
+    _opt=`echo $_opt | sed -e 's/\([\ \	\$\"\\\(\)]\)/\\\\\1/g;s/@\([^@]*\)@/\$\1/g;'`
+    _opt=`echo $_opt | sed -e 's/@\([^@]*\)@/\$(\1)/g'`
+
+    # Avoid adding duplicates
+    case "$ac_options" in
+      # Note that all options in $ac_options are enclosed in quotes,
+      # so there will always be a last character to match [^-A-Za-z0-9_]
+      *"\"$_opt[^-A-Za-z0-9_]"* ) ;;
+      * ) mozconfig_ac_options="$mozconfig_ac_options $_opt" ;;
+    esac
+  done
+}
+
+ac_add_app_options() {
+  APP=$1
+  shift;
+  if [ "$APP" = "$MOZ_BUILD_APP" ]; then
+      ac_add_options "$*";
+  fi
+}
+
+mk_add_options() {
+  # These options are for client.mk
+  # configure can safely ignore them.
+  :
+}
+
+ac_echo_options() {
+  echo "Adding configure options from $FOUND_MOZCONFIG:"
+  eval "set -- $mozconfig_ac_options"
+  for _opt
+  do
+    echo "  $_opt"
+  done
+}
+
+# Main
+#--------------------------------------------------
+topsrcdir=$(cd `dirname $0`; pwd -W 2>/dev/null || pwd)
+ac_options=
+mozconfig_ac_options=
+
+# Save the real command-line options
+for _opt
+do
+  # Escape shell characters, space, tab, dollar, quote, backslash.
+  _opt=`echo $_opt | sed -e 's/\([\ \	\$\"\\]\)/\\\\\1/g;'`
+  ac_options="$ac_options \"$_opt\""
+done
+
+
+# If FOUND_MOZCONFIG isn't set, look for it and make sure the script doesn't error out
+isfoundset=${FOUND_MOZCONFIG+yes}
+if [ -z $isfoundset ]; then
+  FOUND_MOZCONFIG=`$_AUTOCONF_TOOLS_DIR/mozconfig-find $topsrcdir`
+  if [ $? -ne 0 ]; then
+    echo "Fix above errors before continuing." 1>&2
+    exit 1
+  fi
+fi
+
+if [ "$FOUND_MOZCONFIG" ]; then
+  . "$FOUND_MOZCONFIG"
+fi
+export FOUND_MOZCONFIG
+
+if [ "$mozconfig_ac_options" ]; then
+  ac_echo_options 1>&2
+fi
+
+eval "set -- $mozconfig_ac_options $ac_options"
diff --git a/client.mk b/client.mk
index 5cbaf6b..f737c5b 100644
--- a/client.mk
+++ b/client.mk
@@ -50,6 +50,7 @@ endif
 ifndef TOPSRCDIR
 ifeq (,$(wildcard client.mk))
 TOPSRCDIR := $(patsubst %/,%,$(dir $(MAKEFILE_LIST)))
+MOZ_OBJDIR = .
 else
 TOPSRCDIR := $(CWD)
 endif
@@ -98,6 +99,8 @@ endif
 
 # See build pages, http://www.mozilla.org/build/ for how to set up mozconfig.
 
+MOZCONFIG_LOADER := build/autoconf/mozconfig2client-mk
+
 define CR
 
 
@@ -108,9 +111,7 @@ endef
 # before evaluation. $(shell) replacing newlines with spaces, || is always
 # followed by a space (since sed doesn't remove newlines), except on the
 # last line, so replace both '|| ' and '||'.
-# Also, make MOZ_PGO available to mozconfig when passed on make command line.
-# Likewise for MOZ_CURRENT_PROJECT.
-MOZCONFIG_CONTENT := $(subst ||,$(CR),$(subst || ,$(CR),$(shell $(addprefix MOZ_CURRENT_PROJECT=,$(MOZ_CURRENT_PROJECT)) MOZ_PGO=$(MOZ_PGO) $(TOPSRCDIR)/mach environment --format=client.mk | sed 's/$$/||/')))
+MOZCONFIG_CONTENT := $(subst ||,$(CR),$(subst || ,$(CR),$(shell $(TOPSRCDIR)/$(MOZCONFIG_LOADER) $(TOPSRCDIR) | sed 's/$$/||/')))
 $(eval $(MOZCONFIG_CONTENT))
 
 export FOUND_MOZCONFIG
@@ -141,18 +142,35 @@ ifeq (,$(findstring -j,$(MOZ_MAKE_FLAGS)))
 endif
 
 
+ifndef MOZ_OBJDIR
+  MOZ_OBJDIR = obj-$(CONFIG_GUESS)
+else
+# On Windows Pymake builds check MOZ_OBJDIR doesn't start with "/"
+  ifneq (,$(findstring mingw,$(CONFIG_GUESS)))
+  ifeq (1_a,$(.PYMAKE)_$(firstword a$(subst /, ,$(MOZ_OBJDIR))))
+  $(error For Windows Pymake builds, MOZ_OBJDIR must be a Windows [and not MSYS] style path.)
+  endif
+  endif
+endif
+
 ifdef MOZ_BUILD_PROJECTS
 
 ifdef MOZ_CURRENT_PROJECT
+  OBJDIR = $(MOZ_OBJDIR)/$(MOZ_CURRENT_PROJECT)
+  MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
   BUILD_PROJECT_ARG = MOZ_BUILD_APP=$(MOZ_CURRENT_PROJECT)
-  export MOZ_CURRENT_PROJECT
 else
+  OBJDIR = $(error Cannot find the OBJDIR when MOZ_CURRENT_PROJECT is not set.)
   MOZ_MAKE = $(error Cannot build in the OBJDIR when MOZ_CURRENT_PROJECT is not set.)
 endif
-endif # MOZ_BUILD_PROJECTS
 
+else # MOZ_BUILD_PROJECTS
+
+OBJDIR = $(MOZ_OBJDIR)
 MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
 
+endif # MOZ_BUILD_PROJECTS
+
 # 'configure' scripts generated by autoconf.
 CONFIGURES := $(TOPSRCDIR)/configure
 CONFIGURES += $(TOPSRCDIR)/js/src/configure
@@ -184,7 +202,7 @@ WANT_MOZCONFIG_MK = 1
 endif
 
 ifdef WANT_MOZCONFIG_MK
-# For now, only output "export" lines from mach environment --format=client.mk output.
+# For now, only output "export" lines from mozconfig2client-mk output.
 MOZCONFIG_MK_LINES := $(filter export||%,$(MOZCONFIG_OUT_LINES))
 $(OBJDIR)/.mozconfig.mk: $(FOUND_MOZCONFIG) $(call mkdir_deps,$(OBJDIR)) $(OBJDIR)/CLOBBER
 	$(if $(MOZCONFIG_MK_LINES),( $(foreach line,$(MOZCONFIG_MK_LINES), echo '$(subst ||, ,$(line))';) )) > $@
@@ -217,11 +235,17 @@ everything: clean build
 #  This is up here, outside of the MOZ_CURRENT_PROJECT logic so that this
 #  is usable in multi-pass builds, where you might not have a runnable
 #  application until all the build passes and postflight scripts have run.
+ifdef MOZ_OBJDIR
+  PGO_OBJDIR = $(MOZ_OBJDIR)
+else
+  PGO_OBJDIR := $(TOPSRCDIR)
+endif
+
 profiledbuild::
 	$(MAKE) -f $(TOPSRCDIR)/client.mk realbuild MOZ_PROFILE_GENERATE=1 MOZ_PGO_INSTRUMENTED=1
-	$(MAKE) -C $(OBJDIR) package MOZ_PGO_INSTRUMENTED=1 MOZ_INTERNAL_SIGNING_FORMAT= MOZ_EXTERNAL_SIGNING_FORMAT=
-	rm -f $(OBJDIR)/jarlog/en-US.log
-	MOZ_PGO_INSTRUMENTED=1 JARLOG_FILE=jarlog/en-US.log EXTRA_TEST_ARGS=10 $(MAKE) -C $(OBJDIR) pgo-profile-run
+	$(MAKE) -C $(PGO_OBJDIR) package MOZ_PGO_INSTRUMENTED=1 MOZ_INTERNAL_SIGNING_FORMAT= MOZ_EXTERNAL_SIGNING_FORMAT=
+	rm -f ${PGO_OBJDIR}/jarlog/en-US.log
+	MOZ_PGO_INSTRUMENTED=1 JARLOG_FILE=jarlog/en-US.log EXTRA_TEST_ARGS=10 $(MAKE) -C $(PGO_OBJDIR) pgo-profile-run
 	$(MAKE) -f $(TOPSRCDIR)/client.mk maybe_clobber_profiledbuild
 	$(MAKE) -f $(TOPSRCDIR)/client.mk realbuild MOZ_PROFILE_USE=1
 
@@ -302,7 +326,6 @@ CONFIG_STATUS_DEPS := \
   $(TOPSRCDIR)/build/virtualenv_packages.txt \
   $(TOPSRCDIR)/python/mozbuild/mozbuild/virtualenv.py \
   $(TOPSRCDIR)/testing/mozbase/packages.txt \
-  $(OBJDIR)/.mozconfig.json \
   $(NULL)
 
 CONFIGURE_ENV_ARGS += \
@@ -330,13 +353,8 @@ configure-preqs = \
   $(call mkdir_deps,$(OBJDIR)) \
   $(if $(MOZ_BUILD_PROJECTS),$(call mkdir_deps,$(MOZ_OBJDIR))) \
   save-mozconfig \
-  $(OBJDIR)/.mozconfig.json \
   $(NULL)
 
-CREATE_MOZCONFIG_JSON := $(shell $(TOPSRCDIR)/mach environment --format=json -o $(OBJDIR)/.mozconfig.json)
-$(OBJDIR)/.mozconfig.json: $(call mkdir_deps,$(OBJDIR))
-	@$(TOPSRCDIR)/mach environment --format=json -o $@
-
 save-mozconfig: $(FOUND_MOZCONFIG)
 	-cp $(FOUND_MOZCONFIG) $(OBJDIR)/.mozconfig
 
@@ -355,7 +373,7 @@ $(OBJDIR)/config.status: $(CONFIG_STATUS_DEPS)
 else
 $(OBJDIR)/Makefile: $(CONFIG_STATUS_DEPS)
 endif
-	@$(MAKE) -f $(TOPSRCDIR)/client.mk configure CREATE_MOZCONFIG_JSON=
+	@$(MAKE) -f $(TOPSRCDIR)/client.mk configure
 
 ifneq (,$(CONFIG_STATUS))
 $(OBJDIR)/config/autoconf.mk: $(TOPSRCDIR)/config/autoconf.mk.in
diff --git a/python/mozbuild/mozbuild/base.py b/python/mozbuild/mozbuild/base.py
index 14c9972..d00d987 100644
--- a/python/mozbuild/mozbuild/base.py
+++ b/python/mozbuild/mozbuild/base.py
@@ -161,8 +161,7 @@ class MozbuildObject(ProcessExecutionMixin):
         # environment. If no mozconfig is present, the config will not have
         # much defined.
         loader = MozconfigLoader(topsrcdir)
-        current_project = os.environ.get('MOZ_CURRENT_PROJECT')
-        config = loader.read_mozconfig(mozconfig, moz_build_app=current_project)
+        config = loader.read_mozconfig(mozconfig)
 
         config_topobjdir = MozbuildObject.resolve_mozconfig_topobjdir(
             topsrcdir, config)
@@ -172,30 +171,13 @@ class MozbuildObject(ProcessExecutionMixin):
         # inside an objdir you probably want to perform actions on that objdir,
         # not another one. This prevents accidental usage of the wrong objdir
         # when the current objdir is ambiguous.
-        # However, if the found mozconfig resolves to another objdir that
-        # doesn't exist, we may be in a subtree like when building mozilla/
-        # under c-c, and the objdir was defined as a relative path. Try again
-        # adjusting for that.
-
         if topobjdir and config_topobjdir:
-            if not os.path.exists(config_topobjdir):
-                config_topobjdir = MozbuildObject.resolve_mozconfig_topobjdir(
-                    os.path.dirname(topsrcdir), config)
-                if current_project:
-                    config_topobjdir = os.path.join(config_topobjdir,
-                        current_project)
-                config_topobjdir = os.path.join(config_topobjdir,
-                    os.path.basename(topsrcdir))
-            elif current_project:
-                config_topobjdir = os.path.join(config_topobjdir, current_project)
-
-            _config_topobjdir = config_topobjdir
-            mozilla_dir = os.path.join(_config_topobjdir, 'mozilla')
-            if not samepath(topobjdir, _config_topobjdir) \
-                and (not os.path.exists(mozilla_dir) or not samepath(topobjdir,
+            mozilla_dir = os.path.join(config_topobjdir, 'mozilla')
+            if not samepath(topobjdir, config_topobjdir) \
+                and (os.path.exists(mozilla_dir) and not samepath(topobjdir,
                 mozilla_dir)):
 
-                raise ObjdirMismatchException(topobjdir, _config_topobjdir)
+                raise ObjdirMismatchException(topobjdir, config_topobjdir)
 
         topobjdir = topobjdir or config_topobjdir
         if topobjdir:
@@ -251,8 +233,7 @@ class MozbuildObject(ProcessExecutionMixin):
         """
         if self._mozconfig is None:
             loader = MozconfigLoader(self.topsrcdir)
-            self._mozconfig = loader.read_mozconfig(
-                moz_build_app=os.environ.get('MOZ_CURRENT_PROJECT'))
+            self._mozconfig = loader.read_mozconfig()
 
         return self._mozconfig
 
@@ -567,13 +548,8 @@ class MachCommandBase(MozbuildObject):
         # more reliable than mozconfig when cwd is inside an objdir.
         topsrcdir = context.topdir
         topobjdir = None
-        detect_virtualenv_mozinfo = True
-        if hasattr(context, 'detect_virtualenv_mozinfo'):
-            detect_virtualenv_mozinfo = getattr(context,
-                'detect_virtualenv_mozinfo')
         try:
-            dummy = MozbuildObject.from_environment(cwd=context.cwd,
-                detect_virtualenv_mozinfo=detect_virtualenv_mozinfo)
+            dummy = MozbuildObject.from_environment(cwd=context.cwd)
             topsrcdir = dummy.topsrcdir
             topobjdir = dummy._topobjdir
         except BuildEnvironmentNotFoundException:
diff --git a/python/mozbuild/mozbuild/mach_commands.py b/python/mozbuild/mozbuild/mach_commands.py
index 0b19815..0bfe4a6 100644
--- a/python/mozbuild/mozbuild/mach_commands.py
+++ b/python/mozbuild/mozbuild/mach_commands.py
@@ -10,8 +10,6 @@ import operator
 import os
 import sys
 
-import mozpack.path as mozpath
-
 from mach.decorators import (
     CommandArgument,
     CommandProvider,
@@ -919,53 +917,37 @@ class Makefiles(MachCommandBase):
 class MachDebug(MachCommandBase):
     @Command('environment', category='build-dev',
         description='Show info about the mach and build environment.')
-    @CommandArgument('--format', default='pretty',
-        choices=['pretty', 'client.mk', 'configure', 'json'],
-        help='Print data in the given format.')
-    @CommandArgument('--output', '-o', type=str,
-        help='Output to the given file.')
     @CommandArgument('--verbose', '-v', action='store_true',
         help='Print verbose output.')
-    def environment(self, format, output=None, verbose=False):
-        func = getattr(self, '_environment_%s' % format.replace('.', '_'))
-
-        if output:
-            # We want to preserve mtimes if the output file already exists
-            # and the content hasn't changed.
-            from mozbuild.util import FileAvoidWrite
-            with FileAvoidWrite(output) as out:
-                return func(out, verbose)
-        return func(sys.stdout, verbose)
-
-    def _environment_pretty(self, out, verbose):
+    def environment(self, verbose=False):
         state_dir = self._mach_context.state_dir
         import platform
-        print('platform:\n\t%s' % platform.platform(), file=out)
-        print('python version:\n\t%s' % sys.version, file=out)
-        print('python prefix:\n\t%s' % sys.prefix, file=out)
-        print('mach cwd:\n\t%s' % self._mach_context.cwd, file=out)
-        print('os cwd:\n\t%s' % os.getcwd(), file=out)
-        print('mach directory:\n\t%s' % self._mach_context.topdir, file=out)
-        print('state directory:\n\t%s' % state_dir, file=out)
+        print('platform:\n\t%s' % platform.platform())
+        print('python version:\n\t%s' % sys.version)
+        print('python prefix:\n\t%s' % sys.prefix)
+        print('mach cwd:\n\t%s' % self._mach_context.cwd)
+        print('os cwd:\n\t%s' % os.getcwd())
+        print('mach directory:\n\t%s' % self._mach_context.topdir)
+        print('state directory:\n\t%s' % state_dir)
 
-        print('object directory:\n\t%s' % self.topobjdir, file=out)
+        print('object directory:\n\t%s' % self.topobjdir)
 
         if self.mozconfig['path']:
-            print('mozconfig path:\n\t%s' % self.mozconfig['path'], file=out)
+            print('mozconfig path:\n\t%s' % self.mozconfig['path'])
             if self.mozconfig['configure_args']:
-                print('mozconfig configure args:', file=out)
+                print('mozconfig configure args:')
                 for arg in self.mozconfig['configure_args']:
-                    print('\t%s' % arg, file=out)
+                    print('\t%s' % arg)
 
             if self.mozconfig['make_extra']:
-                print('mozconfig extra make args:', file=out)
+                print('mozconfig extra make args:')
                 for arg in self.mozconfig['make_extra']:
-                    print('\t%s' % arg, file=out)
+                    print('\t%s' % arg)
 
             if self.mozconfig['make_flags']:
-                print('mozconfig make flags:', file=out)
+                print('mozconfig make flags:')
                 for arg in self.mozconfig['make_flags']:
-                    print('\t%s' % arg, file=out)
+                    print('\t%s' % arg)
 
         config = None
 
@@ -976,70 +958,14 @@ class MachDebug(MachCommandBase):
             pass
 
         if config:
-            print('config topsrcdir:\n\t%s' % config.topsrcdir, file=out)
-            print('config topobjdir:\n\t%s' % config.topobjdir, file=out)
+            print('config topsrcdir:\n\t%s' % config.topsrcdir)
+            print('config topobjdir:\n\t%s' % config.topobjdir)
 
             if verbose:
-                print('config substitutions:', file=out)
+                print('config substitutions:')
                 for k in sorted(config.substs):
-                    print('\t%s: %s' % (k, config.substs[k]), file=out)
+                    print('\t%s: %s' % (k, config.substs[k]))
 
-                print('config defines:', file=out)
+                print('config defines:')
                 for k in sorted(config.defines):
-                    print('\t%s' % k, file=out)
-
-    def _environment_client_mk(self, out, verbose):
-        if self.mozconfig['make_extra']:
-            for arg in self.mozconfig['make_extra']:
-                print(arg, file=out)
-        objdir = mozpath.normsep(self.topobjdir)
-        print('MOZ_OBJDIR=%s' % objdir, file=out)
-        if 'MOZ_CURRENT_PROJECT' in os.environ:
-            objdir = mozpath.join(objdir, os.environ['MOZ_CURRENT_PROJECT'])
-        print('OBJDIR=%s' % objdir, file=out)
-        if self.mozconfig['path']:
-            print('FOUND_MOZCONFIG=%s' % mozpath.normsep(self.mozconfig['path']),
-                file=out)
-
-    def _environment_configure(self, out, verbose):
-        if self.mozconfig['path']:
-            # Replace ' with '"'"', so that shell quoting e.g.
-            # a'b becomes 'a'"'"'b'.
-            quote = lambda s: s.replace("'", """'"'"'""")
-            print('echo Adding configure options from %s' %
-                mozpath.normsep(self.mozconfig['path']), file=out)
-            if self.mozconfig['configure_args']:
-                for arg in self.mozconfig['configure_args']:
-                    quoted_arg = quote(arg)
-                    print("echo '  %s'" % quoted_arg, file=out)
-                    print("""set -- "$@" '%s'""" % quoted_arg, file=out)
-                for key, value in self.mozconfig['env']['added'].items():
-                    print("export %s='%s'" % (key, quote(value)), file=out)
-                for key, (old, value) in self.mozconfig['env']['modified'].items():
-                    print("export %s='%s'" % (key, quote(value)), file=out)
-                for key, value in self.mozconfig['vars']['added'].items():
-                    print("%s='%s'" % (key, quote(value)), file=out)
-                for key, (old, value) in self.mozconfig['vars']['modified'].items():
-                    print("%s='%s'" % (key, quote(value)), file=out)
-                for key in self.mozconfig['env']['removed'].keys() + \
-                        self.mozconfig['vars']['removed'].keys():
-                    print("unset %s" % key, file=out)
-
-    def _environment_json(self, out, verbose):
-        import json
-        class EnvironmentEncoder(json.JSONEncoder):
-            def default(self, obj):
-                if isinstance(obj, MozbuildObject):
-                    result = {
-                        'topsrcdir': obj.topsrcdir,
-                        'topobjdir': obj.topobjdir,
-                        'mozconfig': obj.mozconfig,
-                    }
-                    if verbose:
-                        result['substs'] = obj.substs
-                        result['defines'] = obj.defines
-                    return result
-                elif isinstance(obj, set):
-                    return list(obj)
-                return json.JSONEncoder.default(self, obj)
-        json.dump(self, cls=EnvironmentEncoder, sort_keys=True, fp=out)
+                    print('\t%s' % k)
diff --git a/python/mozbuild/mozbuild/mozconfig.py b/python/mozbuild/mozbuild/mozconfig.py
index 9feca70..3c1e3eb 100644
--- a/python/mozbuild/mozbuild/mozconfig.py
+++ b/python/mozbuild/mozbuild/mozconfig.py
@@ -65,11 +65,7 @@ class MozconfigLoader(ProcessExecutionMixin):
     DEPRECATED_TOPSRCDIR_PATHS = ('mozconfig.sh', 'myconfig.sh')
     DEPRECATED_HOME_PATHS = ('.mozconfig', '.mozconfig.sh', '.mozmyconfig.sh')
 
-    IGNORE_SHELL_VARIABLES = {'_'}
-
-    ENVIRONMENT_VARIABLES = {
-        'CC', 'CXX', 'CFLAGS', 'CXXFLAGS', 'LDFLAGS', 'MOZ_OBJDIR',
-    }
+    IGNORE_SHELL_VARIABLES = ('_')
 
     def __init__(self, topsrcdir):
         self.topsrcdir = topsrcdir
@@ -200,7 +196,6 @@ class MozconfigLoader(ProcessExecutionMixin):
             'make_flags': None,
             'make_extra': None,
             'env': None,
-            'vars': None,
         }
 
         if path is None:
@@ -236,49 +231,36 @@ class MozconfigLoader(ProcessExecutionMixin):
 
         parsed = self._parse_loader_output(output)
 
-        def diff_vars(vars_before, vars_after):
-            set1 = set(vars_before.keys()) - self.IGNORE_SHELL_VARIABLES
-            set2 = set(vars_after.keys()) - self.IGNORE_SHELL_VARIABLES
-            added = set2 - set1
-            removed = set1 - set2
-            maybe_modified = set1 & set2
-            changed = {
-                'added': {},
-                'removed': {},
-                'modified': {},
-                'unmodified': {},
-            }
-
-            for key in added:
-                changed['added'][key] = vars_after[key]
-
-            for key in removed:
-                changed['removed'][key] = vars_before[key]
-
-            for key in maybe_modified:
-                if vars_before[key] != vars_after[key]:
-                    changed['modified'][key] = (
-                        vars_before[key], vars_after[key])
-                elif key in self.ENVIRONMENT_VARIABLES:
-                    # In order for irrelevant environment variable changes not
-                    # to incur in re-running configure, only a set of
-                    # environment variables are stored when they are
-                    # unmodified. Otherwise, changes such as using a different
-                    # terminal window, or even rebooting, would trigger
-                    # reconfigures.
-                    changed['unmodified'][key] = vars_after[key]
-
-            return changed
-
-        result['env'] = diff_vars(parsed['env_before'], parsed['env_after'])
-
-        # Environment variables also appear as shell variables, but that's
-        # uninteresting duplication of information. Filter them out.
-        filt = lambda x, y: {k: v for k, v in x.items() if k not in y}
-        result['vars'] = diff_vars(
-            filt(parsed['vars_before'], parsed['env_before']),
-            filt(parsed['vars_after'], parsed['env_after'])
-        )
+        all_variables = set(parsed['vars_before'].keys())
+        all_variables |= set(parsed['vars_after'].keys())
+
+        changed = {
+            'added': {},
+            'removed': {},
+            'modified': {},
+            'unmodified': {},
+        }
+
+        for key in all_variables:
+            if key in self.IGNORE_SHELL_VARIABLES:
+                continue
+
+            if key not in parsed['vars_before']:
+                changed['added'][key] = parsed['vars_after'][key]
+                continue
+
+            if key not in parsed['vars_after']:
+                changed['removed'][key] = parsed['vars_before'][key]
+                continue
+
+            if parsed['vars_before'][key] != parsed['vars_after'][key]:
+                changed['modified'][key] = (
+                    parsed['vars_before'][key], parsed['vars_after'][key])
+                continue
+
+            changed['unmodified'][key] = parsed['vars_after'][key]
+
+        result['env'] = changed
 
         result['configure_args'] = [self._expand(o) for o in parsed['ac']]
 
@@ -286,9 +268,6 @@ class MozconfigLoader(ProcessExecutionMixin):
             result['configure_args'].extend(self._expand(o) for o in
                 parsed['ac_app'][moz_build_app])
 
-        if 'MOZ_OBJDIR' in parsed['env_before']:
-            result['topobjdir'] = parsed['env_before']['MOZ_OBJDIR']
-
         mk = [self._expand(o) for o in parsed['mk']]
 
         for o in mk:
@@ -318,8 +297,6 @@ class MozconfigLoader(ProcessExecutionMixin):
         ac_app_options = defaultdict(list)
         before_source = {}
         after_source = {}
-        env_before_source = {}
-        env_after_source = {}
 
         current = None
         current_type = None
@@ -362,14 +339,7 @@ class MozconfigLoader(ProcessExecutionMixin):
 
             assert current_type is not None
 
-            vars_mapping = {
-                'BEFORE_SOURCE': before_source,
-                'AFTER_SOURCE': after_source,
-                'ENV_BEFORE_SOURCE': env_before_source,
-                'ENV_AFTER_SOURCE': env_after_source,
-            }
-
-            if current_type in vars_mapping:
+            if current_type in ('BEFORE_SOURCE', 'AFTER_SOURCE'):
                 # mozconfigs are sourced using the Bourne shell (or at least
                 # in Bourne shell mode). This means |set| simply lists
                 # variables from the current shell (not functions). (Note that
@@ -430,7 +400,10 @@ class MozconfigLoader(ProcessExecutionMixin):
 
                 assert name is not None
 
-                vars_mapping[current_type][name] = value
+                if current_type == 'BEFORE_SOURCE':
+                    before_source[name] = value
+                else:
+                    after_source[name] = value
 
                 current = []
 
@@ -444,8 +417,6 @@ class MozconfigLoader(ProcessExecutionMixin):
             'ac_app': ac_app_options,
             'vars_before': before_source,
             'vars_after': after_source,
-            'env_before': env_before_source,
-            'env_after': env_after_source,
         }
 
     def _expand(self, s):
diff --git a/python/mozbuild/mozbuild/mozconfig_loader b/python/mozbuild/mozbuild/mozconfig_loader
index 569c690..d12c7fa 100755
--- a/python/mozbuild/mozbuild/mozconfig_loader
+++ b/python/mozbuild/mozbuild/mozconfig_loader
@@ -44,10 +44,6 @@ mk_add_options() {
   done
 }
 
-echo "------BEGIN_ENV_BEFORE_SOURCE"
-env
-echo "------END_ENV_BEFORE_SOURCE"
-
 echo "------BEGIN_BEFORE_SOURCE"
 set
 echo "------END_BEFORE_SOURCE"
@@ -62,7 +58,3 @@ echo "------BEGIN_AFTER_SOURCE"
 set
 echo "------END_AFTER_SOURCE"
 
-echo "------BEGIN_ENV_AFTER_SOURCE"
-env
-echo "------END_ENV_AFTER_SOURCE"
-
diff --git a/python/mozbuild/mozbuild/test/backend/common.py b/python/mozbuild/mozbuild/test/backend/common.py
index b6e1566..7cfec3c 100644
--- a/python/mozbuild/mozbuild/test/backend/common.py
+++ b/python/mozbuild/mozbuild/test/backend/common.py
@@ -83,14 +83,6 @@ CONFIGS = DefaultOnReadDict({
 
 
 class BackendTester(unittest.TestCase):
-    def setUp(self):
-        self._old_env = dict(os.environ)
-        os.environ.pop('MOZ_OBJDIR', None)
-
-    def tearDown(self):
-        os.environ.clear()
-        os.environ.update(self._old_env)
-
     def _get_environment(self, name):
         """Obtain a new instance of a ConfigEnvironment for a known profile.
 
diff --git a/python/mozbuild/mozbuild/test/frontend/test_emitter.py b/python/mozbuild/mozbuild/test/frontend/test_emitter.py
index 9e5fef1..25b69d4 100644
--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py
+++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py
@@ -41,14 +41,6 @@ data_path = mozpath.join(data_path, 'data')
 
 
 class TestEmitterBasic(unittest.TestCase):
-    def setUp(self):
-        self._old_env = dict(os.environ)
-        os.environ.pop('MOZ_OBJDIR', None)
-
-    def tearDown(self):
-        os.environ.clear()
-        os.environ.update(self._old_env)
-
     def reader(self, name):
         config = MockConfig(mozpath.join(data_path, name), extra_substs=dict(
             ENABLE_TESTS='1',
diff --git a/python/mozbuild/mozbuild/test/test_base.py b/python/mozbuild/mozbuild/test/test_base.py
index 3735213..24118cd 100644
--- a/python/mozbuild/mozbuild/test/test_base.py
+++ b/python/mozbuild/mozbuild/test/test_base.py
@@ -22,15 +22,14 @@ from mozbuild.base import (
     BadEnvironmentException,
     MachCommandBase,
     MozbuildObject,
-    ObjdirMismatchException,
     PathArgument,
 )
 
 from mozbuild.backend.configenvironment import ConfigEnvironment
-from buildconfig import topsrcdir, topobjdir
 
 
 curdir = os.path.dirname(__file__)
+topsrcdir = os.path.abspath(os.path.join(curdir, '..', '..', '..', '..'))
 log_manager = LoggingManager()
 
 
@@ -39,15 +38,14 @@ class TestMozbuildObject(unittest.TestCase):
         self._old_cwd = os.getcwd()
         self._old_env = dict(os.environ)
         os.environ.pop('MOZCONFIG', None)
-        os.environ.pop('MOZ_OBJDIR', None)
 
     def tearDown(self):
         os.chdir(self._old_cwd)
         os.environ.clear()
         os.environ.update(self._old_env)
 
-    def get_base(self, topobjdir=None):
-        return MozbuildObject(topsrcdir, None, log_manager, topobjdir=topobjdir)
+    def get_base(self):
+        return MozbuildObject(topsrcdir, None, log_manager)
 
     def test_objdir_config_guess(self):
         base = self.get_base()
@@ -74,6 +72,7 @@ class TestMozbuildObject(unittest.TestCase):
                 'foo'))
             self.assertTrue(base.topobjdir.endswith('foo'))
 
+    @unittest.skip('Failing on buildbot.')
     def test_objdir_config_status(self):
         """Ensure @CONFIG_GUESS@ is handled when loading mozconfig."""
         base = self.get_base()
@@ -107,17 +106,16 @@ class TestMozbuildObject(unittest.TestCase):
                     mozconfig=mozconfig,
                 ), fh)
 
-            os.environ[b'MOZCONFIG'] = mozconfig.encode('utf-8')
+            os.environ[b'MOZCONFIG'] = mozconfig
             os.chdir(topobjdir)
 
-            obj = MozbuildObject.from_environment(
-                detect_virtualenv_mozinfo=False)
+            obj = MozbuildObject.from_environment()
 
             self.assertEqual(obj.topobjdir, topobjdir)
         finally:
-            os.chdir(self._old_cwd)
             shutil.rmtree(d)
 
+    @unittest.skip('Failing on buildbot.')
     def test_relative_objdir(self):
         """Relative defined objdirs are loaded properly."""
         d = os.path.realpath(tempfile.mkdtemp())
@@ -136,18 +134,16 @@ class TestMozbuildObject(unittest.TestCase):
                     mozconfig=mozconfig,
                 ), fh)
 
-            os.environ[b'MOZCONFIG'] = mozconfig.encode('utf-8')
+            os.environ[b'MOZCONFIG'] = mozconfig
             child = os.path.join(topobjdir, 'foo', 'bar')
             os.makedirs(child)
             os.chdir(child)
 
-            obj = MozbuildObject.from_environment(
-                detect_virtualenv_mozinfo=False)
+            obj = MozbuildObject.from_environment()
 
             self.assertEqual(obj.topobjdir, topobjdir)
 
         finally:
-            os.chdir(self._old_cwd)
             shutil.rmtree(d)
 
     @unittest.skipIf(not hasattr(os, 'symlink'), 'symlinks not available.')
@@ -181,9 +177,9 @@ class TestMozbuildObject(unittest.TestCase):
             self.assertEqual(obj.topobjdir, topobjdir_real)
 
         finally:
-            os.chdir(self._old_cwd)
             shutil.rmtree(d)
 
+    @unittest.skip('Failed on buildbot (bug 853954)')
     def test_mach_command_base_inside_objdir(self):
         """Ensure a MachCommandBase constructed from inside the objdir works."""
 
@@ -212,7 +208,6 @@ class TestMozbuildObject(unittest.TestCase):
             context.topdir = topsrcdir
             context.settings = None
             context.log_manager = None
-            context.detect_virtualenv_mozinfo=False
 
             o = MachCommandBase(context)
 
@@ -220,9 +215,9 @@ class TestMozbuildObject(unittest.TestCase):
             self.assertEqual(o.topsrcdir, topsrcdir)
 
         finally:
-            os.chdir(self._old_cwd)
             shutil.rmtree(d)
 
+    @unittest.skip('Failing on buildbot.')
     def test_objdir_is_srcdir_rejected(self):
         """Ensure the srcdir configurations are rejected."""
         d = os.path.realpath(tempfile.mkdtemp())
@@ -240,41 +235,6 @@ class TestMozbuildObject(unittest.TestCase):
                 MozbuildObject.from_environment(detect_virtualenv_mozinfo=False)
 
         finally:
-            os.chdir(self._old_cwd)
-            shutil.rmtree(d)
-
-    def test_objdir_mismatch(self):
-        """Ensure MachCommandBase throwing on objdir mismatch."""
-        d = os.path.realpath(tempfile.mkdtemp())
-
-        try:
-            real_topobjdir = os.path.join(d, 'real-objdir')
-            os.makedirs(real_topobjdir)
-
-            topobjdir = os.path.join(d, 'objdir')
-            os.makedirs(topobjdir)
-
-            topsrcdir = os.path.join(d, 'srcdir')
-            os.makedirs(topsrcdir)
-
-            mozconfig = os.path.join(d, 'mozconfig')
-            with open(mozconfig, 'wt') as fh:
-                fh.write('mk_add_options MOZ_OBJDIR=%s' % real_topobjdir)
-
-            mozinfo = os.path.join(topobjdir, 'mozinfo.json')
-            with open(mozinfo, 'wt') as fh:
-                json.dump(dict(
-                    topsrcdir=topsrcdir,
-                    mozconfig=mozconfig,
-                ), fh)
-
-            os.chdir(topobjdir)
-
-            with self.assertRaises(ObjdirMismatchException):
-                MozbuildObject.from_environment(detect_virtualenv_mozinfo=False)
-
-        finally:
-            os.chdir(self._old_cwd)
             shutil.rmtree(d)
 
     def test_config_guess(self):
@@ -286,8 +246,9 @@ class TestMozbuildObject(unittest.TestCase):
         self.assertIsNotNone(result)
         self.assertGreater(len(result), 0)
 
+    @unittest.skip('Failing on buildbot (bug 853954).')
     def test_config_environment(self):
-        base = self.get_base(topobjdir=topobjdir)
+        base = self.get_base()
 
         ce = base.config_environment
         self.assertIsInstance(ce, ConfigEnvironment)
@@ -298,17 +259,15 @@ class TestMozbuildObject(unittest.TestCase):
         self.assertIsInstance(base.defines, dict)
         self.assertIsInstance(base.substs, dict)
 
+    @unittest.skip('Failing on buildbot (bug 853954).')
     def test_get_binary_path(self):
-        base = self.get_base(topobjdir=topobjdir)
+        base = self.get_base()
 
         platform = sys.platform
 
         # We should ideally use the config.status from the build. Let's install
         # a fake one.
-        substs = [
-            ('MOZ_APP_NAME', 'awesomeapp'),
-            ('MOZ_BUILD_APP', 'awesomeapp'),
-        ]
+        substs = [('MOZ_APP_NAME', 'awesomeapp')]
         if sys.platform.startswith('darwin'):
             substs.append(('OS_ARCH', 'Darwin'))
             substs.append(('BIN_SUFFIX', ''))
@@ -343,7 +302,7 @@ class TestMozbuildObject(unittest.TestCase):
         if platform.startswith('darwin'):
             self.assertTrue(p.endswith('awesomeapp/Nightly.app/Contents/MacOS/awesomeapp'))
         elif platform.startswith(('win32', 'cygwin')):
-            self.assertTrue(p.endswith('awesomeapp\\awesomeapp.exe'))
+            self.assertTrue(p.endswith('awesomeapp/awesomeapp.exe'))
         else:
             self.assertTrue(p.endswith('awesomeapp/awesomeapp'))
 
diff --git a/python/mozbuild/mozbuild/test/test_mozconfig.py b/python/mozbuild/mozbuild/test/test_mozconfig.py
index 744424e..429523d 100644
--- a/python/mozbuild/mozbuild/test/test_mozconfig.py
+++ b/python/mozbuild/mozbuild/test/test_mozconfig.py
@@ -29,7 +29,6 @@ class TestMozconfigLoader(unittest.TestCase):
     def setUp(self):
         self._old_env = dict(os.environ)
         os.environ.pop('MOZCONFIG', None)
-        os.environ.pop('MOZ_OBJDIR', None)
         os.environ.pop('CC', None)
         os.environ.pop('CXX', None)
         self._temp_dirs = set()
@@ -244,7 +243,6 @@ class TestMozconfigLoader(unittest.TestCase):
             'make_flags': None,
             'make_extra': None,
             'env': None,
-            'vars': None,
         })
 
     def test_read_empty_mozconfig(self):
@@ -258,10 +256,9 @@ class TestMozconfigLoader(unittest.TestCase):
             self.assertEqual(result['make_extra'], [])
 
             for f in ('added', 'removed', 'modified'):
-                self.assertEqual(len(result['vars'][f]), 0)
                 self.assertEqual(len(result['env'][f]), 0)
 
-            self.assertEqual(result['env']['unmodified'], {})
+            self.assertGreater(len(result['env']['unmodified']), 0)
 
     def test_read_capture_ac_options(self):
         """Ensures ac_add_options calls are captured."""
@@ -319,22 +316,6 @@ class TestMozconfigLoader(unittest.TestCase):
             self.assertEqual(result['make_flags'], '-j8')
             self.assertEqual(result['make_extra'], ['FOO=BAR BAZ', 'BIZ=1'])
 
-    def test_read_empty_mozconfig_objdir_environ(self):
-        os.environ[b'MOZ_OBJDIR'] = b'obj-firefox'
-        with NamedTemporaryFile(mode='w') as mozconfig:
-            result = self.get_loader().read_mozconfig(mozconfig.name)
-            self.assertEqual(result['topobjdir'], 'obj-firefox')
-
-    def test_read_capture_mk_options_objdir_environ(self):
-        """Ensures mk_add_options calls are captured and override the environ."""
-        os.environ[b'MOZ_OBJDIR'] = b'obj-firefox'
-        with NamedTemporaryFile(mode='w') as mozconfig:
-            mozconfig.write('mk_add_options MOZ_OBJDIR=/foo/bar\n')
-            mozconfig.flush()
-
-            result = self.get_loader().read_mozconfig(mozconfig.name)
-            self.assertEqual(result['topobjdir'], '/foo/bar')
-
     def test_read_moz_objdir_substitution(self):
         """Ensure @TOPSRCDIR@ substitution is recognized in MOZ_OBJDIR."""
         with NamedTemporaryFile(mode='w') as mozconfig:
@@ -356,10 +337,9 @@ class TestMozconfigLoader(unittest.TestCase):
 
             result = self.get_loader().read_mozconfig(mozconfig.name)
 
-            self.assertEqual(result['vars']['added'], {
+            self.assertEqual(result['env']['added'], {
                 'CC': '/usr/local/bin/clang',
                 'CXX': '/usr/local/bin/clang++'})
-            self.assertEqual(result['env']['added'], {})
 
     def test_read_exported_variables(self):
         """Exported variables are caught as new variables."""
@@ -369,7 +349,6 @@ class TestMozconfigLoader(unittest.TestCase):
 
             result = self.get_loader().read_mozconfig(mozconfig.name)
 
-            self.assertEqual(result['vars']['added'], {})
             self.assertEqual(result['env']['added'], {
                 'MY_EXPORTED': 'woot'})
 
@@ -383,25 +362,10 @@ class TestMozconfigLoader(unittest.TestCase):
 
             result = self.get_loader().read_mozconfig(mozconfig.name)
 
-            self.assertEqual(result['vars']['modified'], {})
             self.assertEqual(result['env']['modified'], {
                 'CC': ('/usr/bin/gcc', '/usr/local/bin/clang')
             })
 
-    def test_read_unmodified_variables(self):
-        """Variables modified by mozconfig are detected."""
-        os.environ[b'CC'] = b'/usr/bin/gcc'
-
-        with NamedTemporaryFile(mode='w') as mozconfig:
-            mozconfig.flush()
-
-            result = self.get_loader().read_mozconfig(mozconfig.name)
-
-            self.assertEqual(result['vars']['unmodified'], {})
-            self.assertEqual(result['env']['unmodified'], {
-                'CC': '/usr/bin/gcc'
-            })
-
     def test_read_removed_variables(self):
         """Variables unset by the mozconfig are detected."""
         os.environ[b'CC'] = b'/usr/bin/clang'
@@ -412,7 +376,6 @@ class TestMozconfigLoader(unittest.TestCase):
 
             result = self.get_loader().read_mozconfig(mozconfig.name)
 
-            self.assertEqual(result['vars']['removed'], {})
             self.assertEqual(result['env']['removed'], {
                 'CC': '/usr/bin/clang'})
 
@@ -425,11 +388,10 @@ class TestMozconfigLoader(unittest.TestCase):
 
             result = self.get_loader().read_mozconfig(mozconfig.name)
 
-            self.assertEqual(result['vars']['added'], {
+            self.assertEqual(result['env']['added'], {
                 'multi': 'foo\nbar',
                 'single': '1'
             })
-            self.assertEqual(result['env']['added'], {})
 
     def test_read_topsrcdir_defined(self):
         """Ensure $topsrcdir references work as expected."""
@@ -440,25 +402,19 @@ class TestMozconfigLoader(unittest.TestCase):
             loader = self.get_loader()
             result = loader.read_mozconfig(mozconfig.name)
 
-            self.assertEqual(result['vars']['added']['TEST'],
+            self.assertEqual(result['env']['added']['TEST'],
                 loader.topsrcdir.replace(os.sep, '/'))
-            self.assertEqual(result['env']['added'], {})
 
     def test_read_empty_variable_value(self):
         """Ensure empty variable values are parsed properly."""
         with NamedTemporaryFile(mode='w') as mozconfig:
             mozconfig.write('EMPTY=\n')
-            mozconfig.write('export EXPORT_EMPTY=\n')
             mozconfig.flush()
 
             result = self.get_loader().read_mozconfig(mozconfig.name)
 
-            self.assertEqual(result['vars']['added'], {
-                'EMPTY': '',
-            })
-            self.assertEqual(result['env']['added'], {
-                'EXPORT_EMPTY': ''
-            })
+            self.assertIn('EMPTY', result['env']['added'])
+            self.assertEqual(result['env']['added']['EMPTY'], '')
 
     def test_read_load_exception(self):
         """Ensure non-0 exit codes in mozconfigs are handled properly."""
diff --git a/testing/xpcshell/selftest.py b/testing/xpcshell/selftest.py
index 78e1aa9..df2ba24 100644
--- a/testing/xpcshell/selftest.py
+++ b/testing/xpcshell/selftest.py
@@ -12,7 +12,6 @@ from StringIO import StringIO
 from xml.etree.ElementTree import ElementTree
 
 from mozbuild.base import MozbuildObject
-os.environ.pop('MOZ_OBJDIR')
 build_obj = MozbuildObject.from_environment()
 
 from runxpcshelltests import XPCShellTests





More information about the tor-commits mailing list