WebKitNix / webkitnix

A WebKit2 port based on POSIX and OpenGL/ES
http://nix.openbossa.org
66 stars 26 forks source link

GLX vs. EGL

GLX is used by default, to use OpenGLES2+EGL pass --opengles2 to build-webkit script.

Packages required

WebKitNix requires some packages in the system as well as automatically pull other dependencies using the jhbuild tool.

To compile WebKitNix all the three groups of packages below are necessary:

These are needed for jhbuild tool to work.

Debian / Ubuntu

$ sudo apt-get install gobject-introspection \ icon-naming-utils \ libgcrypt11-dev \ libgpg-error-dev \ libp11-kit-dev \ libtiff4-dev \ libcroco3-dev \ ruby

Fedora

$ sudo yum install perl-version \ gobject-introspection-devel \ icon-naming-utils \ libgcrypt-devel \ libgpg-error-devel \ p11-kit-devel \ libtiff-devel \ libcroco-devel \ libjpeg-turbo-devel \ ruby

These are needed for the dependencies that are automatically compiled.

Debian / Ubuntu

$ sudo apt-get install gettext \ libpng12-dev \ g++\ gtk-doc-tools \ libgnutls-dev

Fedora

$ sudo yum install gettext \ libpng-devel \ gcc-c++ \ gnutls-devel \ gtk-doc

These are needed for WebKitNix itself.

Debian / Ubuntu

$ sudo apt-get install cmake \ flex bison gperf \ libsqlite3-dev \ libxslt1-dev \ libicu-dev \ libgl1-mesa-dev \ libavcodec-dev \ libxrender-dev \ libxcomposite-dev

Fedora

$ sudo yum install cmake \ flex \ bison \ gperf \ sqlite-devel \ libxslt-devel \ libicu-devel \ mesa-libGL-devel \ intltool \ ffmpeg-devel

NOTE: the packages libgl1-mesa-dev or mesa-libGL-devel can be replaced by another that provides the OpenGL headers (GLES-based systems, for example).

Other dependencies like glib, cairo et al. are pulled by jhbuild, by using the script:

$ Tools/Scripts/update-webkitnix-libs

They are compiled and installed into WebKitBuild/Dependencies.

Debugging

Nix uses the same approach as EFL does to provide debugging support. It is available only in DEBUG mode.

If you need to debug a crash in a WebProcess while executing the MiniBrowser you can set the WEB_PROCESS_CMD_PREFIX environment variable. It takes some time to load all needed symbols - so be patient.

$ WEB_PROCESS_CMD_PREFIX="/usr/bin/xterm -title WebProcess -e gdb --args" \ WebKitBuild/Debug/bin/MiniBrowser

The /usr/bin/xterm is necessary or gdb will run in the current terminal, which can get particularly confusing since it's running in the background, and if you're also running the main process in gdb, won't work at all (the two instances will fight over the terminal). It's necessary to pass the full path to the xterm binary otherwise it will fail.

If you want to debug a specific test (TEST_OF_YOUR_CHOICE in the example below) you can run WebKitTestRunner with WEB_PROCESS_CMD_PREFIX exactly as you did with MiniBrowser:

WEB_PROCESS_CMD_PREFIX="/usr/bin/xterm -title WebProcess -e gdb --args" \ WebKitBuild/Debug/bin/WebKitTestRunner --no-timeout-at-all \ LayoutTests/TEST_OF_YOUR_CHOICE

If you want to have detailed logs from LOG(...) functions you can enable logging for each log channel with WEBKIT_DEBUG environment variable: WEBKIT_DEBUG="WTFLogChannel1 WTFLogChannel2 ... WTFLogChannelN"

You can find log channels in Source/WebCore/platform/Logging.cpp and Source/WebKit2/Platform/Logging.cpp. For example: Frames, Events, Network, ...

Using the remote inspector

In order to get the InspectorServer running you need to set WEBKIT_INSPECTOR_SERVER before running MiniBrowser, as in:

"WEBKIT_INSPECTOR_SERVER="127.0.0.1:25555" ./nix_build/Release/bin/MiniBrowser"

After that just open a browser, load http://127.0.0.1:25555/ and you will get a list of webpages available for being inspected. You can also load directly http://127.0.0.1:25555/webinspector/inspector.html?page=ID if you know the page id you want to inspect.