Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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++'))
Ejemplo n.º 4
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)
Ejemplo n.º 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)
Ejemplo n.º 6
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(
                "python", "-c", "print('test builtin')")
            cmd_other = prj.tools.ExecuteCommand(
                "python", "-c", "print('test other')")
            cmd_other2 = prj.tools.ExecuteCommand(
                "python", "-c", "print('test other2')")

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

            self.assertEqual(self.built_nodes, 2)
Ejemplo n.º 7
0
    def test_gcc_compiler_target_errors(self):

        with Tempdir() as tmp_dir:

            build_dir = os.path.join(tmp_dir, 'build')
            src_dir = os.path.join(tmp_dir, 'src')
            os.makedirs(src_dir)

            num_src_files = 2

            src_files, hdr_files = self.generate_cpp_files(
                src_dir, 'foo', num_src_files)

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

            prj = Project(cfg)
            tools_path = os.path.join(os.path.dirname(__file__), '../../tools')
            gcc = prj.tools.try_tool('g++', tools_path=tools_path)
            if gcc is None:
                print("WARNING: GCC tool has not been found. Skip the test.")
                return

            gcc.Compile(src_files, target='src_file0', batch_build=False)

            try:
                prj.build()
                raise AssertionError("No Exception")
            except Exception as ex:
                self.assertEqual(ex.__class__.__name__,
                                 'ErrorCompileWithCustomTarget')

            gcc.Compile(src_files, target='src_file0', batch_build=True)

            try:
                prj.build()
                raise AssertionError("No Exception")
            except Exception as ex:
                self.assertEqual(ex.__class__.__name__,
                                 'ErrorBatchCompileWithCustomTarget')
Ejemplo n.º 8
0
    def test_zip_files(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')

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

                zip_file = tmp_install_dir + "/test.zip"

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

                prj = Project(cfg)

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

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

                self.build_prj(prj, 1)

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

                self.build_prj(prj, 0)

                self.touch_cpp_file(sources[-1])

                prj.tools.CreateZip(
                    sources, value, target=zip_file, rename=rename)
                self.build_prj(prj, 1)
Ejemplo n.º 9
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)
Ejemplo n.º 10
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)
Ejemplo n.º 11
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))
Ejemplo n.º 12
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(
                "python", "-c", "print('test builtin')")

            prj.tools.ExecuteCommand("python", "-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)
Ejemplo n.º 13
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)
Ejemplo n.º 14
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)
Ejemplo n.º 15
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)
Ejemplo n.º 16
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)
Ejemplo n.º 17
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)
Ejemplo n.º 18
0
    def test_prj_builtin_tools(self):

        with Tempdir() as tmp_dir:

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

            prj = Project(cfg)

            prj.tools.ExecuteCommand("python", "-c", "print('test builtin')")
            prj.build()

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

            self.building_started = 0

            prj = Project(cfg)
            prj.tools.ExecuteCommand("python", "-c", "print('test builtin')")
            prj.build()

            self.assertEqual(self.building_started, 0)
Ejemplo n.º 19
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(TestTool)

            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)
Ejemplo n.º 20
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)
Ejemplo n.º 21
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'))