webkit-gtk-2.30.0.ebuild (8735B)
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 PYTHON_COMPAT=( python{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 debug +egl examples +geolocation gles2-only gnome-keyring +gstreamer gtk4 gtk-doc +introspection +jpeg2k +jumbo-build libnotify media-source +opengl seccomp spell systemd wayland +wpe +X"
22
23 # gstreamer with opengl/gles2 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 WebRTC support, but ENABLE_MEDIA_STREAM/ENABLE_WEB_RTC is experimental upstream (PRIVATE OFF) and shouldn't be used yet in 2.26
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 !gtk4? ( >=x11-libs/gtk+-3.22.0:3[aqua?,introspection?,wayland?,X?] )
45 gtk4? ( x11-libs/gtk+:4[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
60 gnome-keyring? ( app-crypt/libsecret )
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?,X?]
67 gles2-only? ( media-libs/gst-plugins-base:1.0[gles2] )
68 >=media-plugins/gst-plugins-opus-1.14.4-r1:1.0
69 >=media-libs/gst-plugins-bad-1.14:1.0[X?]
70 )
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 systemd? ( sys-apps/systemd:= )
98 "
99
100 # paxctl needed for bug #407085
101 # Need real bison, not yacc
102 DEPEND="${RDEPEND}
103 ${PYTHON_DEPS}
104 ${RUBY_DEPS}
105 dev-util/glib-utils
106 >=dev-util/gtk-doc-am-1.10
107 >=dev-util/gperf-3.0.1
108 >=sys-devel/bison-2.4.3
109 || ( >=sys-devel/gcc-7.3 >=sys-devel/clang-5 )
110 sys-devel/gettext
111 virtual/pkgconfig
112
113 >=dev-lang/perl-5.10
114 virtual/perl-Data-Dumper
115 virtual/perl-Carp
116 virtual/perl-JSON-PP
117
118 gtk-doc? ( >=dev-util/gtk-doc-1.10 )
119 geolocation? ( dev-util/gdbus-codegen )
120 sys-apps/paxctl
121
122 "
123 RDEPEND="${RDEPEND}
124 geolocation? ( >=app-misc/geoclue-2.1.5:2.0 )
125 "
126 RESTRICT="test"
127 # tests are b0rk, PYTHON_USEDEP is as well
128 # test? (
129 # dev-python/pygobject:3[${PYTHON_USEDEP}]
130 # x11-themes/hicolor-icon-theme )
131
132 S="${WORKDIR}/${MY_P}"
133
134 CHECKREQS_DISK_BUILD="18G" # and even this might not be enough, bug #417307
135
136 pkg_pretend() {
137 if [[ ${MERGE_TYPE} != "binary" ]] ; then
138 if is-flagq "-g*" && ! is-flagq "-g*0" ; then
139 einfo "Checking for sufficient disk space to build ${PN} with debugging CFLAGS"
140 check-reqs_pkg_pretend
141 fi
142
143 if ! test-flag-CXX -std=c++17 ; then
144 die "You need at least GCC 7.3.x or Clang >= 5 for C++17-specific compiler flags"
145 fi
146 fi
147
148 if ! use opengl && ! use gles2-only; then
149 ewarn
150 ewarn "You are disabling OpenGL usage (USE=opengl or USE=gles2-only) completely."
151 ewarn "This is an unsupported configuration meant for very specific embedded"
152 ewarn "use cases, where there truly is no GL possible (and even that use case"
153 ewarn "is very unlikely to come by). If you have GL (even software-only), you"
154 ewarn "really really should be enabling OpenGL!"
155 ewarn
156 fi
157 }
158
159 pkg_setup() {
160 if [[ ${MERGE_TYPE} != "binary" ]] && is-flagq "-g*" && ! is-flagq "-g*0" ; then
161 check-reqs_pkg_setup
162 fi
163
164 python-any-r1_pkg_setup
165 }
166
167 src_prepare() {
168 eapply "${FILESDIR}"/2.28.2-opengl-without-X-fixes.patch
169 cmake-utils_src_prepare
170 gnome2_src_prepare
171 }
172
173 src_configure() {
174 if use debug; then
175 CMAKE_BUILD_TYPE="Debug"
176 fi
177
178 # gtk-doc fails to generate docs when ld.lld is used, force binutils
179 if use gtk-doc; then
180 export CC_LD="ld"
181 export LD="ld"
182 fi
183
184 # Respect CC, otherwise fails on prefix #395875
185 tc-export CC
186
187 # It does not compile on alpha without this in LDFLAGS
188 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=648761
189 use alpha && append-ldflags "-Wl,--no-relax"
190
191 # ld segfaults on ia64 with LDFLAGS --as-needed, bug #555504
192 use ia64 && append-ldflags "-Wl,--no-as-needed"
193
194 # Sigbuses on SPARC with mcpu and co., bug #???
195 use sparc && filter-flags "-mvis"
196
197 # https://bugs.webkit.org/show_bug.cgi?id=42070 , #301634
198 use ppc64 && append-flags "-mminimal-toc"
199
200 # Try to use less memory, bug #469942 (see Fedora .spec for reference)
201 # --no-keep-memory doesn't work on ia64, bug #502492
202 if ! use ia64; then
203 append-ldflags "-Wl,--no-keep-memory"
204 fi
205
206 # We try to use gold when possible for this package
207 # if ! tc-ld-is-gold ; then
208 # append-ldflags "-Wl,--reduce-memory-overheads"
209 # fi
210
211 # Ruby situation is a bit complicated. See bug 513888
212 local rubyimpl
213 local ruby_interpreter=""
214 for rubyimpl in ${USE_RUBY}; do
215 if has_version --host-root "virtual/rubygems[ruby_targets_${rubyimpl}]"; then
216 ruby_interpreter="-DRUBY_EXECUTABLE=$(type -P ${rubyimpl})"
217 fi
218 done
219 # This will rarely occur. Only a couple of corner cases could lead us to
220 # that failure. See bug 513888
221 [[ -z $ruby_interpreter ]] && die "No suitable ruby interpreter found"
222
223 # TODO: Check Web Audio support
224 # should somehow let user select between them?
225 #
226 # opengl needs to be explicetly handled, bug #576634
227
228 local opengl_enabled
229 if use opengl || use gles2-only; then
230 opengl_enabled=ON
231 else
232 opengl_enabled=OFF
233 fi
234
235 local mycmakeargs=(
236 # begin PRIVATE options
237 -DENABLE_API_TESTS=$(usex test)
238 -DSHOULD_INSTALL_JS_SHELL=$(usex examples)
239 -DENABLE_GEOLOCATION=$(usex geolocation) # Runtime optional (talks over dbus service)
240 -DENABLE_UNIFIED_BUILDS=$(usex jumbo-build)
241 # end PRIVATE options
242 -DUSE_SYSTEMD=$(usex systemd)
243 -DUSE_GTK4=$(usex gtk4)
244 -DENABLE_WEBDRIVER=OFF
245 -DENABLE_WEB_CRYPTO=OFF
246 # -DENABLE_TOUCH_EVENTS=OFF
247 # -DENABLE_DRAG_SUPPORT=OFF
248 -DENABLE_MINIBROWSER=$(usex examples)
249 -DENABLE_QUARTZ_TARGET=$(usex aqua)
250 -DENABLE_GTKDOC=$(usex gtk-doc)
251 $(cmake-utils_use_find_package gles2-only OpenGLES2)
252 -DENABLE_GLES2=$(usex gles2-only)
253 -DENABLE_VIDEO=$(usex gstreamer)
254 -DENABLE_WEB_AUDIO=$(usex gstreamer)
255 -DENABLE_INTROSPECTION=$(usex introspection)
256 -DUSE_LIBNOTIFY=$(usex libnotify)
257 -DUSE_LIBSECRET=$(usex gnome-keyring)
258 -DUSE_OPENJPEG=$(usex jpeg2k)
259 -DUSE_WOFF2=ON
260 -DENABLE_SPELLCHECK=$(usex spell)
261 -DENABLE_WAYLAND_TARGET=$(usex wayland)
262 $(cmake-utils_use_find_package egl EGL)
263 $(cmake-utils_use_find_package opengl OpenGL)
264 -DENABLE_X11_TARGET=$(usex X)
265 -DENABLE_OPENGL=${opengl_enabled}
266 -DENABLE_WEBGL=${opengl_enabled}
267 -DUSE_WPE_RENDERER=$(usex wpe)
268 -DENABLE_BUBBLEWRAP_SANDBOX=$(usex seccomp)
269 -DENABLE_MEDIA_SOURCE=$(usex media-source)
270 -DBWRAP_EXECUTABLE="${EPREFIX}"/usr/bin/bwrap # If bubblewrap[suid] then portage makes it go-r and cmake find_program fails with that
271 -DUSE_LD_GOLD=ON
272 -DPORT=GTK
273 ${ruby_interpreter}
274 )
275
276 cmake-utils_src_configure
277 }
278
279 src_compile() {
280 cmake-utils_src_compile
281 }
282
283 src_test() {
284 # Prevents test failures on PaX systems
285 pax-mark m $(list-paxables Programs/*[Tt]ests/*) # Programs/unittests/.libs/test*
286
287 cmake-utils_src_test
288 }
289
290 src_install() {
291 cmake-utils_src_install
292
293 # Prevents crashes on PaX systems, bug #522808
294 pax-mark m "${ED}usr/libexec/webkit2gtk-4.0/jsc" "${ED}usr/libexec/webkit2gtk-4.0/WebKitWebProcess"
295 pax-mark m "${ED}usr/libexec/webkit2gtk-4.0/WebKitPluginProcess"
296 }