summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorL. E. Segovia <amy@amyspark.me>2023-08-31 23:48:02 -0300
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2025-07-13 17:57:40 +0530
commit12563f74a9f3dda70dcd4778aa958de355d1fae7 (patch)
treef6605b0e7c0fb35fc18a529c80b0ac8f2403d5bd /mesonbuild
parent9ca276442eaaa6cb0ef3b595f3c679aabad15a39 (diff)
downloadmeson-12563f74a9f3dda70dcd4778aa958de355d1fae7.tar.gz
backends: Use POSIX paths for target paths
This commit completes 5de09cbe8838e8febf1ca3aa83b53cf06972bff3, ensuring that only POSIX style paths are passed to the compiler line, and thus fixing UNIX-style tools that treat single backward slashes as Unicode escaped characters. Fixes #12191 Completes #12534 Completes #12564
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/backends.py10
-rw-r--r--mesonbuild/backend/ninjabackend.py4
-rw-r--r--mesonbuild/mintro.py11
3 files changed, 13 insertions, 12 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index ed57a4c1b..3aab420e8 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -150,7 +150,7 @@ class TargetInstallData:
def __post_init__(self, outdir_name: T.Optional[str]) -> None:
if outdir_name is None:
outdir_name = os.path.join('{prefix}', self.outdir)
- self.out_name = os.path.join(outdir_name, os.path.basename(self.fname))
+ self.out_name = Path(outdir_name, os.path.basename(self.fname)).as_posix()
@dataclass(eq=False)
class InstallEmptyDir:
@@ -307,16 +307,16 @@ class Backend:
else:
assert isinstance(t, build.BuildTarget), t
filename = t.get_filename()
- return os.path.join(self.get_target_dir(t), filename)
+ return Path(self.get_target_dir(t), filename).as_posix()
def get_target_filename_abs(self, target: T.Union[build.Target, build.CustomTargetIndex]) -> str:
- return os.path.join(self.environment.get_build_dir(), self.get_target_filename(target))
+ return Path(self.environment.get_build_dir(), self.get_target_filename(target)).as_posix()
def get_target_debug_filename(self, target: build.BuildTarget) -> T.Optional[str]:
assert isinstance(target, build.BuildTarget), target
if target.get_debug_filename():
debug_filename = target.get_debug_filename()
- return os.path.join(self.get_target_dir(target), debug_filename)
+ return Path(self.get_target_dir(target), debug_filename).as_posix()
else:
return None
@@ -324,7 +324,7 @@ class Backend:
assert isinstance(target, build.BuildTarget), target
if not target.get_debug_filename():
return None
- return os.path.join(self.environment.get_build_dir(), self.get_target_debug_filename(target))
+ return Path(self.environment.get_build_dir(), self.get_target_debug_filename(target)).as_posix()
def get_source_dir_include_args(self, target: build.BuildTarget, compiler: 'Compiler', *, absolute_path: bool = False) -> T.List[str]:
curdir = target.get_subdir()
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 73f2db7c4..10f77e7cc 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -3353,7 +3353,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
def get_target_shsym_filename(self, target):
# Always name the .symbols file after the primary build output because it always exists
targetdir = self.get_target_private_dir(target)
- return os.path.join(targetdir, target.get_filename() + '.symbols')
+ return Path(targetdir, target.get_filename() + '.symbols').as_posix()
def generate_shsym(self, target) -> None:
target_file = self.get_target_filename(target)
@@ -3372,7 +3372,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.add_build(elem)
def get_import_filename(self, target) -> str:
- return os.path.join(self.get_target_dir(target), target.import_filename)
+ return Path(self.get_target_dir(target), target.import_filename).as_posix()
def get_target_type_link_args(self, target, linker):
commands = []
diff --git a/mesonbuild/mintro.py b/mesonbuild/mintro.py
index 6986186bd..57fa286b7 100644
--- a/mesonbuild/mintro.py
+++ b/mesonbuild/mintro.py
@@ -128,7 +128,7 @@ def list_installed(installdata: backends.InstallData) -> T.Dict[str, str]:
def list_install_plan(installdata: backends.InstallData) -> T.Dict[str, T.Dict[str, T.Dict[str, T.Optional[str]]]]:
plan: T.Dict[str, T.Dict[str, T.Dict[str, T.Optional[str]]]] = {
'targets': {
- os.path.join(installdata.build_dir, target.fname): {
+ Path(installdata.build_dir, target.fname).as_posix(): {
'destination': target.out_name,
'tag': target.tag or None,
'subproject': target.subproject or None,
@@ -145,13 +145,14 @@ def list_install_plan(installdata: backends.InstallData) -> T.Dict[str, T.Dict[s
}.items():
# Mypy doesn't recognize SubdirInstallData as a subclass of InstallDataBase
for data in data_list: # type: ignore[attr-defined]
+ data_path = Path(data.path).as_posix()
data_type = data.data_type or key
- install_path_name = data.install_path_name
+ install_path_name = Path(data.install_path_name)
if key == 'headers': # in the headers, install_path_name is the directory
- install_path_name = os.path.join(install_path_name, os.path.basename(data.path))
+ install_path_name = install_path_name / os.path.basename(data.path)
entry = {
- 'destination': install_path_name,
+ 'destination': install_path_name.as_posix(),
'tag': data.tag or None,
'subproject': data.subproject or None,
}
@@ -162,7 +163,7 @@ def list_install_plan(installdata: backends.InstallData) -> T.Dict[str, T.Dict[s
entry['exclude_files'] = list(exclude_files)
plan[data_type] = plan.get(data_type, {})
- plan[data_type][data.path] = entry
+ plan[data_type][data_path] = entry
return plan