mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 09:05:45 +00:00
79e124f382
So far, we relied on the module being copied over in the virtualenv, and the module itself would try to find config.status in parent directories of its own location. Unfortunately, this falls short when the source tree's build/ directory appears early in the sys.path. With this change, we don't copy the module to the virtualenv anymore, and try to find config.status in parent directories of the python executable, which, when running from the virtualenv, will be equivalent to the current behavior.
31 lines
1.1 KiB
Python
31 lines
1.1 KiB
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/.
|
|
|
|
import imp
|
|
import os
|
|
import sys
|
|
|
|
path = os.path.dirname(sys.executable)
|
|
while not os.path.exists(os.path.join(path, 'config.status')):
|
|
parent = os.path.normpath(os.path.join(path, os.pardir))
|
|
if parent == path:
|
|
raise Exception("Can't find config.status")
|
|
path = parent
|
|
|
|
path = os.path.join(path, 'config.status')
|
|
config = imp.load_module('_buildconfig', open(path), path, ('', 'r', imp.PY_SOURCE))
|
|
|
|
# Copy values from the config.status namespace into this module namespace.
|
|
# This effectively imports topsrcdir, topobjdir, defines, substs, files,
|
|
# headers and non_global_defines
|
|
for var in config.__all__:
|
|
value = getattr(config, var)
|
|
if isinstance(value, list) and value and isinstance(value[0], tuple):
|
|
value = dict(value)
|
|
setattr(sys.modules[__name__], var, value)
|
|
|
|
for var in os.environ:
|
|
if var != 'SHELL' and var in substs:
|
|
substs[var] = os.environ[var]
|