From 7b430130e338a84228a6326e3ed1ea42209412bf Mon Sep 17 00:00:00 2001 From: Antoine Damhet Date: Sun, 23 Aug 2020 12:56:49 +0200 Subject: [PATCH] update patches from pull request Signed-off-by: Antoine Damhet --- .SRCINFO | 50 +++++----- 0001-deps-glad-Add-EGL.patch | 4 +- ...engl-Rename-gl-x11.c-to-gl-x11-glx.c.patch | 4 +- ...-libobs-opengl-Factor-out-GLX-winsys.patch | 4 +- ...-opengl-Introduce-the-X11-EGL-winsys.patch | 4 +- ...-deps-glad-Make-X11-required-as-well.patch | 4 +- ...Install-qtbase5-private-dev-on-Linux.patch | 4 +- ...e-X11-specific-code-to-obs-nix-x11.c.patch | 4 +- ...oduce-the-concept-of-a-Unix-platform.patch | 4 +- ...-UI-Set-the-Unix-platform-on-startup.patch | 4 +- ...ure-Fail-to-load-when-running-on-EGL.patch | 4 +- 0011-libobs-Add-a-Wayland-platform.patch | 4 +- ...y-to-use-the-platform-display-if-ava.patch | 4 +- 0013-libobs-Add-a-Wayland-platform.patch | 30 ------ ...gl-Introduce-an-EGL-Wayland-renderer.patch | 4 +- ...etrieve-Wayland-surface-from-QWindow.patch | 4 +- ...troy-display-when-becoming-invisible.patch | 23 ++++- ...-obs_display-when-QTToGSWindow-fails.patch | 76 ++++++++++++++++ ...Rename-callback-to-match-signal-name.patch | 37 ++++++++ ...gnore-Always-On-Top-on-Wayland-platf.patch | 58 ++++++++++++ ...play-CreateDisplay-public-and-allow-.patch | 54 +++++++++++ ...ose-and-PlatformSurface-events-to-cr.patch | 91 +++++++++++++++++++ PKGBUILD | 50 +++++----- 23 files changed, 421 insertions(+), 104 deletions(-) delete mode 100644 0013-libobs-Add-a-Wayland-platform.patch rename 0014-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch => 0013-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch (99%) rename 0015-UI-Retrieve-Wayland-surface-from-QWindow.patch => 0014-UI-Retrieve-Wayland-surface-from-QWindow.patch (95%) rename 0016-UI-Destroy-obs_display-when-becoming-invisible.patch => 0015-UI-Destroy-display-when-becoming-invisible.patch (65%) create mode 100644 0016-UI-Don-t-create-obs_display-when-QTToGSWindow-fails.patch create mode 100644 0017-UI-Rename-callback-to-match-signal-name.patch create mode 100644 0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch create mode 100644 0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch create mode 100644 0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch diff --git a/.SRCINFO b/.SRCINFO index bfd89bd..0f40bd1 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = obs-studio-wayland pkgdesc = Free, open source software for live streaming and recording (with wayland patches) pkgver = 25.0.8 - pkgrel = 2 + pkgrel = 3 url = https://obsproject.com arch = x86_64 license = GPL2 @@ -47,28 +47,36 @@ pkgbase = obs-studio-wayland source = 0010-linux-capture-Fail-to-load-when-running-on-EGL.patch source = 0011-libobs-Add-a-Wayland-platform.patch source = 0012-libobs-opengl-Try-to-use-the-platform-display-if-ava.patch - source = 0013-libobs-Add-a-Wayland-platform.patch - source = 0014-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch - source = 0015-UI-Retrieve-Wayland-surface-from-QWindow.patch - source = 0016-UI-Destroy-obs_display-when-becoming-invisible.patch + source = 0013-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch + source = 0014-UI-Retrieve-Wayland-surface-from-QWindow.patch + source = 0015-UI-Destroy-display-when-becoming-invisible.patch + source = 0016-UI-Don-t-create-obs_display-when-QTToGSWindow-fails.patch + source = 0017-UI-Rename-callback-to-match-signal-name.patch + source = 0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch + source = 0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch + source = 0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch sha512sums = a97c03dc218a4e03e48f6a7dc82b4a59ebeee2039f17be66bb847681ce9ff3d25e6e015be4af78fe44739f6fad5089b6e683d7657c2e4fde8e547df9a2594a08 sha512sums = 1ff0e088eed61554268009f3d8c5a23c0888bfbe860d6cb288ddf348108446c152fd87e2cb8f54613a88378d8474550632c90f924005d5e0343bf1a801339ccc - sha512sums = 6329e08da95e345509001ab6b9e8b73a227d0e63a8d39a3ef9b7d0197940ea9589d39b4aa92cdcc9f21cc4b9110a97f8e80891a12b4b24dff6d23395379abf5c - sha512sums = b05346b83587d2fe3fbc676a14aca961f05fa58c6912f82fed9e15a4b9fcacce297921003b41980c57ba09c4623d50c905a7c50961c2269a9709fcb67a088002 - sha512sums = 6f38fd7f6f5a29d05b6dd824af1de6072ebd692c96940ba74e5d1799e21754230010fd70cd2f1ce830a0701d25b07cfbae8cbe49f89ba085cd2dec6796a7790d - sha512sums = 14979eef47ab1d6e88ab77c35ab00a5e8297d1ed332bb397b8d3906e68c6ffa0b4e0761ef0dfff0221c7e22f5fb709e5bb11b87e046116bb3996df270e3b7b43 - sha512sums = db6a8d54e86f58f1adecb0f09ab5660ae0d06f4aa8bd0ea2e61da601ae82fd53a3b4c6db96d5827709e700843b70cc5a72851c0d429e3ec05bef250ed48445a0 - sha512sums = f0374c85bd93928a32d60a9516c90c1b2e3537b84f949066110897f05224a568dd57f2cd9d141b0cfa8e89672b081dac3c64304523fcf37f0c018ca78ad71625 - sha512sums = dcdca90cfd701aad02ba12dee9a6482ca9066ff817e6e24bb3d0d6dfbbc48e8e98eb02517983802c66cade34c0d347aec817fe98da8baa7f5fff9187201e9a00 - sha512sums = 64e4adef34a1074410245120d828871c128ee8254d77378cd7b74fe0182abaffdbff6669990a75464335b33d83641893b73e618c7322e1fe3186a748eab07e79 - sha512sums = 64ca66913ade6b28815aa06383089e1c9aaa7a2b50cd425be8876d0a95338615be844a362a55c02541681d51f1921cb0820554f49fe21786649076ca16f6f64b - sha512sums = a917037dc63bfdd8d2d04b2d3f625eb9c8ec26868ca2eeef23d78f3442c8233252d86285b771e1c1428408508aedff4407aec5bdc9ef233fda995483fdab4202 - sha512sums = 013adb73a718f5df05a055de0e5fa17701dc645d8e7025ff1192d99a405dd6a0923fcfdbbad37777ff993545aadf9d4d29bae7191c6505f9f929273d5b374ee2 - sha512sums = 34710dbf905e6af2d7af3feab9f55c867dcbac6afa0ab6a12f7c458b974ba71e14ef797e9db613d3248c046dee1c1dce8559ceeaf1d95d1215368032e642731d - sha512sums = e131c7a65ce0e848f0b91bfd4b3db750bc0bddce64a9ff49d97082ddafb9ddab92f43ea19a2c92b054e85df0f018f43ff5dc8cf81671520079e4e4681d5ac230 - sha512sums = cefa4f5032a06e9341ccdabef022d755c8869b391a33ed5c4bd927672f967d5287d4c017cb7b2d37c163c9f387ca94d5846327461a9ba3b44478ed67a60d6a9f - sha512sums = e406d3f16f17b35ce463120eefd2bea3797fa83304ea27628b9a671704451c4a275d6844b0f007997e3a6edc39557442c6eb9eb8b6dc2a50e07341e3b0621e1f - sha512sums = 6c1cd77e63f760aabb9186edb906092bb9f6a7b2e7bd32deff4af33b5f35e95abe7ff874b6a17112d3da098f970f706c0a05f239fc75b65e60f4c68ae544eacf + sha512sums = df2a3b13a66603546bc39c070bbbe55d2ef0e6620fea98e773955713ef74c6817649713da76548d24a4160f4af327e132205cbeb2f90959690aa3321945284c4 + sha512sums = d15612ba51364c9ba49096a3aa8d2002d739b81cae090586254fc1351723cabfd80a09d76834b71f6d49abcc50e33dda52f183dd3a5e87a0d740ce57dc2cb583 + sha512sums = 43e67659200e077a6dc624f94ed9cde5a31ae7bcd403b9ea649fb0277b3a1964b4f11a4ad45d754fc571b71c3cca42ca0a843bd484229a64a41d3f96efa03aca + sha512sums = dfd8687f3aaae32161998075923905bc2c3111b299132d398efee5771fb0b681a96f1ee367b6955e66935df8b2f9cb59466b5c209768b04bf4c6af177c4b8621 + sha512sums = b47ee46b3bdb6de606fb667d17536fbede200be86021c983259c131fe9f463b3101e419ea8ed30f0a99163877d2e939f44b9e7fd2d213cc4c203da64813117d1 + sha512sums = 8b6e5f32ebfca1f163d69144e3752b409be8b3747ff46b9f9cecf0140247fffc8728f49cfcf0f71e2b514ff8e516bf441cdd421dff6952d30f65a8adfd4526e3 + sha512sums = 62f37c7c60067100a8594306e5fa6e65003063fc3d35d8b7daa7ead2f50ae17677f54dc9f8ac206ef20ca1178ddfb68948893f6d8d56efd0dcc6f147c172c547 + sha512sums = 5d6e46223f2d08e807040cc8e264d27219ad8b4a5ff580fa568ccbc88f26564f2e72e8400b8c447c226b5f27346206da19081a5ac03512c95a56ea5d6b3924ff + sha512sums = 1e77adb183e1bb42260965e1733b88d25ebd885ef4029b8c424dd100485fcd882f676a75d396cc7adbbb7c1c4ae9b4f047778d96c4d6d74b5302437059eb0db6 + sha512sums = cc853dc74ea961a9253085188f851e3184a53b252f1a85cecd16745b4ab561ea7a47b32bb9475624a2eec51106090a153bdb6ec6680f2ee4bd8fd5a6509ba831 + sha512sums = cc712c85b364179794af393634c87ffb3d7d42b360379405ea587485f07e525496ac2da4e97f52a7f2232164e5e70d9442c9b7cc139c85f0405f662ae092b795 + sha512sums = 4c5733a51dc1070327eadea420ba5acea2ec74a3bac538264969bc5eea2dadee701dd6634737e09b2755eae388fa0969d32738b6ea81b99f66a56db9b6a90765 + sha512sums = e61d437cb1b98f50bd5e4404a90f744d05d8a73965554b1ac981ffa534f1a134bdf6714a78a2eb257b8a53675a012e5786bdce3fd16201b9b64191a61cb11373 + sha512sums = 19e0943462fe6e72a104ed45015b8e2b73a0ffa389f733752b6991e1f69e521682f3095d8c372aa800d13b89b28237aa6d2b1fcd24d4df9da6a6ba2000e07c77 + sha512sums = abce43def134860a6953fb2e804541860f3a222fbf2e27956874e77974e70851893078cefdce086f56b5144c885dbe674d060e635f351ef4efc9a1bcd1fcfa1c + sha512sums = 55a80e92c70f709ffb42491d61cfc659ba0c682603a8431e915d238495e9ba966b976a195daec0aec79803473d9b251371c4469391f423456d325ab558a0379c + sha512sums = 6dea2f711a4871da8dd72faa29f3eb3274e18d24a6bc719461b20fa4b0a327ad16291b8867c9d68d5b911be4016f2d75fa0158df1e55b5fc96f2612574e7ceb0 + sha512sums = cef5df381f13456326e844b1f45168f51af37df09227f07bdd800672efce28181c4fdf96798759d139f953b5809850caa3894d2f7a3c29c0a7220dd0b4f60c78 + sha512sums = fd3a51462f745169522c5c6a857fe124eebb06331a9ccb1e4dc69e78c300c3b0737d5cb330c9d2b9e8f30aae9d206bbc985c2660aeb7ac1a66cbc9d84187cf06 + sha512sums = 8a3c9db9d92b76a0388083744ead2eceb955c0c21c8b4242db51a500a6e1454a21725501e0ba1968f63b59b1ea6e83765d84d03b421ec482e8ca37166b03c2ac pkgname = obs-studio-wayland diff --git a/0001-deps-glad-Add-EGL.patch b/0001-deps-glad-Add-EGL.patch index 76d75d6..af8d031 100644 --- a/0001-deps-glad-Add-EGL.patch +++ b/0001-deps-glad-Add-EGL.patch @@ -1,7 +1,7 @@ -From af3a31e5dc24a37ecd34ac87ec662289a942a42e Mon Sep 17 00:00:00 2001 +From 54422d4a37bfae4239e9aca54eb0ff0b8b419cdd Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 9 Mar 2020 13:10:16 -0300 -Subject: [PATCH 01/16] deps-glad: Add EGL +Subject: [PATCH 01/20] deps-glad: Add EGL The code is generated by https://glad.dav1d.de/ --- diff --git a/0002-libobs-opengl-Rename-gl-x11.c-to-gl-x11-glx.c.patch b/0002-libobs-opengl-Rename-gl-x11.c-to-gl-x11-glx.c.patch index 9509e25..6eaf3d9 100644 --- a/0002-libobs-opengl-Rename-gl-x11.c-to-gl-x11-glx.c.patch +++ b/0002-libobs-opengl-Rename-gl-x11.c-to-gl-x11-glx.c.patch @@ -1,7 +1,7 @@ -From 6a15695f885d372909c3eeadd091abd640fca937 Mon Sep 17 00:00:00 2001 +From f4dc111b8acbdd2be0bb077f1ac8d703d92d497c Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 9 Mar 2020 13:19:31 -0300 -Subject: [PATCH 02/16] libobs-opengl: Rename gl-x11.c to gl-x11-glx.c +Subject: [PATCH 02/20] libobs-opengl: Rename gl-x11.c to gl-x11-glx.c This is in preparation for the future abstraction layer (gl-x11-*) and also to match the actual name of the windowing system. When diff --git a/0003-libobs-opengl-Factor-out-GLX-winsys.patch b/0003-libobs-opengl-Factor-out-GLX-winsys.patch index cd29cc7..a63e271 100644 --- a/0003-libobs-opengl-Factor-out-GLX-winsys.patch +++ b/0003-libobs-opengl-Factor-out-GLX-winsys.patch @@ -1,7 +1,7 @@ -From 4cc969bdb0abcfb5a4737b2f4159ee9c0be7d4cc Mon Sep 17 00:00:00 2001 +From c6f9827b8c07adb4c95811f2545ba546fac0c132 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 9 Mar 2020 16:46:37 -0300 -Subject: [PATCH 03/16] libobs-opengl: Factor out GLX winsys +Subject: [PATCH 03/20] libobs-opengl: Factor out GLX winsys Move the GLX-related code to gl-x11-glx, and introduce gl-nix as a winsys-agnostic abstraction layer. gl-nix serves as the runtime diff --git a/0004-libobs-opengl-Introduce-the-X11-EGL-winsys.patch b/0004-libobs-opengl-Introduce-the-X11-EGL-winsys.patch index 760ce47..909dd0a 100644 --- a/0004-libobs-opengl-Introduce-the-X11-EGL-winsys.patch +++ b/0004-libobs-opengl-Introduce-the-X11-EGL-winsys.patch @@ -1,7 +1,7 @@ -From ecff9e62ac3a52a198e6d5fd71c40abe3826799e Mon Sep 17 00:00:00 2001 +From 47d63a561f82114ae31dca741ca2fdad27a7c519 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 9 Mar 2020 17:35:49 -0300 -Subject: [PATCH 04/16] libobs-opengl: Introduce the X11/EGL winsys +Subject: [PATCH 04/20] libobs-opengl: Introduce the X11/EGL winsys Introduce the EGL/X11 winsys, and use it when the OBS_USE_EGL environment variable is defined. This variable is only temporary, for future commits diff --git a/0005-deps-glad-Make-X11-required-as-well.patch b/0005-deps-glad-Make-X11-required-as-well.patch index c658aa8..0511315 100644 --- a/0005-deps-glad-Make-X11-required-as-well.patch +++ b/0005-deps-glad-Make-X11-required-as-well.patch @@ -1,7 +1,7 @@ -From 8191cd88f8273430e2976d774ac9189d17661f73 Mon Sep 17 00:00:00 2001 +From e7f7eecfc23bd9903b7522aefbc82cce0284b889 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 11 Apr 2020 23:49:05 -0300 -Subject: [PATCH 05/16] deps/glad: Make X11 required as well +Subject: [PATCH 05/20] deps/glad: Make X11 required as well To keep consistency with the EGL line --- diff --git a/0006-ci-Install-qtbase5-private-dev-on-Linux.patch b/0006-ci-Install-qtbase5-private-dev-on-Linux.patch index 9a1a199..0c60fb2 100644 --- a/0006-ci-Install-qtbase5-private-dev-on-Linux.patch +++ b/0006-ci-Install-qtbase5-private-dev-on-Linux.patch @@ -1,7 +1,7 @@ -From f31796d19f4a4fdedc99f360ccf5d9c5c0f92cf5 Mon Sep 17 00:00:00 2001 +From 9a85c7fcaf67bf606e3f57507c532e1239e52d57 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 6 Mar 2020 16:22:01 -0300 -Subject: [PATCH 06/16] ci: Install qtbase5-private-dev on Linux +Subject: [PATCH 06/20] ci: Install qtbase5-private-dev on Linux List this dependency both under CI/install-dependencies-linux.sh, and .github/workflows/main.yml. diff --git a/0007-libobs-nix-Move-X11-specific-code-to-obs-nix-x11.c.patch b/0007-libobs-nix-Move-X11-specific-code-to-obs-nix-x11.c.patch index 9ece5ad..e9ad789 100644 --- a/0007-libobs-nix-Move-X11-specific-code-to-obs-nix-x11.c.patch +++ b/0007-libobs-nix-Move-X11-specific-code-to-obs-nix-x11.c.patch @@ -1,7 +1,7 @@ -From c84f1b751554d6a1cd15f5db4a611a2cb8f95842 Mon Sep 17 00:00:00 2001 +From 77e85e17d58c13d655d3d81bb197c5a5d1f1453f Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 6 Mar 2020 17:24:33 -0300 -Subject: [PATCH 07/16] libobs/nix: Move X11-specific code to obs-nix-x11.c +Subject: [PATCH 07/20] libobs/nix: Move X11-specific code to obs-nix-x11.c Currently, obs-nix.c is highly tied to the X11 display server. It includes X11 headers directly, and make use diff --git a/0008-libobs-Introduce-the-concept-of-a-Unix-platform.patch b/0008-libobs-Introduce-the-concept-of-a-Unix-platform.patch index 8365db6..b929007 100644 --- a/0008-libobs-Introduce-the-concept-of-a-Unix-platform.patch +++ b/0008-libobs-Introduce-the-concept-of-a-Unix-platform.patch @@ -1,7 +1,7 @@ -From 32f86b37c78454ad51ac427ccc772b7a62fa89c8 Mon Sep 17 00:00:00 2001 +From 5dd4d22ec8c35ffd18499027573a42a57343eee6 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 6 Mar 2020 17:50:41 -0300 -Subject: [PATCH 08/16] libobs: Introduce the concept of a Unix platform +Subject: [PATCH 08/20] libobs: Introduce the concept of a Unix platform This is a Unix-specific code. The only available platforms at this point are the X11/GLX and X11/EGL platforms. diff --git a/0009-UI-Set-the-Unix-platform-on-startup.patch b/0009-UI-Set-the-Unix-platform-on-startup.patch index c980d56..753ba50 100644 --- a/0009-UI-Set-the-Unix-platform-on-startup.patch +++ b/0009-UI-Set-the-Unix-platform-on-startup.patch @@ -1,7 +1,7 @@ -From 79ec8d09ce00ae6645604a3fd7562832c2400790 Mon Sep 17 00:00:00 2001 +From 0c83de87856f6bffb5744353afc13f624836c792 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 7 Apr 2020 23:17:02 -0300 -Subject: [PATCH 09/16] UI: Set the Unix platform on startup +Subject: [PATCH 09/20] UI: Set the Unix platform on startup Move the OBS_USE_EGL environment variable check to obs-app.cpp, and set the OBS platform to be either OBS_NIX_PLATFORM_X11_GLX diff --git a/0010-linux-capture-Fail-to-load-when-running-on-EGL.patch b/0010-linux-capture-Fail-to-load-when-running-on-EGL.patch index 292d128..8747bfe 100644 --- a/0010-linux-capture-Fail-to-load-when-running-on-EGL.patch +++ b/0010-linux-capture-Fail-to-load-when-running-on-EGL.patch @@ -1,7 +1,7 @@ -From 7abd7a9ed53f36a0aa9ba45c32cb7824bc6558ac Mon Sep 17 00:00:00 2001 +From 944cc7a1cbe8de3c21173ae4f32db034b5b9b6b2 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 8 Apr 2020 23:58:43 -0300 -Subject: [PATCH 10/16] linux-capture: Fail to load when running on EGL +Subject: [PATCH 10/20] linux-capture: Fail to load when running on EGL Right now, linux-capture hard-depends on GLX. Disable it when running under EGL. diff --git a/0011-libobs-Add-a-Wayland-platform.patch b/0011-libobs-Add-a-Wayland-platform.patch index 312184d..e901bf2 100644 --- a/0011-libobs-Add-a-Wayland-platform.patch +++ b/0011-libobs-Add-a-Wayland-platform.patch @@ -1,7 +1,7 @@ -From 5c5cf8e4dfd6b2930a25c5772a5679d39c75fc0d Mon Sep 17 00:00:00 2001 +From 3223d221945109bf6c78085a04c66816749a3168 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 6 Mar 2020 18:53:42 -0300 -Subject: [PATCH 11/16] libobs: Add a Wayland platform +Subject: [PATCH 11/20] libobs: Add a Wayland platform Introduce the OBS_NIX_PLATFORM_WAYLAND enum value, and try to detect it when OBS Studio runs by looking into the platform name. diff --git a/0012-libobs-opengl-Try-to-use-the-platform-display-if-ava.patch b/0012-libobs-opengl-Try-to-use-the-platform-display-if-ava.patch index da63e8e..5e1e20a 100644 --- a/0012-libobs-opengl-Try-to-use-the-platform-display-if-ava.patch +++ b/0012-libobs-opengl-Try-to-use-the-platform-display-if-ava.patch @@ -1,7 +1,7 @@ -From e8a11258a45892d6aebb08de3302e771df25bc6f Mon Sep 17 00:00:00 2001 +From 321d06f9a2754dacbdac119a971d137cb2ececf2 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 11 Apr 2020 23:32:16 -0300 -Subject: [PATCH 12/16] libobs-opengl: Try to use the platform display if +Subject: [PATCH 12/20] libobs-opengl: Try to use the platform display if available We need to ensure we're running all X11 code on the same display. diff --git a/0013-libobs-Add-a-Wayland-platform.patch b/0013-libobs-Add-a-Wayland-platform.patch deleted file mode 100644 index 759940d..0000000 --- a/0013-libobs-Add-a-Wayland-platform.patch +++ /dev/null @@ -1,30 +0,0 @@ -From a0535494becd877747261ff18b545a4d77c980ff Mon Sep 17 00:00:00 2001 -From: Georges Basile Stavracas Neto -Date: Fri, 6 Mar 2020 18:53:42 -0300 -Subject: [PATCH 13/16] libobs: Add a Wayland platform - -Introduce the OBS_NIX_PLATFORM_WAYLAND enum value, and try to detect -it when OBS Studio runs by looking into the platform name. ---- - UI/CMakeLists.txt | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt -index 171efa2b..70d6da79 100644 ---- a/UI/CMakeLists.txt -+++ b/UI/CMakeLists.txt -@@ -408,6 +408,11 @@ if (ENABLE_WAYLAND) - include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) - endif() - -+if (ENABLE_WAYLAND) -+ find_package(Qt5Gui) -+ include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) -+endif() -+ - define_graphic_modules(obs) - - install_obs_core(obs) --- -2.28.0 - diff --git a/0014-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch b/0013-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch similarity index 99% rename from 0014-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch rename to 0013-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch index d360c44..cc9a620 100644 --- a/0014-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch +++ b/0013-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch @@ -1,7 +1,7 @@ -From 35be3fc4cc65ca86329cf1156e1256249096606b Mon Sep 17 00:00:00 2001 +From e8ad273aa0698f045100fef74599008991dea8b0 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 9 Mar 2020 21:09:11 -0300 -Subject: [PATCH 14/16] libobs-opengl: Introduce an EGL/Wayland renderer +Subject: [PATCH 13/20] libobs-opengl: Introduce an EGL/Wayland renderer Introduce a new Wayland/EGL renderer. --- diff --git a/0015-UI-Retrieve-Wayland-surface-from-QWindow.patch b/0014-UI-Retrieve-Wayland-surface-from-QWindow.patch similarity index 95% rename from 0015-UI-Retrieve-Wayland-surface-from-QWindow.patch rename to 0014-UI-Retrieve-Wayland-surface-from-QWindow.patch index 8e91bd4..f284ceb 100644 --- a/0015-UI-Retrieve-Wayland-surface-from-QWindow.patch +++ b/0014-UI-Retrieve-Wayland-surface-from-QWindow.patch @@ -1,7 +1,7 @@ -From 9a69ae56d2204501b45cf7b5471279e7d61e65ba Mon Sep 17 00:00:00 2001 +From d61735d0dc74fc1a50564fe72cb26a07c4d49e56 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 9 Mar 2020 21:23:37 -0300 -Subject: [PATCH 15/16] UI: Retrieve Wayland surface from QWindow +Subject: [PATCH 14/20] UI: Retrieve Wayland surface from QWindow On Wayland, we want to query the window's underlying platform for the Wayland surface, instead of foolishly diff --git a/0016-UI-Destroy-obs_display-when-becoming-invisible.patch b/0015-UI-Destroy-display-when-becoming-invisible.patch similarity index 65% rename from 0016-UI-Destroy-obs_display-when-becoming-invisible.patch rename to 0015-UI-Destroy-display-when-becoming-invisible.patch index e45a6da..b078f41 100644 --- a/0016-UI-Destroy-obs_display-when-becoming-invisible.patch +++ b/0015-UI-Destroy-display-when-becoming-invisible.patch @@ -1,7 +1,7 @@ -From 7e2e627ebf4d9f52afebb7dcda95429f68362f32 Mon Sep 17 00:00:00 2001 +From bab8f9d12fb7b534a6915cfef91b765603563238 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 18 Aug 2020 19:38:29 -0300 -Subject: [PATCH 16/16] UI: Destroy obs_display when becoming invisible +Subject: [PATCH 15/20] UI: Destroy display when becoming invisible When a window is made invisible, then visible again, the obs_display is reused. Turns out, QT destroys the wl_surface @@ -10,10 +10,13 @@ surface created on top of this wl_surface is not, and any attempt to attach a new buffer to it will crash OBS. Destroy the obs_display when becoming invisible, and when -running as a Wayland client. +running as a Wayland client. Also nullify the display +variable on destruction, to avoid subclasses double-freeing +the obs display. --- UI/qt-display.cpp | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) + UI/qt-display.hpp | 1 + + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp index 685ee6f9..fc83e0e0 100644 @@ -47,6 +50,18 @@ index 685ee6f9..fc83e0e0 100644 if (!display) { CreateDisplay(); +diff --git a/UI/qt-display.hpp b/UI/qt-display.hpp +index a2e5a3ef..50f891f8 100644 +--- a/UI/qt-display.hpp ++++ b/UI/qt-display.hpp +@@ -25,6 +25,7 @@ signals: + public: + OBSQTDisplay(QWidget *parent = nullptr, + Qt::WindowFlags flags = nullptr); ++ ~OBSQTDisplay() { display = nullptr; } + + virtual QPaintEngine *paintEngine() const override; + -- 2.28.0 diff --git a/0016-UI-Don-t-create-obs_display-when-QTToGSWindow-fails.patch b/0016-UI-Don-t-create-obs_display-when-QTToGSWindow-fails.patch new file mode 100644 index 0000000..27516aa --- /dev/null +++ b/0016-UI-Don-t-create-obs_display-when-QTToGSWindow-fails.patch @@ -0,0 +1,76 @@ +From 2e5a62066f4c54880c1879f44a703f5e302e79c0 Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Wed, 19 Aug 2020 10:11:08 -0300 +Subject: [PATCH 16/20] UI: Don't create obs_display when QTToGSWindow fails + +Right after showing the OBSQTDisplay widget, it may happen that a +wl_surface is not yet created and attached to the window. When this +happens, creating the OBS display results in a crash. + +Make QTToGSWindow return a boolean, indicating success or failure, and +don't create the OBS display on failure. +--- + UI/qt-display.cpp | 3 ++- + UI/qt-wrappers.cpp | 6 +++++- + UI/qt-wrappers.hpp | 2 +- + 3 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp +index fc83e0e0..c00719ce 100644 +--- a/UI/qt-display.cpp ++++ b/UI/qt-display.cpp +@@ -100,7 +100,8 @@ void OBSQTDisplay::CreateDisplay() + info.format = GS_BGRA; + info.zsformat = GS_ZS_NONE; + +- QTToGSWindow(windowHandle(), info.window); ++ if (!QTToGSWindow(windowHandle(), info.window)) ++ return; + + display = obs_display_create(&info, backgroundColor); + +diff --git a/UI/qt-wrappers.cpp b/UI/qt-wrappers.cpp +index 1485a181..da5a8ef5 100644 +--- a/UI/qt-wrappers.cpp ++++ b/UI/qt-wrappers.cpp +@@ -110,8 +110,10 @@ void OBSMessageBox::critical(QWidget *parent, const QString &title, + mb.exec(); + } + +-void QTToGSWindow(QWindow *window, gs_window &gswindow) ++bool QTToGSWindow(QWindow *window, gs_window &gswindow) + { ++ bool success = true; ++ + #ifdef _WIN32 + gswindow.hwnd = (HWND)window->winId(); + #elif __APPLE__ +@@ -129,10 +131,12 @@ void QTToGSWindow(QWindow *window, gs_window &gswindow) + QGuiApplication::platformNativeInterface(); + gswindow.display = + native->nativeResourceForWindow("surface", window); ++ success = gswindow.display != nullptr; + break; + #endif + } + #endif ++ return success; + } + + uint32_t TranslateQtKeyboardEventModifiers(Qt::KeyboardModifiers mods) +diff --git a/UI/qt-wrappers.hpp b/UI/qt-wrappers.hpp +index f191f8f9..cb244a74 100644 +--- a/UI/qt-wrappers.hpp ++++ b/UI/qt-wrappers.hpp +@@ -56,7 +56,7 @@ public: + + void OBSErrorBox(QWidget *parent, const char *msg, ...); + +-void QTToGSWindow(QWindow *window, gs_window &gswindow); ++bool QTToGSWindow(QWindow *window, gs_window &gswindow); + + uint32_t TranslateQtKeyboardEventModifiers(Qt::KeyboardModifiers mods); + +-- +2.28.0 + diff --git a/0017-UI-Rename-callback-to-match-signal-name.patch b/0017-UI-Rename-callback-to-match-signal-name.patch new file mode 100644 index 0000000..9a2d944 --- /dev/null +++ b/0017-UI-Rename-callback-to-match-signal-name.patch @@ -0,0 +1,37 @@ +From fb03e532004fec99d7d63ce765133665504aae70 Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Wed, 19 Aug 2020 13:08:01 -0300 +Subject: [PATCH 17/20] UI: Rename callback to match signal name + +The sizeChanged callback is connected to the screenChanged signal, +and evidently the naming doesn't match. Rename the callback to +match the signal name. +--- + UI/qt-display.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp +index c00719ce..feed5b6c 100644 +--- a/UI/qt-display.cpp ++++ b/UI/qt-display.cpp +@@ -56,7 +56,7 @@ OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags) + } + }; + +- auto sizeChanged = [this](QScreen *) { ++ auto screenChanged = [this](QScreen *) { + CreateDisplay(); + + QSize size = GetPixelSize(this); +@@ -64,7 +64,7 @@ OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags) + }; + + connect(windowHandle(), &QWindow::visibleChanged, windowVisible); +- connect(windowHandle(), &QWindow::screenChanged, sizeChanged); ++ connect(windowHandle(), &QWindow::screenChanged, screenChanged); + } + + QColor OBSQTDisplay::GetDisplayBackgroundColor() const +-- +2.28.0 + diff --git a/0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch b/0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch new file mode 100644 index 0000000..9109623 --- /dev/null +++ b/0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch @@ -0,0 +1,58 @@ +From b31f3e26477368af8213da7883391e475ff82ac2 Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Wed, 19 Aug 2020 15:09:26 -0300 +Subject: [PATCH 18/20] UI: Disable and ignore Always On Top on Wayland + platforms + +This is a dangerous operation on Wayland, and is crashing not only +OBS Studio but also the whole compositor. Let's disable it for now +when running as a native Wayland client. + +Some compositors (GNOME Shell, Plasma) still allow setting this +option on the window menu. +--- + UI/window-basic-main.cpp | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp +index 09304eb1..653ad93a 100644 +--- a/UI/window-basic-main.cpp ++++ b/UI/window-basic-main.cpp +@@ -75,6 +75,10 @@ + + #include + ++#ifdef ENABLE_WAYLAND ++#include ++#endif ++ + using namespace json11; + using namespace std; + +@@ -1713,9 +1717,22 @@ void OBSBasic::OBSInit() + + bool alwaysOnTop = config_get_bool(App()->GlobalConfig(), "BasicWindow", + "AlwaysOnTop"); +- if (alwaysOnTop || opt_always_on_top) { ++ ++#ifdef ENABLE_WAYLAND ++ bool isWayland = obs_get_nix_platform() == OBS_NIX_PLATFORM_WAYLAND; ++#else ++ bool isWayland = false; ++#endif ++ ++ if (!isWayland && (alwaysOnTop || opt_always_on_top)) { + SetAlwaysOnTop(this, true); + ui->actionAlwaysOnTop->setChecked(true); ++ } else if (isWayland) { ++ if (opt_always_on_top) ++ blog(LOG_INFO, ++ "Always On Top not available on Wayland, ignoring…"); ++ ui->actionAlwaysOnTop->setEnabled(false); ++ ui->actionAlwaysOnTop->setVisible(false); + } + + #ifndef _WIN32 +-- +2.28.0 + diff --git a/0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch b/0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch new file mode 100644 index 0000000..67a2497 --- /dev/null +++ b/0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch @@ -0,0 +1,54 @@ +From 2debb5ceb1bcc44f74c2b72f2af7ef02e3755e69 Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Thu, 20 Aug 2020 11:57:19 -0300 +Subject: [PATCH 19/20] UI: Make OBSQTDisplay::CreateDisplay() public and allow + forcing creation + +This will be used by a new event filter, added only when running as a Wayland +client, to force creating the obs_display instance even when not exposed. +--- + UI/qt-display.cpp | 7 +++++-- + UI/qt-display.hpp | 3 +-- + 2 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp +index feed5b6c..b230ab4e 100644 +--- a/UI/qt-display.cpp ++++ b/UI/qt-display.cpp +@@ -87,9 +87,12 @@ void OBSQTDisplay::UpdateDisplayBackgroundColor() + obs_display_set_background_color(display, backgroundColor); + } + +-void OBSQTDisplay::CreateDisplay() ++void OBSQTDisplay::CreateDisplay(bool force) + { +- if (display || !windowHandle()->isExposed()) ++ if (display) ++ return; ++ ++ if (!windowHandle()->isExposed() && !force) + return; + + QSize size = GetPixelSize(this); +diff --git a/UI/qt-display.hpp b/UI/qt-display.hpp +index 50f891f8..ac717b82 100644 +--- a/UI/qt-display.hpp ++++ b/UI/qt-display.hpp +@@ -13,8 +13,6 @@ class OBSQTDisplay : public QWidget { + + OBSDisplay display; + +- void CreateDisplay(); +- + void resizeEvent(QResizeEvent *event) override; + void paintEvent(QPaintEvent *event) override; + +@@ -36,4 +34,5 @@ public: + QColor GetDisplayBackgroundColor() const; + void SetDisplayBackgroundColor(const QColor &color); + void UpdateDisplayBackgroundColor(); ++ void CreateDisplay(bool force = false); + }; +-- +2.28.0 + diff --git a/0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch b/0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch new file mode 100644 index 0000000..84e49a4 --- /dev/null +++ b/0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch @@ -0,0 +1,91 @@ +From 0e49f864012ef995870d9debac5fa08d73615b30 Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Thu, 20 Aug 2020 11:58:45 -0300 +Subject: [PATCH 20/20] UI: Check for Expose and PlatformSurface events to + create display + +This is a workaround for QWaylandWindow never becoming exposed, or +receiving the QEvent::Expose [1]. + +[1] https://bugreports.qt.io/browse/QTBUG-86176 +--- + UI/qt-display.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 56 insertions(+) + +diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp +index b230ab4e..5d81c463 100644 +--- a/UI/qt-display.cpp ++++ b/UI/qt-display.cpp +@@ -10,6 +10,56 @@ + + #ifdef ENABLE_WAYLAND + #include ++ ++class SurfaceEventFilter : public QObject { ++ OBSQTDisplay *display; ++ int mTimerId; ++ ++public: ++ SurfaceEventFilter(OBSQTDisplay *src) : display(src), mTimerId(0) {} ++ ++protected: ++ bool eventFilter(QObject *obj, QEvent *event) override ++ { ++ bool result = QObject::eventFilter(obj, event); ++ QPlatformSurfaceEvent *surfaceEvent; ++ ++ switch (event->type()) { ++ case QEvent::PlatformSurface: ++ surfaceEvent = ++ static_cast(event); ++ if (surfaceEvent->surfaceEventType() != ++ QPlatformSurfaceEvent::SurfaceCreated) ++ return result; ++ ++ if (display->windowHandle()->isExposed()) ++ createOBSDisplay(); ++ else ++ mTimerId = startTimer(67); // Arbitrary ++ break; ++ case QEvent::Expose: ++ createOBSDisplay(); ++ break; ++ default: ++ break; ++ } ++ ++ return result; ++ } ++ ++ void timerEvent(QTimerEvent *) { createOBSDisplay(true); } ++ ++private: ++ void createOBSDisplay(bool force = false) ++ { ++ display->CreateDisplay(force); ++ if (mTimerId > 0) { ++ killTimer(mTimerId); ++ mTimerId = 0; ++ } ++ } ++}; ++ + #endif + + static inline long long color_to_int(const QColor &color) +@@ -65,6 +115,12 @@ OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags) + + connect(windowHandle(), &QWindow::visibleChanged, windowVisible); + connect(windowHandle(), &QWindow::screenChanged, screenChanged); ++ ++#ifdef ENABLE_WAYLAND ++ if (obs_get_nix_platform() == OBS_NIX_PLATFORM_WAYLAND) ++ windowHandle()->installEventFilter( ++ new SurfaceEventFilter(this)); ++#endif + } + + QColor OBSQTDisplay::GetDisplayBackgroundColor() const +-- +2.28.0 + diff --git a/PKGBUILD b/PKGBUILD index 13d815e..2cf5933 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -7,7 +7,7 @@ pkgname=$_pkgname-wayland provides=("$_pkgname") conflicts=("$_pkgname") pkgver=25.0.8 -pkgrel=2 +pkgrel=3 pkgdesc="Free, open source software for live streaming and recording (with wayland patches)" arch=('x86_64') url="https://obsproject.com" @@ -38,29 +38,37 @@ source=( 0010-linux-capture-Fail-to-load-when-running-on-EGL.patch 0011-libobs-Add-a-Wayland-platform.patch 0012-libobs-opengl-Try-to-use-the-platform-display-if-ava.patch - 0013-libobs-Add-a-Wayland-platform.patch - 0014-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch - 0015-UI-Retrieve-Wayland-surface-from-QWindow.patch - 0016-UI-Destroy-obs_display-when-becoming-invisible.patch + 0013-libobs-opengl-Introduce-an-EGL-Wayland-renderer.patch + 0014-UI-Retrieve-Wayland-surface-from-QWindow.patch + 0015-UI-Destroy-display-when-becoming-invisible.patch + 0016-UI-Don-t-create-obs_display-when-QTToGSWindow-fails.patch + 0017-UI-Rename-callback-to-match-signal-name.patch + 0018-UI-Disable-and-ignore-Always-On-Top-on-Wayland-platf.patch + 0019-UI-Make-OBSQTDisplay-CreateDisplay-public-and-allow-.patch + 0020-UI-Check-for-Expose-and-PlatformSurface-events-to-cr.patch ) sha512sums=('a97c03dc218a4e03e48f6a7dc82b4a59ebeee2039f17be66bb847681ce9ff3d25e6e015be4af78fe44739f6fad5089b6e683d7657c2e4fde8e547df9a2594a08' '1ff0e088eed61554268009f3d8c5a23c0888bfbe860d6cb288ddf348108446c152fd87e2cb8f54613a88378d8474550632c90f924005d5e0343bf1a801339ccc' - '6329e08da95e345509001ab6b9e8b73a227d0e63a8d39a3ef9b7d0197940ea9589d39b4aa92cdcc9f21cc4b9110a97f8e80891a12b4b24dff6d23395379abf5c' - 'b05346b83587d2fe3fbc676a14aca961f05fa58c6912f82fed9e15a4b9fcacce297921003b41980c57ba09c4623d50c905a7c50961c2269a9709fcb67a088002' - '6f38fd7f6f5a29d05b6dd824af1de6072ebd692c96940ba74e5d1799e21754230010fd70cd2f1ce830a0701d25b07cfbae8cbe49f89ba085cd2dec6796a7790d' - '14979eef47ab1d6e88ab77c35ab00a5e8297d1ed332bb397b8d3906e68c6ffa0b4e0761ef0dfff0221c7e22f5fb709e5bb11b87e046116bb3996df270e3b7b43' - 'db6a8d54e86f58f1adecb0f09ab5660ae0d06f4aa8bd0ea2e61da601ae82fd53a3b4c6db96d5827709e700843b70cc5a72851c0d429e3ec05bef250ed48445a0' - 'f0374c85bd93928a32d60a9516c90c1b2e3537b84f949066110897f05224a568dd57f2cd9d141b0cfa8e89672b081dac3c64304523fcf37f0c018ca78ad71625' - 'dcdca90cfd701aad02ba12dee9a6482ca9066ff817e6e24bb3d0d6dfbbc48e8e98eb02517983802c66cade34c0d347aec817fe98da8baa7f5fff9187201e9a00' - '64e4adef34a1074410245120d828871c128ee8254d77378cd7b74fe0182abaffdbff6669990a75464335b33d83641893b73e618c7322e1fe3186a748eab07e79' - '64ca66913ade6b28815aa06383089e1c9aaa7a2b50cd425be8876d0a95338615be844a362a55c02541681d51f1921cb0820554f49fe21786649076ca16f6f64b' - 'a917037dc63bfdd8d2d04b2d3f625eb9c8ec26868ca2eeef23d78f3442c8233252d86285b771e1c1428408508aedff4407aec5bdc9ef233fda995483fdab4202' - '013adb73a718f5df05a055de0e5fa17701dc645d8e7025ff1192d99a405dd6a0923fcfdbbad37777ff993545aadf9d4d29bae7191c6505f9f929273d5b374ee2' - '34710dbf905e6af2d7af3feab9f55c867dcbac6afa0ab6a12f7c458b974ba71e14ef797e9db613d3248c046dee1c1dce8559ceeaf1d95d1215368032e642731d' - 'e131c7a65ce0e848f0b91bfd4b3db750bc0bddce64a9ff49d97082ddafb9ddab92f43ea19a2c92b054e85df0f018f43ff5dc8cf81671520079e4e4681d5ac230' - 'cefa4f5032a06e9341ccdabef022d755c8869b391a33ed5c4bd927672f967d5287d4c017cb7b2d37c163c9f387ca94d5846327461a9ba3b44478ed67a60d6a9f' - 'e406d3f16f17b35ce463120eefd2bea3797fa83304ea27628b9a671704451c4a275d6844b0f007997e3a6edc39557442c6eb9eb8b6dc2a50e07341e3b0621e1f' - '6c1cd77e63f760aabb9186edb906092bb9f6a7b2e7bd32deff4af33b5f35e95abe7ff874b6a17112d3da098f970f706c0a05f239fc75b65e60f4c68ae544eacf') + 'df2a3b13a66603546bc39c070bbbe55d2ef0e6620fea98e773955713ef74c6817649713da76548d24a4160f4af327e132205cbeb2f90959690aa3321945284c4' + 'd15612ba51364c9ba49096a3aa8d2002d739b81cae090586254fc1351723cabfd80a09d76834b71f6d49abcc50e33dda52f183dd3a5e87a0d740ce57dc2cb583' + '43e67659200e077a6dc624f94ed9cde5a31ae7bcd403b9ea649fb0277b3a1964b4f11a4ad45d754fc571b71c3cca42ca0a843bd484229a64a41d3f96efa03aca' + 'dfd8687f3aaae32161998075923905bc2c3111b299132d398efee5771fb0b681a96f1ee367b6955e66935df8b2f9cb59466b5c209768b04bf4c6af177c4b8621' + 'b47ee46b3bdb6de606fb667d17536fbede200be86021c983259c131fe9f463b3101e419ea8ed30f0a99163877d2e939f44b9e7fd2d213cc4c203da64813117d1' + '8b6e5f32ebfca1f163d69144e3752b409be8b3747ff46b9f9cecf0140247fffc8728f49cfcf0f71e2b514ff8e516bf441cdd421dff6952d30f65a8adfd4526e3' + '62f37c7c60067100a8594306e5fa6e65003063fc3d35d8b7daa7ead2f50ae17677f54dc9f8ac206ef20ca1178ddfb68948893f6d8d56efd0dcc6f147c172c547' + '5d6e46223f2d08e807040cc8e264d27219ad8b4a5ff580fa568ccbc88f26564f2e72e8400b8c447c226b5f27346206da19081a5ac03512c95a56ea5d6b3924ff' + '1e77adb183e1bb42260965e1733b88d25ebd885ef4029b8c424dd100485fcd882f676a75d396cc7adbbb7c1c4ae9b4f047778d96c4d6d74b5302437059eb0db6' + 'cc853dc74ea961a9253085188f851e3184a53b252f1a85cecd16745b4ab561ea7a47b32bb9475624a2eec51106090a153bdb6ec6680f2ee4bd8fd5a6509ba831' + 'cc712c85b364179794af393634c87ffb3d7d42b360379405ea587485f07e525496ac2da4e97f52a7f2232164e5e70d9442c9b7cc139c85f0405f662ae092b795' + '4c5733a51dc1070327eadea420ba5acea2ec74a3bac538264969bc5eea2dadee701dd6634737e09b2755eae388fa0969d32738b6ea81b99f66a56db9b6a90765' + 'e61d437cb1b98f50bd5e4404a90f744d05d8a73965554b1ac981ffa534f1a134bdf6714a78a2eb257b8a53675a012e5786bdce3fd16201b9b64191a61cb11373' + '19e0943462fe6e72a104ed45015b8e2b73a0ffa389f733752b6991e1f69e521682f3095d8c372aa800d13b89b28237aa6d2b1fcd24d4df9da6a6ba2000e07c77' + 'abce43def134860a6953fb2e804541860f3a222fbf2e27956874e77974e70851893078cefdce086f56b5144c885dbe674d060e635f351ef4efc9a1bcd1fcfa1c' + '55a80e92c70f709ffb42491d61cfc659ba0c682603a8431e915d238495e9ba966b976a195daec0aec79803473d9b251371c4469391f423456d325ab558a0379c' + '6dea2f711a4871da8dd72faa29f3eb3274e18d24a6bc719461b20fa4b0a327ad16291b8867c9d68d5b911be4016f2d75fa0158df1e55b5fc96f2612574e7ceb0' + 'cef5df381f13456326e844b1f45168f51af37df09227f07bdd800672efce28181c4fdf96798759d139f953b5809850caa3894d2f7a3c29c0a7220dd0b4f60c78' + 'fd3a51462f745169522c5c6a857fe124eebb06331a9ccb1e4dc69e78c300c3b0737d5cb330c9d2b9e8f30aae9d206bbc985c2660aeb7ac1a66cbc9d84187cf06' + '8a3c9db9d92b76a0388083744ead2eceb955c0c21c8b4242db51a500a6e1454a21725501e0ba1968f63b59b1ea6e83765d84d03b421ec482e8ca37166b03c2ac') prepare() { cd $_pkgname-$pkgver