Exemple #1
0
def show_log_():
    packageList = []
    package = sys.argv[2].replace("/", "_")
    for file in os.listdir(os.path.join(cfg["devDir"], "autoproj/bob/logs")):
        if file[-13:] == "configure.txt" and package in file:
            packageList.append(file[:-14])
    for package in packageList:
        logFile = cfg[
            "devDir"] + "/autoproj/bob/logs/" + package + "_configure.txt"
        c.printWarning("configure log:")
        with open(logFile) as f:
            for l in f:
                if "error" in l:
                    c.printError(l.strip())
                else:
                    c.printNormal(l.strip())

        logFile = cfg["devDir"] + "/autoproj/bob/logs/" + package + "_build.txt"
        c.printWarning("build log:")
        with open(logFile) as f:
            for l in f:
                if "error" in l:
                    c.printError(l.strip())
                else:
                    c.printNormal(l.strip())
Exemple #2
0
def diff_():
    global cfg
    layout_packages = []
    cfg["update"] = False
    if len(sys.argv) < 3:
        buildconf.fetchPackages(cfg, layout_packages)
    else:
        if sys.argv[2] == "buildconf":
            diff_remotes()
        else:
            buildconf.fetchPackage(cfg, sys.argv[2], layout_packages)

    deps = []
    checked = []
    if cfg["checkDeps"]:
        for p in layout_packages:
            bob_package.getDeps(cfg, p, deps, checked)
    toInstall = []
    diffs = []
    for d in deps[::-1]:
        if d not in toInstall:
            toInstall.append(d)
    for p in layout_packages:
        if p not in toInstall:
            toInstall.append(p)
    for p in toInstall:
        if p in cfg["osdeps"]:
            continue
        if p in cfg["ignorePackages"] or "orogen" in p:
            continue
        if p in cfg["overrides"] and "fetch" in cfg["overrides"][p]:
            continue
        path = cfg["devDir"] + "/" + p
        p2 = p
        while not os.path.isdir(path + "/.git"):
            path = "/".join(path.split("/")[:-1])
            p2 = "/".join(p2.split("/")[:-1])
            if path == cfg["devDir"]:
                break
        if path == cfg["devDir"]:
            cfg["errors"].append("missing: git for " + p)
            continue
        if path not in diffs:
            diffs.append(path)
            out, err, r = execute.do(
                ["git", "diff"], cfg, None,
                path)  #, p2.replace("/", "_")+"_diff.txt")
            if out:
                logFile = cfg["devDir"] + "/autoproj/bob/logs/" + p2.replace(
                    "/", "_") + "_diff.txt"
                print(p2 + ": ", end="")
                c.printWarning("has diff")
                print("    check: less " + logFile)
                sys.stdout.flush()
                with open(logFile, "w") as f:
                    f.write(out)
            else:
                print(p2 + ": ", end="")
                c.printBold("no diff")
Exemple #3
0
def clonePackage(cfg, package, server, gitPackage, branch):
    clonePath = package
    if package[-2:] == ".*":
        arrPackage = package.split("/")[:-1]
        p = gitPackage.split("/")[-1].split(".")[0]
        if arrPackage[-1] != p:
            arrPackage.append(p)
        clonePath = "/".join(arrPackage)
    if package in cfg["updated"]:
        return False
    else:
        cfg["updated"].append(package)
    clonePath = cfg["devDir"] + "/" + clonePath
    if os.path.isdir(clonePath):
        if cfg["update"]:
            print("Updating " + clonePath + " ... " + c.END, end="")
            # todo: check branch
            out, err, r = execute.do(["git", "-C", clonePath, "pull"], cfg)
            if r != 0:
                cfg["errors"].append("update: " + package)
                c.printError("\ncan't update \"" + clonePath + "\":\n" + err)
            c.printWarning("done")
            return True
    else:
        if not cfg["fetch"]:
            c.printError(
                package +
                " is not cloned, call bob-fetch to update or clone the packages."
            )
            cfg["errors"].append("missing: " + package)
            c.printError("error")
            return True
        else:
            print("Fetching " + clonePath + " ... " + c.END, end="")
            sys.stdout.flush()
            cmd = [
                "git", "clone", "-o", "autobuild", "-q", server + gitPackage,
                clonePath
            ]
            if branch:
                cmd += ["-b", branch]
            execute.do(cmd, cfg)
            # apply patch if we have one
            patch = cfg["pyScriptDir"] + "/patches/" + package.split(
                "/")[-1] + ".patch"
            print("check for patches", end="")
            if os.path.exists(patch):
                cmd = ["patch", "-N", "-p0", "-d", clonePath, "-i", patch]
                print(" ".join(cmd))
                out, err, r = execute.do(cmd)
                print(out)
                print(err)
                print(r)
            c.printWarning("done")
            return True
    return False
