Skip to content

Commit

Permalink
cmake: Fix handling of path seperators (fixes #7294)
Browse files Browse the repository at this point in the history
  • Loading branch information
mensinda authored and nirbheek committed Jun 13, 2020
1 parent 435c767 commit e20f02b
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 5 deletions.
2 changes: 1 addition & 1 deletion mesonbuild/cmake/executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def __init__(self, environment: Environment, version: str, for_machine: MachineC
self.environment.is_cross_build(),
'CMAKE_PREFIX_PATH')
if env_pref_path is not None:
env_pref_path = env_pref_path.split(os.pathsep)
env_pref_path = re.split(r':|;', env_pref_path)
env_pref_path = [x for x in env_pref_path if x] # Filter out empty strings
if not self.prefix_paths:
self.prefix_paths = []
Expand Down
11 changes: 8 additions & 3 deletions mesonbuild/dependencies/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1154,12 +1154,17 @@ def _get_cmake_info(self):
except MesonException:
return None

def process_paths(l: T.List[str]) -> T.Set[str]:
l = [x.split(':') for x in l]
l = [x for sublist in l for x in sublist]
return set(l)

# Extract the variables and sanity check them
root_paths = set(temp_parser.get_cmake_var('MESON_FIND_ROOT_PATH'))
root_paths.update(set(temp_parser.get_cmake_var('MESON_CMAKE_SYSROOT')))
root_paths = process_paths(temp_parser.get_cmake_var('MESON_FIND_ROOT_PATH'))
root_paths.update(process_paths(temp_parser.get_cmake_var('MESON_CMAKE_SYSROOT')))
root_paths = sorted(root_paths)
root_paths = list(filter(lambda x: os.path.isdir(x), root_paths))
module_paths = set(temp_parser.get_cmake_var('MESON_PATHS_LIST'))
module_paths = process_paths(temp_parser.get_cmake_var('MESON_PATHS_LIST'))
rooted_paths = []
for j in [Path(x) for x in root_paths]:
for i in [Path(x) for x in module_paths]:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
find_package(ZLIB)

if(ZLIB_FOUND OR ZLIB_Found)
set(cmMesonTestF1_FOUND ON)
set(cmMesonTestF1_LIBRARIES ${ZLIB_LIBRARY})
set(cmMesonTestF1_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
else()
set(cmMesonTestF1_FOUND OFF)
endif()
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
find_package(ZLIB)

if(ZLIB_FOUND OR ZLIB_Found)
set(cmMesonTestF2_FOUND ON)
set(cmMesonTestF2_LIBRARIES ${ZLIB_LIBRARY})
set(cmMesonTestF2_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
else()
set(cmMesonTestF2_FOUND OFF)
endif()
2 changes: 2 additions & 0 deletions test cases/linuxlike/13 cmake dependency/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ assert(depf2.found() == false, 'Invalid CMake targets should fail')
# Try to find cmMesonTestDep in a custom prefix
# setup_env.json is used by run_project_tests.py:_run_test to point to ./cmake_pref_env/
depPrefEnv = dependency('cmMesonTestDep', required : true, method : 'cmake')
depPrefEnv1 = dependency('cmMesonTestF1', required : true, method : 'cmake')
depPrefEnv2 = dependency('cmMesonTestF2', required : true, method : 'cmake')

# Try to find a dependency with a custom CMake module

Expand Down
2 changes: 1 addition & 1 deletion test cases/linuxlike/13 cmake dependency/test.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"env": {
"CMAKE_PREFIX_PATH": "@ROOT@/cmake_pref_env"
"CMAKE_PREFIX_PATH": "@ROOT@/cmake_fake1;@ROOT@/cmake_fake2:@ROOT@/cmake_pref_env"
}
}

0 comments on commit e20f02b

Please sign in to comment.