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
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)
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)
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)
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))
def main(): pkg = PackageDescription.from_file("bento.info") if pkg.executables: install_inplace(pkg)
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))
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))