Exemple #4
0
def list_():
    global cfg
    packages, w = buildconf.listPackages(cfg)
    for p in packages:
        if len(p[1]) > 0:
            print p[0],
            c.printBold(p[1])
        else:
            print p[0],
            c.printWarning(p[0])
Exemple #5
0
def diff_remotes():
    global cfg
    path = cfg["devDir"] + "/autoproj/remotes"
    for d in os.listdir(path):
        if os.path.isdir(path+"/"+d+"/.git"):
            out, err, r = execute.do(["git", "diff"], cfg, None, path+"/"+d)
            if out:
                logFile = cfg["devDir"] + "/autoproj/bob/logs/"+d.replace("/", "_")+"_diff.txt"
                print d+": ",
                c.printWarning("has diff")
                print "    check: less " + logFile
                with open(logFile, "w") as f:
                    f.write(out)
            else:
                print d+": ",
                c.printBold("no diff")
Exemple #6
0
def show_log_():
    package = sys.argv[2]
    logFile = cfg["devDir"] + "/autoproj/bob/logs/"+package.replace("/", "_")+"_configure.txt"
    c.printWarning("configure log:")
    with open(logFile) as f:
        for l in f:
            if "error" in l:
                c.printError(l.strip())
            else:
                c.printNormal(l.strip())

    logFile = cfg["devDir"] + "/autoproj/bob/logs/"+package.replace("/", "_")+"_build.txt"
    c.printWarning("build log:")
    with open(logFile) as f:
        for l in f:
            if "error" in l:
                c.printError(l.strip())
            else:
                c.printNormal(l.strip())
