def run(self, ctx): argv = ctx.command_argv p = ctx.options_context.parser o, a = p.parse_args(argv) if o.help: p.print_help() return n = ctx.build_node.make_node(IPKG_PATH) ipkg = InstalledPkgDescription.from_file(n.abspath()) scheme = ctx.retrieve_configured_scheme() ipkg.update_paths(scheme) node_sections = ipkg.resolve_paths_with_destdir(ctx.build_node) if o.list_files: # XXX: this won't take into account action in post install scripts. # A better way would be to log install steps and display those, but # this will do for now. for kind, source, target in iter_files(node_sections): print(target.abspath()) return if o.transaction: trans = TransactionLog("transaction.log") try: for kind, source, target in iter_files(node_sections): trans.copy(source.abspath(), target.abspath(), kind) finally: trans.close() else: for kind, source, target in iter_files(node_sections): copy_installer(source.abspath(), target.abspath(), kind)
def run(self, ctx): argv = ctx.get_command_arguments() p = ctx.options_context.parser o, a = p.parse_args(argv) if o.help: p.print_help() return if o.dry_run: return n = ctx.build_node.make_node(IPKG_PATH) ipkg = InstalledPkgDescription.from_file(n.abspath()) scheme = ctx.get_paths_scheme() ipkg.update_paths(scheme) node_sections = ipkg.resolve_paths_with_destdir(ctx.build_node) if o.list_files: # XXX: this won't take into account action in post install scripts. # A better way would be to log install steps and display those, but # this will do for now. for kind, source, target in iter_files(node_sections): print(target.abspath()) return if o.transaction: trans = TransactionLog("transaction.log") try: for kind, source, target in iter_files(node_sections): trans.copy(source.abspath(), target.abspath(), kind) finally: trans.close() else: for kind, source, target in iter_files(node_sections): copy_installer(source.abspath(), target.abspath(), kind)
def build_egg(ipkg, source_root=".", path=None): meta = PackageMetadata.from_ipkg(ipkg) egg_info = EggInfo.from_ipkg(ipkg) # FIXME: fix egg name if path is None: egg = egg_filename(os.path.join("dist", meta.fullname)) else: egg = egg_filename(os.path.join(path, meta.fullname)) ensure_dir(egg) egg_info = EggInfo.from_ipkg(ipkg) zid = compat.ZipFile(egg, "w", compat.ZIP_DEFLATED) try: for filename, cnt in egg_info.iter_meta(): zid.writestr(os.path.join("EGG-INFO", filename), cnt) ipkg.path_variables["sitedir"] = "." file_sections = ipkg.resolve_paths(source_root) for kind, source, target in iter_files(file_sections): if not kind in ["executables"]: zid.write(source, target) pprint("PINK", "Byte-compiling ...") for kind, source, target in iter_files(file_sections): if kind in ["pythonfiles"]: zid.writestr("%sc" % target, bcompile(source)) finally: zid.close() return
def run(self, ctx): argv = ctx.command_argv p = ctx.options_context.parser o, a = p.parse_args(argv) if o.help: p.print_help() return n = ctx.build_node.make_node(BUILD_MANIFEST_PATH) build_manifest = BuildManifest.from_file(n.abspath()) scheme = ctx.retrieve_configured_scheme() build_manifest.update_paths(scheme) node_sections = build_manifest.resolve_paths_with_destdir(ctx.build_node) if o.list_files: # XXX: this won't take into account action in post install scripts. # A better way would be to log install steps and display those, but # this will do for now. for kind, source, target in iter_files(node_sections): print(target.abspath()) return if o.transaction: trans = TransactionLog("transaction.log") try: for kind, source, target in iter_files(node_sections): trans.copy(source.abspath(), target.abspath(), kind) finally: trans.close() else: for kind, source, target in iter_files(node_sections): copy_installer(source.abspath(), target.abspath(), kind)
def create_wininst(ipkg, egg_info=None, src_root_dir=".", wininst=None): meta = PackageMetadata.from_ipkg(ipkg) if egg_info is None: egg_info = EggInfo.from_ipkg(ipkg) # XXX: do this correctly, maybe use same as distutils ? if wininst is None: wininst = wininst_filename(os.path.join("dist", meta.fullname)) ensure_dir(wininst) egg_info_dir = os.path.join("PURELIB", egg_info_dirname(meta.fullname)) fid, arcname = tempfile.mkstemp(prefix="zip") zid = compat.ZipFile(arcname, "w", compat.ZIP_DEFLATED) try: for filename, cnt in egg_info.iter_meta(): zid.writestr(os.path.join(egg_info_dir, filename), cnt) ipkg.path_variables["bindir"] = "SCRIPTS" ipkg.path_variables["sitedir"] = "PURELIB" ipkg.path_variables["gendatadir"] = "$sitedir" file_sections = ipkg.resolve_paths(src_root_dir) def write_content(source, target, kind): zid.write(source, target) for kind, source, target in iter_files(file_sections): write_content(source, target, kind) finally: zid.close() os.close(fid) create_exe(ipkg, arcname, wininst)
def build_pkg_from_temp(ctx, build_manifest, pkg_root, root_node, install_root, categories, description=None): d = tempfile.mkdtemp() try: tmp_root = root_node.make_node(d) prefix_node = tmp_root.make_node( root_node.make_node(sys.exec_prefix).path_from(root_node)) prefix = eprefix = prefix_node.abspath() build_manifest.update_paths({"prefix": prefix, "eprefix": eprefix}) file_sections = build_manifest.resolve_paths(ctx.build_node) for kind, source, target in iter_files(file_sections): if kind in categories: #if not os.path.exists(target.parent.abspath()): # os.makedirs(os.path.dirname(target)) target.parent.mkdir() shutil.copy(source.abspath(), target.abspath()) if kind == "executables": os.chmod(target.abspath(), MODE_755) pkg_name = os.path.splitext(os.path.basename(pkg_root))[0] pkg_info = PackageInfo(pkg_name=pkg_name, prefix=install_root, source_root=d, pkg_root=pkg_root, description=description) build_pkg(pkg_info) finally: shutil.rmtree(d)
def run(self, ctx): argv = ctx.get_command_arguments() p = ctx.options_context.parser o, a = p.parse_args(argv) if o.help: p.print_help() return root = ctx.top_node while root.height() > 0: root = root.parent default_scheme = get_default_scheme(ctx.pkg.name) default_prefix = default_scheme["prefix"] default_sitedir = default_scheme["sitedir"] n = ctx.build_node.make_node(IPKG_PATH) ipkg = InstalledPkgDescription.from_file(n.abspath()) name = ipkg.meta["name"] version = ipkg.meta["version"] py_short = ".".join([str(i) for i in sys.version_info[:2]]) mpkg_name = "%s-%s-py%s.mpkg" % (name, version, py_short) categories = set() file_sections = ipkg.resolve_paths(ctx.build_node) for kind, source, target in iter_files(file_sections): categories.add(kind) # Mpkg metadata mpkg_root = os.path.join(os.getcwd(), "dist", mpkg_name) mpkg_cdir = os.path.join(mpkg_root, "Contents") if os.path.exists(mpkg_root): shutil.rmtree(mpkg_root) os.makedirs(mpkg_cdir) f = open(os.path.join(mpkg_cdir, "PkgInfo"), "w") try: f.write("pmkrpkg1") finally: f.close() mpkg_info = MetaPackageInfo.from_ipkg(ipkg) purelib_pkg = "%s-purelib-%s-py%s.pkg" % (name, version, py_short) scripts_pkg = "%s-scripts-%s-py%s.pkg" % (name, version, py_short) datafiles_pkg = "%s-datafiles-%s-py%s.pkg" % (name, version, py_short) mpkg_info.packages = [purelib_pkg, scripts_pkg, datafiles_pkg] make_mpkg_plist(mpkg_info, os.path.join(mpkg_cdir, "Info.plist")) mpkg_rdir = os.path.join(mpkg_root, "Contents", "Resources") os.makedirs(mpkg_rdir) make_mpkg_description(mpkg_info, os.path.join(mpkg_rdir, "Description.plist")) # Package the stuff which ends up into site-packages pkg_root = os.path.join(mpkg_root, "Contents", "Packages", purelib_pkg) build_pkg_from_temp(ctx, ipkg, pkg_root, root, "/", ["pythonfiles"], "Pure Python modules and packages") pkg_root = os.path.join(mpkg_root, "Contents", "Packages", scripts_pkg) build_pkg_from_temp(ctx, ipkg, pkg_root, root, "/", ["executables"], "Scripts and binaries") pkg_root = os.path.join(mpkg_root, "Contents", "Packages", datafiles_pkg) build_pkg_from_temp(ctx, ipkg, pkg_root, root, "/", ["bentofiles", "datafiles"], "Data files")
def build_egg(ipkg, ctx, source_root, output_dir=None, output_file=None): meta = PackageMetadata.from_ipkg(ipkg) egg_info = EggInfo.from_ipkg(ipkg, ctx.build_node) # FIXME: fix egg name if output_dir is None: if output_file is None: egg = egg_filename(os.path.join("dist", meta.fullname)) else: egg = os.path.join("dist", output_file) else: if output_file is None: egg = egg_filename(os.path.join(output_dir, meta.fullname)) else: egg = os.path.join(output_dir, output_file) bento.utils.path.ensure_dir(egg) zid = compat.ZipFile(egg, "w", compat.ZIP_DEFLATED) try: ipkg.update_paths({ "prefix": source_root.abspath(), "eprefix": source_root.abspath(), "sitedir": source_root.abspath() }) for filename, cnt in egg_info.iter_meta(ctx.build_node): zid.writestr(os.path.join("EGG-INFO", filename), cnt) file_sections = ipkg.resolve_paths(source_root) for kind, source, target in iter_files(file_sections): if not kind in ["executables"]: zid.write(source.abspath(), target.path_from(source_root)) pprint("PINK", "Byte-compiling ...") for kind, source, target in iter_files(file_sections): if kind in ["pythonfiles"]: try: bytecode = bcompile(source.abspath()) except PyCompileError: e = extract_exception() warnings.warn("Error byte-compiling %r" % source.abspath()) else: zid.writestr("%sc" % target.path_from(source_root), bcompile(source.abspath())) finally: zid.close() return
def test_simple(self): ipkg = InstalledPkgDescription(self.sections, self.meta, {}) sections = ipkg.resolve_paths() res = sorted([(kind, source, target) for kind, source, target in iter_files(sections)]) target_dir = ipkg.resolve_path(os.path.join("$prefix", "target")) ref = [("pythonfiles", os.path.join("source", "scripts", "bar.py"), os.path.join(target_dir, "scripts", "bar.py")), ("pythonfiles", os.path.join("source", "scripts", "foo.py"), os.path.join(target_dir, "scripts", "foo.py"))] self.assertEqual(res, ref)
def build_egg(ipkg, ctx, source_root, output_dir=None, output_file=None): meta = PackageMetadata.from_ipkg(ipkg) egg_info = EggInfo.from_ipkg(ipkg, ctx.build_node) # FIXME: fix egg name if output_dir is None: if output_file is None: egg = egg_filename(os.path.join("dist", meta.fullname)) else: egg = os.path.join("dist", output_file) else: if output_file is None: egg = egg_filename(os.path.join(output_dir, meta.fullname)) else: egg = os.path.join(output_dir, output_file) bento.utils.path.ensure_dir(egg) zid = compat.ZipFile(egg, "w", compat.ZIP_DEFLATED) try: ipkg.update_paths({"prefix": source_root.abspath(), "eprefix": source_root.abspath(), "sitedir": source_root.abspath()}) for filename, cnt in egg_info.iter_meta(ctx.build_node): zid.writestr(os.path.join("EGG-INFO", filename), cnt) file_sections = ipkg.resolve_paths(source_root) for kind, source, target in iter_files(file_sections): if not kind in ["executables"]: zid.write(source.abspath(), target.path_from(source_root)) pprint("PINK", "Byte-compiling ...") for kind, source, target in iter_files(file_sections): if kind in ["pythonfiles"]: try: bytecode = bcompile(source.abspath()) except PyCompileError: e = extract_exception() warnings.warn("Error byte-compiling %r" % source.abspath()) else: zid.writestr("%sc" % target.path_from(source_root), bcompile(source.abspath())) finally: zid.close() return
def test_simple(self): build_manifest = BuildManifest(self.sections, self.meta, {}) sections = build_manifest.resolve_paths(self.top_node) res = sorted([(kind, source.abspath(), target.abspath()) \ for kind, source, target in iter_files(sections)]) target_dir = build_manifest.resolve_path(os.path.join("$prefix", "target")) ref = [("pythonfiles", os.path.join(self.top_node.abspath(), "source", "scripts", "bar.py"), os.path.join(target_dir, "scripts", "bar.py")), ("pythonfiles", os.path.join(self.top_node.abspath(), "source", "scripts", "foo.py"), os.path.join(target_dir, "scripts", "foo.py"))] self.assertEqual(res, ref)
def test_simple(self): build_manifest = BuildManifest(self.sections, self.meta, {}) sections = build_manifest.resolve_paths(self.top_node) res = sorted([(kind, source.abspath(), target.abspath()) \ for kind, source, target in iter_files(sections)]) target_dir = build_manifest.resolve_path(os.path.join("$prefix", "target")) ref = [("pythonfiles", os.path.join(self.top_node.abspath(), "source", "scripts", "bar.py"), os.path.join(target_dir, "scripts", "bar.py")), ("pythonfiles", os.path.join(self.top_node.abspath(), "source", "scripts", "foo.py"), os.path.join(target_dir, "scripts", "foo.py"))] self.assertEqual(res, ref)
def build_egg(ipkg, ctx, source_root, path=None): meta = PackageMetadata.from_ipkg(ipkg) egg_info = EggInfo.from_ipkg(ipkg) # FIXME: fix egg name if path is None: egg = egg_filename(os.path.join("dist", meta.fullname)) else: egg = egg_filename(os.path.join(path, meta.fullname)) ensure_dir(egg) egg_info = EggInfo.from_ipkg(ipkg) zid = compat.ZipFile(egg, "w", compat.ZIP_DEFLATED) try: ipkg.update_paths({"prefix": ".", "eprefix": ".", "sitedir": "."}) for filename, cnt in egg_info.iter_meta(ctx.build_node): zid.writestr(os.path.join("EGG-INFO", filename), cnt) file_sections = ipkg.resolve_paths(source_root) for kind, source, target in iter_files(file_sections): if not kind in ["executables"]: zid.write(source, target) pprint("PINK", "Byte-compiling ...") for kind, source, target in iter_files(file_sections): if kind in ["pythonfiles"]: try: bytecode = bcompile(source) except PyCompileError, e: warnings.warn("Error byte-compiling %r" % source) else: zid.writestr("%sc" % target, bcompile(source)) finally: zid.close() return
def create_wininst(ipkg, src_root_node, build_node, egg_info=None, wininst=None, output_dir=None): meta = PackageMetadata.from_ipkg(ipkg) if egg_info is None: egg_info = EggInfo.from_ipkg(ipkg, build_node) # XXX: do this correctly, maybe use same as distutils ? if wininst is None: wininst = os.path.join(output_dir, wininst_filename(meta)) else: wininst = os.path.join(output_dir, wininst) bento.utils.path.ensure_dir(wininst) egg_info_dir = os.path.join("PURELIB", egg_info_dirname(meta.fullname)) fid, arcname = tempfile.mkstemp(prefix="zip") zid = compat.ZipFile(arcname, "w", compat.ZIP_DEFLATED) try: for filename, cnt in egg_info.iter_meta(build_node): zid.writestr(os.path.join(egg_info_dir, filename), cnt) wininst_paths = compat.defaultdict(lambda: r"DATA\share\$pkgname") wininst_paths.update({ "bindir": "SCRIPTS", "sitedir": "PURELIB", "gendatadir": "$sitedir" }) d = {} for k in ipkg._path_variables: d[k] = wininst_paths[k] ipkg.update_paths(d) file_sections = ipkg.resolve_paths(src_root_node) def write_content(source, target, kind): zid.write(source.abspath(), target.abspath()) for kind, source, target in iter_files(file_sections): write_content(source, target, kind) finally: zid.close() os.close(fid) create_exe(ipkg, arcname, wininst)
def run(self, ctx): opts = ctx.cmd_opts o, a = self.parser.parse_args(opts) if o.help: self.parser.print_help() return if not os.path.exists(IPKG_PATH): msg = "%s file not found ! (Did you run build ?)" % IPKG_PATH raise UsageException(msg) ipkg = InstalledPkgDescription.from_file(IPKG_PATH) file_sections = ipkg.resolve_paths() for kind, source, target in iter_files(file_sections): copy_installer(source, target, kind)
def write_record(self): dist = self.distribution install = InstallCommand() options_context = OptionsContext.from_command(install) context = CmdContext([], options_context, dist.pkg, dist.run_node) if self.record: n = context.build_node.make_node(IPKG_PATH) ipkg = InstalledPkgDescription.from_file(n.abspath()) scheme = context.get_paths_scheme() ipkg.update_paths(scheme) file_sections = ipkg.resolve_paths(src_root_dir=context.build_node.abspath()) fid = open(self.record, "w") try: for kind, source, target in iter_files(file_sections): fid.write("%s\n" % target) finally: fid.close()
def build_pkg_from_temp(ctx, ipkg, pkg_root, root_node, install_root, categories, description=None): d = tempfile.mkdtemp() try: tmp_root = root_node.make_node(d) prefix_node = tmp_root.make_node(root_node.make_node(sys.exec_prefix).path_from(root_node)) prefix = eprefix = prefix_node.abspath() ipkg.update_paths({"prefix": prefix, "eprefix": eprefix}) file_sections = ipkg.resolve_paths(ctx.build_node.abspath()) for kind, source, target in iter_files(file_sections): if kind in categories: if not os.path.exists(os.path.dirname(target)): os.makedirs(os.path.dirname(target)) shutil.copy(source, target) pkg_name = os.path.splitext(os.path.basename(pkg_root))[0] pkg_info = PackageInfo(pkg_name=pkg_name, prefix=install_root, source_root=d, pkg_root=pkg_root, description=description) build_pkg(pkg_info) finally: shutil.rmtree(d)
def create_wininst(ipkg, src_root_node, build_node, egg_info=None, wininst=None, output_dir=None): meta = PackageMetadata.from_ipkg(ipkg) if egg_info is None: egg_info = EggInfo.from_ipkg(ipkg, build_node) # XXX: do this correctly, maybe use same as distutils ? if wininst is None: wininst = os.path.join(output_dir, wininst_filename(meta)) else: wininst = os.path.join(output_dir, wininst) bento.utils.path.ensure_dir(wininst) egg_info_dir = os.path.join("PURELIB", egg_info_dirname(meta.fullname)) fid, arcname = tempfile.mkstemp(prefix="zip") zid = compat.ZipFile(arcname, "w", compat.ZIP_DEFLATED) try: for filename, cnt in egg_info.iter_meta(build_node): zid.writestr(os.path.join(egg_info_dir, filename), cnt) wininst_paths = compat.defaultdict(lambda: r"DATA\share\$pkgname") wininst_paths.update({"bindir": "SCRIPTS", "sitedir": "PURELIB", "gendatadir": "$sitedir"}) d = {} for k in ipkg._path_variables: d[k] = wininst_paths[k] ipkg.update_paths(d) file_sections = ipkg.resolve_paths(src_root_node) def write_content(source, target, kind): zid.write(source.abspath(), target.abspath()) for kind, source, target in iter_files(file_sections): write_content(source, target, kind) finally: zid.close() os.close(fid) create_exe(ipkg, arcname, wininst)
def writer(fid): for kind, source, target in iter_files(file_sections): fid.write("%s\n" % target.abspath())
def writer(fid): for kind, source, target in iter_files(file_sections): fid.write("%s\n" % target.abspath())
def run(self, ctx): argv = ctx.command_argv p = ctx.options_context.parser o, a = p.parse_args(argv) if o.help: p.print_help() return root = ctx.top_node while root.height() > 0: root = root.parent default_scheme = get_default_scheme(ctx.pkg.name) default_prefix = default_scheme["prefix"] default_sitedir = default_scheme["sitedir"] n = ctx.build_node.make_node(BUILD_MANIFEST_PATH) build_manifest = BuildManifest.from_file(n.abspath()) name = build_manifest.meta["name"] version = build_manifest.meta["version"] py_short = ".".join([str(i) for i in sys.version_info[:2]]) if o.output_file is None: mpkg_name = "%s-%s-py%s.mpkg" % (name, version, py_short) else: mpkg_name = o.output_file categories = set() file_sections = build_manifest.resolve_paths(ctx.build_node) for kind, source, target in iter_files(file_sections): categories.add(kind) # Mpkg metadata mpkg_root = os.path.join(os.getcwd(), o.output_dir, mpkg_name) mpkg_cdir = os.path.join(mpkg_root, "Contents") if os.path.exists(mpkg_root): shutil.rmtree(mpkg_root) os.makedirs(mpkg_cdir) f = open(os.path.join(mpkg_cdir, "PkgInfo"), "w") try: f.write("pmkrpkg1") finally: f.close() mpkg_info = MetaPackageInfo.from_build_manifest(build_manifest) purelib_pkg = "%s-purelib-%s-py%s.pkg" % (name, version, py_short) scripts_pkg = "%s-scripts-%s-py%s.pkg" % (name, version, py_short) datafiles_pkg = "%s-datafiles-%s-py%s.pkg" % (name, version, py_short) mpkg_info.packages = [purelib_pkg, scripts_pkg, datafiles_pkg] make_mpkg_plist(mpkg_info, os.path.join(mpkg_cdir, "Info.plist")) mpkg_rdir = os.path.join(mpkg_root, "Contents", "Resources") os.makedirs(mpkg_rdir) make_mpkg_description(mpkg_info, os.path.join(mpkg_rdir, "Description.plist")) # Package the stuff which ends up into site-packages pkg_root = os.path.join(mpkg_root, "Contents", "Packages", purelib_pkg) build_pkg_from_temp(ctx, build_manifest, pkg_root, root, "/", ["pythonfiles"], "Pure Python modules and packages") pkg_root = os.path.join(mpkg_root, "Contents", "Packages", scripts_pkg) build_pkg_from_temp(ctx, build_manifest, pkg_root, root, "/", ["executables"], "Scripts and binaries") pkg_root = os.path.join(mpkg_root, "Contents", "Packages", datafiles_pkg) build_pkg_from_temp(ctx, build_manifest, pkg_root, root, "/", ["bentofiles", "datafiles"], "Data files")