示例#1
0
    def test_node_filter_dirname(self):

        with Tempdir() as tmp_install_dir:
            with Tempdir() as tmp_dir:

                build_dir = os.path.join(tmp_dir, 'output')

                num_sources = 3
                sources = self.generate_source_files(tmp_dir, num_sources, 200)

                # set_event_settings( EventSettings( brief = False,
                #                                    with_output = True ) )

                cfg = ProjectConfig(args=["build_dir=%s" % build_dir])
                cfg.debug_backtrace = True

                prj = Project(cfg)

                node = prj.tools.CopyFiles(sources[0], target=tmp_install_dir)

                prj.tools.CopyFiles(sources[1:], target=prj.node_dirname(node))

                self.build_prj(prj, 3)

                for src in sources:
                    tgt = os.path.join(tmp_install_dir, os.path.basename(src))
                    self.assertTrue(os.path.isfile(tgt))

                node = prj.tools.CopyFiles(sources[0], target=tmp_install_dir)
                prj.tools.CopyFiles(sources[1:], target=prj.node_dirname(node))

                self.build_prj(prj, 0)
示例#2
0
    def test_node_filter_dirname(self):

        with Tempdir() as tmp_install_dir:
            with Tempdir() as tmp_dir:

                build_dir = os.path.join(tmp_dir, 'output')

                num_sources = 3
                sources = self.generate_source_files(tmp_dir, num_sources, 200)

                # set_event_settings( EventSettings( brief = False,
                #                                    with_output = True ) )

                cfg = ProjectConfig(args=["build_dir=%s" % build_dir])
                cfg.debug_backtrace = True

                prj = Project(cfg)

                node = prj.tools.CopyFiles(sources[0], target=tmp_install_dir)

                prj.tools.CopyFiles(sources[1:], target=prj.node_dirname(node))

                self.build_prj(prj, 3)

                for src in sources:
                    tgt = os.path.join(tmp_install_dir, os.path.basename(src))
                    self.assertTrue(os.path.isfile(tgt))

                node = prj.tools.CopyFiles(sources[0], target=tmp_install_dir)
                prj.tools.CopyFiles(sources[1:], target=prj.node_dirname(node))

                self.build_prj(prj, 0)
示例#3
0
    def test_prj_list_options(self):

        with Tempdir() as tmp_dir:

            cfg = ProjectConfig(args=["build_dir=%s" % tmp_dir, "test", "run"])

            prj = Project(cfg)
            self.assertTrue(prj.list_options())
            self.assertTrue(prj.list_options(brief=True))
            self.assertFalse(prj.list_tools_options('c++'))
示例#4
0
    def test_prj_implicit_value_args(self):

        with Tempdir() as tmp_dir:

            cfg = ProjectConfig(args=["build_dir=%s" % tmp_dir])

            prj = Project(cfg)

            tool = prj.tools.add_tool(_NullTool)

            tool.noop(v1="a", v2="b", v3="c")
            prj.build()

            self.assertEqual(self.built_nodes, 1)

            # -----------------------------------------------------------

            self.built_nodes = 0

            tool.noop(v1="aa", v2="bb", v3="cc")
            prj.build()
            self.assertEqual(self.built_nodes, 0)

            # -----------------------------------------------------------

            self.built_nodes = 0

            v1 = SimpleEntity("a", name="value1")

            tool.noop(v1=v1, v2="b", v3="c")
            prj.build()
            self.assertEqual(self.built_nodes, 1)

            # -----------------------------------------------------------

            self.built_nodes = 0

            v1 = SimpleEntity("ab", name="value1")

            tool.noop(v1=v1, v2="b", v3="c")
            prj.build()
            self.assertEqual(self.built_nodes, 1)

            # -----------------------------------------------------------

            self.built_nodes = 0

            v1 = SimpleEntity("ab", name="value1")

            tool.noop(v1=v1, v2="b", v3="c")
            prj.build()
            self.assertEqual(self.built_nodes, 0)