Exemple #7
0
def setupEnv(cfg, update=False):
    global os
    prefix = cfg["devDir"] + "/install"
    if system() == "Windows":
        if prefix[1] == ':':
            prefix = prefix.replace(prefix[:2], "/"+prefix[0])
    prefix_bin = prefix + "/bin"
    prefix_lib = prefix + "/lib"
    prefix_pkg = prefix_lib + "/pkgconfig"
    prefix_config = prefix + "/configuration"
    platform = system()

    # create env.sh
    p = subprocess.Popen("which cmake_debug", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    out, err = p.communicate()
    cmakeDebugPath = out.strip()
    if len(cmakeDebugPath) > 0:
        # check if path is correct
        expectPath = cfg["devDir"]+"/install/bin/cmake_debug"
        if platform == "Windows":
            c.printWarning("cmake_debug path check is not working on Windows currently (please always ensure that you only sourced the env.sh in your current dev folder!")
        else :
            if cmakeDebugPath != expectPath:
                c.printError('"cmake_debug" found in wrong folder.')
                c.printError('Found: '+cmakeDebugPath)
                c.printError('Expected: '+expectPath)
                c.printError('Maybe you already sourced an "env.sh" from a different "dev" folder?')
                return
        if not update:
            return

    if not update:
        if os.path.isfile(cfg["devDir"]+"/env.sh"):
            source(cfg["devDir"]+"/env.sh")

    p = subprocess.Popen("which autoproj", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    out, err = p.communicate()
    aPath = out.strip()
    if len(aPath) > 0:
        with open(cfg["devDir"]+"/bobenv.sh", "w") as f:
            f.write("#! /bin/sh\n")
            f.write(". env.sh\n")
            f.write('export MARS_SCRIPT_DIR="'+cfg["pyScriptDir"]+'"\n')
            f.write("alias bob='${MARS_SCRIPT_DIR}/pybob.py'\n")
            f.write("alias bob-bootstrap='${MARS_SCRIPT_DIR}/pybob.py bootstrap'\n")
            f.write("alias bob-install='${MARS_SCRIPT_DIR}/pybob.py install'\n")
            f.write("alias bob-rebuild='${MARS_SCRIPT_DIR}/pybob.py rebuild'\n")
            f.write("alias bob-build='${MARS_SCRIPT_DIR}/pybob.py'\n")
            f.write("alias bob-diff='${MARS_SCRIPT_DIR}/pybob.py diff'\n")
            f.write("alias bob-list='${MARS_SCRIPT_DIR}/pybob.py list'\n")
            f.write("alias bob-fetch='${MARS_SCRIPT_DIR}/pybob.py fetch'\n")
            f.write("alias bob-show-log='${MARS_SCRIPT_DIR}/pybob.py show-log'\n")
            f.write(". ${MARS_SCRIPT_DIR}/auto_complete.sh\n")
    else:
        with open(cfg["devDir"]+"/env.sh", "w") as f:
            f.write("#! /bin/sh\n")
            f.write('export AUTOPROJ_CURRENT_ROOT="'+cfg["devDir"]+'"\n')
            f.write('export MARS_SCRIPT_DIR="'+cfg["pyScriptDir"]+'"\n')

            f.write('export PATH="$PATH:'+prefix_bin+'"\n')
            if platform == "Darwin":
                f.write('export DYLD_LIBRARY_PATH="'+prefix_lib+':$DYLD_LIBRARY_PATH"\n')
            elif platform == "Linux":
                f.write('export LD_LIBRARY_PATH="'+prefix_lib+':$DYLD_LIBRARY_PATH"\n')
            else:
                f.write('export PATH="'+prefix_lib+':$PATH"\n')
            f.write('export ROCK_CONFIGURATION_PATH="'+prefix_config+'"\n')
            f.write('export PYTHONPATH="'+prefix_lib+'/python2.7/site-packages:$PYTHONPATH"\n')

            # todo: handle python path
            f.write('if [ x${PKG_CONFIG_PATH} = "x" ]; then\n')
            f.write('  export PKG_CONFIG_PATH="'+prefix_pkg+'"\n')
            f.write('else\n')
            f.write('  export PKG_CONFIG_PATH="'+prefix_pkg+':$PKG_CONFIG_PATH"\n')
            f.write('fi\n')
            f.write("alias bob='${MARS_SCRIPT_DIR}/pybob.py'\n")
            f.write("alias bob-bootstrap='${MARS_SCRIPT_DIR}/pybob.py bootstrap'\n")
            f.write("alias bob-install='${MARS_SCRIPT_DIR}/pybob.py install'\n")
            f.write("alias bob-rebuild='${MARS_SCRIPT_DIR}/pybob.py rebuild'\n")
            f.write("alias bob-build='${MARS_SCRIPT_DIR}/pybob.py'\n")
            f.write("alias bob-diff='${MARS_SCRIPT_DIR}/pybob.py diff'\n")
            f.write("alias bob-list='${MARS_SCRIPT_DIR}/pybob.py list'\n")
            f.write("alias bob-fetch='${MARS_SCRIPT_DIR}/pybob.py fetch'\n")
            f.write("alias bob-show-log='${MARS_SCRIPT_DIR}/pybob.py show-log'\n")
            f.write(". ${MARS_SCRIPT_DIR}/auto_complete.sh\n")

    execute.makeDir(cfg["devDir"]+"/install/bin")
    with open(cfg["devDir"]+"/install/bin/cmake_debug", "w") as f:
        f.write("#!/bin/bash\n")
        options = "-DROCK_TEST_ENABLED=OFF"
        if not "autoprojEnv" in cfg or not cfg["autoprojEnv"]:
            options += " -DBINDINGS_RUBY=OFF "
        if platform == "Windows":
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX="+cfg["devDir"]+"/install -DCMAKE_BUILD_TYPE=DEBUG  -G \"MSYS Makefiles\" $@\n")
        else:
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX="+cfg["devDir"]+"/install -DCMAKE_BUILD_TYPE=DEBUG $@\n")
    with open(cfg["devDir"]+"/install/bin/cmake_release", "w") as f:
        f.write("#!/bin/bash\n")
        if platform == "Windows":
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX="+cfg["devDir"]+"/install -DCMAKE_BUILD_TYPE=RELEASE  -G \"MSYS Makefiles\" $@\n")
        else:
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX="+cfg["devDir"]+"/install -DCMAKE_BUILD_TYPE=RELEASE $@\n")

    cmd = ["chmod", "+x", cfg["devDir"]+"/install/bin/cmake_debug"]
    execute.simpleExecute(cmd)

    cmd = ["chmod", "+x", cfg["devDir"]+"/install/bin/cmake_release"]
    execute.simpleExecute(cmd)
    source(cfg["devDir"]+"/env.sh")
