Beispiel #1
0
    def test_record_extensions(self):
        cmd = test_support.missing_compiler_executable()
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        install_dir = self.mkdtemp()
        project_dir, dist = self.create_dist(
            ext_modules=[Extension('xx', ['xxmodule.c'])])
        os.chdir(project_dir)
        support.copy_xxmodule_c(project_dir)

        buildextcmd = build_ext(dist)
        support.fixup_build_ext(buildextcmd)
        buildextcmd.ensure_finalized()

        cmd = install(dist)
        dist.command_obj['install'] = cmd
        dist.command_obj['build_ext'] = buildextcmd
        cmd.root = install_dir
        cmd.record = os.path.join(project_dir, 'filelist')
        cmd.ensure_finalized()
        cmd.run()

        f = open(cmd.record)
        try:
            content = f.read()
        finally:
            f.close()

        found = [os.path.basename(line) for line in content.splitlines()]
        expected = [
            _make_ext_name('xx'),
            'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]
        ]
        self.assertEqual(found, expected)
Beispiel #2
0
    def test_record_extensions(self):
        cmd = test_support.missing_compiler_executable()
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        install_dir = self.mkdtemp()
        project_dir, dist = self.create_dist(ext_modules=[
            Extension('xx', ['xxmodule.c'])])
        os.chdir(project_dir)
        support.copy_xxmodule_c(project_dir)

        buildextcmd = build_ext(dist)
        support.fixup_build_ext(buildextcmd)
        buildextcmd.ensure_finalized()

        cmd = install(dist)
        dist.command_obj['install'] = cmd
        dist.command_obj['build_ext'] = buildextcmd
        cmd.root = install_dir
        cmd.record = os.path.join(project_dir, 'filelist')
        cmd.ensure_finalized()
        cmd.run()

        f = open(cmd.record)
        try:
            content = f.read()
        finally:
            f.close()

        found = [os.path.basename(line) for line in content.splitlines()]
        expected = [_make_ext_name('xx'),
                    'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]]
        self.assertEqual(found, expected)
Beispiel #3
0
 def setUp(self):
     self._backup_config_vars = dict(sysconfig._CONFIG_VARS)
     cmd = support.missing_compiler_executable()
     if cmd is not None:
         self.skipTest("The %r command is not found" % cmd)
     self.old_cwd = os.getcwd()
     self.tmp_path = tempfile.mkdtemp(dir=self.tmp_base)
     self.enterContext(os_helper.change_cwd(self.tmp_path))
Beispiel #4
0
    def test_build_ext(self):
        cmd = support.missing_compiler_executable()
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        global ALREADY_TESTED
        copy_xxmodule_c(self.tmp_dir)
        xx_c = os.path.join(self.tmp_dir, 'xxmodule.c')
        xx_ext = Extension('xx', [xx_c])
        dist = Distribution({'name': 'xx', 'ext_modules': [xx_ext]})
        dist.package_dir = self.tmp_dir
        cmd = self.build_ext(dist)
        fixup_build_ext(cmd)
        cmd.build_lib = self.tmp_dir
        cmd.build_temp = self.tmp_dir

        old_stdout = sys.stdout
        if not support.verbose:
            # silence compiler output
            sys.stdout = StringIO()
        try:
            cmd.ensure_finalized()
            cmd.run()
        finally:
            sys.stdout = old_stdout

        if ALREADY_TESTED:
            self.skipTest('Already tested in %s' % ALREADY_TESTED)
        else:
            ALREADY_TESTED = type(self).__name__

        code = textwrap.dedent("""
            tmp_dir = {self.tmp_dir!r}

            import sys
            import unittest
            from test import support

            sys.path.insert(0, tmp_dir)
            import xx

            class Tests(unittest.TestCase):
                def test_xx(self):
                    for attr in ('error', 'foo', 'new', 'roj'):
                        self.assertTrue(hasattr(xx, attr))

                    self.assertEqual(xx.foo(2, 5), 7)
                    self.assertEqual(xx.foo(13,15), 28)
                    self.assertEqual(xx.new().demo(), None)
                    if support.HAVE_DOCSTRINGS:
                        doc = 'This is a template module just for instruction.'
                        self.assertEqual(xx.__doc__, doc)
                    self.assertIsInstance(xx.Null(), xx.Null)
                    self.assertIsInstance(xx.Str(), xx.Str)


            unittest.main()
        """.format(**locals()))
        assert_python_ok('-c', code)
Beispiel #5
0
 def setUp(self):
     cmd = support.missing_compiler_executable()
     if cmd is not None:
         self.skipTest("The %r command is not found" % cmd)
     super(TestCParser, self).setUp()
     self.tmp_path = self.mkdtemp()
     change_cwd = os_helper.change_cwd(self.tmp_path)
     change_cwd.__enter__()
     self.addCleanup(change_cwd.__exit__, None, None, None)
Beispiel #6
0
 def setUp(self):
     self._backup_config_vars = dict(sysconfig._CONFIG_VARS)
     cmd = support.missing_compiler_executable()
     if cmd is not None:
         self.skipTest("The %r command is not found" % cmd)
     self.old_cwd = os.getcwd()
     self.tmp_path = tempfile.mkdtemp()
     change_cwd = os_helper.change_cwd(self.tmp_path)
     change_cwd.__enter__()
     self.addCleanup(change_cwd.__exit__, None, None, None)
Beispiel #7
0
 def test_search_cpp(self):
     cmd = missing_compiler_executable(['preprocessor'])
     if cmd is not None:
         self.skipTest('The %r command is not found' % cmd)
     pkg_dir, dist = self.create_dist()
     cmd = config(dist)
     match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
     self.assertEqual(match, 0)
     match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
     self.assertEqual(match, 1)
Beispiel #8
0
 def test_get_outputs(self):
     cmd = support.missing_compiler_executable()
     if cmd is not None:
         self.skipTest('The %r command is not found' % cmd)
     tmp_dir = self.mkdtemp()
     c_file = os.path.join(tmp_dir, 'foo.c')
     self.write_file(c_file, 'void PyInit_foo(void) {}\n')
     ext = Extension('foo', [c_file], optional=False)
     dist = Distribution({'name': 'xx', 'ext_modules': [ext]})
     cmd = self.build_ext(dist)
     fixup_build_ext(cmd)
     cmd.ensure_finalized()
     self.assertEqual(len(cmd.get_outputs()), 1)
     cmd.build_lib = os.path.join(self.tmp_dir, 'build')
     cmd.build_temp = os.path.join(self.tmp_dir, 'tempt')
     other_tmp_dir = os.path.realpath(self.mkdtemp())
     old_wd = os.getcwd()
     os.chdir(other_tmp_dir)
     try:
         cmd.inplace = 1
         cmd.run()
         so_file = cmd.get_outputs()[0]
     finally:
         os.chdir(old_wd)
     self.assertTrue(os.path.exists(so_file))
     ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
     self.assertTrue(so_file.endswith(ext_suffix))
     so_dir = os.path.dirname(so_file)
     self.assertEqual(so_dir, other_tmp_dir)
     cmd.inplace = 0
     cmd.compiler = None
     cmd.run()
     so_file = cmd.get_outputs()[0]
     self.assertTrue(os.path.exists(so_file))
     self.assertTrue(so_file.endswith(ext_suffix))
     so_dir = os.path.dirname(so_file)
     self.assertEqual(so_dir, cmd.build_lib)
     build_py = cmd.get_finalized_command('build_py')
     build_py.package_dir = {'': 'bar'}
     path = cmd.get_ext_fullpath('foo')
     path = os.path.split(path)[0]
     self.assertEqual(path, cmd.build_lib)
     cmd.inplace = 1
     other_tmp_dir = os.path.realpath(self.mkdtemp())
     old_wd = os.getcwd()
     os.chdir(other_tmp_dir)
     try:
         path = cmd.get_ext_fullpath('foo')
     finally:
         os.chdir(old_wd)
     path = os.path.split(path)[0]
     lastdir = os.path.split(path)[-1]
     self.assertEqual(lastdir, 'bar')
Beispiel #9
0
    def test_search_cpp(self):
        cmd = missing_compiler_executable(['preprocessor'])
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        pkg_dir, dist = self.create_dist()
        cmd = config(dist)

        # simple pattern searches
        match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
        self.assertEqual(match, 0)

        match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
        self.assertEqual(match, 1)
Beispiel #10
0
 def test_run(self):
     pkg_dir, dist = self.create_dist()
     cmd = build_clib(dist)
     foo_c = os.path.join(pkg_dir, 'foo.c')
     self.write_file(foo_c, 'int main(void) { return 1;}\n')
     cmd.libraries = [('foo', {'sources': [foo_c]})]
     build_temp = os.path.join(pkg_dir, 'build')
     os.mkdir(build_temp)
     cmd.build_temp = build_temp
     cmd.build_clib = build_temp
     ccmd = missing_compiler_executable()
     if ccmd is not None:
         self.skipTest('The %r command is not found' % ccmd)
     cmd.run()
     self.assertIn('libfoo.a', os.listdir(build_temp))
Beispiel #11
0
    def test_search_cpp(self):
        cmd = missing_compiler_executable(['preprocessor'])
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        pkg_dir, dist = self.create_dist()
        cmd = config(dist)
        cmd._check_compiler()
        compiler = cmd.compiler
        if sys.platform[:3] == "aix" and "xlc" in compiler.preprocessor[0].lower():
            self.skipTest('xlc: The -E option overrides the -P, -o, and -qsyntaxonly options')

        # simple pattern searches
        match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
        self.assertEqual(match, 0)

        match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
        self.assertEqual(match, 1)
Beispiel #12
0
    def test_build_ext(self):
        cmd = support.missing_compiler_executable()
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        global ALREADY_TESTED
        copy_xxmodule_c(self.tmp_dir)
        xx_c = os.path.join(self.tmp_dir, 'xxmodule.c')
        xx_ext = Extension('xx', [xx_c])
        dist = Distribution({'name': 'xx', 'ext_modules': [xx_ext]})
        dist.package_dir = self.tmp_dir
        cmd = self.build_ext(dist)
        fixup_build_ext(cmd)
        cmd.build_lib = self.tmp_dir
        cmd.build_temp = self.tmp_dir

        old_stdout = sys.stdout
        if not support.verbose:
            # silence compiler output
            sys.stdout = StringIO()
        try:
            cmd.ensure_finalized()
            cmd.run()
        finally:
            sys.stdout = old_stdout

        if ALREADY_TESTED:
            self.skipTest('Already tested in %s' % ALREADY_TESTED)
        else:
            ALREADY_TESTED = type(self).__name__

        import xx

        for attr in ('error', 'foo', 'new', 'roj'):
            self.assertTrue(hasattr(xx, attr))

        self.assertEqual(xx.foo(2, 5), 7)
        self.assertEqual(xx.foo(13,15), 28)
        self.assertEqual(xx.new().demo(), None)
        if support.HAVE_DOCSTRINGS:
            doc = 'This is a template module just for instruction.'
            self.assertEqual(xx.__doc__, doc)
        self.assertIsInstance(xx.Null(), xx.Null)
        self.assertIsInstance(xx.Str(), xx.Str)
    def test_search_cpp(self):
        import shutil
        cmd = missing_compiler_executable(['preprocessor'])
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        pkg_dir, dist = self.create_dist()
        cmd = config(dist)
        cmd._check_compiler()
        compiler = cmd.compiler
        is_xlc = shutil.which(compiler.preprocessor[0]).startswith("/usr/vac")
        if is_xlc:
            self.skipTest('xlc: The -E option overrides the -P, -o, and -qsyntaxonly options')

        # simple pattern searches
        match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
        self.assertEqual(match, 0)

        match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
        self.assertEqual(match, 1)
Beispiel #14
0
    def test_search_cpp(self):
        import shutil
        cmd = missing_compiler_executable(['preprocessor'])
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        pkg_dir, dist = self.create_dist()
        cmd = config(dist)
        cmd._check_compiler()
        compiler = cmd.compiler
        is_xlc = shutil.which(compiler.preprocessor[0]).startswith("/usr/vac")
        if is_xlc:
            self.skipTest('xlc: The -E option overrides the -P, -o, and -qsyntaxonly options')

        # simple pattern searches
        match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
        self.assertEqual(match, 0)

        match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
        self.assertEqual(match, 1)
    def test_run(self):
        pkg_dir, dist = self.create_dist()
        cmd = build_clib(dist)

        foo_c = os.path.join(pkg_dir, 'foo.c')
        self.write_file(foo_c, 'int main(void) { return 1;}\n')
        cmd.libraries = [('foo', {'sources': [foo_c]})]

        build_temp = os.path.join(pkg_dir, 'build')
        os.mkdir(build_temp)
        cmd.build_temp = build_temp
        cmd.build_clib = build_temp

        # Before we run the command, we want to make sure
        # all commands are present on the system.
        ccmd = missing_compiler_executable()
        if ccmd is not None:
            self.skipTest('The %r command is not found' % ccmd)

        # this should work
        cmd.run()

        # let's check the result
        self.assertIn('libfoo.a', os.listdir(build_temp))
Beispiel #16
0
    def test_run(self):
        pkg_dir, dist = self.create_dist()
        cmd = build_clib(dist)

        foo_c = os.path.join(pkg_dir, 'foo.c')
        self.write_file(foo_c, 'int main(void) { return 1;}\n')
        cmd.libraries = [('foo', {'sources': [foo_c]})]

        build_temp = os.path.join(pkg_dir, 'build')
        os.mkdir(build_temp)
        cmd.build_temp = build_temp
        cmd.build_clib = build_temp

        # Before we run the command, we want to make sure
        # all commands are present on the system.
        ccmd = missing_compiler_executable()
        if ccmd is not None:
            self.skipTest('The %r command is not found' % ccmd)

        # this should work
        cmd.run()

        # let's check the result
        self.assertIn('libfoo.a', os.listdir(build_temp))
Beispiel #17
0
 def setUp(self):
     cmd = support.missing_compiler_executable()
     if cmd is not None:
         self.skipTest('The %r command is not found' % cmd)
     self.tmp_path = tempfile.mkdtemp()
Beispiel #18
0
    def test_get_outputs(self):
        cmd = support.missing_compiler_executable()
        if cmd is not None:
            self.skipTest('The %r command is not found' % cmd)
        tmp_dir = self.mkdtemp()
        c_file = os.path.join(tmp_dir, 'foo.c')
        self.write_file(c_file, 'void PyInit_foo(void) {}\n')
        ext = Extension('foo', [c_file], optional=False)
        dist = Distribution({'name': 'xx',
                             'ext_modules': [ext]})
        cmd = self.build_ext(dist)
        fixup_build_ext(cmd)
        cmd.ensure_finalized()
        self.assertEqual(len(cmd.get_outputs()), 1)

        cmd.build_lib = os.path.join(self.tmp_dir, 'build')
        cmd.build_temp = os.path.join(self.tmp_dir, 'tempt')

        # issue #5977 : distutils build_ext.get_outputs
        # returns wrong result with --inplace
        other_tmp_dir = os.path.realpath(self.mkdtemp())
        old_wd = os.getcwd()
        os.chdir(other_tmp_dir)
        try:
            cmd.inplace = 1
            cmd.run()
            so_file = cmd.get_outputs()[0]
        finally:
            os.chdir(old_wd)
        self.assertTrue(os.path.exists(so_file))
        ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
        self.assertTrue(so_file.endswith(ext_suffix))
        so_dir = os.path.dirname(so_file)
        self.assertEqual(so_dir, other_tmp_dir)

        cmd.inplace = 0
        cmd.compiler = None
        cmd.run()
        so_file = cmd.get_outputs()[0]
        self.assertTrue(os.path.exists(so_file))
        self.assertTrue(so_file.endswith(ext_suffix))
        so_dir = os.path.dirname(so_file)
        self.assertEqual(so_dir, cmd.build_lib)

        # inplace = 0, cmd.package = 'bar'
        build_py = cmd.get_finalized_command('build_py')
        build_py.package_dir = {'': 'bar'}
        path = cmd.get_ext_fullpath('foo')
        # checking that the last directory is the build_dir
        path = os.path.split(path)[0]
        self.assertEqual(path, cmd.build_lib)

        # inplace = 1, cmd.package = 'bar'
        cmd.inplace = 1
        other_tmp_dir = os.path.realpath(self.mkdtemp())
        old_wd = os.getcwd()
        os.chdir(other_tmp_dir)
        try:
            path = cmd.get_ext_fullpath('foo')
        finally:
            os.chdir(old_wd)
        # checking that the last directory is bar
        path = os.path.split(path)[0]
        lastdir = os.path.split(path)[-1]
        self.assertEqual(lastdir, 'bar')