forked from boostorg/beast
38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
from __future__ import absolute_import, division, print_function, unicode_literals
|
|||
|
|
|
||
|
|
import os
|
||
|
|
import shlex
|
||
|
|
|
||
|
|
from beast.env.ReadEnvFile import read_env_file
|
||
|
|
from beast.util.String import is_string
|
||
|
|
from beast.util.Terminal import warn
|
||
|
|
|
||
|
|
_BAD_VARS_ERROR = """
|
||
|
|
the following variables appearing in %s were not understood:
|
||
|
|
%s"""
|
||
|
|
|
||
|
|
def add_user_env(env, dotfile, print=print):
|
||
|
|
df = os.path.expanduser(dotfile)
|
||
|
|
try:
|
||
|
|
with open(df, 'r') as f:
|
||
|
|
dotvars = read_env_file(f.read())
|
||
|
|
except IOError:
|
||
|
|
if os.path.exists(df):
|
||
|
|
warn("Dotfile %s exists but can't be read." % dotfile, print)
|
||
|
|
dotvars = {}
|
||
|
|
|
||
|
|
bad_names = []
|
||
|
|
for name, value in dotvars.items():
|
||
|
|
if name in env:
|
||
|
|
if is_string(env[name]):
|
||
|
|
env[name] = value
|
||
|
|
else:
|
||
|
|
env[name] = shlex.split(value)
|
||
|
|
else:
|
||
|
|
bad_names.append(name)
|
||
|
|
if bad_names:
|
||
|
|
error = _BAD_VARS_ERROR % (dotfile, '\n '.join(bad_names))
|
||
|
|
warn(error, print)
|
||
|
|
|
||
|
|
for name, default in env.items():
|
||
|
|
env[name] = os.environ.get(name, default)
|