Exemple #8
0
def fetchPackage(cfg, package, layout_packages):
    print("Check: " + package + " ... " + c.END, end="")
    sys.stdout.flush()
    setupCfg(cfg)
    if package in cfg["ignorePackages"]:  # or "orogen" in package:
        c.printWarning("done")
        return True
    if package in cfg["osdeps"]:
        if cfg["fetch"]:
            if len(cfg["osdeps"][package]) > 1:
                cfg["osdeps"][package][0](cfg, cfg["osdeps"][package][1])
            else:
                cfg["osdeps"][package][0](cfg, package)
            c.printWarning("done")
        return True
    if package in cfg["overrides"] and "fetch" in cfg["overrides"][package]:
        le = len(cfg["errors"])
        if cfg["fetch"]:
            cfg["overrides"][package]["fetch"](cfg)
        else:
            cfg["overrides"][package]["check"](cfg)
        if len(cfg["errors"]) == le:
            layout_packages.append(package)
            c.printWarning("done")
            return True
        else:
            cfg["errors"].append("missing: " + package)
            c.printError("error")
            return False

    path = cfg["devDir"] + "/autoproj/remotes/"

    matches = []
    for key, value in cfg["packages"].items():
        if package in key and key not in layout_packages:
            matches.append(key)

    if package not in cfg["packages"]:
        result = True
        for match in matches:
            if not fetchPackage(cfg, match, layout_packages):
                result = False
        return result
    elif package == cfg["packages"][package]:
        info = []
        print("\n ", end="")
        if getPackageInfoFromRemoteFolder(cfg, package, path + package, info):
            le = len(cfg["errors"])
            endM = True
            for i in info:
                if "$" not in i["gitPackage"]:
                    if "*" not in i["package"]:
                        fetchPackage(cfg, i["package"], layout_packages)
            if len(cfg["errors"]) > le:
                if endM:
                    c.printError("error")
                return False
            if endM:
                c.printWarning("done")
            return True
    else:
        info = {}
        if getPackageInfo(cfg, package, info):
            endM = True
            le = len(cfg["errors"])
            branch = None
            if not "server" in info:
                cfg["errors"].append("fetch: " + package)
                return
            server = info["server"]
            server2 = info["gitPackage"]

            if "branch" in info:
                branch = info["branch"]
            if package in cfg["overrides"]:
                value = cfg["overrides"][package]
                if "branch" in value:
                    branch = value["branch"]
                if "url" in value:
                    server = value["url"]
                    server2 = ""
            else:
                for key, value in cfg["overrides"].items():
                    r = re.compile(key)
                    m = r.match(package)
                    if m and m.group() == package:
                        if "branch" in value:
                            branch = value["branch"]
                        if "url" in value:
                            server = value["url"]
                            server2 = ""

            if "basename" in info:
                if clonePackage(cfg, package, server, server2, branch):
                    endM = False
            else:
                if "server" in info:
                    if clonePackage(cfg, info["package"], server, server2,
                                    branch):
                        endM = False
            layout_packages.append(package)
            if len(cfg["errors"]) > le:
                if endM:
                    c.printError("error")
                return False
            if endM:
                c.printWarning("done")
            return True

    cfg["errors"].append("fetch: " + package)
    c.printError("error")
    return False
