Skip to content

Commit

Permalink
dependencies/cmake: Suffix bare library dependencies on Windows
Browse files Browse the repository at this point in the history
On Windows, library dependencies can be passed with no prefix or suffix;
rather than -lfoo or foo.dll, they can just be passed as 'foo'.

CMake handles this and suffixes the library with '.lib' or '.dll',
depending on the link mode.

Do the same here, and if we've been passed an unqualified non-option
bare name on Windows, add the appropriate suffix and pass it through to
the linker. This fixes dependencies on system libraries.
  • Loading branch information
fooishbar committed Apr 15, 2020
1 parent 98e5e1d commit 0f4e88b
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions mesonbuild/dependencies/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1413,6 +1413,7 @@ def _detect_dep(self, name: str, modules: T.List[T.Tuple[str, bool]], components
# Set dependencies with CMake targets
# recognise arguments we should pass directly to the linker
reg_is_lib = re.compile(r'^(-l[a-zA-Z0-9_]+|-pthread|-delayload:[a-zA-Z0-9_\.]+|[a-zA-Z0-9_]+\.lib)$')
reg_is_maybe_bare_lib = re.compile(r'^[a-zA-Z0-9_]+$')
processed_targets = []
incDirs = []
compileDefinitions = []
Expand Down Expand Up @@ -1482,6 +1483,14 @@ def _detect_dep(self, name: str, modules: T.List[T.Tuple[str, bool]], components
targets += [j]
elif reg_is_lib.match(j) or os.path.exists(j):
libraries += [j]
elif mesonlib.is_windows() and reg_is_maybe_bare_lib.match(j):
# On Windows, CMake library dependencies can be passed as bare library names,
# e.g. 'version' should translate into 'version.lib'. CMake brute-forces a
# combination of prefix/suffix combinations to find the right library, however
# as we do not have a compiler environment available to us, we cannot do the
# same, but must assume any bare argument passed which is not also a CMake
# target must be a system library we should try to link against
libraries += ["{}.lib".format(j)]

processed_targets += [curr]

Expand Down

0 comments on commit 0f4e88b

Please sign in to comment.