示例#5
0
    def test_zip_files(self):

        with Tempdir() as tmp_install_dir:
            with Tempdir() as tmp_dir:
                # tmp_install_dir = Tempdir()
                # tmp_dir = Tempdir()

                sub_dir1 = Tempdir(root_dir=tmp_dir)
                sub_dir2 = Tempdir(root_dir=tmp_dir)

                build_dir = os.path.join(tmp_dir, 'output')

                num_sources = 3
                sources = []
                sources += self.generate_source_files(sub_dir1, num_sources, 2)
                sources += self.generate_source_files(sub_dir2, num_sources, 2)

                zip_file = tmp_install_dir + "/test.zip"

                cfg = ProjectConfig(args=["--bt", "build_dir=%s" % build_dir])

                prj = Project(cfg)

                value = prj.make_entity(name="test_content.txt",
                                        data="To add to a ZIP file")
                rename = [('test_file', sources[0])]

                prj.tools.CreateZip(sources,
                                    value,
                                    target=zip_file,
                                    basedir=tmp_dir,
                                    rename=rename)

                self.build_prj(prj, 1)

                prj.tools.CreateZip(sources,
                                    value,
                                    target=zip_file,
                                    basedir=tmp_dir,
                                    rename=rename)

                self.build_prj(prj, 0)

                self.regenerate_file(sources[-1], 200)

                prj.tools.CreateZip(sources,
                                    value,
                                    target=zip_file,
                                    basedir=tmp_dir,
                                    rename=rename)
                self.build_prj(prj, 1)
示例#6
0
    def test_copy_files(self):

        with Tempdir() as tmp_install_dir:
            with Tempdir() as tmp_dir:
                # tmp_install_dir = Tempdir()
                # tmp_dir = Tempdir()

                sub_dir1 = Tempdir(root_dir=tmp_dir)
                sub_dir2 = Tempdir(root_dir=tmp_dir)

                num_sources = 3
                sources = []
                sources += self.generate_source_files(sub_dir1, num_sources, 2)
                sources += self.generate_source_files(sub_dir2, num_sources, 2)
                sources += self.generate_source_files(tmp_dir, num_sources, 2)

                build_dir = os.path.join(tmp_dir, 'output')

                cfg = ProjectConfig(args=["build_dir=%s" % build_dir])

                prj = Project(cfg)

                node = prj.tools.CopyFiles(sources,
                                           target=tmp_install_dir,
                                           basedir=tmp_dir)

                node.options.batch_groups = 1

                self.build_prj(prj, 1)

                found_dirs = set()
                files = find_files(tmp_install_dir, found_dirs=found_dirs)
                filenames = set(os.path.basename(path) for path in files)
                srcnames = set(os.path.basename(path) for path in sources)
                self.assertSetEqual(filenames, srcnames)

                found_dir_names = set(
                    os.path.basename(path) for path in found_dirs)

                sub_dir_names = set(
                    os.path.basename(path) for path in [sub_dir1, sub_dir2])

                self.assertSetEqual(found_dir_names, sub_dir_names)

                prj.tools.CopyFiles(sources,
                                    target=tmp_install_dir,
                                    basedir=tmp_dir)

                self.build_prj(prj, 0)
示例#7
0
    def test_prj_config(self):

        with Tempfile() as f:
            cfg = b"""
abc = 123
size = 100
options.build_variant = "final"
"""
            f.write(cfg)
            f.flush()

            args = ["-v", "-j", "5", "-c", f]
            cfg = ProjectConfig(args)

            self.assertEqual(cfg.options.bv, 'final')
            self.assertEqual(cfg.jobs, 5)
            self.assertTrue(cfg.verbose)
示例#8
0
    def test_prj_expensive(self):
        with Tempdir() as tmp_dir:
            cfg = ProjectConfig(args=["build_dir=%s" % tmp_dir])

            prj = Project(cfg)

            cmd_heavy = prj.tools.ExecuteCommand(
                sys.executable, "-c", "print('test expensive')")

            prj.tools.ExecuteCommand(sys.executable, "-c",
                                     "print('test light')")

            prj.expensive(cmd_heavy)

            prj.build()

            self.assertEqual(self.built_nodes, 2)
