webkit-gtk-2.26.3.ebuild (8621B)
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5 CMAKE_MAKEFILE_GENERATOR="ninja"
6 CMAKE_BUILD_TYPE="Release"
7 PYTHON_COMPAT=( python{2_7,3_6,3_7} )
8 USE_RUBY="ruby24 ruby25 ruby26 ruby27"
9 CMAKE_MIN_VERSION=3.10
10
11 inherit check-reqs cmake-utils flag-o-matic gnome2 pax-utils python-any-r1 ruby-single toolchain-funcs virtualx
12
13 MY_P="webkitgtk-${PV}"
14 DESCRIPTION="Open source web browser engine"
15 HOMEPAGE="https://www.webkitgtk.org"
16 SRC_URI="https://www.webkitgtk.org/releases/${MY_P}.tar.xz"
17
18 LICENSE="LGPL-2+ BSD"
19 SLOT="4/37" # soname version of libwebkit2gtk-4.0
20 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~amd64-fbsd ~amd64-linux ~x86-linux ~x86-macos"
21
22 IUSE="aqua coverage doc +egl examples +geolocation gles2-only gnome-keyring +gstreamer +introspection jpeg2k +jumbo-build libnotify media-source +opengl seccomp spell wayland +wpe +X"
23
24 # gstreamer with opengl/gles2-only needs egl
25 REQUIRED_USE="
26 geolocation? ( introspection )
27 gles2-only? ( egl !opengl )
28 gstreamer? ( opengl? ( egl ) )
29 wayland? ( egl )
30 wpe? ( opengl wayland )
31 media-source? ( gstreamer )
32 || ( aqua wayland X )
33 "
34
35 # Aqua support in gtk3 is untested
36 # Dependencies found at Source/cmake/OptionsGTK.cmake
37 # Various compile-time optionals for gtk+-3.22.0 - ensure it
38 # Missing WebRTC support, but ENABLE_MEDIA_STREAM/ENABLE_WEB_RTC is experimental upstream (PRIVATE OFF) and shouldn't be used yet in 2.26
39 # >=gst-plugins-opus-1.14.4-r1 for opusparse (required by MSE)
40 RDEPEND="
41 >=x11-libs/cairo-1.16.0:=[X?]
42 >=media-libs/fontconfig-2.13.0:1.0
43 >=media-libs/freetype-2.9.0:2
44 >=dev-libs/libgcrypt-1.7.0:0=
45 >=x11-libs/gtk+-3.22.0:3[aqua?,introspection?,wayland?,X?]
46 >=media-libs/harfbuzz-1.4.2:=[icu(+)]
47 >=dev-libs/icu-3.8.1-r1:=
48 virtual/jpeg:0=
49 >=net-libs/libsoup-2.54:2.4[introspection?]
50 >=dev-libs/libxml2-2.8.0:2
51 >=media-libs/libpng-1.4:0=
52 dev-db/sqlite:3=
53 sys-libs/zlib:0
54 >=dev-libs/atk-2.16.0
55 media-libs/libwebp:=
56
57 >=dev-libs/glib-2.44.0:2
58 >=dev-libs/libxslt-1.1.7
59 >=media-libs/woff2-1.0.2
60 gnome-keyring? ( app-crypt/libsecret )
61 geolocation? ( >=app-misc/geoclue-2.1.5:2.0 )
62 introspection? ( >=dev-libs/gobject-introspection-1.32.0:= )
63 dev-libs/libtasn1:=
64 spell? ( >=app-text/enchant-0.22:= )
65 gstreamer? (
66 >=media-libs/gstreamer-1.14:1.0
67 >=media-libs/gst-plugins-base-1.14:1.0[egl?,opengl?]
68 gles2-only? ( media-libs/gst-plugins-base:1.0[gles2] )
69 >=media-plugins/gst-plugins-opus-1.14.4-r1:1.0
70 >=media-libs/gst-plugins-bad-1.14:1.0 )
71
72 media-source? ( >=media-libs/gstreamer-1.16:1.0 )
73
74 X? (
75 x11-libs/libX11
76 x11-libs/libXcomposite
77 x11-libs/libXdamage
78 x11-libs/libXrender
79 x11-libs/libXt )
80
81 libnotify? ( x11-libs/libnotify )
82 dev-libs/hyphen
83 jpeg2k? ( >=media-libs/openjpeg-2.2.0:2= )
84
85 egl? ( media-libs/mesa[egl] )
86 gles2-only? ( media-libs/mesa[gles2] )
87 opengl? ( virtual/opengl )
88 wpe? (
89 >=gui-libs/libwpe-1.3.0:=
90 >=gui-libs/wpebackend-fdo-1.3.1:=
91 )
92 seccomp? (
93 >=sys-apps/bubblewrap-0.3.1
94 sys-libs/libseccomp
95 sys-apps/xdg-dbus-proxy
96 )
97 "
98
99 # paxctl needed for bug #407085
100 # Need real bison, not yacc
101 DEPEND="${RDEPEND}
102 ${PYTHON_DEPS}
103 ${RUBY_DEPS}
104 dev-util/glib-utils
105 >=dev-util/gtk-doc-am-1.10
106 >=dev-util/gperf-3.0.1
107 >=sys-devel/bison-2.4.3
108 || ( >=sys-devel/gcc-7.3 >=sys-devel/clang-5 )
109 sys-devel/gettext
110 virtual/pkgconfig
111
112 >=dev-lang/perl-5.10
113 virtual/perl-Data-Dumper
114 virtual/perl-Carp
115 virtual/perl-JSON-PP
116
117 doc? ( >=dev-util/gtk-doc-1.10 )
118 geolocation? ( dev-util/gdbus-codegen )
119 sys-apps/paxctl
120
121 test? (
122 dev-python/pygobject:3[python_targets_python2_7]
123 x11-themes/hicolor-icon-theme )
124 "
125
126 S="${WORKDIR}/${MY_P}"
127
128 CHECKREQS_DISK_BUILD="18G" # and even this might not be enough, bug #417307
129
130 pkg_pretend() {
131 if [[ ${MERGE_TYPE} != "binary" ]] ; then
132 if is-flagq "-g*" && ! is-flagq "-g*0" ; then
133 einfo "Checking for sufficient disk space to build ${PN} with debugging CFLAGS"
134 check-reqs_pkg_pretend
135 fi
136
137 if ! test-flag-CXX -std=c++17 ; then
138 die "You need at least GCC 7.3.x or Clang >= 5 for C++17-specific compiler flags"
139 fi
140 fi
141
142 if ! use opengl && ! use gles2-only; then
143 ewarn
144 ewarn "You are disabling OpenGL usage (USE=opengl or USE=gles2-only) completely."
145 ewarn "This is an unsupported configuration meant for very specific embedded"
146 ewarn "use cases, where there truly is no GL possible (and even that use case"
147 ewarn "is very unlikely to come by). If you have GL (even software-only), you"
148 ewarn "really really should be enabling OpenGL!"
149 ewarn
150 fi
151 }
152
153 pkg_setup() {
154 if [[ ${MERGE_TYPE} != "binary" ]] && is-flagq "-g*" && ! is-flagq "-g*0" ; then
155 check-reqs_pkg_setup
156 fi
157
158 python-any-r1_pkg_setup
159 }
160
161 src_prepare() {
162 eapply "${FILESDIR}/${PN}-2.24.4-eglmesaext-include.patch" # bug 699054 # https://bugs.webkit.org/show_bug.cgi?id=204108
163 cmake-utils_src_prepare
164 gnome2_src_prepare
165 }
166
167 src_configure() {
168 # Respect CC, otherwise fails on prefix #395875
169 tc-export CC
170
171 # It does not compile on alpha without this in LDFLAGS
172 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=648761
173 use alpha && append-ldflags "-Wl,--no-relax"
174
175 # ld segfaults on ia64 with LDFLAGS --as-needed, bug #555504
176 use ia64 && append-ldflags "-Wl,--no-as-needed"
177
178 # Sigbuses on SPARC with mcpu and co., bug #???
179 use sparc && filter-flags "-mvis"
180
181 # https://bugs.webkit.org/show_bug.cgi?id=42070 , #301634
182 use ppc64 && append-flags "-mminimal-toc"
183
184 # Try to use less memory, bug #469942 (see Fedora .spec for reference)
185 # --no-keep-memory doesn't work on ia64, bug #502492
186 if ! use ia64; then
187 append-ldflags "-Wl,--no-keep-memory"
188 fi
189
190 # We try to use gold when possible for this package
191 # if ! tc-ld-is-gold ; then
192 # append-ldflags "-Wl,--reduce-memory-overheads"
193 # fi
194
195 # Ruby situation is a bit complicated. See bug 513888
196 local rubyimpl
197 local ruby_interpreter=""
198 for rubyimpl in ${USE_RUBY}; do
199 if has_version --host-root "virtual/rubygems[ruby_targets_${rubyimpl}]"; then
200 ruby_interpreter="-DRUBY_EXECUTABLE=$(type -P ${rubyimpl})"
201 fi
202 done
203 # This will rarely occur. Only a couple of corner cases could lead us to
204 # that failure. See bug 513888
205 [[ -z $ruby_interpreter ]] && die "No suitable ruby interpreter found"
206
207 # TODO: Check Web Audio support
208 # should somehow let user select between them?
209 #
210 # opengl needs to be explicetly handled, bug #576634
211
212 local opengl_enabled
213 if use opengl || use gles2-only; then
214 opengl_enabled=ON
215 else
216 opengl_enabled=OFF
217 fi
218
219 local mycmakeargs=(
220 # begin PRIVATE options
221 -DSHOULD_INSTALL_JS_SHELL=$(usex examples)
222 -DENABLE_GEOLOCATION=$(usex geolocation)
223 -DENABLE_UNIFIED_BUILDS=$(usex jumbo-build)
224 -DENABLE_API_TESTS=$(usex test)
225 # end
226 -DENABLE_WEBDRIVER=OFF
227 -DENABLE_WEB_CRYPTO=OFF
228 -DENABLE_TOUCH_EVENTS=OFF
229 -DENABLE_DRAG_SUPPORT=OFF
230 -DENABLE_MINIBROWSER=$(usex examples)
231 -DENABLE_QUARTZ_TARGET=$(usex aqua)
232 -DENABLE_GTKDOC=$(usex doc)
233 $(cmake-utils_use_find_package gles2-only OpenGLES2)
234 -DENABLE_GLES2=$(usex gles2-only)
235 -DENABLE_VIDEO=$(usex gstreamer)
236 -DENABLE_WEB_AUDIO=$(usex gstreamer)
237 -DENABLE_INTROSPECTION=$(usex introspection)
238 -DUSE_LIBNOTIFY=$(usex libnotify)
239 -DUSE_LIBSECRET=$(usex gnome-keyring)
240 -DUSE_OPENJPEG=$(usex jpeg2k)
241 -DUSE_WOFF2=ON
242 -DENABLE_SPELLCHECK=$(usex spell)
243 -DENABLE_WAYLAND_TARGET=$(usex wayland)
244 $(cmake-utils_use_find_package egl EGL)
245 $(cmake-utils_use_find_package opengl OpenGL)
246 -DENABLE_X11_TARGET=$(usex X)
247 -DENABLE_OPENGL=${opengl_enabled}
248 -DENABLE_WEBGL=${opengl_enabled}
249 -DUSE_WPE_RENDERER=$(usex wpe)
250 -DENABLE_BUBBLEWRAP_SANDBOX=$(usex seccomp)
251 -DENABLE_MEDIA_SOURCE=$(usex media-source)
252 -DBWRAP_EXECUTABLE="${EPREFIX}"/usr/bin/bwrap # If bubblewrap[suid] then portage makes it go-r and cmake find_program fails with that
253 -DPORT=GTK
254 ${ruby_interpreter}
255 )
256
257 # Allow it to use GOLD when possible as it has all the magic to
258 # detect when to use it and using gold for this concrete package has
259 # multiple advantages and is also the upstream default, bug #585788
260 # if tc-ld-is-gold ; then
261 # mycmakeargs+=( -DUSE_LD_GOLD=ON )
262 # else
263 # mycmakeargs+=( -DUSE_LD_GOLD=OFF )
264 # fi
265
266 cmake-utils_src_configure
267 }
268
269 src_compile() {
270 cmake-utils_src_compile
271 }
272
273 src_test() {
274 # Prevents test failures on PaX systems
275 pax-mark m $(list-paxables Programs/*[Tt]ests/*) # Programs/unittests/.libs/test*
276
277 cmake-utils_src_test
278 }
279
280 src_install() {
281 cmake-utils_src_install
282
283 # Prevents crashes on PaX systems, bug #522808
284 pax-mark m "${ED}usr/libexec/webkit2gtk-4.0/jsc" "${ED}usr/libexec/webkit2gtk-4.0/WebKitWebProcess"
285 pax-mark m "${ED}usr/libexec/webkit2gtk-4.0/WebKitPluginProcess"
286 }