WebKit Bugzilla
Attachment 342945 Details for
Bug 186771
: [WPE]: Add a way to setup our development environment inside flatpak
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
[WPE]: Add a way to setup our development environment inside flatpak
WPE-Add-a-way-to-setup-our-development-environment.patch (text/plain), 61.92 KB, created by
Thibault Saunier
on 2018-06-18 09:45:30 PDT
(
hide
)
Description:
[WPE]: Add a way to setup our development environment inside flatpak
Filename:
MIME Type:
Creator:
Thibault Saunier
Created:
2018-06-18 09:45:30 PDT
Size:
61.92 KB
patch
obsolete
>From 512bc25387fbe12b3aa3124f90c4f03f3235006b Mon Sep 17 00:00:00 2001 >From: Thibault Saunier <tsaunier@igalia.com> >Date: Mon, 4 Jun 2018 14:57:08 -0400 >Subject: [PATCH xserver] [WPE]: Add a way to setup our development environment > inside flatpak > >https://bugs.webkit.org/show_bug.cgi?id=186771 >--- > LayoutTests/http/conf/flatpak-httpd.conf | 153 ++++ > Tools/Scripts/webkit-flatpak | 791 ++++++++++++++++++ > Tools/Scripts/webkitpy/port/base.py | 7 +- > Tools/Scripts/webkitpy/port/gtk.py | 1 + > .../webkitpy/port/linux_get_crash_log.py | 38 +- > Tools/Scripts/webkitpy/port/wpe.py | 6 + > Tools/flatpak/files/default.xkm | Bin 0 -> 12032 bytes > Tools/flatpak/files/httpd-autogen.sh | 1 + > Tools/flatpak/org.webkit.GTK.yaml | 60 ++ > Tools/flatpak/org.webkit.WPE.yaml | 47 ++ > Tools/flatpak/org.webkit.WebKit.yaml | 155 ++++ > ...re-use-pkg-config-for-PCRE-detection.patch | 50 ++ > ...0001-HACK-Avoid-compiling-a-kbm-file.patch | 50 ++ > 13 files changed, 1339 insertions(+), 20 deletions(-) > create mode 100644 LayoutTests/http/conf/flatpak-httpd.conf > create mode 100755 Tools/Scripts/webkit-flatpak > create mode 100644 Tools/flatpak/files/default.xkm > create mode 100755 Tools/flatpak/files/httpd-autogen.sh > create mode 100644 Tools/flatpak/org.webkit.GTK.yaml > create mode 100644 Tools/flatpak/org.webkit.WPE.yaml > create mode 100644 Tools/flatpak/org.webkit.WebKit.yaml > create mode 100644 Tools/flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch > create mode 100644 Tools/flatpak/patches/xvfb-0001-HACK-Avoid-compiling-a-kbm-file.patch > >diff --git a/LayoutTests/http/conf/flatpak-httpd.conf b/LayoutTests/http/conf/flatpak-httpd.conf >new file mode 100644 >index 00000000000..9d41435f87b >--- /dev/null >+++ b/LayoutTests/http/conf/flatpak-httpd.conf >@@ -0,0 +1,153 @@ >+ServerTokens OS >+ServerRoot "/app/" >+ >+PidFile "/tmp/WebKit/httpd.pid" >+ScoreBoardFile "/tmp/WebKit/httpd.scoreboard" >+ >+Timeout 300 >+KeepAlive On >+MaxKeepAliveRequests 100 >+KeepAliveTimeout 15 >+ >+MinSpareServers 1 >+MaxSpareServers 5 >+StartServers 1 >+MaxClients 150 >+MaxRequestsPerChild 100000 >+ >+LoadModule mpm_prefork_module modules/mod_mpm_prefork.so >+LoadModule authz_core_module modules/mod_authz_core.so >+LoadModule authz_host_module modules/mod_authz_host.so >+LoadModule include_module modules/mod_include.so >+LoadModule headers_module modules/mod_headers.so >+LoadModule mime_module modules/mod_mime.so >+LoadModule negotiation_module modules/mod_negotiation.so >+LoadModule actions_module modules/mod_actions.so >+LoadModule alias_module modules/mod_alias.so >+LoadModule rewrite_module modules/mod_rewrite.so >+LoadModule unixd_module modules/mod_unixd.so >+LoadModule cgi_module modules/mod_cgi.so >+#LoadModule access_compat_module modules/mod_access_compat.so >+LoadModule log_config_module modules/mod_log_config.so >+#LoadModule imagemap_module modules/mod_imagemap.so >+LoadModule ssl_module modules/mod_ssl.so >+LoadModule php7_module modules/libphp7.so >+LoadModule asis_module modules/mod_asis.so >+ >+ServerName 127.0.0.1 >+ >+<Directory /> >+ Options Indexes FollowSymLinks MultiViews ExecCGI Includes >+ AllowOverride All >+ Require all granted >+</Directory> >+ >+AccessFileName .htaccess >+ >+<Files ~ "^\.([Hh][Tt]|[Dd][Ss]_[Ss])"> >+ Require all denied >+</Files> >+ >+UseCanonicalName On >+HostnameLookups Off >+ >+TypesConfig /etc/mime.types >+ >+LogLevel warn >+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined >+LogFormat "%h %l %u %t \"%r\" %>s %b" common >+LogFormat "%{Referer}i -> %U" referer >+LogFormat "%{User-agent}i" agent >+ErrorLog /tmp/WebKit/error_log >+ >+ServerSignature On >+ >+AddLanguage ca .ca >+AddLanguage cs .cz .cs >+AddLanguage da .dk >+AddLanguage de .de >+AddLanguage el .el >+AddLanguage en .en >+AddLanguage eo .eo >+AddLanguage es .es >+AddLanguage et .et >+AddLanguage fr .fr >+AddLanguage he .he >+AddLanguage hr .hr >+AddLanguage it .it >+AddLanguage ja .ja >+AddLanguage ko .ko >+AddLanguage ltz .ltz >+AddLanguage nl .nl >+AddLanguage nn .nn >+AddLanguage no .no >+AddLanguage pl .po >+AddLanguage pt .pt >+AddLanguage pt-BR .pt-br >+AddLanguage ru .ru >+AddLanguage sv .sv >+AddLanguage zh-CN .zh-cn >+AddLanguage zh-TW .zh-tw >+AddCharset Big5 .Big5 .big5 >+AddCharset WINDOWS-1251 .cp-1251 >+AddCharset CP866 .cp866 >+AddCharset ISO-8859-5 .iso-ru >+AddCharset KOI8-R .koi8-r >+AddCharset UCS-2 .ucs2 >+AddCharset UCS-4 .ucs4 >+AddCharset UTF-8 .utf8 >+ >+<IfModule mod_negotiation.c> >+ LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW >+</IfModule> >+ >+AddType application/x-tar .tgz >+ >+AddEncoding x-compress .Z >+AddEncoding x-gzip .gz .tgz >+ >+AddType application/x-x509-ca-cert .crt >+AddType application/x-pkcs7-crl .crl >+ >+AddHandler cgi-script .cgi .pl >+ >+AddType text/html .shtml >+AddOutputFilter INCLUDES .shtml >+ >+AddHandler send-as-is asis >+ >+<IfModule mod_php5.c> >+ AddType application/x-httpd-php .php >+ AddType application/x-httpd-php .bat >+ AddType application/x-httpd-php-source .phps >+ >+ <IfModule mod_dir.c> >+ DirectoryIndex index.html index.php >+ </IfModule> >+ >+ php_flag log_errors on >+ php_flag short_open_tag on >+</IfModule> >+ >+<IfModule mod_rewrite.c> >+ RewriteEngine On >+ RewriteCond %{REQUEST_METHOD} ^TRACE >+ RewriteRule .* - [F] >+</IfModule> >+ >+<VirtualHost *:8443> >+ ServerName 127.0.0.1 >+ SSLEngine On >+</VirtualHost> >+ >+# >+# Apple-specific filesystem protection. >+# >+<Files "rsrc"> >+ Require all denied >+</Files> >+ >+<Directory ~ ".*\.\.namedfork"> >+ Require all denied >+</Directory> >+ >diff --git a/Tools/Scripts/webkit-flatpak b/Tools/Scripts/webkit-flatpak >new file mode 100755 >index 00000000000..04bc59eed62 >--- /dev/null >+++ b/Tools/Scripts/webkit-flatpak >@@ -0,0 +1,791 @@ >+#!/usr/bin/env python3 >+# Copyright (c) 2018, Thibault Saunier <tsaunier@igalia.com> >+# >+# This program is free software; you can redistribute it and/or >+# modify it under the terms of the GNU Lesser General Public >+# License as published by the Free Software Foundation; either >+# version 2.1 of the License, or (at your option) any later version. >+# >+# This program is distributed in the hope that it will be useful, >+# but WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+# Lesser General Public License for more details. >+# >+# You should have received a copy of the GNU Lesser General Public >+# License along with this program; if not, write to the >+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, >+# Boston, MA 02110-1301, USA. >+# pylint: disable=missing-docstring,invalid-name >+ >+import argparse >+import configparser >+import glob >+import json >+import os >+import shlex >+import shutil >+import subprocess >+import sys >+import tempfile >+import venv >+import re >+import fileinput >+import pickle >+ >+try: >+ import yaml >+except ModuleNotFoundError: >+ print("PyYaml not found, please install it before continuing") >+ yaml = None >+ sys.exit(1) >+ >+from urllib.parse import urlparse >+from urllib.request import urlretrieve >+from enum import Enum >+ >+FLATPAK_REQ = [ >+ ("flatpak", "0.10.0"), >+ ("flatpak-builder", "0.10.0"), >+] >+ >+scriptdir = os.path.abspath(os.path.dirname(__file__)) >+ >+ >+class Colors(Enum): >+ HEADER = "\033[95m" >+ OKBLUE = "\033[94m" >+ OKGREEN = "\033[92m" >+ WARNING = "\033[93m" >+ FAIL = "\033[91m" >+ ENDC = "\033[0m" >+ >+ >+class Console: # pylint: disable=too-few-public-methods >+ >+ quiet = False >+ >+ @classmethod >+ def message(cls, str_format, *args): >+ if cls.quiet: >+ return >+ >+ if args: >+ print(str_format % args) >+ else: >+ print(str_format) >+ >+ # Flush so that messages are printed at the right time >+ # as we use many subprocesses. >+ sys.stdout.flush() >+ >+ >+def remove_extension_points(array): >+ result_args = [] >+ for arg in array: >+ if(not arg.startswith('--extension')): >+ result_args.append(arg) >+ return result_args >+ >+ >+def remove_comments(string): >+ pattern = r"(\".*?\"|\'.*?\')|(/\*.*?\*/|//[^\r\n]*$)" >+ # first group captures quoted strings (double or single) >+ # second group captures comments (//single-line or /* multi-line */) >+ regex = re.compile(pattern, re.MULTILINE | re.DOTALL) >+ >+ def _replacer(match): >+ # if the 2nd group (capturing comments) is not None, >+ # it means we have captured a non-quoted (real) comment string. >+ if match.group(2) is not None: >+ return "" # so we will return empty to remove the comment >+ else: # otherwise, we will return the 1st group >+ return match.group(1) # captured quoted-string >+ return regex.sub(_replacer, string) >+ >+ >+def load_manifest(manifest_path, port_name=None, command=None): >+ is_yaml = manifest_path.endswith('.yaml') >+ if is_yaml and not yaml: >+ print("Trying to load a yaml manifest but python 'yaml' is not installed") >+ >+ return False >+ >+ with open(manifest_path, "r") as mr: >+ contents = mr.read() >+ >+ contents = contents % {"COMMAND": command, "PORTNAME": port_name} >+ if is_yaml: >+ manifest = yaml.load(contents) >+ else: >+ contents = remove_comments(contents) >+ manifest = json.loads(contents) >+ >+ return manifest >+ >+ >+def expand_manifest(manifest_path, outfile, port_name, source_root, command): >+ """Creates the manifest file.""" >+ try: >+ os.remove(outfile) >+ except FileNotFoundError: >+ pass >+ >+ manifest = load_manifest(manifest_path, port_name, command) >+ if not manifest: >+ return False >+ >+ if "sdk-hash" in manifest: >+ del manifest["sdk-hash"] >+ if "runtime-hash" in manifest: >+ del manifest["runtime-hash"] >+ i = 0 >+ all_modules = [] >+ >+ overriden_modules = [] >+ if "WEBKIT_EXTRA_MODULESETS" in os.environ: >+ overriden_modules = load_manifest(os.environ["WEBKIT_EXTRA_MODULESETS"]) >+ if not overriden_modules: >+ overriden_modules = [] >+ for modules in manifest["modules"]: >+ submanifest_path = None >+ if type(modules) is str: >+ submanifest_path = os.path.join(os.path.dirname(manifest_path), modules) >+ modules = load_manifest(submanifest_path, port_name, command) >+ >+ if not isinstance(modules, list): >+ modules = [modules] >+ >+ for module in modules: >+ for overriden_module in overriden_modules: >+ if module['name'] == overriden_module['name']: >+ module = overriden_module >+ overriden_modules.remove(module) >+ break >+ >+ all_modules.append(module) >+ >+ # And add overriden modules right before the webkit port build def. >+ for overriden_module in overriden_modules: >+ all_modules.insert(-1, overriden_module) >+ >+ manifest["modules"] = all_modules >+ for module in manifest["modules"]: >+ submanifest_path = None >+ if module["sources"][0]["type"] == "git": >+ if port_name == module["name"]: >+ repo = "file://" + source_root >+ module["sources"][0]["url"] = repo >+ >+ for source in module["sources"]: >+ if source["type"] == "patch" or source["type"] == "file": >+ if(submanifest_path is not None): >+ source["path"] = os.path.join(os.path.dirname(submanifest_path), source["path"]) >+ else: >+ source["path"] = os.path.join(os.path.dirname(manifest_path), source["path"]) >+ i += 1 >+ >+ with open(outfile, "w") as of: >+ print(json.dumps(manifest, indent=4), file=of) >+ >+ return True >+ >+ >+class FlatpakObject: # pylint: disable=too-few-public-methods >+ >+ def __init__(self, user): >+ self.user = user >+ >+ def flatpak(self, command, *args, show_output=False, comment=None): >+ if comment: >+ Console.message(comment) >+ >+ command = ["flatpak", command] >+ if self.user: >+ res = subprocess.check_output(command + ["--help"]).decode("utf-8") >+ if "--user" in res: >+ command.append("--user") >+ command.extend(args) >+ >+ if not show_output: >+ return subprocess.check_output(command).decode("utf-8") >+ >+ return subprocess.check_call(command) >+ >+ >+class FlatpakPackages(FlatpakObject): # pylint: disable=too-few-public-methods >+ >+ def __init__(self, repos, user=True): >+ FlatpakObject.__init__(self, user=user) >+ >+ self.repos = repos >+ >+ self.runtimes = self.__detect_runtimes() >+ self.apps = self.__detect_apps() >+ self.packages = self.runtimes + self.apps >+ >+ def __detect_packages(self, *args): >+ packs = [] >+ package_defs = [rd >+ for rd in self.flatpak("list", "-d", *args).split("\n") >+ if rd] >+ for package_def in package_defs: >+ splited_packaged_def = package_def.split() >+ name, arch, branch = splited_packaged_def[0].split("/") >+ >+ # If installed from a file, the package is in no repo >+ repo_name = splited_packaged_def[1] >+ repo = self.repos.repos.get(repo_name) >+ >+ packs.append(FlatpakPackage(name, branch, repo, arch)) >+ >+ return packs >+ >+ def __detect_runtimes(self): >+ return self.__detect_packages("--runtime") >+ >+ def __detect_apps(self): >+ return self.__detect_packages() >+ >+ def __iter__(self): >+ for package in self.packages: >+ yield package >+ >+ >+class FlatpakRepos(FlatpakObject): >+ >+ def __init__(self, user=True): >+ FlatpakObject.__init__(self, user=user) >+ self.repos = {} >+ self.update() >+ >+ def update(self): >+ self.repos = {} >+ remotes = [row >+ for row in self.flatpak("remote-list", "-d").split("\n") >+ if row] >+ for repo in remotes: >+ for components in [repo.split(" "), repo.split("\t")]: >+ if len(components) == 1: >+ components = repo.split("\t") >+ name = components[0] >+ desc = "" >+ url = None >+ for elem in components[1:]: >+ if not elem: >+ continue >+ parsed_url = urlparse(elem) >+ if parsed_url.scheme: >+ url = elem >+ break >+ >+ if desc: >+ desc += " " >+ desc += elem >+ >+ if url: >+ break >+ >+ if not url: >+ Console.message("No valid URI found for: %s", repo) >+ continue >+ >+ self.repos[name] = FlatpakRepo(name, url, desc, repos=self) >+ >+ self.packages = FlatpakPackages(self) >+ >+ def add(self, repo, override=True): >+ same_name = None >+ for name, tmprepo in self.repos.items(): >+ if repo.url == tmprepo.url: >+ return tmprepo >+ elif repo.name == name: >+ same_name = tmprepo >+ >+ if same_name: >+ if override: >+ self.flatpak("remote-modify", repo.name, "--url=" + repo.url, >+ comment="Setting repo %s URL from %s to %s" >+ % (repo.name, same_name.url, repo.url)) >+ same_name.url = repo.url >+ >+ return same_name >+ else: >+ return None >+ else: >+ self.flatpak("remote-add", repo.name, "--from", repo.repo_file.name, >+ "--if-not-exists", >+ comment="Adding repo %s" % repo.name) >+ >+ repo.repos = self >+ return repo >+ >+ >+class FlatpakRepo(FlatpakObject): # pylint: disable=too-few-public-methods >+ >+ def __init__(self, name, desc=None, url=None, # pylint: disable=too-many-arguments >+ repo_file=None, user=True, repos=None): >+ FlatpakObject.__init__(self, user=user) >+ >+ self.name = name >+ self.url = url >+ self.desc = desc >+ self.repo_file_name = repo_file >+ self._repo_file = None >+ self.repos = repos >+ assert name >+ if repo_file and not url: >+ repo = configparser.ConfigParser() >+ repo.read(self.repo_file.name) >+ self.url = repo["Flatpak Repo"]["Url"] >+ else: >+ assert url >+ >+ @property >+ def repo_file(self): >+ if self._repo_file: >+ return self._repo_file >+ >+ assert self.repo_file_name >+ self._repo_file = tempfile.NamedTemporaryFile(mode="w") >+ urlretrieve(self.repo_file_name, self._repo_file.name) >+ >+ return self._repo_file >+ >+ >+class FlatpakPackage(FlatpakObject): >+ """A flatpak app.""" >+ >+ def __init__(self, name, branch, repo, arch, user=True, hash=None): # pylint: disable=too-many-arguments >+ FlatpakObject.__init__(self, user=user) >+ >+ self.name = name >+ self.branch = str(branch) >+ self.repo = repo >+ self.arch = arch >+ self.hash = hash >+ >+ def __str__(self): >+ return "%s/%s/%s %s" % (self.name, self.arch, self.branch, self.repo.name) >+ >+ def is_installed(self, branch): >+ if not self.repo: >+ # Bundle installed from file >+ return True >+ >+ self.repo.repos.update() >+ for package in self.repo.repos.packages: >+ if package.name == self.name and \ >+ package.branch == branch and \ >+ package.arch == self.arch: >+ return True >+ >+ return False >+ >+ def install(self): >+ if not self.repo: >+ return False >+ >+ self.flatpak("install", self.repo.name, self.name, "--reinstall", >+ self.branch, show_output=True, >+ comment="Installing from " + self.repo.name + " " + >+ self.name + " " + self.arch + " " + self.branch) >+ >+ def update(self): >+ if not self.is_installed(self.branch): >+ return self.install() >+ >+ extra_args = [] >+ comment = "Updating %s" % self.name >+ if self.hash: >+ extra_args = ["--commit", self.hash] >+ comment += " to %s" % self.hash >+ >+ self.flatpak("update", self.name, self.branch, show_output=True, >+ *extra_args, comment=comment) >+ >+ >+class FlatpakModule(FlatpakObject): >+ >+ def __init__(self, flatpak_app, manifest_path, module_name, >+ debug, cmakeargs, makeargs): >+ self.flatpak_app = flatpak_app >+ >+ manifest = load_manifest(manifest_path) >+ if not manifest: >+ exit(1) >+ >+ for module in manifest["modules"]: >+ if module["name"] == module_name: >+ break >+ self.source_path = module["sources"][0]["url"] >+ assert urlparse(self.source_path).scheme == "file" >+ self.source_path = urlparse(self.source_path).path >+ self.build_system = module.get("buildsystem", "autotools") >+ self.config_options = module.get("config-opts", []) >+ self.make_args = module.get("make-args", []) >+ self.make_install_args = module.get("make-install-args", []) >+ self.use_builddir = module.get("builddir", "false") >+ self.build_commands = module.get("build-commands", []) >+ self.debug = debug >+ self.cmakeargs = cmakeargs >+ self.makeargs = makeargs >+ >+ def install_file(self, **kwargs): >+ return "echo \"install %(src)s %(dest)s\"\ninstall -D %(src)s %(dest)s\npatchelf --remove-rpath %(dest)s 2>&1 |grep -v \"not an ELF\" || true\n" % (kwargs) >+ >+ def run(self, builddir): >+ for command in self.build_commands: >+ command = shlex.split(command) >+ if self.debug: >+ command.append('--debug') >+ else: >+ command.append('--release') >+ if self.cmakeargs: >+ command.append('--cmakeargs=' + self.cmakeargs) >+ if self.makeargs: >+ command.append('--makeargs=' + self.makeargs) >+ self.flatpak_app.run_in_sandbox(*command, cwd=self.source_path) >+ >+class FlatpakDev: # pylint: disable=too-many-instance-attributes >+ >+ def __init__(self): >+ self.sdk_repo = None >+ self.runtime = None >+ self.locale = None >+ self.sdk = None >+ self.sdk_debug = None >+ self.app = None >+ >+ self.quiet = False >+ self.packs = [] >+ self.update = False >+ self.args = [] >+ self.finish_args = None >+ >+ self.debug = False >+ self.gtk = False >+ self.wpe = True >+ self.clean = False >+ self.run_tests = None >+ self.source_root = os.path.abspath(os.path.join(scriptdir, '../../')) >+ # Where the source folder is mounted inside the sandbox. >+ self.sandbox_source_root = "/app/webkit" >+ >+ self.build_app = False >+ self.build_all = False >+ >+ self.sdk_branch = None >+ self.port = "WPE" >+ self.manifest_path = None >+ self.name = None >+ self.build_name = None >+ self.flatpak_root_path = None >+ self.cache_path = None >+ self.app_module = None >+ self.flatpak_default_args = [] >+ >+ # Default application to run in the sandbox >+ self.command = None >+ self.user_command = [] >+ >+ # debug options >+ self.gdb = None >+ self.coredumpctl_matches = "" >+ >+ # Extra build options >+ self.cmakeargs = "" >+ self.makeargs = "" >+ >+ def check_flatpak(self): >+ for app, version in FLATPAK_REQ: >+ try: >+ output = subprocess.check_output([app, "--version"]) >+ except FileNotFoundError: >+ Console.message("\n%sYou 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" >+ " * http://flatpak.org/%s\n", Colors.FAIL, >+ app, version, sys.argv[0], Colors.ENDC) >+ exit(1) >+ >+ def comparable_version(version): >+ return [int(number) for number in version.split(".")] >+ >+ version = output.decode("utf-8").split(" ")[1].strip("\n") >+ if comparable_version(version) < comparable_version(version): >+ Console.message("\n%s%s %s required but %s found." >+ " Please update and try again%s\n", Colors.FAIL, >+ app, version, version, Colors.ENDC) >+ exit(1) >+ >+ def clean_args(self): >+ if self.gtk: >+ self.port = 'GTK' >+ >+ if self.gdb is None and '--gdb' in sys.argv: >+ self.gdb = "" >+ >+ self.command = "%s %s %s" % (os.path.join(self.sandbox_source_root, >+ "Tools/Scripts/run-minibrowser"), >+ "--gtk" if self.gtk else "--wpe", >+ " --debug" if self.debug else " --release") >+ >+ self.name = "org.webkit.%s" % self.port >+ self.manifest_path = os.path.abspath(os.path.join(scriptdir, '../flatpak/org.webkit.WebKit.yaml')) >+ self.build_name = self.name + "-generated" >+ >+ build_root = os.path.join(self.source_root, 'WebKitBuild') >+ self.flatpak_build_path = os.path.join(build_root, self.port, "FlatpakTree") >+ self.cache_path = os.path.join(build_root, "FlatpakCache") >+ self.build_path = os.path.join(build_root, self.port, "Debug" if self.debug else "Release") >+ os.makedirs(self.build_path, exist_ok=True) >+ >+ Console.quiet = self.quiet >+ self.check_flatpak() >+ >+ repos = FlatpakRepos() >+ self.sdk_repo = repos.add( >+ FlatpakRepo("flathub", >+ url="https://dl.flathub.org/repo/", >+ repo_file="https://dl.flathub.org/repo/flathub.flatpakrepo")) >+ >+ manifest = load_manifest(self.manifest_path) >+ if not manifest: >+ exit(1) >+ >+ self.sdk_branch = manifest["runtime-version"] >+ self.finish_args = manifest.get("finish-args", []) >+ self.finish_args = remove_extension_points(self.finish_args) >+ self.runtime = FlatpakPackage("org.gnome.Platform", self.sdk_branch, >+ self.sdk_repo, "x86_64", >+ hash=manifest.get("runtime-hash")) >+ self.locale = FlatpakPackage("org.gnome.Platform.Locale", >+ self.sdk_branch, self.sdk_repo, "x86_64") >+ self.sdk = FlatpakPackage("org.gnome.Sdk", self.sdk_branch, >+ self.sdk_repo, "x86_64", >+ hash=manifest.get("sdk-hash")) >+ self.packs = [self.runtime, self.locale, self.sdk] >+ >+ if self.debug: >+ self.sdk_debug = FlatpakPackage("org.gnome.Sdk.Debug", self.sdk_branch, >+ self.sdk_repo, "x86_64") >+ self.packs.append(self.sdk_debug) >+ self.manifest_generated_path = os.path.join(self.cache_path, >+ self.build_name + ".json") >+ >+ def run_in_sandbox(self, *args, cwd=None, remove_devices=False): >+ sandbox_build_path = os.path.join(self.sandbox_source_root, "WebKitBuild", >+ "Debug" if self.debug else "Release") >+ with tempfile.NamedTemporaryFile(mode="w") as tmpscript: >+ flatpak_command = ["flatpak", "build", >+ "--bind-mount=%s=%s" % (tempfile.gettempdir(), tempfile.gettempdir()), >+ "--bind-mount=%s=%s" % (self.sandbox_source_root, self.source_root), >+ # We mount WebKitBuild/PORTNAME/BuildType to /app/webkit/WebKitBuild/BuildType >+ # so we can build WPE and GTK in a same source tree. >+ "--bind-mount=%s=%s" % (sandbox_build_path, self.build_path)] >+ >+ forwarded = { >+ "WEBKIT_TOP_LEVEL": "/app/", >+ "TEST_RUNNER_INJECTED_BUNDLE_FILENAME": "/app/webkit/lib/libTestRunnerInjectedBundle.so", >+ } >+ >+ for envvar, value in os.environ.items(): >+ if envvar.split("_")[0] in ("GST", "GTK", "G") or \ >+ envvar in ["WAYLAND_DISPLAY", "DISPLAY", "LANG"]: >+ forwarded[envvar] = value >+ >+ for envvar, value in forwarded.items(): >+ flatpak_command.append("--env=%s=%s" % (envvar, value)) >+ >+ finish_args = self.finish_args >+ if remove_devices: >+ finish_args.remove("--device=all") >+ >+ flatpak_command += finish_args + [self.flatpak_build_path] >+ >+ shell_string = "" >+ if args: >+ if cwd: >+ shell_string = 'cd "%s" && "%s"' % (cwd, '" "'.join(args)) >+ else: >+ shell_string = '"%s"' % ('" "'.join(args)) >+ else: >+ shell_string = self.command >+ if self.args: >+ shell_string += ' "%s"' % '" "'.join(self.args) >+ >+ print(shell_string, file=tmpscript) >+ tmpscript.flush() >+ >+ Console.message('Running in sandbox: "%s" %s\n' %('" "'.join(flatpak_command), shell_string)) >+ flatpak_command.extend(['sh', tmpscript.name]) >+ >+ try: >+ subprocess.check_call(flatpak_command) >+ except subprocess.CalledProcessError as e: >+ print(e, file=sys.stderr) >+ exit(e.returncode) >+ >+ def run(self): >+ if self.clean: >+ if os.path.exists(self.flatpak_build_path): >+ shutil.rmtree(self.flatpak_build_path) >+ if os.path.exists(self.build_path): >+ shutil.rmtree(self.build_path) >+ >+ if self.update: >+ if not self.no_flatpak_update: >+ self.update_all() >+ >+ self.setup_dev_env() >+ >+ def setup_dev_env(self): >+ if not os.path.exists(os.path.join(self.build_path, "bin", "MiniBrowser")) \ >+ or not os.path.exists(os.path.join(self.build_path, self.flatpak_build_path)) \ >+ or self.update or self.build_all: >+ self.install_all() >+ Console.message("Building %s %s and dependencies in %s", >+ self.name, self.branch, self.flatpak_build_path) >+ >+ # Create environment dirs if necessary >+ os.makedirs(os.path.dirname(self.manifest_generated_path), exist_ok=True) >+ if not expand_manifest(self.manifest_path, self.manifest_generated_path, >+ self.name, self.sandbox_source_root, self.command): >+ exit(1) >+ >+ builder_args = ["flatpak-builder", "--disable-rofiles-fuse", "--state-dir", >+ self.cache_path, "--ccache", self.flatpak_build_path, "--force-clean", >+ self.manifest_generated_path] >+ builder_args.append("--build-only") >+ builder_args.append("--stop-at=%s" % self.name) >+ >+ try: >+ subprocess.check_call(["flatpak-builder", "--version"]) >+ except FileNotFoundError: >+ Console.message("\n%sYou need to install flatpak-builder%s\n", >+ Colors.FAIL, Colors.ENDC) >+ exit(1) >+ subprocess.check_call(builder_args) >+ >+ self.build_app = True >+ >+ >+ if self.build_app: >+ if not expand_manifest(self.manifest_path, self.manifest_generated_path, >+ self.name, self.sandbox_source_root, self.command): >+ exit(1) >+ self.app_module = FlatpakModule(self, self.manifest_generated_path, self.name, >+ self.debug, self.cmakeargs, self.makeargs) >+ self.app_module.run(self.cache_path) >+ else: >+ Console.message("Using %s prefix in %s", self.name, self.flatpak_build_path) >+ >+ if self.run_tests is not None: >+ test_launcher = [os.path.join(self.sandbox_source_root, 'Tools/Scripts/run-webkit-tests'), >+ "--debug" if self.debug else "--release", '--' + self.port.lower()] + self.run_tests >+ self.run_in_sandbox(*test_launcher, remove_devices=True) >+ elif self.gdb is not None: >+ self.run_gdb() >+ elif self.user_command: >+ self.run_in_sandbox(*self.user_command) >+ elif not self.update: >+ self.run_in_sandbox() >+ >+ def install_all(self): >+ for package in self.packs: >+ if not package.is_installed(self.sdk_branch): >+ package.install() >+ >+ def run_gdb(self): >+ if not shutil.which('coredumpctl'): >+ print("'coredumpctl' not present on the system, can't run.", >+ file=sys.stderr) >+ sys.exit(1) >+ >+ # We need access to the host from the sandbox to run. >+ with tempfile.NamedTemporaryFile() as coredump: >+ with tempfile.NamedTemporaryFile() as stderr: >+ subprocess.check_call(["coredumpctl", "dump"] + shlex.split(self.coredumpctl_matches), >+ stdout=coredump, stderr=stderr) >+ >+ with open(stderr.name, 'r') as stderrf: >+ stderr = stderrf.read() >+ executable, = re.findall(".*Executable: (.*)", stderr) >+ if not executable.startswith("/newroot"): >+ print("Executable %s doesn't seem to be a flatpaked application." % executable, >+ file=sys.stderr) >+ executable = executable.replace("/newroot", "") >+ args = ["gdb", executable, coredump.name] + shlex.split(self.gdb) >+ >+ self.run_in_sandbox(*args) >+ >+ def update_all(self): >+ for m in [self.runtime, self.sdk, self.sdk_debug]: >+ if m: >+ m.update() >+ >+if __name__ == "__main__": >+ flatpak_dev = FlatpakDev() >+ >+ parser = argparse.ArgumentParser(prog="flatpak-dev") >+ >+ general = parser.add_argument_group("General") >+ general.add_argument("--debug", >+ help="Compile with Debug configuration, also installs Sdk debug symboles.", >+ action="store_true") >+ general.add_argument("--gtk", dest="gtk", >+ action="store_true", >+ help="Build the GTK+ port") >+ general.add_argument("--wpe", dest="wpe", >+ action="store_true", >+ help="Build the WPE port", >+ default=True) >+ general.add_argument("-nf", "--no-flatpak-update", dest="no_flatpak_update", >+ action="store_true", >+ help="Do not update flaptak runtime/sdk") >+ general.add_argument("-u", "--update", dest="update", >+ action="store_true", >+ help="Update the runtime/sdk/app and rebuild the development environment if needed") >+ general.add_argument("-b", "--build-app", dest="build_app", >+ action="store_true", >+ help="Force rebuilding the app.") >+ general.add_argument("-ba", "--build-all", dest="build_all", >+ action="store_true", >+ help="Force rebuilding the app and its dependencies.") >+ general.add_argument("-q", "--quiet", dest="quiet", >+ action="store_true", >+ help="Do not print anything") >+ general.add_argument("-t", "--tests", dest="run_tests", >+ nargs=argparse.REMAINDER, >+ help="Run LayoutTests") >+ general.add_argument("-c", "--command", >+ nargs=argparse.REMAINDER, >+ help="The command to run in the sandbox", >+ dest="user_command") >+ general.add_argument("args", >+ nargs=argparse.REMAINDER, >+ help="Arguments passed when starting %s" % flatpak_dev.name) >+ general.add_argument("--name", dest="name", >+ help="The name of the component to develop", >+ default=flatpak_dev.name) >+ >+ debugoptions = parser.add_argument_group("Debugging") >+ debugoptions.add_argument("--gdb", nargs="?", help="Activate gdb, passing extra args to it if wanted.") >+ debugoptions.add_argument("-m", "--coredumpctl-matches", default="", help='Arguments to pass to gdb.') >+ >+ buildoptions = parser.add_argument_group("Extra build arguments") >+ buildoptions.add_argument("--makeargs", help="Optional Makefile flags") >+ buildoptions.add_argument("--cmakeargs", >+ help="One or more optional CMake flags (e.g. --cmakeargs=\"-DFOO=bar -DCMAKE_PREFIX_PATH=/usr/local\")") >+ >+ general.add_argument("--branch", dest="branch", >+ help="The flatpak branch to use (stable, master...)", >+ default="master") >+ general.add_argument("--clean", dest="clean", >+ action="store_true", >+ help="Clean previous builds and restart from scratch") >+ >+ parser.parse_args(namespace=flatpak_dev) >+ flatpak_dev.clean_args() >+ flatpak_dev.run() >\ No newline at end of file >diff --git a/Tools/Scripts/webkitpy/port/base.py b/Tools/Scripts/webkitpy/port/base.py >index 87caa97879a..dd90d0e4aa7 100644 >--- a/Tools/Scripts/webkitpy/port/base.py >+++ b/Tools/Scripts/webkitpy/port/base.py >@@ -1225,7 +1225,7 @@ class Port(object): > This is needed only by ports that use the apache_http_server module.""" > # The Apache binary path can vary depending on OS and distribution > # See http://wiki.apache.org/httpd/DistrosDefaultLayout >- for path in ["/usr/sbin/httpd", "/usr/sbin/apache2"]: >+ for path in ["/usr/sbin/httpd", "/usr/sbin/apache2", "/app/bin/httpd"]: > if self._filesystem.exists(path): > return path > _log.error("Could not find apache. Not installed or unknown path.") >@@ -1251,6 +1251,9 @@ class Port(object): > def _is_arch_based(self): > return self._filesystem.exists('/etc/arch-release') > >+ def _is_flatpak(self): >+ return self._filesystem.exists('/usr/manifest.json') >+ > def _apache_version(self): > config = self._executive.run_command([self._path_to_apache(), '-v']) > return re.sub(r'(?:.|\n)*Server version: Apache/(\d+\.\d+)(?:.|\n)*', r'\1', config) >@@ -1288,6 +1291,8 @@ class Port(object): > return 'debian-httpd-' + self._apache_version() + self._debian_php_version() + '.conf' > if self._is_arch_based(): > return 'archlinux-httpd.conf' >+ if self._is_flatpak(): >+ return 'flatpak-httpd.conf' > # All platforms use apache2 except for CYGWIN (and Mac OS X Tiger and prior, which we no longer support). > return 'apache' + self._apache_version() + '-httpd.conf' > >diff --git a/Tools/Scripts/webkitpy/port/gtk.py b/Tools/Scripts/webkitpy/port/gtk.py >index 42808b35e2b..4e55cd80d66 100644 >--- a/Tools/Scripts/webkitpy/port/gtk.py >+++ b/Tools/Scripts/webkitpy/port/gtk.py >@@ -122,6 +122,7 @@ class GtkPort(Port): > environment['TEST_RUNNER_INJECTED_BUNDLE_FILENAME'] = self._build_path('lib', 'libTestRunnerInjectedBundle.so') > environment['TEST_RUNNER_TEST_PLUGIN_PATH'] = self._build_path('lib', 'plugins') > self._copy_value_from_environ_if_set(environment, 'WEBKIT_OUTPUTDIR') >+ self._copy_value_from_environ_if_set(environment, 'WEBKIT_TOP_LEVEL') > self._copy_value_from_environ_if_set(environment, 'USE_PLAYBIN3') > self._copy_value_from_environ_if_set(environment, 'GST_DEBUG') > self._copy_value_from_environ_if_set(environment, 'GST_DEBUG_DUMP_DOT_DIR') >diff --git a/Tools/Scripts/webkitpy/port/linux_get_crash_log.py b/Tools/Scripts/webkitpy/port/linux_get_crash_log.py >index ca3a7989427..2e4594e0321 100644 >--- a/Tools/Scripts/webkitpy/port/linux_get_crash_log.py >+++ b/Tools/Scripts/webkitpy/port/linux_get_crash_log.py >@@ -58,7 +58,7 @@ class GDBCrashLogGenerator(object): > stdout = ('ERROR: The gdb process exited with non-zero return code %s\n\n' % proc.returncode) + stdout > return (stdout.decode('utf8', 'ignore'), errors) > >- def _get_trace_from_systemd(self, pid): >+ def _get_trace_from_systemd(self, coredumpctl, pid): > # Letting up to 5 seconds for the backtrace to be generated on the systemd side > for try_number in range(5): > if try_number != 0: >@@ -66,25 +66,23 @@ class GDBCrashLogGenerator(object): > time.sleep(1) > > try: >- info = self._executive.run_command(['coredumpctl', 'info', str(pid)], return_stderr=True) >+ info = self._executive.run_command(coredumpctl + ['info', "--since=" + time.strftime("%a %Y-%m-%d %H:%M:%S %Z", time.localtime(self.newer_than))], >+ return_stderr=True) > except ScriptError, OSError: > continue > >- if self.newer_than: >- found_newer = False >- # Coredumpctl will use the latest core dump with the specified PID >- # assume it is the right one. >- for timestamp in re.findall(r'Timestamp:.*(\d{4}-\d+-\d+ \d+:\d+:\d+)', info): >- date = time.mktime(datetime.datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S").timetuple()) >- if date > self.newer_than: >- found_newer = True >- break >+ found_newer = False >+ # Coredumpctl will use the latest core dump with the specified PID >+ # assume it is the right one. >+ pids = re.findall(r'PID: (\d+) \(.*\)', info) >+ if not pids: >+ print(self.name + "\n" + info) >+ continue > >- if not found_newer: >- continue >+ pid = pids[0] > > temp_file = tempfile.NamedTemporaryFile() >- if self._executive.run_command(['coredumpctl', 'dump', pid, '--output', temp_file.name], return_exit_code=True): >+ if self._executive.run_command(coredumpctl + ['dump', pid, '--output', temp_file.name], return_exit_code=True): > continue > > return self._get_gdb_output(temp_file.name) >@@ -105,10 +103,12 @@ class GDBCrashLogGenerator(object): > return filename.find(self.name) > -1 > > # Poor man which, ignore any failure. >- try: >- coredumpctl = not self._executive.run_command(['coredumpctl', '--version'], return_exit_code=True) >- except: >- coredumpctl = False >+ for coredumpctl in [['coredumpctl'], ['flatpak-spawn', '--host', 'coredumpctl'], []]: >+ try: >+ if not self._executive.run_command(coredumpctl, return_exit_code=True): >+ break >+ except: >+ continue > > if log_directory: > dumps = self._filesystem.files_under( >@@ -119,7 +119,7 @@ class GDBCrashLogGenerator(object): > if not self.newer_than or self._filesystem.mtime(coredump_path) > self.newer_than: > crash_log, errors = self._get_gdb_output(coredump_path) > elif coredumpctl: >- crash_log, errors = self._get_trace_from_systemd(pid_representation) >+ crash_log, errors = self._get_trace_from_systemd(coredumpctl, pid_representation) > > stderr_lines = errors + str(stderr or '<empty>').decode('utf8', 'ignore').splitlines() > errors_str = '\n'.join(('STDERR: ' + stderr_line) for stderr_line in stderr_lines) >diff --git a/Tools/Scripts/webkitpy/port/wpe.py b/Tools/Scripts/webkitpy/port/wpe.py >index cf78cbc0cb3..4c4e23d7542 100644 >--- a/Tools/Scripts/webkitpy/port/wpe.py >+++ b/Tools/Scripts/webkitpy/port/wpe.py >@@ -76,6 +76,12 @@ class WPEPort(Port): > environment['TEST_RUNNER_INJECTED_BUNDLE_FILENAME'] = self._build_path('lib', 'libTestRunnerInjectedBundle.so') > environment['TEST_RUNNER_TEST_PLUGIN_PATH'] = self._build_path('lib', 'plugins') > environment['WEBKIT_EXEC_PATH'] = self._build_path('bin') >+ self._copy_value_from_environ_if_set(environment, 'WEBKIT_OUTPUTDIR') >+ self._copy_value_from_environ_if_set(environment, 'WEBKIT_TOP_LEVEL') >+ self._copy_value_from_environ_if_set(environment, 'USE_PLAYBIN3') >+ self._copy_value_from_environ_if_set(environment, 'GST_DEBUG') >+ self._copy_value_from_environ_if_set(environment, 'GST_DEBUG_DUMP_DOT_DIR') >+ self._copy_value_from_environ_if_set(environment, 'GST_DEBUG_FILE') > return environment > > def check_sys_deps(self, needs_http): >diff --git a/Tools/flatpak/files/default.xkm b/Tools/flatpak/files/default.xkm >new file mode 100644 >index 0000000000000000000000000000000000000000..016f6b08f6d808580968ba02256d9075d48a47d0 >GIT binary patch >literal 12032 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 >Mkksd~bIIiY083K02><{9 > >literal 0 >HcmV?d00001 > >diff --git a/Tools/flatpak/files/httpd-autogen.sh b/Tools/flatpak/files/httpd-autogen.sh >new file mode 100755 >index 00000000000..6a0a473a825 >--- /dev/null >+++ b/Tools/flatpak/files/httpd-autogen.sh >@@ -0,0 +1 @@ >+autoreconf >\ No newline at end of file >diff --git a/Tools/flatpak/org.webkit.GTK.yaml b/Tools/flatpak/org.webkit.GTK.yaml >new file mode 100644 >index 00000000000..bf78b4a5d64 >--- /dev/null >+++ b/Tools/flatpak/org.webkit.GTK.yaml >@@ -0,0 +1,60 @@ >+- name: webkitgtk-test-fonts >+ no-autogen: true >+ sources: >+ - type: git >+ url: https://github.com/WebKitGTK/webkitgtk-test-fonts.git >+ buildsystem: simple >+ build-commands: >+ # FIXME: Make ActivateFontWPE smarter. >+ - make install DESTDIR=/app/WebKitBuild/DependenciesGTK/Root >+ >+- name: xorg-util-macros >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/xorg/util/macros.git >+ branch: util-macros-1.19.2 >+ >+- name: xorg-font-util >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/xorg/font/util.git >+ branch: font-util-1.3.1 >+ >+- name: xkbfile >+ sources: >+ - type: git >+ branch: libxkbfile-1.0.9 >+ url: https://anongit.freedesktop.org/git/xorg/lib/libxkbfile.git >+ >+- name: fontenc >+ sources: >+ - type: git >+ branch: libfontenc-1.1.3 >+ url: https://anongit.freedesktop.org/git/xorg/lib/libfontenc.git >+ >+- name: xfont >+ sources: >+ - type: git >+ branch: libXfont2-2.0.3 >+ url: https://anongit.freedesktop.org/git/xorg/lib/libXfont.git >+ >+- name: xvfb >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/xorg/xserver.git >+ branch: xorg-server-1.19.6 >+ - type: patch >+ path: patches/xvfb-0001-HACK-Avoid-compiling-a-kbm-file.patch >+ config-opts: >+ - --enable-xvfb >+ - --disable-xwayland >+ >+- name: org.webkit.GTK >+ sources: >+ - type: git >+ url: https://github.com/WebKit/WebKit.git >+ branch: mediastream-minus-enumerateDevices >+ buildsystem: simple >+ build-commands: >+ - /app/webkit/Tools/Scripts/build-webkit --gtk --prefix=/app >+ >diff --git a/Tools/flatpak/org.webkit.WPE.yaml b/Tools/flatpak/org.webkit.WPE.yaml >new file mode 100644 >index 00000000000..1a795874fe8 >--- /dev/null >+++ b/Tools/flatpak/org.webkit.WPE.yaml >@@ -0,0 +1,47 @@ >+- name: wpebackend >+ buildsystem: cmake-ninja >+ sources: >+ - type: git >+ url: https://github.com/WebPlatformForEmbedded/WPEBackend.git >+ branch: 761496dff51b6962200294b4fe2bc9529da731a8 >+- name: wpebackend-fdo >+ buildsystem: cmake-ninja >+ sources: >+ - type: git >+ url: https://github.com/Igalia/WPEBackend-fdo.git >+ branch: bdd46870b1dc3c92005343e3161bdd24f620b11d >+- name: lua >+ buildsystem: simple >+ build-commands: >+ - make MYCFLAGS="$CFLAGS -fPIC -DLUA_COMPAT_5_2 -DLUA_COMPAT_5_1" linux >+ - make install INSTALL_TOP=/app INSTALL_MAN=/app/share/man/man1 INSTALL_DATA='cp -d' >+ sources: >+ - type: archive >+ url: https://www.lua.org/ftp/lua-5.3.4.tar.gz >+ sha1: 79790cfd40e09ba796b01a571d4d63b52b1cd950 >+- name: luajit >+ buildsystem: simple >+ build-commands: >+ - make amalg PREFIX=/app >+ - make install PREFIX=/app >+ sources: >+ - type: archive >+ url: https://luajit.org/download/LuaJIT-2.0.5.tar.gz >+ md5: 48353202cbcacab84ee41a5a70ea0a2c >+- name: webkitgtk-test-fonts >+ no-autogen: true >+ sources: >+ - type: git >+ url: https://github.com/WebKitGTK/webkitgtk-test-fonts.git >+ buildsystem: simple >+ build-commands: >+ # FIXME: Make ActivateFontWPE smarter. >+ - make install DESTDIR=/app/WebKitBuild/DependenciesWPE/Root >+- name: org.webkit.WPE >+ sources: >+ - type: git >+ url: https://github.com/WebKit/WebKit.git >+ branch: mediastream-minus-enumerateDevices >+ buildsystem: simple >+ build-commands: >+ - /app/webkit/Tools/Scripts/build-webkit --wpe --prefix=/app >\ No newline at end of file >diff --git a/Tools/flatpak/org.webkit.WebKit.yaml b/Tools/flatpak/org.webkit.WebKit.yaml >new file mode 100644 >index 00000000000..a14dac78b54 >--- /dev/null >+++ b/Tools/flatpak/org.webkit.WebKit.yaml >@@ -0,0 +1,155 @@ >+app-id: %(PORTNAME)s >+runtime: org.gnome.Platform >+runtime-version: "3.28" >+# Control the exact version of the Sdk/Runtime that is being used. >+sdk-hash: cea71fe86d6961b4fe58046170f8dc8f8d4d04141ddf211e7cc6db44a18a0c49 >+runtime-hash: 9785cf7dc62290d76eef4bf0f5d25240fc5bb3d73128c25e95c4e4cb90bb3560 >+sdk: org.gnome.Sdk >+command: %(COMMAND)s >+finish-args: >+ # Basically no sandboxing, the goal here is to make it flexible >+ # for developers, not really to isolate (openning all devices >+ # to allow acces video cameras until we have a portal at least). >+ - --share=ipc >+ - --socket=x11 >+ - --socket=wayland >+ - --device=all >+ - --share=network >+ - --socket=pulseaudio >+ - --system-talk-name=org.freedesktop.GeoClue2 >+ - --filesystem=host >+ - --filesystem=/tmp >+ - --socket=system-bus >+ - --talk-name=org.freedesktop.Flatpak >+build-options: >+ cflags: -O2 -g >+ cxxflags: -O2 -g >+ strip: false >+ no-debuginfo: true >+modules: >+ # http and dependencies. >+ - name: apr >+ sources: >+ - type: archive >+ url: https://www.apache.org/dist/apr/apr-1.6.3.tar.bz2 >+ sha256: 131f06d16d7aabd097fa992a33eec2b6af3962f93e6d570a9bd4d85e95993172 >+ - name: apr-util >+ sources: >+ - type: archive >+ url: https://www.apache.org/dist/apr/apr-util-1.6.1.tar.bz2 >+ sha512: "40eff8a37c0634f7fdddd6ca5e596b38de15fd10767a34c30bbe49c632816e8f3e1e230678034f578dd5816a94f246fb5dfdf48d644829af13bf28de3225205d" >+ config-opts: >+ - --with-apr=/app/bin/apr-1-config >+ - name: httpd >+ sources: >+ - type: git >+ url: https://github.com/apache/httpd.git >+ branch: 2.4.33 >+ - type : file >+ path : files/httpd-autogen.sh >+ dest-filename : autogen.sh >+ # The version embedded in the sandbox doesn't have a working pcre-config >+ - type: patch >+ path: patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch >+ config-opts: >+ - --enable-mpms-shared=all >+ - --enable-modules=all >+ - --with-apr=/app/bin/apr-1-config >+ - --with-apr-util=/app/bin/apu-1-config >+ - --with-pcre=/app >+ - --enable-authnz-fcgi >+ - --enable-cgi >+ - --enable-cgid >+ - name: php >+ sources: >+ - type: archive >+ url: https://php.net/distributions/php-7.2.6.tar.xz >+ sha512: da86b1ff2df3b9e2d46e59a80296b940d81132975b621bdec9602f8b4c8d91a3fdcd4ffd7cb982d63d3ec974b3a12a7854e42a73b7f2cc8eefade14335aa7c71 >+ config-opts: >+ - --disable-xml >+ - --disable-dom >+ - --disable-libxml >+ - --disable-simplexml >+ - --disable-xmlreader >+ - --disable-xmlwriter >+ - --without-pear >+ - --with-apxs2 >+ - name: libevent >+ sources: >+ - type: git >+ url: https://github.com/libevent/libevent.git >+ branch: e7ff4ef # 2.1.8 >+ config-opts: >+ - --disable-libevent-regress >+ >+ # GStreamer modules >+ - name: libvpx >+ no-autogen: true >+ sources: >+ - type: git >+ url: https://chromium.googlesource.com/webm/libvpx >+ branch: v1.7.0 >+ config-opts: >+ - --enable-pic >+ - --as=yasm >+ - --disable-unit-tests >+ - --size-limit=16384x16384 >+ - --enable-postproc >+ - --enable-multi-res-encoding >+ - --enable-temporal-denoising >+ - --enable-vp9-temporal-denoising >+ - --enable-vp9-postproc >+ - --enable-shared >+ - name: gstreamer >+ buildsystem: meson >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/gstreamer/gstreamer >+ branch: 1.14.1 >+ config-opts: >+ - -Ddisable_gtkdoc=true >+ - name: gst-plugins-base >+ buildsystem: meson >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/gstreamer/gst-plugins-base >+ branch: 1.14.1 >+ config-opts: >+ - -Ddisable_gtkdoc=true >+ - name: gst-plugins-good >+ buildsystem: meson >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/gstreamer/gst-plugins-good >+ branch: 1.14.1 >+ - type: patch >+ path: ../gstreamer/patches/gst-plugins-good-0002-qtdemux-add-context-for-a-preferred-protection.patch >+ - type: patch >+ path: ../gstreamer/patches/gst-plugins-good-0003-qtdemux-also-push-buffers-without-encryption-info-in.patch >+ - type: patch >+ path: ../gstreamer/patches/gst-plugins-good-0001-qtdemux-Do-not-run-the-preferred-decryptor-context-q.patch >+ - type: patch >+ path: ../gstreamer/patches/gst-plugins-good-0002-qtdemux-Do-not-unref-a-NULL-stream_tags.patch >+ - type: patch >+ path: ../gstreamer/patches/gst-plugins-good-0003-qtdemux-Clarify-field-name-about-stream-encryption-s.patch >+ config-opts: >+ - -Ddisable_gtkdoc=true >+ - name: gst-plugins-ugly >+ buildsystem: meson >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/gstreamer/gst-plugins-ugly >+ branch: 1.14.1 >+ config-opts: >+ - -Ddisable_gtkdoc=true >+ - name: gst-plugins-bad >+ buildsystem: meson >+ sources: >+ - type: git >+ url: https://anongit.freedesktop.org/git/gstreamer/gst-plugins-bad >+ branch: 1.14.1 >+ config-opts: >+ - -Ddisable_gtkdoc=true >+ >+ # Port specific components. >+ - %(PORTNAME)s.yaml >\ No newline at end of file >diff --git a/Tools/flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch b/Tools/flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch >new file mode 100644 >index 00000000000..d36a694f292 >--- /dev/null >+++ b/Tools/flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch >@@ -0,0 +1,50 @@ >+From b5ebe404f1388ddda3603e53277f87e0b96ba695 Mon Sep 17 00:00:00 2001 >+From: Thibault Saunier <tsaunier@igalia.com> >+Date: Mon, 11 Jun 2018 16:14:38 -0400 >+Subject: [PATCH] configure: use pkg-config for PCRE detection >+ >+--- >+ configure.in | 27 +++++---------------------- >+ 1 file changed, 5 insertions(+), 22 deletions(-) >+ >+diff --git a/configure.in b/configure.in >+index 761e836..b155d4b 100644 >+--- a/configure.in >++++ b/configure.in >+@@ -215,28 +215,11 @@ fi >+ AC_ARG_WITH(pcre, >+ APACHE_HELP_STRING(--with-pcre=PATH,Use external PCRE library)) >+ >+-AC_PATH_PROG(PCRE_CONFIG, pcre-config, false) >+-if test -d "$with_pcre" && test -x "$with_pcre/bin/pcre-config"; then >+- PCRE_CONFIG=$with_pcre/bin/pcre-config >+-elif test -x "$with_pcre"; then >+- PCRE_CONFIG=$with_pcre >+-fi >+- >+-if test "$PCRE_CONFIG" != "false"; then >+- if $PCRE_CONFIG --version >/dev/null 2>&1; then :; else >+- AC_MSG_ERROR([Did not find pcre-config script at $PCRE_CONFIG]) >+- fi >+- case `$PCRE_CONFIG --version` in >+- [[1-5].*]) >+- AC_MSG_ERROR([Need at least pcre version 6.0]) >+- ;; >+- esac >+- AC_MSG_NOTICE([Using external PCRE library from $PCRE_CONFIG]) >+- APR_ADDTO(PCRE_INCLUDES, [`$PCRE_CONFIG --cflags`]) >+- APR_ADDTO(PCRE_LIBS, [`$PCRE_CONFIG --libs`]) >+-else >+- AC_MSG_ERROR([pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/]) >+-fi >++PKG_CHECK_MODULES([PCRE], [libpcre], [ >++ AC_DEFINE([HAVE_PCRE], [1], [Define if you have PCRE library]) >++], [ >++ AC_MSG_ERROR([$PCRE_PKG_ERRORS]) >++]) >+ APACHE_SUBST(PCRE_LIBS) >+ >+ AC_MSG_NOTICE([]) >+-- >+2.17.1 >+ >diff --git a/Tools/flatpak/patches/xvfb-0001-HACK-Avoid-compiling-a-kbm-file.patch b/Tools/flatpak/patches/xvfb-0001-HACK-Avoid-compiling-a-kbm-file.patch >new file mode 100644 >index 00000000000..898842b381d >--- /dev/null >+++ b/Tools/flatpak/patches/xvfb-0001-HACK-Avoid-compiling-a-kbm-file.patch >@@ -0,0 +1,50 @@ >+From aed1b6e8de41375c1b8b1dfc48a350e0a9b9cbba Mon Sep 17 00:00:00 2001 >+From: Thibault Saunier <tsaunier@igalia.com> >+Date: Mon, 11 Jun 2018 10:55:43 -0400 >+Subject: [PATCH xserver] HACK: Avoid compiling a kbm file >+ >+This would need to be in /usr/share/X11/ as this is where >+resource files are in the sandbox but it is read only in there. >+ >+Hack around that. >+--- >+ xkb/ddxLoad.c | 9 +-------- >+ xkb/xkbInit.c | 2 +- >+ 2 files changed, 2 insertions(+), 9 deletions(-) >+ >+diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c >+index bbe3952..a4a03a1 100644 >+--- a/xkb/ddxLoad.c >++++ b/xkb/ddxLoad.c >+@@ -148,14 +148,7 @@ RunXkbComp(xkbcomp_buffer_callback callback, void *userdata) >+ } >+ } >+ >+- if (asprintf(&buf, >+- "\"%s%sxkbcomp\" -w %d %s -xkm \"%s\" " >+- "-em1 %s -emp %s -eml %s \"%s%s.xkm\"", >+- xkbbindir, xkbbindirsep, >+- ((xkbDebugFlags < 2) ? 1 : >+- ((xkbDebugFlags > 10) ? 10 : (int) xkbDebugFlags)), >+- xkbbasedirflag ? xkbbasedirflag : "", xkmfile, >+- PRE_ERROR_MSG, ERROR_PREFIX, POST_ERROR_MSG1, >++ if (asprintf(&buf, "cp /app/webkit/Tools/flatpak/files/default.xkm \"%s%s.xkm\"", >+ xkm_output_dir, keymap) == -1) >+ buf = NULL; >+ >+diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c >+index 9c772f5..4e0b774 100644 >+--- a/xkb/xkbInit.c >++++ b/xkb/xkbInit.c >+@@ -87,7 +87,7 @@ typedef struct _SrvXkmInfo { >+ #define XKB_DFLT_RULES_PROP TRUE >+ #endif >+ >+-const char *XkbBaseDirectory = XKB_BASE_DIRECTORY; >++const char *XkbBaseDirectory = "/usr/share/X11/xkb/"; >+ const char *XkbBinDirectory = XKB_BIN_DIRECTORY; >+ static int XkbWantAccessX = 0; >+ >+-- >+2.17.1 >+ >-- >2.17.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186771
:
342945
|
342946
|
342957
|
343178
|
343181
|
343191
|
343195
|
343238
|
343279
|
343333
|
343401
|
343610
|
343611
|
343710
|
343861
|
343885
|
343911