Modified: trunk/Tools/ChangeLog (271937 => 271938)
--- trunk/Tools/ChangeLog 2021-01-27 08:41:41 UTC (rev 271937)
+++ trunk/Tools/ChangeLog 2021-01-27 09:05:59 UTC (rev 271938)
@@ -1,3 +1,17 @@
+2021-01-27 Philippe Normand <[email protected]> and Lauro Moura <[email protected]>
+
+ [Flatpak SDK] Flatpak 1.10 environment variable issues
+ https://bugs.webkit.org/show_bug.cgi?id=220781
+
+ Reviewed by Adrian Perez de Castro.
+
+ Flatpak no longer passes its env variables to bwrap, so the workaround is now to serialize
+ it on-disk in a JSON file and load it from our webkit-bwrap script.
+
+ * flatpak/flatpakutils.py:
+ (WebkitFlatpak.run_in_sandbox):
+ * flatpak/webkit-bwrap:
+
2021-01-26 Sihui Liu <[email protected]>
Mute audio capture for speech recognition based on shouldInterruptAudioOnPageVisibilityChange when page is invisible
Modified: trunk/Tools/flatpak/flatpakutils.py (271937 => 271938)
--- trunk/Tools/flatpak/flatpakutils.py 2021-01-27 08:41:41 UTC (rev 271937)
+++ trunk/Tools/flatpak/flatpakutils.py 2021-01-27 09:05:59 UTC (rev 271938)
@@ -37,6 +37,7 @@
from webkitpy.common.system.logutils import configure_logging
import toml
+import json
try:
from urllib.parse import urlparse # pylint: disable=E0611
@@ -48,12 +49,8 @@
except ImportError:
from urllib2 import urlopen
-FLATPAK_REQ = [
- ("flatpak", "1.4.4"),
-]
+FLATPAK_REQUIRED_VERSION = "1.4.4"
-FLATPAK_VERSION = {}
-
scriptdir = os.path.abspath(os.path.dirname(__file__))
_log = logging.getLogger(__name__)
@@ -146,33 +143,32 @@
def check_flatpak(verbose=True):
# Flatpak is only supported on Linux.
if not sys.platform.startswith("linux"):
- return False
+ return ()
- for app, required_version in FLATPAK_REQ:
- try:
- output = run_sanitized([app, "--version"], gather_output=True)
- except (subprocess.CalledProcessError, OSError):
- if verbose:
- Console.error_message("You need to install %s >= %s"
- " to be able to use the '%s' script.\n\n"
- "You can find some informations about"
- " how to install it for your distribution at:\n"
- " * https://flatpak.org/\n", app, required_version,
- sys.argv[0])
- return False
+ required_version = FLATPAK_REQUIRED_VERSION
+ try:
+ output = run_sanitized(["flatpak", "--version"], gather_output=True)
+ except (subprocess.CalledProcessError, OSError):
+ if verbose:
+ Console.error_message("You need to install flatpak >= %s"
+ " to be able to use the '%s' script.\n\n"
+ "You can find some informations about"
+ " how to install it for your distribution at:\n"
+ " * https://flatpak.org/\n", required_version,
+ sys.argv[0])
+ return ()
- def comparable_version(version):
- return tuple(map(int, (version.split("."))))
+ def comparable_version(version):
+ return tuple(map(int, (version.split("."))))
- version = output.split(" ")[1].strip("\n")
- current = comparable_version(version)
- FLATPAK_VERSION[app] = current
- if current < comparable_version(required_version):
- Console.error_message("%s %s required but %s found. Please update and try again\n",
- app, required_version, version)
- return False
+ version = output.split(" ")[1].strip("\n")
+ current_version = comparable_version(version)
+ if current_version < comparable_version(required_version):
+ Console.error_message("flatpak %s required but %s found. Please update and try again\n",
+ required_version, version)
+ return ()
- return True
+ return current_version
class FlatpakObject:
@@ -559,7 +555,8 @@
self.sccache_config_file = os.path.join(self.flatpak_build_path, 'sccache.toml')
Console.quiet = self.quiet
- if not check_flatpak():
+ self.flatpak_version = check_flatpak()
+ if not self.flatpak_version:
return False
self._reset_repository()
@@ -852,9 +849,16 @@
if not building_gst and args[0] != "sccache":
extra_flatpak_args.extend(self.setup_gstbuild(building))
+ flatpak_env = os.environ
+ for envvar in flatpak_env.keys():
+ if envvar.startswith("LC_") or envvar.startswith("LANG"):
+ del flatpak_env[envvar]
+ if self.flatpak_version >= (1, 10, 0):
+ flatpak_command.append("--unset-env=%s" % envvar)
+
flatpak_command += extra_flatpak_args + ['--command=%s' % args[0], "org.webkit.Sdk"] + args[1:]
- flatpak_env = os.environ
+
flatpak_env.update({
"FLATPAK_BWRAP": os.path.join(scriptdir, "webkit-bwrap"),
"WEBKIT_BUILD_DIR_BIND_MOUNT": "%s:%s" % (sandbox_build_path, self.build_path),
@@ -861,10 +865,16 @@
"WEBKIT_FLATPAK_USER_DIR": os.environ["FLATPAK_USER_DIR"],
})
+ env_file = os.path.join(self.build_root, 'flatpak-env.json')
+ with open(env_file, 'w') as f:
+ json.dump(dict(flatpak_env), f, indent=2)
+
try:
return self.execute_command(flatpak_command, stdout=stdout, env=flatpak_env)
except KeyboardInterrupt:
return 0
+ finally:
+ os.remove(env_file)
return 0
Modified: trunk/Tools/flatpak/webkit-bwrap (271937 => 271938)
--- trunk/Tools/flatpak/webkit-bwrap 2021-01-27 08:41:41 UTC (rev 271937)
+++ trunk/Tools/flatpak/webkit-bwrap 2021-01-27 09:05:59 UTC (rev 271938)
@@ -22,6 +22,7 @@
import shlex
import sys
import tempfile
+import json
scriptdir = os.path.abspath(os.path.dirname(__file__))
@@ -28,6 +29,7 @@
def main(args: list) -> int:
tmpdir = tempfile.gettempdir()
source_root = os.path.normpath(os.path.abspath(os.path.join(scriptdir, '../../')))
+ build_root = os.path.join(source_root, 'WebKitBuild')
bind_mounts = {
"/app/webkit": source_root,
# Access to /run/host is required by the crash log reporter.
@@ -35,7 +37,11 @@
"/run/shm": "/dev/shm",
}
- flatpak_user_dir = os.environ.get("WEBKIT_FLATPAK_USER_DIR")
+ environ = {}
+ with open(os.path.join(build_root, 'flatpak-env.json')) as f:
+ environ = json.load(f)
+
+ flatpak_user_dir = environ.get("WEBKIT_FLATPAK_USER_DIR")
if flatpak_user_dir:
bind_mounts["/var/tmp"] = os.path.join(flatpak_user_dir, "var", "tmp")
@@ -43,16 +49,16 @@
"/run/icecc": "/var/run/icecc"
}
- build_path = os.environ.get("WEBKIT_BUILD_DIR_BIND_MOUNT")
+ build_path = environ.get("WEBKIT_BUILD_DIR_BIND_MOUNT")
if build_path:
dest, src = ""
try_bind_mounts[dest] = src
- coredumps_dir = os.environ.get("WEBKIT_CORE_DUMPS_DIRECTORY")
+ coredumps_dir = environ.get("WEBKIT_CORE_DUMPS_DIRECTORY")
if coredumps_dir:
try_bind_mounts[coredumps_dir] = coredumps_dir
- xdg_runtime_dir = os.environ.get("XDG_RUNTIME_DIR")
+ xdg_runtime_dir = environ.get("XDG_RUNTIME_DIR")
if xdg_runtime_dir:
pw_socket = os.path.join(xdg_runtime_dir, "pipewire-0")
try_bind_mounts[pw_socket] = pw_socket
@@ -64,7 +70,7 @@
for dst, src in try_bind_mounts.items():
bwrap_args.extend(("--bind-try", src, dst))
- for env in os.environ.keys():
+ for env in environ.keys():
if env.startswith("LC_") or env == "LANGUAGE":
bwrap_args.extend(("--unsetenv", env))
bwrap_args.extend(("--setenv", "LANG", "en_US.UTF-8"))