Exemple #9
0
def install_():
    global cfg
    layout_packages = []
    cfg["update"] = False
    if len(sys.argv) < 3:
        buildconf.fetchPackages(cfg, layout_packages)
    else:
        buildconf.fetchPackage(cfg, sys.argv[2], layout_packages)
    deps = []
    checked = []
    if cfg["checkDeps"]:
        for p in layout_packages:
            bob_package.getDeps(cfg, p, deps, checked)
    #print deps
    toInstall = []
    for d in deps[::-1]:
        if d not in toInstall:
            toInstall.append(d)
    for p in layout_packages:
        if p not in toInstall:
            toInstall.append(p)
    while len(toInstall) > 0:
        threads = []
        jobs = []
        iList = list(toInstall)
        toInstall = []
        for p in iList:
            wait = False
            #c.printWarning(str(cfg["deps"][p]))
            if p in cfg["deps"]:
                for d in cfg["deps"][p]:
                    if d in iList:
                        wait = True
                        break
            if not wait:
                jobs.append(p)
                if p in cfg["overrides"] and "install" in cfg["overrides"][p]:
                    if cfg["multiprocessing"]:
                        threads.append(Thread(target=cfg["overrides"][p]["install"], args=(cfg,)))
                    else:
                        c.printNormal("Install: "+p)
                        le = len(cfg["errors"])
                        cfg["overrides"][p]["install"](cfg)
                        if len(cfg["errors"]) <= le:
                            c.printWarning("done")
                        else:
                            c.printError("error")
                elif p in cfg["osdeps"]:
                    # os deps are installed in fetch phase
                    continue
                else:
                    if cfg["multiprocessing"]:
                        threads.append(Thread(target=bob_package.installPackage, args=(cfg, p)))
                    else:
                        c.printNormal("Install: "+p)
                        le = len(cfg["errors"])
                        bob_package.installPackage(cfg, p)
                        if len(cfg["errors"]) <= le:
                            c.printWarning("done")
                        else:
                            c.printError("error")
            else:
                toInstall.append(p)
        if cfg["multiprocessing"]:
            c.printBold("Install: "+str(jobs))
            le = len(cfg["errors"])
            for t in threads:
                t.start()
            for t in threads:
                t.join()
            if len(cfg["errors"]) > le:
                foo = ""
