From 0d0f2cdafd7597ff84baf7a4790f3f016fe2337f Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Sun, 4 Jul 2021 17:14:28 +0200 Subject: [PATCH] cmake: Only use the `cm_` prefix when it is actually required (fixes #8955) --- mesonbuild/cmake/interpreter.py | 5 ++++- test cases/cmake/19 advanced options/test.json | 2 +- test cases/cmake/2 advanced/meson.build | 4 ++++ test cases/cmake/2 advanced/test.json | 2 +- test cases/cmake/3 advanced no dep/meson.build | 5 +++-- .../3 advanced no dep/subprojects/cmMod/CMakeLists.txt | 10 +++++----- test cases/cmake/3 advanced no dep/test.json | 8 ++++---- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py index 745def143..fe66becb9 100644 --- a/mesonbuild/cmake/interpreter.py +++ b/mesonbuild/cmake/interpreter.py @@ -26,6 +26,7 @@ from ..mesonlib import MachineChoice, OrderedSet, version_compare, path_is_in_ro from ..mesondata import mesondata from ..compilers.compilers import assembler_suffixes, lang_suffixes, header_suffixes, obj_suffixes, lib_suffixes, is_header from ..programs import ExternalProgram +from ..coredata import FORBIDDEN_TARGET_NAMES from enum import Enum from functools import lru_cache from pathlib import Path @@ -120,7 +121,9 @@ transfer_dependencies_from = ['header_only'] _cmake_name_regex = re.compile(r'[^_a-zA-Z0-9]') def _sanitize_cmake_name(name: str) -> str: name = _cmake_name_regex.sub('_', name) - return 'cm_' + name + if name in FORBIDDEN_TARGET_NAMES or name.startswith('meson'): + name = 'cm_' + name + return name class OutputTargetMap: rm_so_version = re.compile(r'(\.[0-9]+)+$') diff --git a/test cases/cmake/19 advanced options/test.json b/test cases/cmake/19 advanced options/test.json index e2d9c051f..71ea812c7 100644 --- a/test cases/cmake/19 advanced options/test.json +++ b/test cases/cmake/19 advanced options/test.json @@ -1,6 +1,6 @@ { "installed": [ - {"type": "exe", "file": "usr/bin/cm_testEXE"} + {"type": "exe", "file": "usr/bin/testEXE"} ], "tools": { "cmake": ">=3.11" diff --git a/test cases/cmake/2 advanced/meson.build b/test cases/cmake/2 advanced/meson.build index a10db1c40..b301bfe42 100644 --- a/test cases/cmake/2 advanced/meson.build +++ b/test cases/cmake/2 advanced/meson.build @@ -21,3 +21,7 @@ test('test2', exe2) # Test if we can also extract executables assert(sub_pro.target_type('testEXE') == 'executable', 'The type must be executable for obvious reasons') test('test3', sub_pro.target('testEXE')) + +# Test that we can add a new target with the same name as the CMake subproject +exe4 = executable('testEXE', ['main.cpp'], dependencies: [sub_sta]) +test('test4', exe4) diff --git a/test cases/cmake/2 advanced/test.json b/test cases/cmake/2 advanced/test.json index e2d9c051f..71ea812c7 100644 --- a/test cases/cmake/2 advanced/test.json +++ b/test cases/cmake/2 advanced/test.json @@ -1,6 +1,6 @@ { "installed": [ - {"type": "exe", "file": "usr/bin/cm_testEXE"} + {"type": "exe", "file": "usr/bin/testEXE"} ], "tools": { "cmake": ">=3.11" diff --git a/test cases/cmake/3 advanced no dep/meson.build b/test cases/cmake/3 advanced no dep/meson.build index 0d1e127ad..f8f183666 100644 --- a/test cases/cmake/3 advanced no dep/meson.build +++ b/test cases/cmake/3 advanced no dep/meson.build @@ -14,5 +14,6 @@ test('test1', exe1) test('test2', exe2) # Test if we can also extract executables -assert(sub_pro.target_type('testEXE') == 'executable', 'The type must be executable for obvious reasons') -test('test3', sub_pro.target('testEXE')) +assert(sub_pro.target_type('meson-testEXE') == 'executable', 'The type must be executable for obvious reasons') +test('test3', sub_pro.target('meson-testEXE')) +test('test4', sub_pro.target('benchmark')) diff --git a/test cases/cmake/3 advanced no dep/subprojects/cmMod/CMakeLists.txt b/test cases/cmake/3 advanced no dep/subprojects/cmMod/CMakeLists.txt index 026d4c103..d738d45c9 100644 --- a/test cases/cmake/3 advanced no dep/subprojects/cmMod/CMakeLists.txt +++ b/test cases/cmake/3 advanced no dep/subprojects/cmMod/CMakeLists.txt @@ -15,12 +15,12 @@ generate_export_header(cmModLib) set_target_properties(cmModLib PROPERTIES VERSION 1.0.1) -add_executable(testEXE main.cpp) -add_executable(testEXE2 main.cpp) +add_executable(meson-testEXE main.cpp) +add_executable(benchmark main.cpp) -target_link_libraries(testEXE cmModLib) -target_link_libraries(testEXE2 cmModLib) +target_link_libraries(meson-testEXE cmModLib) +target_link_libraries(benchmark cmModLib) target_compile_definitions(cmModLibStatic PUBLIC CMMODLIB_STATIC_DEFINE) -install(TARGETS testEXE testEXE2 LIBRARY DESTINATION lib RUNTIME DESTINATION bin) +install(TARGETS meson-testEXE benchmark LIBRARY DESTINATION lib RUNTIME DESTINATION bin) diff --git a/test cases/cmake/3 advanced no dep/test.json b/test cases/cmake/3 advanced no dep/test.json index 4b266c320..c27ed82e4 100644 --- a/test cases/cmake/3 advanced no dep/test.json +++ b/test cases/cmake/3 advanced no dep/test.json @@ -1,9 +1,9 @@ { "installed": [ - {"type": "pdb", "file": "usr/bin/cm_testEXE"}, - {"type": "exe", "file": "usr/bin/cm_testEXE"}, - {"type": "pdb", "file": "usr/bin/cm_testEXE2"}, - {"type": "exe", "file": "usr/bin/cm_testEXE2"} + {"type": "pdb", "file": "usr/bin/cm_meson_testEXE"}, + {"type": "exe", "file": "usr/bin/cm_meson_testEXE"}, + {"type": "pdb", "file": "usr/bin/cm_benchmark"}, + {"type": "exe", "file": "usr/bin/cm_benchmark"} ], "tools": { "cmake": ">=3.11"