Build private directory name from output file name.

pull/7084/head
Jussi Pakkanen 5 years ago
parent 751ea3df72
commit b4b1a2c5a1
  1. 2
      mesonbuild/backend/backends.py
  2. 3
      mesonbuild/backend/vs2010backend.py
  3. 38
      run_unittests.py

@ -259,7 +259,7 @@ class Backend:
return self.build_to_src return self.build_to_src
def get_target_private_dir(self, target): def get_target_private_dir(self, target):
return os.path.join(self.get_target_dir(target), target.get_id()) return os.path.join(self.get_target_filename(target) + '.p')
def get_target_private_dir_abs(self, target): def get_target_private_dir_abs(self, target):
return os.path.join(self.environment.get_build_dir(), self.get_target_private_dir(target)) return os.path.join(self.environment.get_build_dir(), self.get_target_private_dir(target))

@ -98,6 +98,9 @@ class Vs2010Backend(backends.Backend):
self.subdirs = {} self.subdirs = {}
self.handled_target_deps = {} self.handled_target_deps = {}
def get_target_private_dir(self, target):
return os.path.join(self.get_target_dir(target), target.get_id())
def generate_custom_generator_commands(self, target, parent_node): def generate_custom_generator_commands(self, target, parent_node):
generator_output_files = [] generator_output_files = []
custom_target_include_dirs = [] custom_target_include_dirs = []

