From 3bb5504643117f169ca4d9dc9582d3e69f8a3af0 Mon Sep 17 00:00:00 2001
From: Oliver Smith <ollieparanoid@bitmessage.ch>
Date: Sat, 6 Jul 2019 02:53:40 +0200
Subject: [PATCH] unity8/mir: rebuild against protobuf 3.8.0 (!481)

Add two patches that make it build against Alpine's current versions of
protobuf and libdrm.

[ci:skip-build]: I've manually verified that this builds.
---
 ...ogle-protobuf-closure-related-errors.patch | 66 +++++++++++++++++++
 ...ve-drmIsMaster-to-use-libdrm-version.patch | 53 +++++++++++++++
 unity8/mir/APKBUILD                           | 12 +++-
 3 files changed, 128 insertions(+), 3 deletions(-)
 create mode 100644 unity8/mir/0001-Fix-google-protobuf-closure-related-errors.patch
 create mode 100644 unity8/mir/0002-Remove-drmIsMaster-to-use-libdrm-version.patch

diff --git a/unity8/mir/0001-Fix-google-protobuf-closure-related-errors.patch b/unity8/mir/0001-Fix-google-protobuf-closure-related-errors.patch
new file mode 100644
index 000000000..ed67d1482
--- /dev/null
+++ b/unity8/mir/0001-Fix-google-protobuf-closure-related-errors.patch
@@ -0,0 +1,66 @@
+From e038df1a9ef91aab176225de7bad6871dc3f2a29 Mon Sep 17 00:00:00 2001
+From: Oliver Smith <ollieparanoid@bitmessage.ch>
+Date: Fri, 5 Jul 2019 22:43:16 +0200
+Subject: [PATCH 1/2] Fix google::protobuf::closure related errors
+
+Include google/protobuf/stubs/callback.h to get rid of build errors like
+the following, when building against protobuf 3.8.0:
+
+[ 20%] Building CXX object src/server/scene/CMakeFiles/mirscene.dir/broadcasting_session_event_sink.cpp.o
+In file included from /home/pmos/build/src/mir-1.1.2/src/server/frontend/session_mediator.cpp:19:
+In file included from /home/pmos/build/src/mir-1.1.2/src/server/frontend/session_mediator.h:22:
+In file included from /home/pmos/build/src/mir-1.1.2/src/server/frontend/display_server.h:22:
+/home/pmos/build/src/mir-1.1.2/src/include/common/mir/protobuf/display_server.h:37:27: error: no type named 'Closure' in namespace 'google::protobuf'
+        google::protobuf::Closure* done) = 0;
+        ~~~~~~~~~~~~~~~~~~^
+/home/pmos/build/src/mir-1.1.2/src/include/common/mir/protobuf/display_server.h:41:27: error: no type named 'Closure' in namespace 'google::protobuf'
+        google::protobuf::Closure* done) = 0;
+        ~~~~~~~~~~~~~~~~~~^
+
+Related: https://github.com/MirServer/mir/issues/913
+---
+ src/client/rpc/mir_basic_rpc_channel.h                 | 2 ++
+ src/include/common/mir/protobuf/display_server.h       | 1 +
+ src/include/common/mir/protobuf/display_server_debug.h | 1 +
+ 3 files changed, 4 insertions(+)
+
+diff --git a/src/client/rpc/mir_basic_rpc_channel.h b/src/client/rpc/mir_basic_rpc_channel.h
+index e0af61a..f4a650d 100644
+--- a/src/client/rpc/mir_basic_rpc_channel.h
++++ b/src/client/rpc/mir_basic_rpc_channel.h
+@@ -27,6 +27,8 @@
+ #include <condition_variable>
+ #include <functional>
+ 
++#include <google/protobuf/stubs/callback.h>
++
+ namespace google
+ {
+ namespace protobuf
+diff --git a/src/include/common/mir/protobuf/display_server.h b/src/include/common/mir/protobuf/display_server.h
+index 481af5a..852230d 100644
+--- a/src/include/common/mir/protobuf/display_server.h
++++ b/src/include/common/mir/protobuf/display_server.h
+@@ -19,6 +19,7 @@
+ #ifndef MIR_PROTOBUF_DISPLAY_SERVER_H_
+ #define MIR_PROTOBUF_DISPLAY_SERVER_H_
+ 
++#include <google/protobuf/stubs/callback.h>
+ #include "mir_protobuf.pb.h"
+ 
+ namespace mir
+diff --git a/src/include/common/mir/protobuf/display_server_debug.h b/src/include/common/mir/protobuf/display_server_debug.h
+index c60436e..20f9583 100644
+--- a/src/include/common/mir/protobuf/display_server_debug.h
++++ b/src/include/common/mir/protobuf/display_server_debug.h
+@@ -19,6 +19,7 @@
+ #ifndef MIR_PROTOBUF_DISPLAY_SERVER_DEBUG_H_
+ #define MIR_PROTOBUF_DISPLAY_SERVER_DEBUG_H_
+ 
++#include <google/protobuf/stubs/callback.h>
+ #include "mir_protobuf.pb.h"
+ 
+ namespace mir
+-- 
+2.17.2
+
diff --git a/unity8/mir/0002-Remove-drmIsMaster-to-use-libdrm-version.patch b/unity8/mir/0002-Remove-drmIsMaster-to-use-libdrm-version.patch
new file mode 100644
index 000000000..a939c2dd3
--- /dev/null
+++ b/unity8/mir/0002-Remove-drmIsMaster-to-use-libdrm-version.patch
@@ -0,0 +1,53 @@
+From bac975363a78ab2bea2bdc6a3a9e199e9beea1f0 Mon Sep 17 00:00:00 2001
+From: Oliver Smith <ollieparanoid@bitmessage.ch>
+Date: Sat, 6 Jul 2019 00:13:36 +0200
+Subject: [PATCH 2/2] Remove drmIsMaster to use libdrm version
+
+Here is the proper version of this patch, but it does not apply cleanly
+on mir-1.1.2, so I chose to simply remove the whole drmIsMaster().
+
+https://github.com/MirServer/mir/pull/814
+
+This patch can be removed once we update to a newer mir version, which
+has the pull request above included.
+---
+ .../console/minimal_console_services.cpp      | 23 -------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/src/server/console/minimal_console_services.cpp b/src/server/console/minimal_console_services.cpp
+index b6d7918..51df9f3 100644
+--- a/src/server/console/minimal_console_services.cpp
++++ b/src/server/console/minimal_console_services.cpp
+@@ -35,29 +35,6 @@
+ #include <sys/types.h>
+ #include <drm.h>
+ 
+-// TODO: once libdrm provides this symbol, we need a way to set MIR_LIBDRM_HAS_IS_MASTER
+-#ifndef MIR_LIBDRM_HAS_IS_MASTER
+-bool drmIsMaster(int fd)
+-{
+-    struct drm_mode_mode_cmd cmd;
+-
+-    ::memset(&cmd, 0, sizeof cmd);
+-    /* Set an invalid connector_id to ensure that ATTACHMODE errors with
+-     * EINVAL in the unlikely event someone feels like calling this on a
+-     * kernel prior to 3.9. */
+-    cmd.connector_id = -1;
+-
+-    if (drmIoctl(fd, DRM_IOCTL_MODE_ATTACHMODE, &cmd) != -1)
+-    {
+-        /* On 3.9 ATTACHMODE was changed to drm_noop, and so will succeed
+-         * iff we've got a master fd */
+-        return true;
+-    }
+-
+-    return errno == EINVAL;
+-}
+-#endif
+-
+ mir::MinimalConsoleDevice::MinimalConsoleDevice(std::unique_ptr<mir::Device::Observer> observer)
+     : observer{std::move(observer)}
+ {
+-- 
+2.17.2
+
diff --git a/unity8/mir/APKBUILD b/unity8/mir/APKBUILD
index b7ba563bc..b08f82f5b 100644
--- a/unity8/mir/APKBUILD
+++ b/unity8/mir/APKBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Luca Weiss <luca@z3ntu.xyz>
 pkgname=mir
 pkgver=1.1.2
-pkgrel=1
+pkgrel=2
 pkgdesc="Canonical's display server"
 url="https://mir-server.io"
 arch="x86_64"
@@ -11,7 +11,11 @@ depends="xkeyboard-config dmz-cursor-theme ttf-freefont"
 depends_dev="boost-dev mesa-dev glm-dev protobuf-dev glog-dev gflags-dev eudev-dev glib-dev wayland-dev libepoxy-dev nettle-dev libinput-dev
 	capnproto-dev libxml++-2.6-dev py3-pillow freetype-dev libevdev-dev umockdev-dev lttng-ust-dev yaml-cpp-dev libxcursor-dev"
 makedepends="$depends_dev cmake libxkbcommon-dev gtest-dev gmock clang-dev"
-source="https://github.com/MirServer/mir/releases/download/v$pkgver/mir-$pkgver.tar.xz"
+source="
+	https://github.com/MirServer/mir/releases/download/v$pkgver/mir-$pkgver.tar.xz
+	0001-Fix-google-protobuf-closure-related-errors.patch
+	0002-Remove-drmIsMaster-to-use-libdrm-version.patch
+	"
 subpackages="$pkgname-dev"
 options="!check" # Some tests fail
 
@@ -37,4 +41,6 @@ package() {
 	cd "$builddir"
 	make DESTDIR="$pkgdir/" install
 }
-sha512sums="4431615d795b93239a83a197d61a5900f094a2108933be4e4da09220bd20e2b031e5232174805216a964279fcf8786672d5c40c3be83856d1903f128b7b814b7  mir-1.1.2.tar.xz"
+sha512sums="4431615d795b93239a83a197d61a5900f094a2108933be4e4da09220bd20e2b031e5232174805216a964279fcf8786672d5c40c3be83856d1903f128b7b814b7  mir-1.1.2.tar.xz
+6f0d22d2d0ec85793b5067f2dcb95ac57ef5118096028098f096b32781f49acfe28ab52523ac34f72035ec7518056c392a9fc46ea5c41332538fe7a0d0db303a  0001-Fix-google-protobuf-closure-related-errors.patch
+279c009d8d54823bcfdfd564543ffa4cb1ad99cef211f82d5eefe3cc33fda80d5455dfaf8ba732f6cd1067bb442d732b364fdeee07018006def13b55887c6da8  0002-Remove-drmIsMaster-to-use-libdrm-version.patch"