Exemple #10
0
def setupEnv(cfg, update=False):
    global os
    prefix = cfg["devDir"] + "/install"
    if system() == "Windows":
        if prefix[1] == ':':
            prefix = prefix.replace(prefix[:2], "/"+prefix[0])
    prefix_bin = prefix + "/bin"
    prefix_lib = prefix + "/lib"
    prefix_pkg = prefix_lib + "/pkgconfig"
    pythonpath = prefix_lib + "/python%d.%d/site-packages" % (sys.version_info.major, sys.version_info.minor)
    platform = system()
    if platform == "Windows":
        # todo: make this more generic
        pythonpath = "/mingw64/lib/python2.7:/mingw64/lib/python2.7/plat-win32:/mingw64/lib/python2.7/lib-tk:/mingw64/lib/python2.7/lib-dynload:/mingw64/lib/python2.7/site-packages:"+pythonpath
    elif platform == "Linux":
        prefix_lib += ":" + prefix + "/lib/x86_64-linux-gnu"
        prefix_pkg += ":" + prefix + "/lib/x86_64-linux-gnu/pkgconfig"
    prefix_config = prefix + "/configuration"

    # create env.sh
    p = subprocess.Popen("which cmake_debug", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    out, err = p.communicate()
    cmakeDebugPath = out.strip()
    if len(cmakeDebugPath) > 0:
        # check if path is correct
        expectPath = cfg["devDir"]+"/install/bin/cmake_debug"
        if platform == "Windows":
            c.printWarning("cmake_debug path check is not working on Windows currently (please always ensure that you only sourced the env.sh in your current dev folder!")
        else :
            if cmakeDebugPath.decode("utf-8") != expectPath:
                c.printError('"cmake_debug" found in wrong folder.')
                c.printError('Found: ' + cmakeDebugPath.decode("utf-8"))
                c.printError('Expected: ' + expectPath)
                c.printError('Maybe you already sourced an "env.sh" from a different "dev" folder?')
                return
        if not update:
            return

    if not update:
        if os.path.isfile(cfg["devDir"]+"/env.sh"):
            source(cfg["devDir"]+"/env.sh")

    p = subprocess.Popen("which autoproj", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    out, err = p.communicate()
    aPath = out.strip()

    if len(aPath) > 0:
        with open(cfg["devDir"]+"/bobenv.sh", "w") as f:
            f.write("#! /bin/bash\n")
            f.write(". env.sh\n")
            f.write('export MARS_SCRIPT_DIR="'+cfg["pyScriptDir"]+'"\n')
            _make_pybob_aliases(f)
    else:
        with open(cfg["devDir"]+"/env.sh", "w") as f:
            f.write("#! /bin/bash\n")
            f.write('export AUTOPROJ_CURRENT_ROOT="'+cfg["devDir"]+'"\n')
            f.write('if [ x${CMAKE_PREFIX_PATH} = "x" ]; then\n')
            f.write('  export CMAKE_PREFIX_PATH="'+cfg["devDir"]+'/install"\n')
            f.write('else\n')
            f.write('  export CMAKE_PREFIX_PATH="'+cfg["devDir"]+'/install:$CMAKE_PREFIX_PATH"\n')
            f.write('fi\n')
            f.write('export MARS_SCRIPT_DIR="'+cfg["pyScriptDir"]+'"\n')

            f.write('export PATH="$PATH:'+prefix_bin+'"\n')
            if platform == "Darwin":
                f.write('export DYLD_LIBRARY_PATH="'+prefix_lib+':$DYLD_LIBRARY_PATH"\n')
                f.write('export MYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH"\n')
            elif platform == "Linux":
                f.write('export LD_LIBRARY_PATH="'+prefix_lib+':$LD_LIBRARY_PATH"\n')
                f.write('export CXXFLAGS="-std=c++11"\n')
            else:
                f.write('export PATH="'+prefix_lib+':$PATH"\n')
            f.write('export ROCK_CONFIGURATION_PATH="'+prefix_config+'"\n')
            f.write('export PYTHONPATH="' + pythonpath + ':$PYTHONPATH"\n')

            f.write('if [ x${PKG_CONFIG_PATH} = "x" ]; then\n')
            f.write('  export PKG_CONFIG_PATH="'+prefix_pkg+'"\n')
            f.write('else\n')
            f.write('  export PKG_CONFIG_PATH="'+prefix_pkg+':$PKG_CONFIG_PATH"\n')
            f.write('fi\n')
            _make_pybob_aliases(f)

    execute.makeDir(cfg["devDir"]+"/install/bin")
    if len(aPath) == 0:
        with open(cfg["devDir"]+"/install/bin/amake", "w") as f:
            f.write("#!/bin/bash\n")
            f.write("${AUTOPROJ_CURRENT_ROOT}/pybob/pybob.py install $@\n")
        cmd = ["chmod", "+x", cfg["devDir"]+"/install/bin/amake"]
        execute.simpleExecute(cmd)

    with open(cfg["devDir"]+"/install/bin/cmake_debug", "w") as f:
        f.write("#!/bin/bash\n")
        options = "-DROCK_TEST_ENABLED=OFF"
        if not "autoprojEnv" in cfg or not cfg["autoprojEnv"]:
            options += " -DBINDINGS_RUBY=OFF "
        if platform == "Windows":
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX=$AUTOPROJ_CURRENT_ROOT/install -DCMAKE_BUILD_TYPE=DEBUG  -G \"MSYS Makefiles\" $@\n")
        else:
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX=$AUTOPROJ_CURRENT_ROOT/install -DCMAKE_BUILD_TYPE=DEBUG $@\n")
    with open(cfg["devDir"]+"/install/bin/cmake_release", "w") as f:
        f.write("#!/bin/bash\n")
        if platform == "Windows":
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX=$AUTOPROJ_CURRENT_ROOT/install -DCMAKE_BUILD_TYPE=RELEASE  -G \"MSYS Makefiles\" $@\n")
        else:
            f.write("cmake .. "+options+"-DCMAKE_INSTALL_PREFIX=$AUTOPROJ_CURRENT_ROOT/install -DCMAKE_BUILD_TYPE=RELEASE $@\n")

    cmd = ["chmod", "+x", cfg["devDir"]+"/install/bin/cmake_debug"]
    execute.simpleExecute(cmd)

    cmd = ["chmod", "+x", cfg["devDir"]+"/install/bin/cmake_release"]
    execute.simpleExecute(cmd)
    source(cfg["devDir"]+"/env.sh")
