cmake: Fix handling of path seperators (fixes #7294)

pull/7314/head
Daniel Mensinger 5 years ago committed by Nirbheek Chauhan
parent ec1bd22b15
commit edcddb3a28
  1. 2
      mesonbuild/cmake/executor.py
  2. 11
      mesonbuild/dependencies/base.py
  3. 9
      test cases/linuxlike/13 cmake dependency/cmake_fake1/cmMesonTestF1Config.cmake
  4. 9
      test cases/linuxlike/13 cmake dependency/cmake_fake2/cmMesonTestF2Config.cmake
  5. 2
      test cases/linuxlike/13 cmake dependency/meson.build
  6. 2
      test cases/linuxlike/13 cmake dependency/test.json

@ -69,7 +69,7 @@ class CMakeExecutor:
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 = []

@ -1145,12 +1145,17 @@ class CMakeDependency(ExternalDependency):
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]:

@ -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()

@ -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()

@ -44,6 +44,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

@ -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"
}
}

Loading…
Cancel
Save