File meson-restore-python3.4.patch of Package meson-testsuite

--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -27,7 +27,7 @@ from .. import compilers
 from ..compilers import CompilerArgs
 from ..linkers import ArLinker
 from ..mesonlib import File, MesonException, OrderedSet
-from ..mesonlib import get_compiler_for_source, has_path_sep
+from ..mesonlib import get_compiler_for_source, has_path_sep, commonpath
 from .backends import CleanTrees, InstallData
 from ..build import InvalidArguments
 
@@ -1157,8 +1157,8 @@ int dummy;
                 # Check if the vala file is in a subdir of --basedir
                 abs_srcbasedir = os.path.join(self.environment.get_source_dir(), target.get_subdir())
                 abs_vala_file = os.path.join(self.environment.get_build_dir(), vala_file)
-                if PurePath(os.path.commonpath((abs_srcbasedir, abs_vala_file))) == PurePath(abs_srcbasedir):
-                    vala_c_subdir = PurePath(abs_vala_file).parent.relative_to(abs_srcbasedir)
+                if PurePath(commonpath((abs_srcbasedir, abs_vala_file))) == PurePath(abs_srcbasedir):
+                    vala_c_subdir = str(PurePath(abs_vala_file).parent.relative_to(abs_srcbasedir))
                     vala_c_file = os.path.join(str(vala_c_subdir), vala_c_file)
             else:
                 path_to_target = os.path.join(self.build_to_src, target.get_subdir())
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -17,7 +17,7 @@ import pickle, os, uuid
 import sys
 from pathlib import PurePath
 from collections import OrderedDict
-from .mesonlib import MesonException
+from .mesonlib import MesonException, commonpath
 from .mesonlib import default_libdir, default_libexecdir, default_prefix
 import ast
 import argparse
@@ -261,7 +261,7 @@ class CoreData:
             # commonpath will always return a path in the native format, so we
             # must use pathlib.PurePath to do the same conversion before
             # comparing.
-            if os.path.commonpath([value, prefix]) != str(PurePath(prefix)):
+            if commonpath([value, prefix]) != str(PurePath(prefix)):
                 m = 'The value of the {!r} option is {!r} which must be a ' \
                     'subdir of the prefix {!r}.\nNote that if you pass a ' \
                     'relative path, it is assumed to be a subdir of prefix.'
