aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/patches/webkitgtk-2.4.8-gmutexlocker.patch289
-rw-r--r--gnu/packages/webkit.scm32
3 files changed, 322 insertions, 0 deletions
diff --git a/gnu-system.am b/gnu-system.am
index b5b71abdb0..75da645039 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -559,6 +559,7 @@ dist_patch_DATA = \
gnu/packages/patches/vpnc-script.patch \
gnu/packages/patches/vtk-mesa-10.patch \
gnu/packages/patches/w3m-fix-compile.patch \
+ gnu/packages/patches/webkitgtk-2.4.8-gmutexlocker.patch \
gnu/packages/patches/weex-vacopy.patch \
gnu/packages/patches/wicd-urwid-1.3.patch \
gnu/packages/patches/wmctrl-64-fix.patch \
diff --git a/gnu/packages/patches/webkitgtk-2.4.8-gmutexlocker.patch b/gnu/packages/patches/webkitgtk-2.4.8-gmutexlocker.patch
new file mode 100644
index 0000000000..79e12c302f
--- /dev/null
+++ b/gnu/packages/patches/webkitgtk-2.4.8-gmutexlocker.patch
@@ -0,0 +1,289 @@
+Webkit's own WebCore::GMutexLocker conflicts with the GMutexLocker in
+glib-2.44.0.
+
+Patch taken from <http://pkgs.fedoraproject.org/cgit/webkitgtk3.git/
+plain/webkitgtk-2.4.8-gmutexlocker.patch
+?id=7433f334cc84866af5ef0b2c25ead931e6e603ea>.
+
+
+diff -up webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp.gmutexlocker webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp
+--- webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp.gmutexlocker 2015-02-18 15:40:21.851816374 +0100
++++ webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp 2015-02-18 15:45:58.560092191 +0100
+@@ -316,7 +316,7 @@ void MediaPlayerPrivateGStreamerBase::mu
+ #if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER_GL) && !USE(COORDINATED_GRAPHICS)
+ PassRefPtr<BitmapTexture> MediaPlayerPrivateGStreamerBase::updateTexture(TextureMapper* textureMapper)
+ {
+- GMutexLocker lock(m_bufferMutex);
++ WebCore::GMutexLocker lock(m_bufferMutex);
+ if (!m_buffer)
+ return nullptr;
+
+@@ -366,7 +366,7 @@ void MediaPlayerPrivateGStreamerBase::tr
+ g_return_if_fail(GST_IS_BUFFER(buffer));
+
+ {
+- GMutexLocker lock(m_bufferMutex);
++ WebCore::GMutexLocker lock(m_bufferMutex);
+ gst_buffer_replace(&m_buffer, buffer);
+ }
+
+@@ -398,7 +398,7 @@ void MediaPlayerPrivateGStreamerBase::pa
+ if (!m_player->visible())
+ return;
+
+- GMutexLocker lock(m_bufferMutex);
++ WebCore::GMutexLocker lock(m_bufferMutex);
+ if (!m_buffer)
+ return;
+
+diff -up webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp.gmutexlocker webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+diff -up webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp.gmutexlocker webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp
+--- webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp.gmutexlocker 2015-02-18 15:16:11.995228731 +0100
++++ webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp 2015-02-18 15:45:42.686843477 +0100
+@@ -118,7 +118,7 @@ static gboolean webkitVideoSinkTimeoutCa
+ WebKitVideoSink* sink = reinterpret_cast<WebKitVideoSink*>(data);
+ WebKitVideoSinkPrivate* priv = sink->priv;
+
+- GMutexLocker lock(priv->bufferMutex);
++ WebCore::GMutexLocker lock(priv->bufferMutex);
+ GstBuffer* buffer = priv->buffer;
+ priv->buffer = 0;
+ priv->timeoutId = 0;
+@@ -140,7 +140,7 @@ static GstFlowReturn webkitVideoSinkRend
+ WebKitVideoSink* sink = WEBKIT_VIDEO_SINK(baseSink);
+ WebKitVideoSinkPrivate* priv = sink->priv;
+
+- GMutexLocker lock(priv->bufferMutex);
++ WebCore::GMutexLocker lock(priv->bufferMutex);
+
+ if (priv->unlocked)
+ return GST_FLOW_OK;
+@@ -279,7 +279,7 @@ static void webkitVideoSinkGetProperty(G
+
+ static void unlockBufferMutex(WebKitVideoSinkPrivate* priv)
+ {
+- GMutexLocker lock(priv->bufferMutex);
++ WebCore::GMutexLocker lock(priv->bufferMutex);
+
+ if (priv->buffer) {
+ gst_buffer_unref(priv->buffer);
+@@ -305,7 +305,7 @@ static gboolean webkitVideoSinkUnlockSto
+ WebKitVideoSinkPrivate* priv = WEBKIT_VIDEO_SINK(baseSink)->priv;
+
+ {
+- GMutexLocker lock(priv->bufferMutex);
++ WebCore::GMutexLocker lock(priv->bufferMutex);
+ priv->unlocked = false;
+ }
+
+@@ -330,7 +330,7 @@ static gboolean webkitVideoSinkStart(Gst
+ {
+ WebKitVideoSinkPrivate* priv = WEBKIT_VIDEO_SINK(baseSink)->priv;
+
+- GMutexLocker lock(priv->bufferMutex);
++ WebCore::GMutexLocker lock(priv->bufferMutex);
+ priv->unlocked = false;
+ return TRUE;
+ }
+diff -up webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp.gmutexlocker webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
+--- webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp.gmutexlocker 2015-02-18 15:16:40.954678407 +0100
++++ webkitgtk-2.4.8/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp 2015-02-18 15:45:19.567481225 +0100
+@@ -346,7 +346,7 @@ static void webKitWebSrcSetProperty(GObj
+
+ switch (propID) {
+ case PROP_IRADIO_MODE: {
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ priv->iradioMode = g_value_get_boolean(value);
+ break;
+ }
+@@ -364,7 +364,7 @@ static void webKitWebSrcGetProperty(GObj
+ WebKitWebSrc* src = WEBKIT_WEB_SRC(object);
+ WebKitWebSrcPrivate* priv = src->priv;
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ switch (propID) {
+ case PROP_IRADIO_MODE:
+ g_value_set_boolean(value, priv->iradioMode);
+@@ -417,7 +417,7 @@ static gboolean webKitWebSrcStop(WebKitW
+
+ ASSERT(isMainThread());
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+
+ bool seeking = priv->seekID;
+
+@@ -476,7 +476,7 @@ static gboolean webKitWebSrcStart(WebKit
+
+ ASSERT(isMainThread());
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+
+ priv->startID = 0;
+ priv->corsAccessCheck = CORSNoCheck;
+@@ -573,7 +573,7 @@ static GstStateChangeReturn webKitWebSrc
+ return ret;
+ }
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ GST_DEBUG_OBJECT(src, "READY->PAUSED");
+@@ -604,7 +604,7 @@ static gboolean webKitWebSrcQueryWithPar
+ gst_query_parse_duration(query, &format, NULL);
+
+ GST_DEBUG_OBJECT(src, "duration query in format %s", gst_format_get_name(format));
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ if (format == GST_FORMAT_BYTES && src->priv->size > 0) {
+ gst_query_set_duration(query, format, src->priv->size);
+ result = TRUE;
+@@ -612,7 +612,7 @@ static gboolean webKitWebSrcQueryWithPar
+ break;
+ }
+ case GST_QUERY_URI: {
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ gst_query_set_uri(query, src->priv->uri);
+ result = TRUE;
+ break;
+@@ -653,7 +653,7 @@ static gchar* webKitWebSrcGetUri(GstURIH
+ WebKitWebSrc* src = WEBKIT_WEB_SRC(handler);
+ gchar* ret;
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ ret = g_strdup(src->priv->uri);
+ return ret;
+ }
+@@ -668,7 +668,7 @@ static gboolean webKitWebSrcSetUri(GstUR
+ return FALSE;
+ }
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+
+ g_free(priv->uri);
+ priv->uri = 0;
+@@ -704,7 +704,7 @@ static gboolean webKitWebSrcNeedDataMain
+
+ ASSERT(isMainThread());
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ // already stopped
+ if (!priv->needDataID)
+ return FALSE;
+@@ -725,7 +725,7 @@ static void webKitWebSrcNeedDataCb(GstAp
+
+ GST_DEBUG_OBJECT(src, "Need more data: %u", length);
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ if (priv->needDataID || !priv->paused) {
+ return;
+ }
+@@ -739,7 +739,7 @@ static gboolean webKitWebSrcEnoughDataMa
+
+ ASSERT(isMainThread());
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ // already stopped
+ if (!priv->enoughDataID)
+ return FALSE;
+@@ -760,7 +760,7 @@ static void webKitWebSrcEnoughDataCb(Gst
+
+ GST_DEBUG_OBJECT(src, "Have enough data");
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ if (priv->enoughDataID || priv->paused) {
+ return;
+ }
+@@ -774,7 +774,7 @@ static gboolean webKitWebSrcSeekMainCb(W
+
+ ASSERT(isMainThread());
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ // already stopped
+ if (!priv->seekID)
+ return FALSE;
+@@ -792,7 +792,7 @@ static gboolean webKitWebSrcSeekDataCb(G
+ WebKitWebSrcPrivate* priv = src->priv;
+
+ GST_DEBUG_OBJECT(src, "Seeking to offset: %" G_GUINT64_FORMAT, offset);
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ if (offset == priv->offset && priv->requestedOffset == priv->offset)
+ return TRUE;
+
+@@ -811,7 +811,7 @@ static gboolean webKitWebSrcSeekDataCb(G
+ void webKitWebSrcSetMediaPlayer(WebKitWebSrc* src, WebCore::MediaPlayer* player)
+ {
+ ASSERT(player);
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ src->priv->player = player;
+ }
+
+@@ -841,7 +841,7 @@ char* StreamingClient::createReadBuffer(
+
+ mapGstBuffer(buffer);
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ priv->buffer = adoptGRef(buffer);
+ locker.unlock();
+
+@@ -867,7 +867,7 @@ void StreamingClient::handleResponseRece
+ return;
+ }
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+
+ priv->corsAccessCheck = corsAccessCheck;
+
+@@ -966,7 +966,7 @@ void StreamingClient::handleDataReceived
+ WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src);
+ WebKitWebSrcPrivate* priv = src->priv;
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+
+ GST_LOG_OBJECT(src, "Have %lld bytes of data", priv->buffer ? static_cast<long long>(gst_buffer_get_size(priv->buffer.get())) : length);
+
+@@ -1035,7 +1035,7 @@ void StreamingClient::handleNotifyFinish
+
+ GST_DEBUG_OBJECT(src, "Have EOS");
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ if (!priv->seekID) {
+ locker.unlock();
+ gst_app_src_end_of_stream(priv->appsrc);
+@@ -1194,7 +1194,7 @@ void ResourceHandleStreamingClient::wasB
+
+ GST_ERROR_OBJECT(src, "Request was blocked");
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ uri.reset(g_strdup(src->priv->uri));
+ locker.unlock();
+
+@@ -1208,7 +1208,7 @@ void ResourceHandleStreamingClient::cann
+
+ GST_ERROR_OBJECT(src, "Cannot show URL");
+
+- GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
++ WebCore::GMutexLocker locker(GST_OBJECT_GET_LOCK(src));
+ uri.reset(g_strdup(src->priv->uri));
+ locker.unlock();
+
+diff -up webkitgtk-2.4.8/Source/WTF/wtf/gobject/GMutexLocker.h.gmutexlocker webkitgtk-2.4.8/Source/WTF/wtf/gobject/GMutexLocker.h
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index 9692ab0d36..b091c88601 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,9 +23,13 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system cmake)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages base)
#:use-module (gnu packages bison)
#:use-module (gnu packages databases)
#:use-module (gnu packages enchant)
+ #:use-module (gnu packages flex)
#:use-module (gnu packages gettext)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
@@ -108,3 +113,30 @@ HTML/CSS applications to full-fledged web browsers.")
license:lgpl2.1+
license:bsd-2
license:bsd-3))))
+
+(define-public webkitgtk-2.4
+ ;; Latest release of the stable 2.4 series.
+ (package (inherit webkitgtk)
+ (name "webkitgtk")
+ (version "2.4.8")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://www.webkitgtk.org/releases/"
+ name "-" version ".tar.xz"))
+ (sha256
+ (base32
+ "08xxqsxpa63nzgbsz63vrdxdxgpysyiy7jdcjb57k1hprdcibwb8"))
+ (patches (list (search-patch "webkitgtk-2.4.8-gmutexlocker.patch")))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:tests? #f ; no tests
+ #:phases (modify-phases %standard-phases
+ (add-after
+ 'unpack 'set-gcc
+ (lambda _ (setenv "CC" "gcc") #t)))
+ #:configure-flags '("--enable-webkit2=no"
+ "--with-gtk=2.0")))
+ (inputs
+ `(("flex" ,flex)
+ ("which" ,which)
+ ,@(package-inputs webkitgtk)))))