def get_test_environment(envi):
    env= bug_fixes.clone_env(envi)
    env.Replace(LINKFLAGS=env['IMP_BIN_LINKFLAGS'])
    env.Replace(LIBS=utility.get_env_paths(envi, 'libs'))
    if env['IMP_USE_RPATH']:
        dylinkflags=[]
        for p in env['LIBPATH']:
            if p[0] != '#':
                env.Prepend(RPATH=[p])
    env['IMP_OUTER_ENVIRONMENT']= envi
    return env
def _propagate_variables(env):
    """enforce dependencies between variables"""
    env['IMP_BUILD_STATIC']= env['static']
    env['IMP_BUILD_DYNAMIC']= env['dynamic']
    if env['python'] != "no" and not env.get('PYTHON', None):
        env['IMP_PROVIDE_PYTHON']= True
        if env['python'] =="auto":
            env['PYTHON']=env['python']
        else:
            env['PYTHON']=env['python']
    else:
        env['IMP_PROVIDE_PYTHON']=False
        if env['wine']:
            env['PYTHON']="w32python"
        else:
            env['PYTHON']="python"
    env['IMP_PROVIDE_PYTHON']= env['python']
    env['IMP_USE_PLATFORM_FLAGS']= env['platformflags']
    env['IMP_USE_RPATH']= env['rpath']
    if env['pythonsosuffix'] != 'default':
        env['IMP_PYTHON_SO']=env['pythonsosuffix']
    elif env['IMP_PROVIDE_PYTHON'] and not env['IMP_USE_PLATFORM_FLAGS']:
        print >> sys.stderr, "Do not know suffix for python lib, please provide pythonsosuffix"
        env.Exit(1)
    if env['wine']:
        env['IMP_BUILD_STATIC']=False
        env['IMP_PYTHON_SO']='.pyd'

    if env['PLATFORM']!= 'posix' and env['PLATFORM'] != 'darwin' and env['IMP_USE_RPATH']:
        env['IMP_USE_RPATH']=False
        print >> sys.stderr, "WARNING rpath not supported on platform "+ env['PLATFORM']

    if not env['IMP_BUILD_DYNAMIC']:
        env['IMP_PROVIDE_PYTHON']=False
    if not env['IMP_BUILD_DYNAMIC'] and not env['IMP_BUILD_STATIC']:
        print >> sys.stderr, "One of dynamic or static libraries must be supported."
        env.Exit(1)
    if env.get('pythonpath', None):
        env['PYTHONPATH'] = env['pythonpath']
    else:
        env['PYTHONPATH']=''
    if env.get('cxxcompiler', None):
        env['CXX']=env['cxxcompiler']
    if env.get('ar', None):
        env['AR']= env['ar']
    if env.get('ranlib', None):
        env['RANLIB']= env['ranlib']
    if env.get("swigprogram", None):
        env['SWIG']= env["swigprogram"]
    if env.get('cxxflags', None):
        env.Append(CXXFLAGS = env['cxxflags'].split())
    else:
        env.Append(CXXFLAGS=[])

    for t in ['includepath', 'libpath', 'datapath','pythonpath', 'swigpath', 'ldlibpath']:
        r=utility.get_abspaths(env, t, env.get(t, ""))
        env[t]=os.path.pathsep.join(r)

    if env.get('pythoncxxflags', None):
        env.Append(IMP_PYTHON_CXXFLAGS = env['pythoncxxflags'].split())
    elif env.get('cxxflags', None):
        env.Append(IMP_PYTHON_CXXFLAGS = env['cxxflags'].split())
    else:
        env.Append(IMP_PYTHON_CXXFLAGS=[])
    if env.get('bincxxflags', None):
        env.Append(IMP_BIN_CXXFLAGS = env['bincxxflags'].split())
    elif env.get('cxxflags', None):
        env.Append(IMP_BIN_CXXFLAGS = env['cxxflags'].split())
    else:
        env.Append(IMP_BIN_CXXFLAGS=[])

    if env.get('linkflags', None):
        env.Append(IMP_LINKFLAGS=env['linkflags'].split())
    else:
        env.Append(IMP_LINKFLAGS=[])
    if env.get('pythonlinkflags', None):
        env.Append(IMP_PYTHON_LINKFLAGS=env['pythonlinkflags'].split())
    else:
        env.Append(IMP_PYTHON_LINKFLAGS=[])

    if env.get('shliblinkflags', None):
        env.Append(IMP_SHLIB_LINKFLAGS=env['shliblinkflags'].split())
    else:
        env.Append(IMP_SHLIB_LINKFLAGS=[])

    if env.get('arliblinkflags', None):
        env.Append(IMP_ARLIB_LINKFLAGS=env['arliblinkflags'].split())
    else:
        env.Append(IMP_ARLIB_LINKFLAGS=[])


    if env.get('binlinkflags', None):
        env.Append(IMP_BIN_LINKFLAGS=env['binlinkflags'].split())
    else:
        env.Append(IMP_BIN_LINKFLAGS=[])

    if env.get('includepath') is not None:
        env.Prepend(CPPPATH=utility.get_env_paths(env, 'includepath'))
    else:
        env.Append(CPPPATH=[])

    if env.get('libpath') is not None:
        env.Prepend(LIBPATH=utility.get_env_paths(env, 'libpath'))
    else:
        env.Append(LIBPATH=[])
    if env.get('libs') is not None:
        env.Append(LIBS=utility.get_env_paths(env, 'libs'))
    else:
        env.Append(LIBS=[])

    if env.get('ldlibpath') is not None and env.get('ldlibpath') != '':
        env['ENV']['LD_LIBRARY_PATH'] = env['ldlibpath']

    if env.get('environment') is not None:
        for pair in env.get('environment').split(','):
            if pair != "":
                if pair.find("=") != -1:
                    (name, value)= pair.split("=")
                    env['ENV'][name]=value
                else:
                    env['ENV'][pair]=""