Ejemplo n.º 1
0
def add_tests(env, source, type, expensive_source=[]):
    # Since all of the test scripts involve "import IMP.test", ensure this
    # is a source so that any Python dependencies of IMP.test (e.g. IMP.base)
    # are automatically picked up by pyscanner
    #testpy = "#/build/lib/IMP/test/__init__.py"
    dta= data.get(env)
    test=UnitTest(env, target="fast-test.results",
                  source=["#/tools/imppy.sh"]+source+[env.Value(type)])
    # bring in kernel and test to make sure kernel python support is there
    # and since examples don't tend to import test directly. test will pull
    # in kernel
    etest=UnitTest(env, target="test.results",
                   source=["#/tools/imppy.sh"]+source \
                          +expensive_source+[env.Value(type)])
    if "test" in dta.modules.keys():
        env.Depends(test, [dta.modules["test"].alias])
        env.Depends(etest, [dta.modules["test"].alias])
    env.AlwaysBuild("test.results")
    #env.Requires(test, env.Alias(environment.get_current_name(env)))
    #env.Requires(test, "tools/imppy.sh")
    if type.endswith('unit test'):
        dta.add_to_alias(environment.get_current_name(env)+"-test-fast", test)
        data.get(env).add_to_alias(environment.get_current_name(env)+"-test", etest)
    elif type=='example':
        data.get(env).add_to_alias(environment.get_current_name(env)+"-test-examples",
                                               test)
    elif type=="system":
        data.get(env).add_to_alias(environment.get_current_name(env)+"-test", test)
    env.Alias(env.Alias('test'), etest)
    env.Alias(env.Alias('test-fast'), test)
    return test, etest
Ejemplo n.º 2
0
def _get_path(env, target, prefix):
    ret = "/".join([prefix] + str(target).split("/")[1:])
    cd = environment.get_current_name(env)
    if cd == "kernel":
        cd = "."
    cf = environment.get_current_name(env)
    # if cf=='kernel':
    #    cf='IMP'
    return ret.replace("currentdir", cd).replace("currentfile", cf)
Ejemplo n.º 3
0
def IMPApplicationTest(env, python_tests=[]):
    if env["IMP_PASS"] != "RUN":
        return
    files = [File(x).abspath for x in python_tests]
    tests = test.add_tests(env, source=files, type="application unit test")
    for t in tests:
        env.Requires(t, env.Alias(environment.get_current_name(env)))
Ejemplo n.º 4
0
def install(env, target, source, **keys):
    """Like the standard Install builder, but using symlinks if available."""
    # print str(target), str(source)
    varname = str(target).split("/")[0]
    prefix = _get_prefix(env, varname)
    installpath = _get_path(env, target, prefix)
    ret = []
    internal_installpath = installpath
    if Dir(installpath).get_abspath() != Dir("/".join(str(source).split("/")[:-1])).get_abspath():
        inst = _link_install(env, installpath, source, **keys)
        data.get(env).add_to_alias(environment.get_current_name(env), inst)
        ret.append(inst[0])
    else:
        inst = []
        data.get(env).add_to_alias(environment.get_current_name(env), source)
    # ick, need a better mechanism for installed vs not
    if (
        varname == "swigdir"
        or varname == "srcdir"
        or varname == "moduledir"
        or varname == "#"
        or varname == "biological_systems"
        or varname == "."
        or varname == "modules"
    ):
        return ret
    installpath = _get_path(env, target, env.subst(env[varname]))
    # print Dir(installpath).get_abspath(), internal_installpath
    # handle hacks involving setting the datapath to "./data"
    if Dir(installpath) == Dir(internal_installpath):
        return ret
    destdir = env.subst(env["destdir"])
    if destdir != "" and not os.path.isabs(destdir):
        destdir = Dir("#/" + destdir).abspath
    inst = env.Install(destdir + installpath, source, **keys)
    ret.append(inst[0])
    data.get(env).add_to_alias(environment.get_current_name(env) + "-install", inst)
    data.get(env).add_to_alias("install", inst)
    return ret
Ejemplo n.º 5
0
def install_as(env, target, source, **keys):
    # print "in", target, source
    varname = str(target).split("/")[0]
    prefix = _get_prefix(env, varname)
    installpath = _get_path(env, target, prefix)
    # print File(installpath).get_abspath(), File(str(source)).get_abspath()
    ret = []
    if File(installpath).get_abspath() != File(str(source)).get_abspath():
        inst = _link_install_as(env, installpath, source, **keys)
        ret.append(inst[0])
        data.get(env).add_to_alias(environment.get_current_name(env), inst)
    else:
        data.get(env).add_to_alias(environment.get_current_name(env), source)
    if varname == "swigdir" or varname == "srcdir":
        return
    installpath = _get_path(env, target, env.subst(env[varname]))
    destdir = env.subst(env["destdir"])
    if destdir != "" and not os.path.isabs(destdir):
        destdir = Dir("#/" + destdir).abspath
    inst = env.InstallAs(File(destdir + installpath), source, **keys)
    ret.append(inst[0])
    data.get(env).add_to_alias(environment.get_current_name(env) + "-install", inst)
    data.get(env).add_to_alias("install", inst)
    return ret
Ejemplo n.º 6
0
def _get_prefix(env, varname):
    if varname == "datadir":
        prefix = "#/build/data"
    elif varname == "bindir":
        prefix = "#/build/bin"
    elif varname == "docdir":
        prefix = "#/build/doc"
    elif varname == "libdir":
        prefix = "#/build/lib"
    elif varname == "includedir":
        prefix = "#/build/include"
    elif varname == "pythondir":
        prefix = "#/build/lib"
    elif varname == "pyextdir":
        prefix = "#/build/lib"
    elif varname == "swigdir":
        prefix = "#/build/swig"
    elif varname == "srcdir":
        prefix = "#/build/src"
    elif varname == "moduledir":
        prefix = "#/modules/" + environment.get_current_name(env)
    else:
        prefix = varname
    return prefix
Ejemplo n.º 7
0
    def __init__(self, env, coverage, test_type, output_file):
        self._env = env
        self._test_type = None
        self._sources = []
        self._headers = []
        self._header_callcounts = {}
        self._output_file = output_file
        self._coverage = coverage
        self._html_coverage = env.get('html_coverage', 'no')
        self._coverage_dir = Dir("#/build/coverage").abspath
        self._name = name = environment.get_current_name(env)
        if test_type.startswith('module'):
            self._test_type = 'module'
            moddir = self.get_module_dir(name)
            self.add_source('modules/%s/src' % moddir, '*.cpp', report=True)
            self.add_source('modules/%s/src/internal' % moddir, '*.cpp',
                            report=True)
            self.add_source('build/src', self.get_wrap(name) + '.cpp',
                            report=False)

            if name == 'kernel':
                h = 'IMP'
            elif name == 'RMF':
                h = name
            else:
                h = 'IMP/' + name
            self.add_header('build/include/%s' % h, '*.h', report=True)
            self.add_header('build/include/%s/internal' % h, '*.h', report=True)
        elif test_type.startswith('application'):
            self._test_type = 'application'
            m = re.search('(applications/(.+?/)?%s)' % name, output_file)
            if m:
                self.add_source(m.group(1), '*.cpp', report=True, recurse=True)
                self.add_header(m.group(1), '*.h', report=True, recurse=True)
            else:
                raise ValueError("Cannot determine path for %s" % name)
Ejemplo n.º 8
0
def _get_name(env):
    return environment.get_current_name(env)