示例#9
0
    def test_prj_default_targets(self):

        with Tempdir() as tmp_dir:

            cfg = ProjectConfig(args=["build_dir=%s" % tmp_dir])

            prj = Project(cfg)

            prj.tools.ExecuteCommand(
                sys.executable, "-c", "print('test builtin')")
            cmd_other = prj.tools.ExecuteCommand(
                sys.executable, "-c", "print('test other')")
            cmd_other2 = prj.tools.ExecuteCommand(
                sys.executable, "-c", "print('test other2')")

            prj.default_build([cmd_other, cmd_other2])
            prj.build()

            self.assertEqual(self.built_nodes, 2)
示例#10
0
    def test_find_files(self):

        with Tempdir() as tmp_dir:
            # tmp_dir = Tempdir()
            # print("tmp_dir: %s" % tmp_dir)

            build_dir = os.path.join(tmp_dir, 'output')

            num_sources = 3
            sources = self.generate_source_files(tmp_dir, num_sources, 20)

            cfg = ProjectConfig(args=["build_dir=%s" % build_dir])

            prj = Project(cfg)

            prj.tools.FindFiles(tmp_dir)
            prj.tools.FindFiles(tmp_dir, mask="*.tmp")

            self.build_prj(prj, 2)

            prj.tools.FindFiles(tmp_dir)
            prj.tools.FindFiles(tmp_dir, mask="*.tmp")

            self.build_prj(prj, 0)

            prj.tools.FindFiles(tmp_dir, exclude_mask=".*db*")
            self.build_prj(prj, 1)

            prj.tools.FindFiles(tmp_dir, exclude_mask=".*db*")
            self.build_prj(prj, 0)

            sources += self.generate_source_files(tmp_dir, 1, 20)

            prj.tools.FindFiles(tmp_dir, exclude_mask=".*db*")
            prj.tools.FindFiles(tmp_dir, mask="*.tmp")
            self.build_prj(prj, 2)

            prj.tools.FindFiles(tmp_dir, exclude_mask=".db*")
            prj.tools.FindFiles(tmp_dir, mask="*.tmp")

            self.clear_prj(prj)

            self.assertTrue(all(os.path.isfile(source) for source in sources))
示例#11
0
    def test_prj_targets(self):

        with Tempdir() as tmp_dir:

            cfg = ProjectConfig(args=["build_dir=%s" % tmp_dir, "test", "run"])

            prj = Project(cfg)

            cmd = prj.tools.ExecuteCommand(
                sys.executable, "-c", "print('test builtin')")

            prj.tools.ExecuteCommand(sys.executable, "-c",
                                     "print('test other')")

            self.assertSequenceEqual(prj.get_build_targets(), ['test', 'run'])

            prj.alias_nodes(prj.get_build_targets(), cmd)
            prj.build()

            self.assertEqual(self.built_nodes, 1)
示例#12
0
    def test_prj_builtin_tools(self):

        with Tempdir() as tmp_dir:

            cfg = ProjectConfig(args=["build_dir=%s" % tmp_dir])

            prj = Project(cfg)

            cmd = sys.executable, "-c", "print('test builtin')"

            prj.tools.ExecuteCommand(cmd)
            prj.build()

            self.assertEqual(self.building_started, 1)
            self.assertEqual(self.built_nodes, 1)

            self.building_started = 0

            prj = Project(cfg)
            prj.tools.ExecuteCommand(cmd)
            prj.build()

            self.assertEqual(self.building_started, 0)