@ -2449,9 +2449,12 @@ class AllPlatformTests(BasePlatformTests):
# Check include order for 'someexe' # Check include order for 'someexe'
incs = [a for a in split_args(execmd) if a.startswith("-I")] incs = [a for a in split_args(execmd) if a.startswith("-I")]
self.assertEqual(len(incs), 9) self.assertEqual(len(incs), 9)
# target private dir # Need to run the build so the private dir is created.
someexe_id = Target.construct_id_from_path("sub4", "someexe", "@exe") self.build()
self.assertPathEqual(incs[0], "-I" + os.path.join("sub4", someexe_id)) pdirs = glob(os.path.join(self.builddir, 'sub4/someexe*.p'))
self.assertEqual(len(pdirs), 1)
privdir = pdirs[0][len(self.builddir)+1:]
self.assertPathEqual(incs[0], "-I" + privdir)
# target build subdir # target build subdir
self.assertPathEqual(incs[1], "-Isub4") self.assertPathEqual(incs[1], "-Isub4")
# target source subdir # target source subdir
@ -2472,7 +2475,10 @@ class AllPlatformTests(BasePlatformTests):
incs = [a for a in split_args(fxecmd) if a.startswith('-I')] incs = [a for a in split_args(fxecmd) if a.startswith('-I')]
self.assertEqual(len(incs), 9) self.assertEqual(len(incs), 9)
# target private dir # target private dir
self.assertPathEqual(incs[0], '-Isomefxe@exe') pdirs = glob(os.path.join(self.builddir, 'somefxe*.p'))
self.assertEqual(len(pdirs), 1)
privdir = pdirs[0][len(self.builddir)+1:]
self.assertPathEqual(incs[0], '-I' + privdir)
# target build dir # target build dir
self.assertPathEqual(incs[1], '-I.') self.assertPathEqual(incs[1], '-I.')
# target source dir # target source dir
@ -5577,6 +5583,10 @@ class LinuxlikeTests(BasePlatformTests):
self.assertRegex('\n'.join(mesonlog), self.assertRegex('\n'.join(mesonlog),
r'Run-time dependency qt5 \(modules: Core\) found: YES .* \((qmake|qmake-qt5)\)\n') r'Run-time dependency qt5 \(modules: Core\) found: YES .* \((qmake|qmake-qt5)\)\n')
def glob_sofiles_without_privdir(self, g):
files = glob(g)
return [f for f in files if not f.endswith('.p')]
def _test_soname_impl(self, libpath, install): def _test_soname_impl(self, libpath, install):
if is_cygwin() or is_osx(): if is_cygwin() or is_osx():
raise unittest.SkipTest('Test only applicable to ELF and linuxlike sonames') raise unittest.SkipTest('Test only applicable to ELF and linuxlike sonames')
@ -5592,28 +5602,28 @@ class LinuxlikeTests(BasePlatformTests):
self.assertPathExists(nover) self.assertPathExists(nover)
self.assertFalse(os.path.islink(nover)) self.assertFalse(os.path.islink(nover))
self.assertEqual(get_soname(nover), 'libnover.so') self.assertEqual(get_soname(nover), 'libnover.so')
self.assertEqual(len(glob(nover[:-3] + '*')), 1) self.assertEqual(len(self.glob_sofiles_without_privdir(nover[:-3] + '*')), 1)
# File with version set # File with version set
verset = os.path.join(libpath, 'libverset.so') verset = os.path.join(libpath, 'libverset.so')
self.assertPathExists(verset + '.4.5.6') self.assertPathExists(verset + '.4.5.6')
self.assertEqual(os.readlink(verset), 'libverset.so.4') self.assertEqual(os.readlink(verset), 'libverset.so.4')
self.assertEqual(get_soname(verset), 'libverset.so.4') self.assertEqual(get_soname(verset), 'libverset.so.4')
self.assertEqual(len(glob(verset[:-3] + '*')), 3) self.assertEqual(len(self.glob_sofiles_without_privdir(verset[:-3] + '*')), 3)
# File with soversion set # File with soversion set
soverset = os.path.join(libpath, 'libsoverset.so') soverset = os.path.join(libpath, 'libsoverset.so')
self.assertPathExists(soverset + '.1.2.3') self.assertPathExists(soverset + '.1.2.3')
self.assertEqual(os.readlink(soverset), 'libsoverset.so.1.2.3') self.assertEqual(os.readlink(soverset), 'libsoverset.so.1.2.3')
self.assertEqual(get_soname(soverset), 'libsoverset.so.1.2.3') self.assertEqual(get_soname(soverset), 'libsoverset.so.1.2.3')
self.assertEqual(len(glob(soverset[:-3] + '*')), 2) self.assertEqual(len(self.glob_sofiles_without_privdir(soverset[:-3] + '*')), 2)
# File with version and soversion set to same values # File with version and soversion set to same values
settosame = os.path.join(libpath, 'libsettosame.so') settosame = os.path.join(libpath, 'libsettosame.so')
self.assertPathExists(settosame + '.7.8.9') self.assertPathExists(settosame + '.7.8.9')
self.assertEqual(os.readlink(settosame), 'libsettosame.so.7.8.9') self.assertEqual(os.readlink(settosame), 'libsettosame.so.7.8.9')
self.assertEqual(get_soname(settosame), 'libsettosame.so.7.8.9') self.assertEqual(get_soname(settosame), 'libsettosame.so.7.8.9')
self.assertEqual(len(glob(settosame[:-3] + '*')), 2) self.assertEqual(len(self.glob_sofiles_without_privdir(settosame[:-3] + '*')), 2)
# File with version and soversion set to different values # File with version and soversion set to different values
bothset = os.path.join(libpath, 'libbothset.so') bothset = os.path.join(libpath, 'libbothset.so')
@ -5621,7 +5631,7 @@ class LinuxlikeTests(BasePlatformTests):
self.assertEqual(os.readlink(bothset), 'libbothset.so.1.2.3') self.assertEqual(os.readlink(bothset), 'libbothset.so.1.2.3')
self.assertEqual(os.readlink(bothset + '.1.2.3'), 'libbothset.so.4.5.6') self.assertEqual(os.readlink(bothset + '.1.2.3'), 'libbothset.so.4.5.6')
self.assertEqual(get_soname(bothset), 'libbothset.so.1.2.3') self.assertEqual(get_soname(bothset), 'libbothset.so.1.2.3')
self.assertEqual(len(glob(bothset[:-3] + '*')), 3) self.assertEqual(len(self.glob_sofiles_without_privdir(bothset[:-3] + '*')), 3)
def test_soname(self): def test_soname(self):
self._test_soname_impl(self.builddir, False) self._test_soname_impl(self.builddir, False)
@ -5741,10 +5751,12 @@ class LinuxlikeTests(BasePlatformTests):
def test_unity_subproj(self): def test_unity_subproj(self):
testdir = os.path.join(self.common_test_dir, '45 subproject') testdir = os.path.join(self.common_test_dir, '45 subproject')
self.init(testdir, extra_args='--unity=subprojects') self.init(testdir, extra_args='--unity=subprojects')
simpletest_id = Target.construct_id_from_path('subprojects/sublib', 'simpletest', '@exe') pdirs = glob(os.path.join(self.builddir, 'subprojects/sublib/simpletest*.p'))
self.assertPathExists(os.path.join(self.builddir, 'subprojects/sublib', simpletest_id, 'simpletest-unity0.c')) self.assertEqual(len(pdirs), 1)
sublib_id = Target.construct_id_from_path('subprojects/sublib', 'sublib', '@sha') self.assertPathExists(os.path.join(pdirs[0], 'simpletest-unity0.c'))
self.assertPathExists(os.path.join(self.builddir, 'subprojects/sublib', sublib_id, 'sublib-unity0.c')) sdirs = glob(os.path.join(self.builddir, 'subprojects/sublib/*sublib*.p'))
self.assertEqual(len(sdirs), 1)
self.assertPathExists(os.path.join(sdirs[0], 'sublib-unity0.c'))
self.assertPathDoesNotExist(os.path.join(self.builddir, 'user@exe/user-unity.c')) self.assertPathDoesNotExist(os.path.join(self.builddir, 'user@exe/user-unity.c'))
self.build() self.build()

Loading…
Cancel
Save