Skip to content

Commit 06ca5fd

Browse files
committed
clang: Always pass POSIX paths to consumers
Fixes #12191
1 parent 8758e13 commit 06ca5fd

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

mesonbuild/backend/backends.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,10 @@ def get_target_filename(self, t: T.Union[build.Target, build.CustomTargetIndex],
309309
else:
310310
assert isinstance(t, build.BuildTarget), t
311311
filename = t.get_filename()
312-
return os.path.join(self.get_target_dir(t), filename)
312+
return (Path(self.get_target_dir(t)) / filename).as_posix()
313313

314314
def get_target_filename_abs(self, target: T.Union[build.Target, build.CustomTargetIndex]) -> str:
315-
return os.path.join(self.environment.get_build_dir(), self.get_target_filename(target))
315+
return (Path(self.environment.get_build_dir()) / self.get_target_filename(target)).as_posix()
316316

317317
def get_source_dir_include_args(self, target: build.BuildTarget, compiler: 'Compiler', *, absolute_path: bool = False) -> T.List[str]:
318318
curdir = target.get_subdir()
@@ -339,16 +339,16 @@ def get_target_filename_for_linking(self, target: T.Union[build.Target, build.Cu
339339
# On all other platforms, we link to the library directly.
340340
if isinstance(target, build.SharedLibrary):
341341
link_lib = target.get_import_filename() or target.get_filename()
342-
return os.path.join(self.get_target_dir(target), link_lib)
342+
return (Path(self.get_target_dir(target)) / link_lib).as_posix()
343343
elif isinstance(target, build.StaticLibrary):
344-
return os.path.join(self.get_target_dir(target), target.get_filename())
344+
return (Path(self.get_target_dir(target)) / target.get_filename()).as_posix()
345345
elif isinstance(target, (build.CustomTarget, build.CustomTargetIndex)):
346346
if not target.is_linkable_target():
347347
raise MesonException(f'Tried to link against custom target "{target.name}", which is not linkable.')
348-
return os.path.join(self.get_target_dir(target), target.get_filename())
348+
return (Path(self.get_target_dir(target)) / target.get_filename()).as_posix()
349349
elif isinstance(target, build.Executable):
350350
if target.import_filename:
351-
return os.path.join(self.get_target_dir(target), target.get_import_filename())
351+
return (Path(self.get_target_dir(target)) / target.import_filename).as_posix()
352352
else:
353353
return None
354354
raise AssertionError(f'BUG: Tried to link to {target!r} which is not linkable')

mesonbuild/backend/ninjabackend.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3222,7 +3222,7 @@ def generate_pch(self, target, header_deps=None):
32223222
def get_target_shsym_filename(self, target):
32233223
# Always name the .symbols file after the primary build output because it always exists
32243224
targetdir = self.get_target_private_dir(target)
3225-
return os.path.join(targetdir, target.get_filename() + '.symbols')
3225+
return (Path(targetdir) / (target.get_filename() + '.symbols')).as_posix()
32263226

32273227
def generate_shsym(self, target):
32283228
target_file = self.get_target_filename(target)
@@ -3235,7 +3235,7 @@ def generate_shsym(self, target):
32353235
self.add_build(elem)
32363236

32373237
def get_import_filename(self, target):
3238-
return os.path.join(self.get_target_dir(target), target.import_filename)
3238+
return (Path(self.get_target_dir(target)) / target.import_filename).as_posix()
32393239

32403240
def get_target_type_link_args(self, target, linker):
32413241
commands = []

mesonbuild/compilers/mixins/clang.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ def openmp_flags(self) -> T.List[str]:
121121
# Shouldn't work, but it'll be checked explicitly in the OpenMP dependency.
122122
return []
123123

124+
def gen_vs_module_defs_args(self, defsfile: str) -> T.List[str]:
125+
if isinstance(self.linker, (MSVCDynamicLinker)):
126+
# With MSVC, DLLs only export symbols that are explicitly exported,
127+
# so if a module defs file is specified, we use that to export symbols
128+
return ['-Wl,/DEF:' + defsfile]
129+
return super().gen_vs_module_defs_args(defsfile)
130+
124131
@classmethod
125132
def use_linker_args(cls, linker: str, version: str) -> T.List[str]:
126133
# Clang additionally can use a linker specified as a path, which GCC

0 commit comments

Comments
 (0)