def _run_configure(self, bentos, bscripts=None, configure_argv=None, build_argv=None): from bento.backends.waf_backend import make_stream_logger from bento.backends.waf_backend import WafBackend top_node = self.top_node bento_info = bentos["bento.info"] package = PackageDescription.from_string(bento_info) package_options = PackageOptions.from_string(bento_info) create_fake_package_from_bento_info(top_node, bento_info) top_node.make_node("bento.info").safe_write(bento_info) global_context = create_global_context(package, package_options, WafBackend()) conf, configure = prepare_command(global_context, "configure", configure_argv, package, top_node) run_command_in_context(conf, configure) bld, build = prepare_command(global_context, "build", build_argv, package, top_node) bld.waf_context.logger = make_stream_logger("build", cStringIO()) return conf, configure, bld, build
def test_iter_source_nodes(self): r_files = set([op.join("src", "foo.c"), op.join("src", "bar.c"), op.join("src", "fubar.c"), op.join("foo", "__init__.py"), op.join("foo", "bar", "__init__.py"), "fu.py", "foo.1"]) bento_info = """\ Name: foo DataFiles: foo TargetDir: $sharedir Files: foo.1 Library: Extension: _foo Sources: src/foo.c, src/bar.c CompiledLibrary: fubar Sources: src/fubar.c Packages: foo, foo.bar Modules: fu """ create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) node_package = NodeRepresentation(self.top_node, self.top_node) node_package.update_package(package) files = set(n.path_from(self.top_node) for n in node_package.iter_source_nodes()) self.assertEqual(files, r_files)
def test_simple_package(self): bento_info = """\ Name: foo Version: 1.0 ExtraSourceFiles: yeah.info Library: Packages: foo, foo.bar Modules: fubar """ archive_list = [ op.join("foo-1.0", f) for f in [ "yeah.info", "PKG_INFO", op.join("foo", "__init__.py"), op.join("foo", "bar", "__init__.py"), "fubar.py" ] ] create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) run_command_in_context(context, sdist) self._assert_archive_equality(op.join("dist", "foo.zip"), archive_list)
def test_extra_source_registration(self): bento_info = """\ Name: foo Version: 1.0 Library: Modules: fubar """ archive_list = [ op.join("foo-1.0", f) for f in ["fubar.py", "yeah.info", "PKG_INFO"] ] extra_node = self.top_node.make_node("yeah.info") extra_node.write("") create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) context.register_source_node(self.top_node.find_node("yeah.info")) run_command_in_context(context, sdist) self._assert_archive_equality(op.join("dist", "foo.zip"), archive_list)
def test_compiled_library(self): from bento.backends.distutils_backend import DistutilsBuildContext r_full_name = "lib/_foo" bento_info = """\ Name: foo Library: CompiledLibrary: lib/_foo Sources: foo.c """ package = PackageDescription.from_string(bento_info) create_fake_package_from_bento_info(self.top_node, bento_info) options = OptionsContext.from_command(BuildCommand()) context = DistutilsBuildContext(None, [], options, package, self.run_node) context.pre_recurse(self.top_node) try: def builder(a): self.assertEqual(a.name, r_full_name) builder.is_called = True builder.is_called = False context.register_compiled_library_builder("lib/_foo", builder) finally: context.post_recurse() context.compile() self.assertTrue(builder.is_called, "registered builder not called")
def test_simple_package(self): bento_info = """\ Name: foo Version: 1.0 ExtraSourceFiles: yeah.info Library: Packages: foo, foo.bar Modules: fubar """ archive_list = [op.join("foo-1.0", f) for f in ["yeah.info", op.join("foo", "__init__.py"), op.join("foo", "bar", "__init__.py"), "fubar.py"]] create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) sdist.run(context) sdist.shutdown(context) context.shutdown() archive = self.run_node.find_node(op.join("dist", "foo.zip")) z = zipfile.ZipFile(archive.abspath(), "r") for f in archive_list: if not f in z.namelist(): self.failUnless(op.join("foo-1.0", f) in files)
def test_template_filling(self): bento_info = """\ Name: foo Version: 1.0 MetaTemplateFile: release.py.in Library: Modules: fubar """ archive_list = [op.join("foo-1.0", f) for f in ["fubar.py", "release.py.in", "release.py"]] template = self.top_node.make_node("release.py.in") template.write("""\ NAME = $NAME VERSION = $VERSION """) create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) sdist.run(context) sdist.shutdown(context) context.shutdown() archive = self.run_node.find_node(op.join("dist", "foo.zip")) z = zipfile.ZipFile(archive.abspath(), "r") for f in archive_list: if not f in z.namelist(): self.fail("File %s not found in archive" % (f,))
def _run_configure_and_build(self, bento_info, install_prefix): top_node = self.top_node create_fake_package_from_bento_info(top_node, bento_info) context = GlobalContext(None) options = PackageOptions.from_string(bento_info) context.register_package_options(options) cmd_argv = [ "--prefix=%s" % install_prefix, "--exec-prefix=%s" % install_prefix ] conf, configure = prepare_configure(top_node, bento_info, ConfigureYakuContext, cmd_argv) context.register_command("configure", configure) options_context = OptionsContext.from_command(configure) if not context.is_options_context_registered("configure"): context.register_options_context("configure", options_context) context.save_command_argv("configure", cmd_argv) run_command_in_context(conf, configure) bld, build = prepare_build(top_node, bento_info) run_command_in_context(bld, build) return context, conf, configure, bld, build
def test_extra_source_registration(self): bento_info = """\ Name: foo Version: 1.0 Library: Modules: fubar """ archive_list = [op.join("foo-1.0", f) for f in ["fubar.py", "yeah.info"]] extra_node = self.top_node.make_node("yeah.info") extra_node.write("") create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) context.register_source_node(self.top_node.find_node("yeah.info")) sdist.run(context) sdist.shutdown(context) context.shutdown() archive = self.run_node.find_node(op.join("dist", "foo.zip")) z = zipfile.ZipFile(archive.abspath(), "r") for f in archive_list: if not f in z.namelist(): self.failUnless(op.join("foo-1.0", f) in files)
def test_template_filling(self): bento_info = """\ Name: foo Version: 1.0 MetaTemplateFile: release.py.in Library: Modules: fubar """ archive_list = [op.join("foo-1.0", f) for f in ["fubar.py", "release.py.in", "release.py"]] template = self.top_node.make_node("release.py.in") template.write("""\ NAME = $NAME VERSION = $VERSION """) create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) run_command_in_context(context, sdist) self._assert_archive_equality(op.join("dist", "foo.zip"), archive_list)
def test_iter_source_nodes(self): r_files = set([ op.join("src", "foo.c"), op.join("src", "bar.c"), op.join("src", "fubar.c"), op.join("foo", "__init__.py"), op.join("foo", "bar", "__init__.py"), "fu.py", "foo.1" ]) bento_info = """\ Name: foo DataFiles: foo TargetDir: $sharedir Files: foo.1 Library: Extension: _foo Sources: src/foo.c, src/bar.c CompiledLibrary: fubar Sources: src/fubar.c Packages: foo, foo.bar Modules: fu """ create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) node_package = NodeRepresentation(self.top_node, self.top_node) node_package.update_package(package) files = set( n.path_from(self.top_node) for n in node_package.iter_source_nodes()) self.assertEqual(files, r_files)
def test_simple_package(self): bento_info = """\ Name: foo Version: 1.0 ExtraSourceFiles: yeah.info Library: Packages: foo, foo.bar Modules: fubar """ archive_list = [op.join("foo-1.0", f) for f in ["yeah.info", op.join("foo", "__init__.py"), op.join("foo", "bar", "__init__.py"), "fubar.py"]] create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) run_command_in_context(context, sdist) self._assert_archive_equality(op.join("dist", "foo.zip"), archive_list)
def test_extra_source_registration(self): bento_info = """\ Name: foo Version: 1.0 Library: Modules: fubar """ archive_list = [op.join("foo-1.0", f) for f in ["fubar.py", "yeah.info"]] extra_node = self.top_node.make_node("yeah.info") extra_node.write("") create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) context.register_source_node(self.top_node.find_node("yeah.info")) run_command_in_context(context, sdist) self._assert_archive_equality(op.join("dist", "foo.zip"), archive_list)
def test_template_filling(self): bento_info = """\ Name: foo Version: 1.0 MetaTemplateFiles: release.py.in Library: Modules: fubar """ archive_list = [ op.join("foo-1.0", f) for f in ["fubar.py", "release.py.in", "release.py", "PKG_INFO"] ] template = self.top_node.make_node("release.py.in") template.write("""\ NAME = $NAME VERSION = $VERSION """) create_fake_package_from_bento_info(self.top_node, bento_info) package = PackageDescription.from_string(bento_info) sdist = SdistCommand() opts = OptionsContext.from_command(sdist) cmd_argv = ["--output-file=foo.zip", "--format=zip"] context = SdistContext(None, cmd_argv, opts, package, self.run_node) run_command_in_context(context, sdist) self._assert_archive_equality(op.join("dist", "foo.zip"), archive_list)
def _run_configure_and_build(self, bento_info, install_prefix): top_node = self.top_node create_fake_package_from_bento_info(top_node, bento_info) context = GlobalContext(None) options = PackageOptions.from_string(bento_info) context.register_package_options(options) cmd_argv = ["--prefix=%s" % install_prefix, "--exec-prefix=%s" % install_prefix] conf, configure = prepare_configure(top_node, bento_info, ConfigureYakuContext, cmd_argv) context.register_command("configure", configure) options_context = OptionsContext.from_command(configure) if not context.is_options_context_registered("configure"): context.register_options_context("configure", options_context) context.save_command_argv("configure", cmd_argv) run_command_in_context(conf, configure) bld, build = prepare_build(top_node, bento_info) run_command_in_context(bld, build) return context, conf, configure, bld, build
def prepare_package(top_node, bento_info, backend=None): package = PackageDescription.from_string(bento_info) package_options = PackageOptions.from_string(bento_info) create_fake_package_from_bento_info(top_node, bento_info) top_node.make_node("bento.info").safe_write(bento_info) return create_global_context(package, package_options, backend)
def test_simple_distutils(self): top_node = self.top_node create_fake_package_from_bento_info(top_node, BENTO_INFO_WITH_EXT) conf, configure = prepare_configure(top_node, BENTO_INFO_WITH_EXT, DistutilsConfigureContext) run_command_in_context(conf, configure) build = BuildCommand() opts = OptionsContext.from_command(build) bld = DistutilsBuildContext(None, [], opts, conf.pkg, top_node) run_command_in_context(bld, build)
def _test_installed_sections(self, bento_info, r_sections): create_fake_package_from_bento_info(self.top_node, bento_info) conf, configure = prepare_configure(self.run_node, bento_info) run_command_in_context(conf, configure) bld, build = prepare_build(self.top_node, bento_info) run_command_in_context(bld, build) sections = bld.section_writer.sections self.assertEqual(comparable_installed_sections(sections), comparable_installed_sections(r_sections))
def test_simple_yaku(self): top_node = self.top_node create_fake_package_from_bento_info(top_node, BENTO_INFO_WITH_EXT) conf, configure = prepare_configure(top_node, BENTO_INFO_WITH_EXT, ConfigureYakuContext) configure.run(conf) conf.shutdown() build = BuildCommand() opts = OptionsContext.from_command(build) bld = BuildYakuContext(None, [], opts, conf.pkg, top_node) build.run(bld)
def test_simple(self): root = self.root top_node = root.find_node(self.d) create_fake_package_from_bento_info(top_node, BENTO_INFO) conf, configure = prepare_configure(top_node, BENTO_INFO, ConfigureYakuContext) configure.run(conf) conf.shutdown() build = BuildCommand() opts = OptionsContext.from_command(build) bld = BuildYakuContext(None, [], opts, conf.pkg, top_node) build.run(bld)
def _run_command(self): setup_node = self.top_node.make_node("setup.py") setup_node.safe_write("") create_fake_package_from_bento_info(self.top_node, "") package = PackageDescription.from_string("") cmd = DetectTypeCommand() opts = OptionsContext.from_command(cmd) context = CmdContext(None, [], opts, package, self.run_node) cmd.run(context) cmd.finish(context) context.finish()
def _run_convert_command(top_node, run_node, setup_py, bento_info, cmd_argv): setup_node = top_node.make_node("setup.py") setup_node.safe_write(setup_py) create_fake_package_from_bento_info(top_node, bento_info) package = PackageDescription.from_string(bento_info) cmd = ConvertCommand() opts = OptionsContext.from_command(cmd) context = CmdContext(None, cmd_argv, opts, package, run_node) cmd.run(context) cmd.finish(context) context.finish()
def _test_installed_sections(self, bento_info, r_sections): create_fake_package_from_bento_info(self.top_node, bento_info) conf, configure = prepare_configure(self.run_node, bento_info) configure.run(conf) conf.shutdown() bld, build = prepare_build(self.top_node, conf.pkg, conf.package_options) build.run(bld) bld.shutdown() sections = bld.section_writer.sections self.assertEqual(comparable_installed_sections(sections), comparable_installed_sections(r_sections))
def _execute_build(self, bento_info): create_fake_package_from_bento_info(self.top_node, bento_info) # FIXME: this should be done automatically in create_fake_package_from_bento_info self.top_node.make_node("bento.info").safe_write(bento_info) package = PackageDescription.from_string(bento_info) package_options = PackageOptions.from_string(bento_info) global_context = create_global_context(package, package_options, YakuBackend()) conf, configure = prepare_command(global_context, "configure", [], package, self.run_node) run_command_in_context(conf, configure) bld, build = prepare_command(global_context, "build", [], package, self.run_node) run_command_in_context(bld, build) return bld
def _run_configure_and_build(self, bento_info, install_prefix): top_node = self.top_node create_fake_package_from_bento_info(top_node, bento_info) cmd_argv = ["--prefix=%s" % install_prefix, "--exec-prefix=%s" % install_prefix] conf, configure = prepare_configure(top_node, bento_info, ConfigureYakuContext, cmd_argv) configure.run(conf) conf.shutdown() bld, build = prepare_build(top_node, conf.pkg, conf.package_options) build.run(bld) build.shutdown(bld) return conf, configure, bld, build
def test_simple_waf(self): from bento.commands.extras.waf import ConfigureWafContext, BuildWafContext, make_stream_logger, register_options top_node = self.top_node create_fake_package_from_bento_info(top_node, BENTO_INFO_WITH_EXT) conf, configure = prepare_configure(top_node, BENTO_INFO_WITH_EXT, ConfigureWafContext) configure.run(conf) conf.shutdown() build = BuildCommand() # opts = OptionsContext.from_command(build) opts = prepare_options("build", build, BuildWafContext) bld = BuildWafContext(None, [], opts, conf.pkg, top_node) bld.waf_context.logger = make_stream_logger("build", cStringIO()) build.run(bld)
def test_simple_waf(self): from bento.backends.waf_backend import make_stream_logger from bento.backends.waf_backend import WafBackend top_node = self.top_node package = PackageDescription.from_string(BENTO_INFO_WITH_EXT) package_options = PackageOptions.from_string(BENTO_INFO_WITH_EXT) create_fake_package_from_bento_info(top_node, BENTO_INFO_WITH_EXT) top_node.make_node("bento.info").safe_write(BENTO_INFO_WITH_EXT) global_context = create_global_context(package, package_options, WafBackend()) conf, configure = prepare_command(global_context, "configure", [], package, top_node) run_command_in_context(conf, configure) bld, build = prepare_command(global_context, "build", [], package, top_node) bld.waf_context.logger = make_stream_logger("build", cStringIO()) run_command_in_context(bld, build)
def test_sources_glob(self): bento_info = """\ Name: foo Library: Extension: _foo Sources: src/foo.c, src/bar.c """ create_fake_package_from_bento_info(self.top_node, bento_info) bento_info = """\ Name: foo Library: Extension: _foo Sources: src/*.c """ pkg = PackageDescription.from_string(bento_info) node_pkg = NodeRepresentation(self.top_node, self.top_node) node_pkg.update_package(pkg) extensions = dict(node_pkg.iter_category("extensions")) self.assertEqual(len(extensions), 1) self.assertEqual(len(extensions["_foo"].nodes), 2)
def _test_run(self, bento_info): top_node = self.top_node create_fake_package_from_bento_info(top_node, bento_info) install_dir = tempfile.mkdtemp() cmd_argv = ["--prefix=%s" % install_dir, "--exec-prefix=%s" % install_dir] conf, configure = prepare_configure(top_node, bento_info, ConfigureYakuContext, cmd_argv) configure.run(conf) conf.shutdown() bld, build = prepare_build(top_node, conf.pkg) build.run(bld) build.shutdown(bld) install = InstallCommand() opts = OptionsContext.from_command(install) inst = CmdContext(None, ["--list-files"], opts, conf.pkg, top_node) try: install.run(inst) finally: shutil.rmtree(install_dir)