Exemple #11
0
def install_():
    global cfg
    layout_packages = []
    cfg["update"] = False
    filterArgs = ["-n", "-k"]
    if len(sys.argv) < 3 or sys.argv[2] in filterArgs:
        # search path upwards for a manifest.xml
        # if not found build manifest from buildconf
        pathToCheck = os.getcwd()
        found = False
        done = False
        while not done:
            if os.path.isfile(pathToCheck + "/manifest.xml"):
                found = True
                done = True
            elif os.path.exists(pathToCheck + "/autoproj"):
                # found dev root
                done = True
            else:
                arrPath = pathToCheck.split("/")
                if len(arrPath) == 1:
                    done = True
                else:
                    pathToCheck = "/".join(arrPath[:-1])
        if found:
            layout_packages.append(os.path.relpath(pathToCheck, cfg["devDir"]))
        else:
            buildconf.fetchPackages(cfg, layout_packages)
    else:
        pathToCheck = os.path.join(os.getcwd(), sys.argv[2])
        if os.path.isfile(pathToCheck + "/manifest.xml"):
            layout_packages.append(os.path.relpath(pathToCheck, cfg["devDir"]))
        else:
            buildconf.fetchPackage(cfg, sys.argv[2], layout_packages)
    deps = []
    checked = []
    if cfg["checkDeps"]:
        for p in layout_packages:
            bob_package.getDeps(cfg, p, deps, checked)
    toInstall = []
    for d in deps[::-1]:
        if d not in toInstall:
            toInstall.append(d)
    for p in layout_packages:
        if p not in toInstall:
            toInstall.append(p)
    iList = []
    while len(toInstall) > 0:
        threads = []
        jobs = []
        oldList = iList
        iList = list(toInstall)
        if oldList == iList:
            # detect unresolved deps loop
            for p in oldList:
                c.printError("detect dependency cycle:\n  " + str(p))
                c.printWarning("  deps:")
                if p in cfg["deps"]:
                    for d in cfg["deps"][p]:
                        if d in iList:
                            c.printWarning("    - " + str(d))
            exit(-1)
        toInstall = []
        for p in iList:
            wait = False
            if p in cfg["deps"]:
                for d in cfg["deps"][p]:
                    if d in iList:
                        wait = True
                        break
            if not wait:
                jobs.append(p)
                if p in cfg["overrides"] and "install" in cfg["overrides"][p]:
                    if cfg["multiprocessing"]:
                        threads.append(
                            Thread(target=cfg["overrides"][p]["install"],
                                   args=(cfg, )))
                    else:
                        c.printNormal("Install: " + p)
                        le = len(cfg["errors"])
                        cfg["overrides"][p]["install"](cfg)
                        if len(cfg["errors"]) <= le:
                            c.printWarning("done")
                        else:
                            c.printError("error")
                elif p in cfg["osdeps"]:
                    # os deps are installed in fetch phase
                    continue
                else:
                    if cfg["multiprocessing"]:
                        threads.append(
                            Thread(target=bob_package.installPackage,
                                   args=(cfg, p)))
                    else:
                        c.printNormal("Install: " + p)
                        le = len(cfg["errors"])
                        bob_package.installPackage(cfg, p)
                        if len(cfg["errors"]) <= le:
                            c.printWarning("done")
                        else:
                            c.printError("error")
            else:
                toInstall.append(p)
        if cfg["multiprocessing"]:
            c.printBold("Install: " + str(jobs))
            le = len(cfg["errors"])
            for t in threads:
                t.start()
            for t in threads:
                t.join()
            if len(cfg["errors"]) > le:
                foo = ""