From db1f297b135d990394f33aed2edac52323b50a53 Mon Sep 17 00:00:00 2001 From: Ravi Shankar Date: Thu, 15 Dec 2016 07:42:30 -0800 Subject: [PATCH] servo: Merge #14601 - Raise warning when OSMesa path is not set (from Wafflespeanut:osmesa); r=emilio In Ubuntu 14.04, I still get crashes due to non-existence of OsMesa library (#13515). It turned out that sometimes I have paths like `osmesa-src-` without `out/lib/gallium`. Now, we raise a warning whenever we don't find a proper path. --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes do not require tests because it's related to mach. Source-Repo: https://github.com/servo/servo Source-Revision: 44af5ea2e4ccb77f55dea5492408ebfcdeb73250 --- servo/python/servo/command_base.py | 16 +++++++++------- servo/python/servo/testing_commands.py | 5 +++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/servo/python/servo/command_base.py b/servo/python/servo/command_base.py index 949ffbc03557..b0f62e65061c 100644 --- a/servo/python/servo/command_base.py +++ b/servo/python/servo/command_base.py @@ -54,13 +54,10 @@ def find_dep_path_newest(package, bin_path): with cd(deps_path): for c in glob(package + '-*'): candidate_path = path.join(deps_path, c) - candidate_output = path.join(candidate_path, "output") - if path.exists(candidate_output): - candidates.append((path.getmtime(candidate_output), candidate_path)) - candidates.sort(reverse=True) + if path.exists(path.join(candidate_path, "output")): + candidates.append(candidate_path) if candidates: - _, candidate_path = candidates[0] - return candidate_path + return max(candidates, key=lambda c: path.getmtime(path.join(c, "output"))) return None @@ -221,7 +218,10 @@ def is_linux(): def set_osmesa_env(bin_path, env): """Set proper LD_LIBRARY_PATH and DRIVE for software rendering on Linux and OSX""" if is_linux(): - osmesa_path = path.join(find_dep_path_newest('osmesa-src', bin_path), "out", "lib", "gallium") + dep_path = find_dep_path_newest('osmesa-src', bin_path) + if not dep_path: + return None + osmesa_path = path.join(dep_path, "out", "lib", "gallium") env["LD_LIBRARY_PATH"] = osmesa_path env["GALLIUM_DRIVER"] = "softpipe" elif is_macosx(): @@ -229,6 +229,8 @@ def set_osmesa_env(bin_path, env): "out", "src", "gallium", "targets", "osmesa", ".libs") glapi_path = path.join(find_dep_path_newest('osmesa-src', bin_path), "out", "src", "mapi", "shared-glapi", ".libs") + if not (osmesa_path and glapi_path): + return None env["DYLD_LIBRARY_PATH"] = osmesa_path + ":" + glapi_path env["GALLIUM_DRIVER"] = "softpipe" return env diff --git a/servo/python/servo/testing_commands.py b/servo/python/servo/testing_commands.py index a2c752aeebca..3351984290df 100644 --- a/servo/python/servo/testing_commands.py +++ b/servo/python/servo/testing_commands.py @@ -734,8 +734,9 @@ class MachCommands(CommandBase): # On Linux and mac, find the OSMesa software rendering library and # add it to the dynamic linker search path. try: - args = [self.get_binary_path(use_release, not use_release)] - set_osmesa_env(args[0], os.environ) + bin_path = self.get_binary_path(use_release, not use_release) + if not set_osmesa_env(bin_path, os.environ): + print("Warning: Cannot set the path to OSMesa library.") except BuildNotFound: # This can occur when cross compiling (e.g. arm64), in which case # we won't run the tests anyway so can safely ignore this step.