Beispiel #1
0
def generate_version_py(filename):
    pkg = PackageDescription.from_file("bento.info")

    FULL_VERSION = pkg.version
    if "dev" in FULL_VERSION:
        RELEASED = False
    else:
        RELEASED = True

    try:
        if os.path.exists(".git"):
            s = subprocess.Popen(["git", "rev-parse", "HEAD"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
            out = s.communicate()[0]
            GIT_REVISION = out.decode().strip()
        else:
            GIT_REVISION = ""
    except WindowsError:
        GIT_REVISION = ""

    cnt = """\
# This file was autogenerated
version = '%s'
git_revision = '%s'
"""
    cnt = cnt % (FULL_VERSION, GIT_REVISION)

    f = open(filename, "w")
    try:
        f.write(cnt)
    finally:
        f.close()

    return FULL_VERSION, GIT_REVISION
Beispiel #2
0
def use_waf(d):
    old_cwd = os.getcwd()
    try:
        os.chdir(d)
        package = PackageDescription.from_file("bento.info")
        return "Waf" in package.use_backends
    finally:
        os.chdir(old_cwd)
Beispiel #3
0
def use_waf(d):
    old_cwd = os.getcwd()
    try:
        os.chdir(d)
        package = PackageDescription.from_file("bento.info")
        return "Waf" in package.use_backends
    finally:
        os.chdir(old_cwd)
Beispiel #4
0
    stat.S_IROTH | stat.S_IXOTH

root = create_root_with_source_tree(os.getcwd(), os.path.join(os.getcwd(), "build"))

def _create_executable(name, executable, scripts_node):
    if sys.platform == "win32":
        nodes = create_win32_script(name, executable, scripts_node)
    else:
        nodes = create_posix_script(name, executable, scripts_node)
        for n in nodes:
            n.chmod(MODE_755)
    return nodes

def install_inplace(pkg):
    """Install scripts of pkg in the current directory."""
    for basename, executable in pkg.executables.items():
        version_str = ".".join([str(i) for i in sys.version_info[:2]])
        scripts_node = root._ctx.srcnode
        for name in [basename, "%s-%s" % (basename, version_str)]:
            nodes = _create_executable(name, executable, scripts_node)
            installed = ",".join([n.path_from(scripts_node) for n in nodes])
            pprint("GREEN", "installing %s in current directory" % installed)

if __name__ == "__main__":
    from setup_common import generate_version_py
    generate_version_py("bento/__dev_version.py")

    pkg = PackageDescription.from_file("bento.info")
    if pkg.executables:
        install_inplace(pkg)
Beispiel #5
0
def create_script(config):
    import tarfile, re

    script_name = config["script_name"]
    extra_files = config["extra_files"]
    print(("Creating self-contained script %r in %s" %
           (script_name, os.getcwd())))
    mw = "tmp-foo-" + VERSION

    zip_type = "bz2"

    tar = tarfile.open('%s.tar.%s' % (mw, zip_type), "w:%s" % zip_type)

    # List of (source, arcname) pairs
    files = []
    nodes = []

    cwd_node = ROOT.find_node(os.getcwd())

    def list_nodes(packages, base_node=cwd_node):
        nodes = []
        for package_name in packages:
            init = os.path.join(*(package_name.split(".") + ["__init__.py"]))
            n = base_node.find_node(init)
            if n is None:
                raise IOError("init file for package %s not found (looked for %r)!" \
                              % (package_name, init))
            else:
                p = n.parent
                nodes.extend(
                    p.find_node(f) for f in p.listdir() if f.endswith(".py"))
        return nodes

    package = PackageDescription.from_file("bento.info",
                                           user_flags={
                                               "bundle": True,
                                               "bundle_yaku": True
                                           })
    nodes.extend(list_nodes(package.packages))

    for module in package.py_modules:
        n = cwd_node.find_node(module + ".py")
        if n is None:
            raise IOError("init file for package %s not found (looked for %r)!" \
                          % (package_name, init))
        else:
            nodes.append(n)

    files.extend([(n.abspath(), n.path_from(cwd_node)) for n in nodes])

    if config["include_waf"]:
        base_dir = config["waf"]["base_dir"]
        packages = config["waf"]["packages"]
        base_node = ROOT.find_node(op.expanduser(base_dir))
        if base_node is None:
            raise ValueError("Waf base dir not found (misconfigured ?): %s" %
                             base_dir)
        nodes = list_nodes(packages, base_node)
        files.extend([(n.abspath(), n.path_from(base_node)) for n in nodes])

    for pattern in extra_files:
        for f in glob.glob(pattern):
            files.append((f, f))

    for name, arcname in files:
        tarinfo = tar.gettarinfo(name, arcname)
        tarinfo.uid = tarinfo.gid = 1000
        tarinfo.uname = tarinfo.gname = "baka"
        (code, size, cnt) = sfilter(name)
        tarinfo.size = size
        tar.addfile(tarinfo, code)
    tar.close()

    variables = {}
    for k in [
            "script_name", "script_pkg_root", "script_version",
            "script_entry_point"
    ]:
        variables[k] = config[k]
    variables["script_name"] = "'%s'" % variables["script_name"]
    variables["script_pkg_root"] = "'%s'" % variables["script_pkg_root"]

    code1 = create_script_light(config["script_template"], variables)

    f = open("%s.tar.%s" % (mw, zip_type), 'rb')
    cnt = f.read()
    f.close()

    m = md5()
    m.update(cnt)
    REVISION = m.hexdigest()
    reg = re.compile('^REVISION=(.*)', re.M)
    code1 = reg.sub(r'REVISION="%s"' % REVISION, code1)

    f = open(script_name, 'wb')
    #f.write(code1.replace("C1='x'", "C1='%s'" % C1).replace("C2='x'", "C2='%s'" % C2))
    f.write(code1)
    f.write('#==>\n')
    f.write('#')
    f.write(base64.b64encode(cnt))
    f.write('\n')
    f.write('#<==\n')
    f.close()

    if sys.platform != 'win32':
        from bento.utils.utils import MODE_755
        os.chmod(script_name, MODE_755)
    os.unlink('%s.tar.%s' % (mw, zip_type))
Beispiel #6
0
def main():
    pkg = PackageDescription.from_file("bento.info")
    if pkg.executables:
        install_inplace(pkg)
Beispiel #7
0
from distutils.core import setup
from bento.core import PackageDescription
from bento.conv import pkg_to_distutils

pkg = PackageDescription.from_file("bento.info")
setup(**pkg_to_distutils(pkg))
Beispiel #8
0
def create_script(config):
    import tarfile, re

    script_name = config["script_name"]
    extra_files = config["extra_files"]
    print("Creating self-contained script %r in %s" % (script_name, os.getcwd()))
    mw = "tmp-foo-" + VERSION

    zip_type = "bz2"

    tar = tarfile.open('%s.tar.%s' % (mw, zip_type), "w:%s" % zip_type)

    # List of (source, arcname) pairs
    files = []
    nodes = []

    cwd_node = ROOT.find_node(os.getcwd())

    def list_nodes(packages, base_node=cwd_node):
        nodes = []
        for package_name in packages:
            init = os.path.join(*(package_name.split(".") + ["__init__.py"]))
            n = base_node.find_node(init)
            if n is None:
                raise IOError("init file for package %s not found (looked for %r)!" \
                              % (package_name, init))
            else:
                p = n.parent
                nodes.extend(p.find_node(f) for f in p.listdir() if f.endswith(".py"))
        return nodes

    package = PackageDescription.from_file("bento.info", user_flags={"bundle": True, "bundle_yaku": True})
    nodes.extend(list_nodes(package.packages))

    for module in package.py_modules:
        n = cwd_node.find_node(module + ".py")
        if n is None:
            raise IOError("init file for package %s not found (looked for %r)!" \
                          % (package_name, init))
        else:
            nodes.append(n)

    files.extend([(n.abspath(), n.path_from(cwd_node)) for n in nodes])

    if config["include_waf"]:
        base_dir = config["waf"]["base_dir"]
        packages = config["waf"]["packages"]
        base_node = ROOT.find_node(op.expanduser(base_dir))
        if base_node is None:
            raise ValueError("Waf base dir not found (misconfigured ?): %s" % base_dir)
        nodes = list_nodes(packages, base_node)
        files.extend([(n.abspath(), n.path_from(base_node)) for n in nodes])

    for pattern in extra_files:
        for f in glob.glob(pattern):
            files.append((f, f))

    for name, arcname in files:
        tarinfo = tar.gettarinfo(name, arcname)
        tarinfo.uid = tarinfo.gid = 1000
        tarinfo.uname = tarinfo.gname = "baka"
        (code, size, cnt) = sfilter(name)
        tarinfo.size = size
        tar.addfile(tarinfo, code)
    tar.close()

    variables = {}
    for k in ["script_name", "script_pkg_root", "script_version", "script_entry_point"]:
        variables[k] = config[k]
    variables["script_name"] = "'%s'" % variables["script_name"]
    variables["script_pkg_root"] = "'%s'" % variables["script_pkg_root"]

    code1 = create_script_light(config["script_template"], variables)

    f = open("%s.tar.%s" % (mw, zip_type), 'rb')
    cnt = f.read()
    f.close()

    m = md5()
    m.update(cnt)
    REVISION = m.hexdigest()
    reg = re.compile('^REVISION=(.*)', re.M)
    code1 = reg.sub(r'REVISION="%s"' % REVISION, code1)

    f = open(script_name, 'wb')
    #f.write(code1.replace("C1='x'", "C1='%s'" % C1).replace("C2='x'", "C2='%s'" % C2))
    f.write(code1)
    f.write('#==>\n')
    f.write('#')
    f.write(base64.b64encode(cnt))
    f.write('\n')
    f.write('#<==\n')
    f.close()

    if sys.platform != 'win32':
        from bento.utils.utils import MODE_755
        os.chmod(script_name, MODE_755)
    os.unlink('%s.tar.%s' % (mw, zip_type))