示例#13
0
    def test_write_file(self):

        with Tempdir() as tmp_install_dir:
            with Tempdir() as tmp_dir:
                # tmp_install_dir = Tempdir()
                # tmp_dir = Tempdir()

                build_dir = os.path.join(tmp_dir, 'output')

                cfg = ProjectConfig(args=["build_dir=%s" % build_dir])

                prj = Project(cfg)

                buf = "Test buffer content"

                target = os.path.join(tmp_install_dir, 'write_content.txt')
                prj.tools.WriteFile(buf, target=target)

                self.build_prj(prj, 1)

                prj.tools.WriteFile(buf, target=target)

                self.build_prj(prj, 0)
示例#14
0
    def test_copy_file_as(self):

        with Tempdir() as tmp_install_dir:
            with Tempdir() as tmp_dir:
                # tmp_install_dir = Tempdir()
                # tmp_dir = Tempdir()

                build_dir = os.path.join(tmp_dir, 'output')

                source = self.generate_file(tmp_dir, 200)
                target = os.path.join(tmp_install_dir, 'copy_as_source.dat')

                cfg = ProjectConfig(args=["build_dir=%s" % build_dir])

                prj = Project(cfg)

                prj.tools.CopyFileAs(source, target=target)

                self.build_prj(prj, 1)

                prj.tools.CopyFileAs(source, target=target)

                self.build_prj(prj, 0)
示例#15
0
    def test_exec_method(self):
        def copy_file_ext(builder, source_entities, targets, ext):
            src_file = source_entities[0].get()
            dst_file = os.path.splitext(src_file)[0] + ext
            shutil.copy(src_file, dst_file)
            targets.add_targets(dst_file)

        with Tempdir() as tmp_dir:

            set_event_settings(
                EventSettings(brief=True, with_output=True, trace_exec=False))

            build_dir = os.path.join(tmp_dir, 'build_output')

            num_sources = 2
            sources = self.generate_source_files(tmp_dir,
                                                 num_sources,
                                                 size=200,
                                                 suffix='.cpp')

            headers = self.generate_source_files(tmp_dir,
                                                 num_sources,
                                                 size=200,
                                                 suffix='.hpp')

            cfg = ProjectConfig(args=["build_dir=%s" % build_dir])

            prj = Project(cfg)

            prj.tools.ExecuteMethod(sources,
                                    method=copy_file_ext,
                                    args=('.cxx', ))
            prj.tools.ExecuteMethod(headers,
                                    method=copy_file_ext,
                                    args=('.hxx', ))

            self.build_prj(prj, len(sources) + len(headers))

            prj.tools.ExecuteMethod(sources,
                                    method=copy_file_ext,
                                    args=('.cxx', ))
            prj.tools.ExecuteMethod(headers,
                                    method=copy_file_ext,
                                    args=('.hxx', ))

            self.build_prj(prj, 0)

            prj.tools.ExecuteMethod(sources,
                                    method=copy_file_ext,
                                    args=('.cc', ))

            self.build_prj(prj, len(sources))

            prj.tools.ExecuteMethod(sources,
                                    method=copy_file_ext,
                                    args=('.cxx', ))
            self.build_prj(prj, len(sources))

            # -----------------------------------------------------------

            for src in sources:
                self.assertTrue(
                    os.path.isfile(os.path.splitext(src)[0] + '.cxx'))

            prj.tools.ExecuteMethod(sources,
                                    method=copy_file_ext,
                                    args=('.cxx', ))
            self.clear_prj(prj)

            for src in sources:
                self.assertFalse(
                    os.path.isfile(os.path.splitext(src)[0] + '.cxx'))

            # -----------------------------------------------------------

            prj.tools.ExecuteMethod(sources,
                                    method=copy_file_ext,
                                    args=('.cxx', ))
            self.build_prj(prj, len(sources))

            for src in sources:
                self.assertTrue(
                    os.path.isfile(os.path.splitext(src)[0] + '.cxx'))

            prj.tools.ExecuteMethod(sources,
                                    method=copy_file_ext,
                                    args=('.cxx', ),
                                    clear_targets=False)
            self.clear_prj(prj)

            for src in sources:
                self.assertTrue(
                    os.path.isfile(os.path.splitext(src)[0] + '.cxx'))