epiphany-logo.png

GNOME Web

A simple, clean, beautiful view of the web


Development Resources

Epiphany Technology Preview

Epiphany Technology Preview is the recommended way for developers to run Epiphany. It is, of course, our equivalent to Safari Technology Preview. Unlike Safari Technology Preview, where both Safari and WebKit are updated once every second week, for us Epiphany is updated nightly, while WebKit is updated on a less-regular (usually monthly) basis.

Development Tips

There are must-read tips for newcomers in the HACKING.md file at the toplevel of the source tree.

Getting Involved

This is a step-by-step guide for getting involved with the Epiphany development. If you are new to GNOME development and need some guidance, make sure to also visit the Newcomers page.

Step 1: Join #epiphany channel on irc.gnome.org

This is where people talk about Epiphany and where you can ask questions when you need to find out how to do something or want to decide what to work on next. The etiquette of IRC is such that you don't need to say "hi" when you join and you can lurk in the channel for a while until you have a specific question or want to share your view in a discussion. So just joining a channel is pretty non-committal.

Step 2: Building Epiphany the Easy Way

If you don't need to make any changes to WebKit, then the simplest way to build Epiphany is to use GNOME Builder. When you create a new project for Epiphany, Builder should automatically recognize the org.gnome.Epiphany.json file in the toplevel of the source tree and use it to build Epiphany with flatpak-builder.

Step 3: Developing Dependencies with Epiphany

Newcomers should try to avoid bugs that require making changes in WebKit or other dependencies of Epiphany. Once you've contributed a few easier patches to Epiphany and are ready to start making code changes in WebKit or other dependencies, then your development setup becomes a bit more complicated. You are welcome to use whatever method you prefer for development, but the recommended method is to use JHBuild. Follow the JHBuild introduction to learn how to use JHBuild. The following custom moduleset is recommended:

<?xml version="1.0"?>
<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
<?xml-stylesheet type="text/xsl" href="moduleset.xsl"?>
<moduleset>

  <repository type="git" name="gitlab.gnome.org" href="https://gitlab.gnome.org/"/>
  <repository type="git" name="git.webkit.org" href="git://git.webkit.org/"/>
  <repository type="git" name="github.com" href="https://github.com/"/>
  <repository type="system" name="system"/>

  <systemmodule id="meson">
    <branch repo="system"/>
    <systemdependencies>
      <dep type="path" name="meson"/>
    </systemdependencies>
  </systemmodule>

  <autotools id="glib">
    <branch repo="gitlab.gnome.org" module="GNOME/glib.git"/>
  </autotools>

  <meson id="dconf">
    <branch repo="gitlab.gnome.org" module="GNOME/dconf.git"/>
    <dependencies>
      <dep package="glib"/>
    </dependencies>
  </meson>

  <autotools id="gtk+-3">
    <branch repo="gitlab.gnome.org" module="GNOME/gtk.git" revision="gtk-3-24"/>
    <dependencies>
      <dep package="dconf"/>
      <dep package="glib"/>
    </dependencies>
  </autotools>

  <meson id="glib-networking">
    <if condition-set="asan">
      <mesonargs value="-Db_sanitize=address"/>
    </if>
    <branch repo="gitlab.gnome.org" module="GNOME/glib-networking.git"/>
    <dependencies>
      <dep package="glib"/>
    </dependencies>
  </meson>

  <meson id="libsoup">
    <if condition-set="asan">
      <mesonargs value="-Db_sanitize=address -Dintrospection=false"/>
    </if>
    <branch repo="gitlab.gnome.org" module="GNOME/libsoup.git"/>
    <dependencies>
      <dep package="glib-networking"/>
    </dependencies>
  </meson>

  <cmake id="WebKit" cmakeargs="-DPORT=GTK -DCMAKE_BUILD_TYPE=Debug">
    <if condition-set="asan">
      <cmakeargs value="-DENABLE_ADDRESS_SANITIZER=ON -DENABLE_INTROSPECTION=OFF"/>
    </if>
    <branch repo="git.webkit.org" module="WebKit.git"/>
    <dependencies>
      <dep package="gtk+-3"/>
      <dep package="libsoup"/>
    </dependencies>
  </cmake>

  <meson id="epiphany" mesonargs="-Ddeveloper_mode=true">
    <if condition-set="asan">
      <mesonargs value="-Db_sanitize=address -Dbackend_max_links=1"/>
    </if>
    <branch repo="gitlab.gnome.org" module="GNOME/epiphany.git"/>
    <dependencies>
      <dep package="WebKit"/>
    </dependencies>
  </meson>

</moduleset>

If you save this moduleset as ~/Projects/modulesets/epiphany.modules, then the following example jhbuildrc shows how you can use the moduleset:

# -*- mode: python -*-
moduleset = 'epiphany'
modules = ['epiphany']

use_local_modulesets = True
modulesets_dir = '~/Projects/modulesets'

Apps/Web/Development (last edited 2018-11-02 02:22:54 by MichaelCatanzaro)