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