--- a/mesonbuild/mesonlib.py
+++ b/mesonbuild/mesonlib.py
@@ -972,6 +972,30 @@ def detect_subprojects(spdir_name, curre
                 result[basename] = [trial]
     return result
 
+def commonpath(paths):
+    '''
+    For use on Python 3.4 where os.path.commonpath is not available.
+    '''
+    if sys.version_info >= (3, 5):
+        return os.path.commonpath(paths)
+
+    import pathlib
+    if not paths:
+        raise ValueError('commonpath() arg is an empty sequence')
+    common = pathlib.PurePath(paths[0])
+    for path in paths[1:]:
+        new = []
+        path = pathlib.PurePath(path)
+        for c, p in zip(common.parts, path.parts):
+            if c != p:
+                break
+            new.append(c)
+        if not new:
+            raise ValueError("Can't mix absolute and relative paths") from None
+        new = os.path.join(*new)
+        common = pathlib.PurePath(new)
+    return str(common)
+
 class OrderedSet(collections.MutableSet):
     """A set that preserves the order in which items are added, by first
     insertion.
--- a/mesonbuild/mesonmain.py
+++ b/mesonbuild/mesonmain.py
@@ -257,8 +257,8 @@ def run_script_command(args):
     return cmdfunc(cmdargs)
 
 def run(original_args, mainfile=None):
-    if sys.version_info < (3, 5):
-        print('Meson works correctly only with python 3.5+.')
+    if sys.version_info < (3, 4):
+        print('Meson works correctly only with python 3.4+.')
         print('You have python %s.' % sys.version)
         print('Please update your environment')
         return 1
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -21,6 +21,7 @@ import tempfile
 import textwrap
 import os
 import shutil
+import sys
 import unittest
 from unittest import mock
 from configparser import ConfigParser
@@ -476,6 +477,24 @@ class InternalTests(unittest.TestCase):
         deps.add_pub_reqs([mock])
         self.assertEqual(deps.format_reqs(deps.pub_reqs), "some_name")
 
+    def test_commonpath(self):
+        from os.path import sep
+        commonpath = mesonbuild.mesonlib.commonpath
+        self.assertRaises(ValueError, commonpath, [])
+        self.assertEqual(commonpath(['/usr', '/usr']), sep + 'usr')
+        self.assertEqual(commonpath(['/usr', '/usr/']), sep + 'usr')
+        self.assertEqual(commonpath(['/usr', '/usr/bin']), sep + 'usr')
+        self.assertEqual(commonpath(['/usr/', '/usr/bin']), sep + 'usr')
+        self.assertEqual(commonpath(['/usr/./', '/usr/bin']), sep + 'usr')
+        self.assertEqual(commonpath(['/usr/bin', '/usr/bin']), sep + 'usr' + sep + 'bin')
+        self.assertEqual(commonpath(['/usr//bin', '/usr/bin']), sep + 'usr' + sep + 'bin')
+        self.assertEqual(commonpath(['/usr/./bin', '/usr/bin']), sep + 'usr' + sep + 'bin')
+        self.assertEqual(commonpath(['/usr/local', '/usr/lib']), sep + 'usr')
+        self.assertEqual(commonpath(['/usr', '/bin']), sep)
+        prefix = '/some/path/to/prefix'
+        libdir = '/some/path/to/prefix/libdir'
+        self.assertEqual(commonpath([prefix, libdir]), str(PurePath(prefix)))
+
 
 class BasePlatformTests(unittest.TestCase):
     def setUp(self):
@@ -556,9 +575,16 @@ class BasePlatformTests(unittest.TestCas
         # If this call hangs CI will just abort. It is very hard to distinguish
         # between CI issue and test bug in that case. Set timeout and fail loud
         # instead.
-        p = subprocess.run(command, stdout=subprocess.PIPE,
-                           stderr=subprocess.STDOUT, env=os.environ.copy(),
-                           universal_newlines=True, cwd=workdir, timeout=60 * 5)
+        if sys.version_info >= (3, 5):
+            p = subprocess.run(command, stdout=subprocess.PIPE,
+                               stderr=subprocess.STDOUT, env=os.environ.copy(),
+                               universal_newlines=True, cwd=workdir,
+                               timeout=60 * 5)
+        else:
+            p = subprocess.Popen(command, stdout=subprocess.PIPE,
+                                 stderr=subprocess.STDOUT, env=os.environ.copy(),
+                                 universal_newlines=True, cwd=workdir)
+            p.stdout = p.communicate(timeout=60 * 5)[0]
         print(p.stdout)
         if p.returncode != 0:
             if 'MESON_SKIP_TEST' in p.stdout:
@@ -2940,8 +2966,13 @@ endian = 'little'
         self.init(testdir)
         myenv = os.environ.copy()
         myenv['PKG_CONFIG_PATH'] = self.privatedir
-        ro = subprocess.run(['pkg-config', '--libs', 'libsomething'], stdout=subprocess.PIPE,
-                            env=myenv)
+        if sys.version_info >= (3, 5):
+            ro = subprocess.run(['pkg-config', '--libs', 'libsomething'],
+                                stdout=subprocess.PIPE, env=myenv)
+        else:
+            ro = subprocess.Popen(['pkg-config', '--libs', 'libsomething'],
+                                  stdout=subprocess.PIPE, env=myenv)
+            ro.stdout = ro.communicate()[0]
         self.assertEqual(ro.returncode, 0)
         self.assertIn(b'-lgobject-2.0', ro.stdout)
         self.assertIn(b'-lgio-2.0', ro.stdout)
--- a/setup.py
+++ b/setup.py
@@ -19,9 +19,9 @@ import sys
 
 from mesonbuild.coredata import version
 
-if sys.version_info < (3, 5, 0):
+if sys.version_info < (3, 4, 0):
     print('Tried to install with an unsupported version of Python. '
-          'Meson requires Python 3.5.0 or greater')
+          'Meson requires Python 3.4.0 or greater')
     sys.exit(1)
 
 # We need to support Python installations that have nothing but the basic
--- "a/test cases/common/193 find override/subdir/converter.py"
+++ "b/test cases/common/193 find override/subdir/converter.py"
@@ -10,6 +10,7 @@ ftempl = '''int %s() {
 }
 '''
 
-d = pathlib.Path(ifilename).read_text().split('\n')[0].strip()
-
-pathlib.Path(ofilename).write_text(ftempl % d)
+with pathlib.Path(ifilename).open('r') as f:
+    d = f.readline().split('\n')[0].strip()
+with pathlib.Path(ofilename).open('w') as f:
+    f.write(ftempl % d)
--- "a/test cases/common/193 find override/subdir/gencodegen.py.in"
+++ "b/test cases/common/193 find override/subdir/gencodegen.py.in"
@@ -10,6 +10,7 @@ ftempl = '''int %s() {
 }
 '''
 
-d = pathlib.Path(ifilename).read_text().split('\n')[0].strip()
-
-pathlib.Path(ofilename).write_text(ftempl % d)
+with pathlib.Path(ifilename).open('r') as f:
+    d = f.readline().split('\n')[0].strip()
+with pathlib.Path(ofilename).open('w') as f:
+    f.write(ftempl % d)
openSUSE Build Service is sponsored by