aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Filippov <alekseyf@google.com>2018-03-13 17:56:33 +0000
committerAleksey Filippov <alekseyf@google.com>2018-04-16 22:51:34 +0100
commitcb761718f0fad4a6ee6396149d03c5b6b1586f44 (patch)
treedfbdf4729c9d25b5f1128e7b6a7812d230a3d4c5
parentc58dd64f8e947f4659bcbc47d75e86e65043e714 (diff)
downloadmeson-cb761718f0fad4a6ee6396149d03c5b6b1586f44.zip
meson-cb761718f0fad4a6ee6396149d03c5b6b1586f44.tar.gz
meson-cb761718f0fad4a6ee6396149d03c5b6b1586f44.tar.bz2
Generate target id based on subdirectory instead of subproject
Allows creation of targets with same name in different subdirectories. Closes #2861 and closes #1867
-rw-r--r--mesonbuild/build.py15
-rwxr-xr-xrun_unittests.py6
-rw-r--r--test cases/common/183 same target name/file.c (renamed from test cases/failing/17 same name/file.c)0
-rw-r--r--test cases/common/183 same target name/meson.build (renamed from test cases/failing/17 same name/meson.build)0
-rw-r--r--test cases/common/183 same target name/sub/file2.c (renamed from test cases/failing/17 same name/sub/file2.c)0
-rw-r--r--test cases/common/183 same target name/sub/meson.build (renamed from test cases/failing/17 same name/sub/meson.build)0
6 files changed, 13 insertions, 8 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 47c40a2..e707053 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -310,11 +310,16 @@ a hard error in the future.''' % name)
def get_id(self):
# This ID must also be a valid file name on all OSs.
# It should also avoid shell metacharacters for obvious
- # reasons.
- base = self.name + self.type_suffix()
- if self.subproject == '':
- return base
- return self.subproject + '@@' + base
+ # reasons. '@' is not used as often as '_' in source code names.
+ # In case of collisions consider using checksums.
+ # FIXME replace with assert when slash in names is prohibited
+ name_part = self.name.replace('/', '@').replace('\\', '@')
+ assert not has_path_sep(self.type_suffix())
+ myid = name_part + self.type_suffix()
+ if self.subdir:
+ subdir_part = self.subdir.replace('/', '@').replace('\\', '@')
+ myid = subdir_part + '@@' + myid
+ return myid
def process_kwargs(self, kwargs):
if 'build_by_default' in kwargs:
diff --git a/run_unittests.py b/run_unittests.py
index 19a8c87..4ed75ea 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -1117,7 +1117,7 @@ class AllPlatformTests(BasePlatformTests):
incs = [a for a in shlex.split(execmd) if a.startswith("-I")]
self.assertEqual(len(incs), 9)
# target private dir
- self.assertPathEqual(incs[0], "-Isub4/someexe@exe")
+ self.assertPathEqual(incs[0], "-Isub4/sub4@@someexe@exe")
# target build subdir
self.assertPathEqual(incs[1], "-Isub4")
# target source subdir
@@ -2601,8 +2601,8 @@ class LinuxlikeTests(BasePlatformTests):
def test_unity_subproj(self):
testdir = os.path.join(self.common_test_dir, '49 subproject')
self.init(testdir, extra_args='--unity=subprojects')
- self.assertPathExists(os.path.join(self.builddir, 'subprojects/sublib/sublib@@simpletest@exe/simpletest-unity.c'))
- self.assertPathExists(os.path.join(self.builddir, 'subprojects/sublib/sublib@@sublib@sha/sublib-unity.c'))
+ self.assertPathExists(os.path.join(self.builddir, 'subprojects/sublib/subprojects@sublib@@simpletest@exe/simpletest-unity.c'))
+ self.assertPathExists(os.path.join(self.builddir, 'subprojects/sublib/subprojects@sublib@@sublib@sha/sublib-unity.c'))
self.assertPathDoesNotExist(os.path.join(self.builddir, 'user@exe/user-unity.c'))
self.build()
diff --git a/test cases/failing/17 same name/file.c b/test cases/common/183 same target name/file.c
index 6f1c172..6f1c172 100644
--- a/test cases/failing/17 same name/file.c
+++ b/test cases/common/183 same target name/file.c
diff --git a/test cases/failing/17 same name/meson.build b/test cases/common/183 same target name/meson.build
index 4e585d5..4e585d5 100644
--- a/test cases/failing/17 same name/meson.build
+++ b/test cases/common/183 same target name/meson.build
diff --git a/test cases/failing/17 same name/sub/file2.c b/test cases/common/183 same target name/sub/file2.c
index a5e453d..a5e453d 100644
--- a/test cases/failing/17 same name/sub/file2.c
+++ b/test cases/common/183 same target name/sub/file2.c
diff --git a/test cases/failing/17 same name/sub/meson.build b/test cases/common/183 same target name/sub/meson.build
index 610a4a3..610a4a3 100644
--- a/test cases/failing/17 same name/sub/meson.build
+++ b/test cases/common/183 same target name/sub/meson.build