Compare commits

...

No commits in common. "main" and "packages/cage-vi" have entirely different histories.

107 changed files with 2984 additions and 3905 deletions

25
.SRCINFO Normal file
View file

@ -0,0 +1,25 @@
pkgbase = cage-vi
pkgdesc = A Wayland kiosk, with virtual input patch applied
pkgver = 0.1.4+54+gbd5b20e
pkgrel = 1
url = https://www.hjdskes.nl/projects/cage/
arch = x86_64
license = MIT
makedepends = meson
makedepends = pixman
makedepends = scdoc
makedepends = wayland-protocols
makedepends = xorg-xwayland
depends = glibc
depends = wayland
depends = wlroots
optdepends = polkit: System privilege control. Required if not using seatd service
optdepends = xorg-xwayland: X11 support
provides = cage
conflicts = cage
source = https://github.com/Hjdskes/cage/releases/download/v0.1.4/cage-0.1.4.tar.gz
source = bd5b20e.patch
sha256sums = dfe27fb0c7d43db72d6c82f01e2736580a0791a23ba69d7b56285d08af98ad90
sha256sums = b3608b082c8859433158377ec875ee17ca72f10d61d8827eb5b1c2e01771c0ce
pkgname = cage-vi

View file

@ -1,8 +0,0 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = tab
tab_width = 4

2
.gitattributes vendored
View file

@ -1,2 +0,0 @@
* text=auto eol=lf
*.install linguist-language=Shell

25
.gitignore vendored
View file

@ -1,25 +0,0 @@
# package src/pkg archives, downloaded sources
*.tar*
*.tgz
*.zip
# signed sources
*.asc
*.sig
# log files from makepkg --log (or extra-x86_64-build)
*.log
# subfolders, e.g. source or built package trees, vcs
*/**/
# backup files
*~
*.bak
# mkpkg status files, from soyuz.archlinux.org
.mkpkg_check
# staged packages and build chroot
/staged
/chroot

45
PKGBUILD Normal file
View file

@ -0,0 +1,45 @@
pkgname=cage-vi
_pkgname=${pkgname%%-*}
pkgver=0.1.4+54+gbd5b20e
_pkgver=${pkgver%%+*}
pkgrel=1
pkgdesc='A Wayland kiosk, with virtual input patch applied'
arch=('x86_64')
url="https://www.hjdskes.nl/projects/${_pkgname}/"
license=('MIT')
depends=('glibc' 'wayland' 'wlroots')
makedepends=('meson' 'pixman' 'scdoc' 'wayland-protocols' 'xorg-xwayland')
optdepends=(
'polkit: System privilege control. Required if not using seatd service'
'xorg-xwayland: X11 support'
)
provides=("${_pkgname}")
conflicts=("${_pkgname}")
source=(
"https://github.com/Hjdskes/${_pkgname}/releases/download/v${_pkgver}/${_pkgname}-${_pkgver}.tar.gz"
'bd5b20e.patch'
)
sha256sums=('dfe27fb0c7d43db72d6c82f01e2736580a0791a23ba69d7b56285d08af98ad90'
'b3608b082c8859433158377ec875ee17ca72f10d61d8827eb5b1c2e01771c0ce')
#pkgver() {
# cd "${srcdir}/${_pkgname}-${_pkgver}"
# git describe --long --tags | sed 's/^v//;s/-/+/g'
#}
prepare() {
cd "${srcdir}/${_pkgname}-${_pkgver}"
patch -Np1 -i '../bd5b20e.patch'
meson --buildtype=release -Dxwayland=true --prefix /usr "$srcdir/build"
}
build() {
cd "${srcdir}/${_pkgname}-${_pkgver}"
ninja -C "$srcdir/build"
}
package() {
cd "${srcdir}/${_pkgname}-${_pkgver}"
DESTDIR="$pkgdir/" ninja -C "$srcdir/build" install
}

View file

@ -1,5 +0,0 @@
# Arch Linux packages
These are PKGBUILDs for packages I maintain, used to maintain or do plan on uploading or just keep here for preservation.
I may also use these for an automated build system soon™ that pushes these packages automatically to a pacman repo I maintain.

View file

@ -1,24 +0,0 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>

View file

@ -1,29 +0,0 @@
pkgbase = amdvlk-2023q3.3
pkgdesc = AMD's standalone Vulkan driver for Pre-GFX10 GPUs (Vega, Polaris)
pkgver = 2023.Q3.3
pkgrel = 2
url = https://github.com/GPUOpen-Drivers
arch = x86_64
license = MIT
makedepends = perl-xml-xpath
makedepends = python
makedepends = wayland
makedepends = libxrandr
makedepends = xorg-server-devel
makedepends = directx-shader-compiler
makedepends = glslang
makedepends = cmake
makedepends = ninja
makedepends = git
provides = amdvlk
provides = vulkan-driver
conflicts = amdvlk
options = !lto
source = https://github.com/GPUOpen-Drivers/AMDVLK/archive/v-2023.Q3.3.tar.gz
sha512sums = 19e799030daee33d516f1276e08cd598a8ea7f8341b3955bda31b8576459486dbd3401d33670bfabb1872341025716e9610a8e9c4072a07a206eac90bd0f6ace
pkgname = amdvlk-2023q3.3
depends = glibc
depends = gcc-libs
depends = zlib
depends = zstd

View file

@ -1,64 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Laurent Carlier <lordheavym@gmail.com>
# Contributor: lod <aur@cyber-anlage.de>
pkgname=amdvlk-2023q3.3
_pkgname=amdvlk
pkgver=2023.Q3.3
pkgrel=2
pkgdesc="AMD's standalone Vulkan driver for Pre-GFX10 GPUs (Vega, Polaris)"
arch=('x86_64')
url="https://github.com/GPUOpen-Drivers"
license=('MIT')
provides=("${_pkgname}" 'vulkan-driver')
conflicts=("${_pkgname}")
makedepends=('perl-xml-xpath' 'python' 'wayland' 'libxrandr' 'xorg-server-devel' 'directx-shader-compiler' 'glslang' 'cmake' 'ninja' 'git')
options=('!lto')
source=("https://github.com/GPUOpen-Drivers/AMDVLK/archive/v-${pkgver}.tar.gz")
sha512sums=('19e799030daee33d516f1276e08cd598a8ea7f8341b3955bda31b8576459486dbd3401d33670bfabb1872341025716e9610a8e9c4072a07a206eac90bd0f6ace')
prepare() {
local nrepos path name revision
nrepos=$(xpath -q -e //project AMDVLK-v-${pkgver}/default.xml | wc -l)
while (($nrepos>0))
do
path=$(xpath -q -e //project[$nrepos]/@path AMDVLK-v-${pkgver}/default.xml | sed 's/ path="drivers\/\(.*\)"/\1/g')
name=$(xpath -q -e //project[$nrepos]/@name AMDVLK-v-${pkgver}/default.xml | sed 's/ name="\(.*\)"/\1/g')
revision=$(xpath -q -e //project[$nrepos]/@revision AMDVLK-v-${pkgver}/default.xml | sed 's/ revision="\(.*\)"/\1/g')
git clone --recurse-submodules https://github.com/GPUOpen-Drivers/$name $path
pushd $path
git checkout $revision
git submodule update
popd
(( nrepos-- ))
done
}
build() {
cd ${srcdir}/xgl
cmake -H. -Bbuilds/Release64 \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_WAYLAND_SUPPORT=On \
-G Ninja
ninja -C builds/Release64
}
package() {
depends=('glibc' 'gcc-libs' 'zlib' 'zstd')
install -m755 -d "${pkgdir}"/usr/lib
install -m755 -d "${pkgdir}"/usr/share/vulkan/icd.d
install -m755 -d "${pkgdir}"/usr/share/vulkan/implicit_layer.d
install -m755 -d "${pkgdir}"/usr/share/licenses/${_pkgname}
install xgl/builds/Release64/icd/amdvlk64.so "${pkgdir}"/usr/lib/
install xgl/builds/Release64/icd/amd_icd64.json "${pkgdir}"/usr/share/vulkan/icd.d/
install xgl/builds/Release64/icd/amd_icd64.json "${pkgdir}"/usr/share/vulkan/implicit_layer.d/
install AMDVLK-v-${pkgver}/LICENSE.txt "${pkgdir}"/usr/share/licenses/${_pkgname}/
sed -i "s#/lib64#/lib#g" "${pkgdir}"/usr/share/vulkan/icd.d/amd_icd64.json
sed -i "s#/lib64#/lib#g" "${pkgdir}"/usr/share/vulkan/implicit_layer.d/amd_icd64.json
}

2914
bd5b20e.patch Normal file
View file

@ -0,0 +1,2914 @@
diff --git a/.builds/alpine.yml b/.builds/alpine.yml
deleted file mode 100644
index ef32a95..0000000
--- a/.builds/alpine.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-image: alpine/edge
-packages:
- - eudev-dev
- - mesa-dev
- - meson
- - libinput-dev
- - libxkbcommon-dev
- - pixman-dev
- - scdoc
- - wayland-dev
- - wayland-protocols
- - xcb-util-wm-dev
- - xwayland
-sources:
- - https://github.com/swaywm/wlroots
- - https://github.com/Hjdskes/cage
-tasks:
- # Install wlroots, which is required by Cage. Note that we compile a tagged
- # version, instead of master, to avoid any breaking changes in wlroots.
- - wlroots: |
- cd wlroots
- git checkout 0.14.0
- meson --prefix=/usr build -Dexamples=false
- ninja -C build
- sudo ninja -C build install
- - build: |
- cd cage
- meson build --werror -Dxwayland=true
- ninja -C build
- rm -rf build
- - build-no-xwayland: |
- cd cage
- meson build --werror -Dxwayland=false
- ninja -C build
- rm -rf build
diff --git a/.builds/archlinux.yml b/.builds/archlinux.yml
deleted file mode 100644
index 99cdd24..0000000
--- a/.builds/archlinux.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-image: archlinux
-packages:
- - clang
- - meson
- - libinput
- - libxkbcommon
- - mesa
- - scdoc
- - wayland
- - wayland-protocols
- - xcb-util-wm
- - xorg-xwayland
-sources:
- - https://github.com/swaywm/wlroots
- - https://github.com/Hjdskes/cage
-tasks:
- # Install wlroots, which is required by Cage. Note that we compile a tagged
- # version, instead of master, to avoid any breaking changes in wlroots.
- - wlroots: |
- cd wlroots
- git checkout 0.14.0
- meson --prefix=/usr build -Dexamples=false
- ninja -C build
- sudo ninja -C build install
- - build: |
- cd cage
- meson build --werror -Dxwayland=true
- ninja -C build
- rm -rf build
- - build-no-xwayland: |
- cd cage
- meson build --werror -Dxwayland=false
- ninja -C build
- rm -rf build
- - scan-build: |
- cd cage
- CC=clang meson build --werror -Dxwayland=true
- CC=clang ninja -C build scan-build
- rm -rf build
- - clang-format: |
- cd cage
- meson build --werror -Dxwayland=true
- ninja -C build clang-format
- rm -rf build
- git diff --exit-code
diff --git a/.builds/freebsd.yml b/.builds/freebsd.yml
deleted file mode 100644
index 92a2119..0000000
--- a/.builds/freebsd.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-image: freebsd/latest
-packages:
- - devel/evdev-proto
- - devel/meson
- - devel/libepoll-shim
- - devel/pkgconf
- - graphics/mesa-libs
- - graphics/wayland
- - graphics/wayland-protocols
- - textproc/scdoc
- - x11/libinput
- - x11/libxkbcommon
- - x11/pixman
- - x11/xcb-util-wm
- - x11-servers/xwayland
-sources:
- - https://github.com/swaywm/wlroots
- - https://github.com/Hjdskes/cage
-tasks:
- # Install wlroots, which is required by Cage. Note that we compile a tagged
- # version, instead of master, to avoid any breaking changes in wlroots.
- - wlroots: |
- cd wlroots
- git checkout 0.14.0
- meson --prefix=/usr/local build -Dexamples=false
- ninja -C build
- sudo ninja -C build install
- - build: |
- cd cage
- PKG_CONFIG_PATH=/usr/local/lib/pkgconfig meson build --werror -Dxwayland=true
- PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ninja -C build
- rm -rf build
- - build-no-xwayland: |
- cd cage
- PKG_CONFIG_PATH=/usr/local/lib/pkgconfig meson build --werror -Dxwayland=false
- PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ninja -C build
- rm -rf build
diff --git a/.clang-format-ignore b/.clang-format-ignore
new file mode 100644
index 0000000..60dd059
--- /dev/null
+++ b/.clang-format-ignore
@@ -0,0 +1 @@
+subprojects/**/*
\ No newline at end of file
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..a98291a
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,76 @@
+name: Continuous integration build
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ compile:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ CC: [ gcc, clang ]
+ OS: [ "alpine:edge", "archlinux:base-devel" ]
+ xwayland: [ true, false ]
+ container: ${{ matrix.OS }}
+ env:
+ CC: ${{ matrix.CC }}
+ steps:
+ - name: Checkout Cage
+ uses: actions/checkout@v2
+
+ - name: Install dependencies (Alpine)
+ if: "matrix.OS == 'alpine:edge'"
+ run: apk add build-base xcb-util-wm-dev libseat-dev clang git eudev-dev mesa-dev libdrm-dev libinput-dev libxkbcommon-dev pixman-dev wayland-dev meson wayland-protocols xwayland scdoc-doc hwdata
+
+ - name: Install dependencies (Arch)
+ if: "matrix.OS == 'archlinux:base-devel'"
+ run: |
+ pacman-key --init
+ pacman -Syu --noconfirm xcb-util-wm seatd git clang meson libinput libdrm mesa libxkbcommon wayland wayland-protocols xorg-server-xwayland scdoc
+
+ - name: Fetch wlroots as a subproject
+ run: git clone https://gitlab.freedesktop.org/wlroots/wlroots.git subprojects/wlroots -b 0.16.0
+
+ # TODO: use --fatal-meson-warnings when on wlroots 0.15.0
+ - name: Compile Cage (XWayland=${{ matrix.xwayland }})
+ run: |
+ meson build-${{ matrix.CC }}-${{matrix.xwayland }} -Dxwayland=${{ matrix.xwayland }}
+ ninja -C build-${{ matrix.CC }}-${{matrix.xwayland }}
+
+ format:
+ runs-on: ubuntu-latest
+ container: "archlinux:base-devel"
+ steps:
+ - name: Checkout Cage
+ uses: actions/checkout@v2
+ - name: Install dependencies
+ run: |
+ pacman-key --init
+ pacman -Syu --noconfirm xcb-util-wm seatd git clang meson libinput libdrm mesa libxkbcommon wayland wayland-protocols xorg-server-xwayland scdoc hwdata
+ - name: Fetch wlroots as a subproject
+ run: git clone https://gitlab.freedesktop.org/wlroots/wlroots.git subprojects/wlroots -b 0.16.0
+ - name: Check for formatting changes
+ run: |
+ meson build-clang-format -Dxwayland=true
+ ninja -C build-clang-format clang-format-check
+
+ scan-build:
+ runs-on: ubuntu-latest
+ container: "archlinux:base-devel"
+ env:
+ CC: clang
+ steps:
+ - name: Checkout Cage
+ uses: actions/checkout@v2
+ - name: Install dependencies
+ run: |
+ pacman-key --init
+ pacman -Syu --noconfirm xcb-util-wm seatd git clang meson libinput libdrm mesa libxkbcommon wayland wayland-protocols xorg-server-xwayland scdoc hwdata
+ - name: Fetch wlroots as a subproject
+ run: git clone https://gitlab.freedesktop.org/wlroots/wlroots.git subprojects/wlroots -b 0.16.0
+ - name: Run scan-build
+ run: |
+ meson build-scan-build -Dxwayland=true
+ ninja -C build-scan-build scan-build
diff --git a/README.md b/README.md
index e1b6f56..752387e 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Cage: a Wayland kiosk [![builds.sr.ht status](https://builds.sr.ht/~hjdskes.svg)](https://builds.sr.ht/~hjdskes?)
+# Cage: a Wayland kiosk
<img src="https://www.hjdskes.nl/img/projects/cage/cage.svg" alt="Cage's logo" width="150px" align="right">
diff --git a/cage.c b/cage.c
index 5392535..c5eda4d 100644
--- a/cage.c
+++ b/cage.c
@@ -19,6 +19,7 @@
#include <unistd.h>
#include <wayland-server-core.h>
#include <wlr/backend.h>
+#include <wlr/render/allocator.h>
#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_data_device.h>
@@ -27,8 +28,15 @@
#include <wlr/types/wlr_idle.h>
#include <wlr/types/wlr_idle_inhibit_v1.h>
#include <wlr/types/wlr_output_layout.h>
+#include <wlr/types/wlr_presentation_time.h>
+#include <wlr/types/wlr_scene.h>
#include <wlr/types/wlr_screencopy_v1.h>
#include <wlr/types/wlr_server_decoration.h>
+#include <wlr/types/wlr_single_pixel_buffer_v1.h>
+#include <wlr/types/wlr_subcompositor.h>
+#include <wlr/types/wlr_viewporter.h>
+#include <wlr/types/wlr_virtual_keyboard_v1.h>
+#include <wlr/types/wlr_virtual_pointer_v1.h>
#if CAGE_HAS_XWAYLAND
#include <wlr/types/wlr_xcursor_manager.h>
#endif
@@ -145,7 +153,12 @@ cleanup_primary_client(pid_t pid)
static bool
drop_permissions(void)
{
+ if (getuid() == 0 || getgid() == 0) {
+ wlr_log(WLR_INFO, "Running as root user, this is dangerous");
+ return true;
+ }
if (getuid() != geteuid() || getgid() != getegid()) {
+ wlr_log(WLR_INFO, "setuid/setgid bit detected, dropping permissions");
// Set the gid and uid in the correct order.
if (setgid(getgid()) != 0 || setuid(getuid()) != 0) {
wlr_log(WLR_ERROR, "Unable to drop root, refusing to start");
@@ -185,9 +198,6 @@ usage(FILE *file, const char *cage)
"Usage: %s [OPTIONS] [--] APPLICATION\n"
"\n"
" -d\t Don't draw client side decorations, when possible\n"
-#ifdef DEBUG
- " -D\t Turn on damage tracking debugging\n"
-#endif
" -h\t Display this help message\n"
" -m extend Extend the display across all connected outputs (default)\n"
" -m last Use only the last connected output\n"
@@ -203,20 +213,11 @@ static bool
parse_args(struct cg_server *server, int argc, char *argv[])
{
int c;
-#ifdef DEBUG
- while ((c = getopt(argc, argv, "dDhm:rsv")) != -1) {
-#else
while ((c = getopt(argc, argv, "dhm:rsv")) != -1) {
-#endif
switch (c) {
case 'd':
server->xdg_decoration = true;
break;
-#ifdef DEBUG
- case 'D':
- server->debug_damage_tracking = true;
- break;
-#endif
case 'h':
usage(stdout, argv[0]);
return false;
@@ -261,15 +262,20 @@ main(int argc, char *argv[])
struct wl_event_source *sigint_source = NULL;
struct wl_event_source *sigterm_source = NULL;
struct wl_event_source *sigchld_source = NULL;
- struct wlr_renderer *renderer = NULL;
struct wlr_compositor *compositor = NULL;
+ struct wlr_subcompositor *subcompositor = NULL;
struct wlr_data_device_manager *data_device_manager = NULL;
struct wlr_server_decoration_manager *server_decoration_manager = NULL;
struct wlr_xdg_decoration_manager_v1 *xdg_decoration_manager = NULL;
struct wlr_export_dmabuf_manager_v1 *export_dmabuf_manager = NULL;
struct wlr_screencopy_manager_v1 *screencopy_manager = NULL;
+ struct wlr_single_pixel_buffer_manager_v1 *single_pixel_buffer = NULL;
struct wlr_xdg_output_manager_v1 *output_manager = NULL;
struct wlr_gamma_control_manager_v1 *gamma_control_manager = NULL;
+ struct wlr_virtual_keyboard_manager_v1 *virtual_keyboard = NULL;
+ struct wlr_virtual_pointer_manager_v1 *virtual_pointer = NULL;
+ struct wlr_viewporter *viewporter = NULL;
+ struct wlr_presentation *presentation = NULL;
struct wlr_xdg_shell *xdg_shell = NULL;
#if CAGE_HAS_XWAYLAND
struct wlr_xwayland *xwayland = NULL;
@@ -316,8 +322,21 @@ main(int argc, char *argv[])
goto end;
}
- renderer = wlr_backend_get_renderer(server.backend);
- wlr_renderer_init_wl_display(renderer, server.wl_display);
+ server.renderer = wlr_renderer_autocreate(server.backend);
+ if (!server.renderer) {
+ wlr_log(WLR_ERROR, "Unable to create the wlroots renderer");
+ ret = 1;
+ goto end;
+ }
+
+ server.allocator = wlr_allocator_autocreate(server.backend, server.renderer);
+ if (!server.allocator) {
+ wlr_log(WLR_ERROR, "Unable to create the wlroots allocator");
+ ret = 1;
+ goto end;
+ }
+
+ wlr_renderer_init_wl_display(server.renderer, server.wl_display);
wl_list_init(&server.views);
wl_list_init(&server.outputs);
@@ -329,13 +348,29 @@ main(int argc, char *argv[])
goto end;
}
- compositor = wlr_compositor_create(server.wl_display, renderer);
+ server.scene = wlr_scene_create();
+ if (!server.scene) {
+ wlr_log(WLR_ERROR, "Unable to create scene");
+ ret = 1;
+ goto end;
+ }
+
+ wlr_scene_attach_output_layout(server.scene, server.output_layout);
+
+ compositor = wlr_compositor_create(server.wl_display, server.renderer);
if (!compositor) {
wlr_log(WLR_ERROR, "Unable to create the wlroots compositor");
ret = 1;
goto end;
}
+ subcompositor = wlr_subcompositor_create(server.wl_display);
+ if (!subcompositor) {
+ wlr_log(WLR_ERROR, "Unable to create the wlroots subcompositor");
+ ret = 1;
+ goto end;
+ }
+
data_device_manager = wlr_data_device_manager_create(server.wl_display);
if (!data_device_manager) {
wlr_log(WLR_ERROR, "Unable to create the data device manager");
@@ -373,7 +408,7 @@ main(int argc, char *argv[])
wl_signal_add(&server.idle_inhibit_v1->events.new_inhibitor, &server.new_idle_inhibitor_v1);
wl_list_init(&server.inhibitors);
- xdg_shell = wlr_xdg_shell_create(server.wl_display);
+ xdg_shell = wlr_xdg_shell_create(server.wl_display, 4);
if (!xdg_shell) {
wlr_log(WLR_ERROR, "Unable to create the XDG shell interface");
ret = 1;
@@ -401,6 +436,21 @@ main(int argc, char *argv[])
server_decoration_manager, server.xdg_decoration ? WLR_SERVER_DECORATION_MANAGER_MODE_SERVER
: WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT);
+ viewporter = wlr_viewporter_create(server.wl_display);
+ if (!viewporter) {
+ wlr_log(WLR_ERROR, "Unable to create the viewporter interface");
+ ret = 1;
+ goto end;
+ }
+
+ presentation = wlr_presentation_create(server.wl_display, server.backend);
+ if (!presentation) {
+ wlr_log(WLR_ERROR, "Unable to create the presentation interface");
+ ret = 1;
+ goto end;
+ }
+ wlr_scene_set_presentation(server.scene, presentation);
+
export_dmabuf_manager = wlr_export_dmabuf_manager_v1_create(server.wl_display);
if (!export_dmabuf_manager) {
wlr_log(WLR_ERROR, "Unable to create the export DMABUF manager");
@@ -415,6 +465,13 @@ main(int argc, char *argv[])
goto end;
}
+ single_pixel_buffer = wlr_single_pixel_buffer_manager_v1_create(server.wl_display);
+ if (!single_pixel_buffer) {
+ wlr_log(WLR_ERROR, "Unable to create the single pixel buffer manager");
+ ret = 1;
+ goto end;
+ }
+
output_manager = wlr_xdg_output_manager_v1_create(server.wl_display, server.output_layout);
if (!output_manager) {
wlr_log(WLR_ERROR, "Unable to create the output manager");
@@ -429,6 +486,22 @@ main(int argc, char *argv[])
goto end;
}
+ virtual_keyboard = wlr_virtual_keyboard_manager_v1_create(server.wl_display);
+ if (!virtual_keyboard) {
+ wlr_log(WLR_ERROR, "Unable to create the virtual keyboard manager");
+ ret = 1;
+ goto end;
+ }
+ wl_signal_add(&virtual_keyboard->events.new_virtual_keyboard, &server.new_virtual_keyboard);
+
+ virtual_pointer = wlr_virtual_pointer_manager_v1_create(server.wl_display);
+ if (!virtual_pointer) {
+ wlr_log(WLR_ERROR, "Unable to create the virtual pointer manager");
+ ret = 1;
+ goto end;
+ }
+ wl_signal_add(&virtual_pointer->events.new_virtual_pointer, &server.new_virtual_pointer);
+
#if CAGE_HAS_XWAYLAND
xwayland = wlr_xwayland_create(server.wl_display, compositor, true);
if (!xwayland) {
@@ -492,8 +565,9 @@ main(int argc, char *argv[])
}
/* Place the cursor in the center of the output layout. */
- struct wlr_box *layout_box = wlr_output_layout_get_box(server.output_layout, NULL);
- wlr_cursor_warp(server.seat->cursor, NULL, layout_box->width / 2, layout_box->height / 2);
+ struct wlr_box layout_box;
+ wlr_output_layout_get_box(server.output_layout, NULL, &layout_box);
+ wlr_cursor_warp(server.seat->cursor, NULL, layout_box.width / 2, layout_box.height / 2);
wl_display_run(server.wl_display);
diff --git a/meson.build b/meson.build
index 3a84794..fbd7e16 100644
--- a/meson.build
+++ b/meson.build
@@ -1,16 +1,17 @@
project('cage', 'c',
version: '0.1.4',
license: 'MIT',
+ meson_version: '>=0.58.1',
default_options: [
'c_std=c11',
- 'warning_level=3',
+ 'warning_level=2',
+ 'werror=true',
],
)
add_project_arguments(
[
'-DWLR_USE_UNSTABLE',
- '-Wall',
'-Wundef',
'-Wno-unused-parameter',
],
@@ -34,14 +35,13 @@ if is_freebsd
)
endif
-wlroots = dependency('wlroots', version: '>= 0.14.0')
+wlroots = dependency('wlroots', version: '>= 0.16.0', fallback: ['wlroots', 'wlroots'])
wayland_protos = dependency('wayland-protocols', version: '>=1.14')
wayland_server = dependency('wayland-server')
-pixman = dependency('pixman-1')
xkbcommon = dependency('xkbcommon')
math = cc.find_library('m')
-wl_protocol_dir = wayland_protos.get_pkgconfig_variable('pkgdatadir')
+wl_protocol_dir = wayland_protos.get_variable('pkgdatadir')
wayland_scanner = find_program('wayland-scanner')
wayland_scanner_server = generator(
wayland_scanner,
@@ -65,12 +65,11 @@ server_protos = declare_dependency(
)
if get_option('xwayland')
- wlroots_has_xwayland = cc.get_define('WLR_HAS_XWAYLAND', prefix: '#include <wlr/config.h>', dependencies: wlroots) == '1'
+ wlroots_has_xwayland = wlroots.get_variable(pkgconfig: 'have_xwayland', internal: 'have_xwayland') == 'true'
if not wlroots_has_xwayland
error('Cannot build Cage with XWayland support: wlroots has been built without it')
- else
- have_xwayland = true
endif
+ have_xwayland = true
else
have_xwayland = false
endif
@@ -78,8 +77,8 @@ endif
version = '@0@'.format(meson.project_version())
git = find_program('git', native: true, required: false)
if git.found()
- git_commit = run_command([git, 'rev-parse', '--short', 'HEAD'])
- git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD'])
+ git_commit = run_command([git, 'rev-parse', '--short', 'HEAD'], check: false)
+ git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD'], check: false)
if git_commit.returncode() == 0 and git_branch.returncode() == 0
version = '@0@-@1@ (branch \'@2@\')'.format(
meson.project_version(),
@@ -95,7 +94,7 @@ conf_data.set_quoted('CAGE_VERSION', version)
scdoc = dependency('scdoc', version: '>=1.9.2', native: true, required: get_option('man-pages'))
if scdoc.found()
- scdoc_prog = find_program(scdoc.get_pkgconfig_variable('scdoc'), native: true)
+ scdoc_prog = find_program(scdoc.get_variable('scdoc'), native: true)
sh = find_program('sh', native: true)
mandir = get_option('mandir')
man_files = [
@@ -111,7 +110,7 @@ if scdoc.found()
input: filename,
output: output,
command: [
- sh, '-c', '@0@ < @INPUT@ > @1@'.format(scdoc_prog.path(), output)
+ sh, '-c', '@0@ < @INPUT@ > @1@'.format(scdoc_prog.full_path(), output)
],
install: true,
install_dir: '@0@/man@1@'.format(mandir, section)
@@ -123,9 +122,7 @@ cage_sources = [
'cage.c',
'idle_inhibit_v1.c',
'output.c',
- 'render.c',
'seat.c',
- 'util.c',
'view.c',
'xdg_shell.c',
]
@@ -136,10 +133,8 @@ cage_headers = [
configuration: conf_data),
'idle_inhibit_v1.h',
'output.h',
- 'render.h',
'seat.h',
'server.h',
- 'util.h',
'view.h',
'xdg_shell.h',
]
@@ -157,7 +152,6 @@ executable(
wayland_server,
wlroots,
xkbcommon,
- pixman,
math,
],
install: true,
diff --git a/output.c b/output.c
index d8da3b9..6eca0db 100644
--- a/output.c
+++ b/output.c
@@ -1,7 +1,7 @@
/*
* Cage: A Wayland kiosk.
*
- * Copyright (C) 2018-2020 Jente Hidskes
+ * Copyright (C) 2018-2021 Jente Hidskes
* Copyright (C) 2019 The Sway authors
*
* See the LICENSE file accompanying this file.
@@ -11,6 +11,7 @@
#include "config.h"
+#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
#include <wayland-server-core.h>
@@ -21,221 +22,25 @@
#include <wlr/backend/x11.h>
#endif
#include <wlr/render/wlr_renderer.h>
+#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_data_device.h>
#include <wlr/types/wlr_matrix.h>
#include <wlr/types/wlr_output.h>
#include <wlr/types/wlr_output_damage.h>
#include <wlr/types/wlr_output_layout.h>
-#include <wlr/types/wlr_surface.h>
+#include <wlr/types/wlr_scene.h>
#include <wlr/types/wlr_xdg_shell.h>
#include <wlr/util/log.h>
#include <wlr/util/region.h>
#include "output.h"
-#include "render.h"
#include "seat.h"
#include "server.h"
-#include "util.h"
#include "view.h"
#if CAGE_HAS_XWAYLAND
#include "xwayland.h"
#endif
-static void output_for_each_surface(struct cg_output *output, cg_surface_iterator_func_t iterator, void *user_data);
-
-struct surface_iterator_data {
- cg_surface_iterator_func_t user_iterator;
- void *user_data;
-
- struct cg_output *output;
-
- /* Output-local coordinates. */
- double ox, oy;
-};
-
-static bool
-intersects_with_output(struct cg_output *output, struct wlr_output_layout *output_layout, struct wlr_box *surface_box)
-{
- /* Since the surface_box's x- and y-coordinates are already output local,
- * the x- and y-coordinates of this box need to be 0 for this function to
- * work correctly. */
- struct wlr_box output_box = {0};
- wlr_output_effective_resolution(output->wlr_output, &output_box.width, &output_box.height);
-
- struct wlr_box intersection;
- return wlr_box_intersection(&intersection, &output_box, surface_box);
-}
-
-static void
-output_for_each_surface_iterator(struct wlr_surface *surface, int sx, int sy, void *user_data)
-{
- struct surface_iterator_data *data = user_data;
- struct cg_output *output = data->output;
-
- if (!wlr_surface_has_buffer(surface)) {
- return;
- }
-
- struct wlr_box surface_box = {
- .x = data->ox + sx + surface->sx,
- .y = data->oy + sy + surface->sy,
- .width = surface->current.width,
- .height = surface->current.height,
- };
-
- if (!intersects_with_output(output, output->server->output_layout, &surface_box)) {
- return;
- }
-
- data->user_iterator(data->output, surface, &surface_box, data->user_data);
-}
-
-void
-output_surface_for_each_surface(struct cg_output *output, struct wlr_surface *surface, double ox, double oy,
- cg_surface_iterator_func_t iterator, void *user_data)
-{
- struct surface_iterator_data data = {
- .user_iterator = iterator,
- .user_data = user_data,
- .output = output,
- .ox = ox,
- .oy = oy,
- };
-
- wlr_surface_for_each_surface(surface, output_for_each_surface_iterator, &data);
-}
-
-static void
-output_view_for_each_surface(struct cg_output *output, struct cg_view *view, cg_surface_iterator_func_t iterator,
- void *user_data)
-{
- struct surface_iterator_data data = {
- .user_iterator = iterator,
- .user_data = user_data,
- .output = output,
- .ox = view->lx,
- .oy = view->ly,
- };
-
- wlr_output_layout_output_coords(output->server->output_layout, output->wlr_output, &data.ox, &data.oy);
- view_for_each_surface(view, output_for_each_surface_iterator, &data);
-}
-
-void
-output_view_for_each_popup_surface(struct cg_output *output, struct cg_view *view, cg_surface_iterator_func_t iterator,
- void *user_data)
-{
- struct surface_iterator_data data = {
- .user_iterator = iterator,
- .user_data = user_data,
- .output = output,
- .ox = view->lx,
- .oy = view->ly,
- };
-
- wlr_output_layout_output_coords(output->server->output_layout, output->wlr_output, &data.ox, &data.oy);
- view_for_each_popup_surface(view, output_for_each_surface_iterator, &data);
-}
-
-void
-output_drag_icons_for_each_surface(struct cg_output *output, struct wl_list *drag_icons,
- cg_surface_iterator_func_t iterator, void *user_data)
-{
- struct cg_drag_icon *drag_icon;
- wl_list_for_each (drag_icon, drag_icons, link) {
- if (drag_icon->wlr_drag_icon->mapped) {
- double ox = drag_icon->lx;
- double oy = drag_icon->ly;
- wlr_output_layout_output_coords(output->server->output_layout, output->wlr_output, &ox, &oy);
- output_surface_for_each_surface(output, drag_icon->wlr_drag_icon->surface, ox, oy, iterator,
- user_data);
- }
- }
-}
-
-static void
-output_for_each_surface(struct cg_output *output, cg_surface_iterator_func_t iterator, void *user_data)
-{
- struct cg_view *view;
- wl_list_for_each_reverse (view, &output->server->views, link) {
- output_view_for_each_surface(output, view, iterator, user_data);
- }
-
- output_drag_icons_for_each_surface(output, &output->server->seat->drag_icons, iterator, user_data);
-}
-
-struct send_frame_done_data {
- struct timespec when;
-};
-
-static void
-send_frame_done_iterator(struct cg_output *output, struct wlr_surface *surface, struct wlr_box *box, void *user_data)
-{
- struct send_frame_done_data *data = user_data;
- wlr_surface_send_frame_done(surface, &data->when);
-}
-
-static void
-send_frame_done(struct cg_output *output, struct send_frame_done_data *data)
-{
- output_for_each_surface(output, send_frame_done_iterator, data);
-}
-
-static void
-count_surface_iterator(struct cg_output *output, struct wlr_surface *surface, struct wlr_box *_box, void *data)
-{
- size_t *n = data;
- n++;
-}
-
-static bool
-scan_out_primary_view(struct cg_output *output)
-{
- struct cg_server *server = output->server;
- struct wlr_output *wlr_output = output->wlr_output;
-
- struct cg_drag_icon *drag_icon;
- wl_list_for_each (drag_icon, &server->seat->drag_icons, link) {
- if (drag_icon->wlr_drag_icon->mapped) {
- return false;
- }
- }
-
- struct cg_view *view = seat_get_focus(server->seat);
- if (!view || !view->wlr_surface) {
- return false;
- }
-
- size_t n_surfaces = 0;
- output_view_for_each_surface(output, view, count_surface_iterator, &n_surfaces);
- if (n_surfaces > 1) {
- return false;
- }
-
-#if CAGE_HAS_XWAYLAND
- if (view->type == CAGE_XWAYLAND_VIEW) {
- struct cg_xwayland_view *xwayland_view = xwayland_view_from_view(view);
- if (!wl_list_empty(&xwayland_view->xwayland_surface->children)) {
- return false;
- }
- }
-#endif
-
- struct wlr_surface *surface = view->wlr_surface;
-
- if (!surface->buffer) {
- return false;
- }
-
- if ((float) surface->current.scale != wlr_output->scale ||
- surface->current.transform != wlr_output->transform) {
- return false;
- }
-
- wlr_output_attach_buffer(wlr_output, &surface->buffer->base);
- return wlr_output_commit(wlr_output);
-}
-
static void
output_enable(struct cg_output *output)
{
@@ -249,6 +54,9 @@ output_enable(struct cg_output *output)
wlr_output_layout_add_auto(output->server->output_layout, wlr_output);
wlr_output_enable(wlr_output, true);
wlr_output_commit(wlr_output);
+
+ output->scene_output = wlr_scene_get_scene_output(output->server->scene, wlr_output);
+ assert(output->scene_output != NULL);
}
static void
@@ -261,6 +69,8 @@ output_disable(struct cg_output *output)
return;
}
+ output->scene_output = NULL;
+
wlr_log(WLR_DEBUG, "Disabling output %s", wlr_output->name);
wlr_output_enable(wlr_output, false);
wlr_output_layout_remove(output->server->output_layout, wlr_output);
@@ -268,93 +78,19 @@ output_disable(struct cg_output *output)
}
static void
-damage_surface_iterator(struct cg_output *output, struct wlr_surface *surface, struct wlr_box *box, void *user_data)
+handle_output_frame(struct wl_listener *listener, void *data)
{
- struct wlr_output *wlr_output = output->wlr_output;
- bool whole = *(bool *) user_data;
-
- scale_box(box, output->wlr_output->scale);
-
- if (whole) {
- wlr_output_damage_add_box(output->damage, box);
- } else if (pixman_region32_not_empty(&surface->buffer_damage)) {
- pixman_region32_t damage;
- pixman_region32_init(&damage);
- wlr_surface_get_effective_damage(surface, &damage);
-
- wlr_region_scale(&damage, &damage, wlr_output->scale);
- if (ceil(wlr_output->scale) > surface->current.scale) {
- /* When scaling up a surface it'll become
- blurry, so we need to expand the damage
- region. */
- wlr_region_expand(&damage, &damage, ceil(wlr_output->scale) - surface->current.scale);
- }
- pixman_region32_translate(&damage, box->x, box->y);
- wlr_output_damage_add(output->damage, &damage);
- pixman_region32_fini(&damage);
- }
-}
+ struct cg_output *output = wl_container_of(listener, output, frame);
-void
-output_damage_surface(struct cg_output *output, struct wlr_surface *surface, double lx, double ly, bool whole)
-{
if (!output->wlr_output->enabled) {
- wlr_log(WLR_DEBUG, "Not adding damage for disabled output %s", output->wlr_output->name);
return;
}
- double ox = lx, oy = ly;
- wlr_output_layout_output_coords(output->server->output_layout, output->wlr_output, &ox, &oy);
- output_surface_for_each_surface(output, surface, ox, oy, damage_surface_iterator, &whole);
-}
+ wlr_scene_output_commit(output->scene_output);
-static void
-handle_output_damage_frame(struct wl_listener *listener, void *data)
-{
- struct cg_output *output = wl_container_of(listener, output, damage_frame);
- struct send_frame_done_data frame_data = {0};
-
- if (!output->wlr_output->enabled) {
- return;
- }
-
- /* Check if we can scan-out the primary view. */
- static bool last_scanned_out = false;
- bool scanned_out = scan_out_primary_view(output);
-
- if (scanned_out && !last_scanned_out) {
- wlr_log(WLR_DEBUG, "Scanning out primary view");
- }
- if (last_scanned_out && !scanned_out) {
- wlr_log(WLR_DEBUG, "Stopping primary view scan out");
- }
- last_scanned_out = scanned_out;
-
- if (scanned_out) {
- goto frame_done;
- }
-
- bool needs_frame;
- pixman_region32_t damage;
- pixman_region32_init(&damage);
- if (!wlr_output_damage_attach_render(output->damage, &needs_frame, &damage)) {
- wlr_log(WLR_ERROR, "Cannot make damage output current");
- goto damage_finish;
- }
-
- if (!needs_frame) {
- wlr_output_rollback(output->wlr_output);
- goto damage_finish;
- }
-
- output_render(output, &damage);
-
-damage_finish:
- pixman_region32_fini(&damage);
-
-frame_done:
- clock_gettime(CLOCK_MONOTONIC, &frame_data.when);
- send_frame_done(output, &frame_data);
+ struct timespec now = {0};
+ clock_gettime(CLOCK_MONOTONIC, &now);
+ wlr_scene_output_send_frame_done(output->scene_output, &now);
}
static void
@@ -395,11 +131,12 @@ output_destroy(struct cg_output *output)
{
struct cg_server *server = output->server;
+ output->wlr_output->data = NULL;
+
wl_list_remove(&output->destroy.link);
wl_list_remove(&output->commit.link);
wl_list_remove(&output->mode.link);
- wl_list_remove(&output->damage_frame.link);
- wl_list_remove(&output->damage_destroy.link);
+ wl_list_remove(&output->frame.link);
wl_list_remove(&output->link);
wlr_output_layout_remove(server->output_layout, output->wlr_output);
@@ -421,18 +158,10 @@ output_destroy(struct cg_output *output)
}
}
-static void
-handle_output_damage_destroy(struct wl_listener *listener, void *data)
-{
- struct cg_output *output = wl_container_of(listener, output, damage_destroy);
- output_destroy(output);
-}
-
static void
handle_output_destroy(struct wl_listener *listener, void *data)
{
struct cg_output *output = wl_container_of(listener, output, destroy);
- wlr_output_damage_destroy(output->damage);
output_destroy(output);
}
@@ -442,6 +171,11 @@ handle_new_output(struct wl_listener *listener, void *data)
struct cg_server *server = wl_container_of(listener, server, new_output);
struct wlr_output *wlr_output = data;
+ if (!wlr_output_init_render(wlr_output, server->allocator, server->renderer)) {
+ wlr_log(WLR_ERROR, "Failed to initialize output rendering");
+ return;
+ }
+
struct cg_output *output = calloc(1, sizeof(struct cg_output));
if (!output) {
wlr_log(WLR_ERROR, "Failed to allocate output");
@@ -449,8 +183,9 @@ handle_new_output(struct wl_listener *listener, void *data)
}
output->wlr_output = wlr_output;
+ wlr_output->data = output;
output->server = server;
- output->damage = wlr_output_damage_create(wlr_output);
+
wl_list_insert(&server->outputs, &output->link);
output->commit.notify = handle_output_commit;
@@ -459,15 +194,29 @@ handle_new_output(struct wl_listener *listener, void *data)
wl_signal_add(&wlr_output->events.mode, &output->mode);
output->destroy.notify = handle_output_destroy;
wl_signal_add(&wlr_output->events.destroy, &output->destroy);
- output->damage_frame.notify = handle_output_damage_frame;
- wl_signal_add(&output->damage->events.frame, &output->damage_frame);
- output->damage_destroy.notify = handle_output_damage_destroy;
- wl_signal_add(&output->damage->events.destroy, &output->damage_destroy);
-
- struct wlr_output_mode *preferred_mode = wlr_output_preferred_mode(wlr_output);
- if (preferred_mode) {
- wlr_output_set_mode(wlr_output, preferred_mode);
+ output->frame.notify = handle_output_frame;
+ wl_signal_add(&wlr_output->events.frame, &output->frame);
+
+ if (!wl_list_empty(&wlr_output->modes)) {
+ struct wlr_output_mode *preferred_mode = wlr_output_preferred_mode(wlr_output);
+ if (preferred_mode) {
+ wlr_output_set_mode(wlr_output, preferred_mode);
+ }
+ if (!wlr_output_test(wlr_output)) {
+ struct wlr_output_mode *mode;
+ wl_list_for_each (mode, &wlr_output->modes, link) {
+ if (mode == preferred_mode) {
+ continue;
+ }
+
+ wlr_output_set_mode(wlr_output, mode);
+ if (wlr_output_test(wlr_output)) {
+ break;
+ }
+ }
+ }
}
+
wlr_output_set_transform(wlr_output, output->server->output_transform);
if (server->output_mode == CAGE_MULTI_OUTPUT_MODE_LAST) {
diff --git a/output.h b/output.h
index b3fd3b4..ced06f6 100644
--- a/output.h
+++ b/output.h
@@ -11,28 +11,17 @@
struct cg_output {
struct cg_server *server;
struct wlr_output *wlr_output;
- struct wlr_output_damage *damage;
+ struct wlr_scene_output *scene_output;
struct wl_listener commit;
struct wl_listener mode;
struct wl_listener destroy;
- struct wl_listener damage_frame;
- struct wl_listener damage_destroy;
+ struct wl_listener frame;
struct wl_list link; // cg_server::outputs
};
-typedef void (*cg_surface_iterator_func_t)(struct cg_output *output, struct wlr_surface *surface, struct wlr_box *box,
- void *user_data);
-
void handle_new_output(struct wl_listener *listener, void *data);
-void output_surface_for_each_surface(struct cg_output *output, struct wlr_surface *surface, double ox, double oy,
- cg_surface_iterator_func_t iterator, void *user_data);
-void output_view_for_each_popup_surface(struct cg_output *output, struct cg_view *view,
- cg_surface_iterator_func_t iterator, void *user_data);
-void output_drag_icons_for_each_surface(struct cg_output *output, struct wl_list *drag_icons,
- cg_surface_iterator_func_t iterator, void *user_data);
-void output_damage_surface(struct cg_output *output, struct wlr_surface *surface, double lx, double ly, bool whole);
void output_set_window_title(struct cg_output *output, const char *title);
#endif
diff --git a/render.c b/render.c
deleted file mode 100644
index 166a088..0000000
--- a/render.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Cage: A Wayland kiosk.
- *
- * Copyright (C) 2018-2020 Jente Hidskes
- * Copyright (C) 2019 The Sway authors
- *
- * See the LICENSE file accompanying this file.
- */
-
-#include <wayland-server-core.h>
-#include <wlr/backend.h>
-#include <wlr/render/wlr_renderer.h>
-#include <wlr/types/wlr_box.h>
-#include <wlr/types/wlr_matrix.h>
-#include <wlr/types/wlr_output.h>
-#include <wlr/types/wlr_output_layout.h>
-#include <wlr/types/wlr_surface.h>
-#include <wlr/util/log.h>
-#include <wlr/util/region.h>
-
-#include "output.h"
-#include "seat.h"
-#include "server.h"
-#include "util.h"
-#include "view.h"
-
-static void
-scissor_output(struct wlr_output *output, pixman_box32_t *rect)
-{
- struct wlr_renderer *renderer = wlr_backend_get_renderer(output->backend);
-
- struct wlr_box box = {
- .x = rect->x1,
- .y = rect->y1,
- .width = rect->x2 - rect->x1,
- .height = rect->y2 - rect->y1,
- };
-
- int output_width, output_height;
- wlr_output_transformed_resolution(output, &output_width, &output_height);
- enum wl_output_transform transform = wlr_output_transform_invert(output->transform);
- wlr_box_transform(&box, &box, transform, output_width, output_height);
-
- wlr_renderer_scissor(renderer, &box);
-}
-
-struct render_data {
- pixman_region32_t *damage;
-};
-
-static void
-render_texture(struct wlr_output *wlr_output, pixman_region32_t *output_damage, struct wlr_texture *texture,
- const struct wlr_box *box, const float matrix[static 9])
-{
- struct wlr_renderer *renderer = wlr_backend_get_renderer(wlr_output->backend);
-
- pixman_region32_t damage;
- pixman_region32_init(&damage);
- pixman_region32_union_rect(&damage, &damage, box->x, box->y, box->width, box->height);
- pixman_region32_intersect(&damage, &damage, output_damage);
- if (!pixman_region32_not_empty(&damage)) {
- goto damage_finish;
- }
-
- int nrects;
- pixman_box32_t *rects = pixman_region32_rectangles(&damage, &nrects);
- for (int i = 0; i < nrects; i++) {
- scissor_output(wlr_output, &rects[i]);
- wlr_render_texture_with_matrix(renderer, texture, matrix, 1.0f);
- }
-
-damage_finish:
- pixman_region32_fini(&damage);
-}
-
-static void
-render_surface_iterator(struct cg_output *output, struct wlr_surface *surface, struct wlr_box *box, void *user_data)
-{
- struct render_data *data = user_data;
- struct wlr_output *wlr_output = output->wlr_output;
- pixman_region32_t *output_damage = data->damage;
-
- struct wlr_texture *texture = wlr_surface_get_texture(surface);
- if (!texture) {
- wlr_log(WLR_DEBUG, "Cannot obtain surface texture");
- return;
- }
-
- scale_box(box, wlr_output->scale);
-
- float matrix[9];
- enum wl_output_transform transform = wlr_output_transform_invert(surface->current.transform);
- wlr_matrix_project_box(matrix, box, transform, 0.0f, wlr_output->transform_matrix);
-
- render_texture(wlr_output, output_damage, texture, box, matrix);
-}
-
-static void
-render_drag_icons(struct cg_output *output, pixman_region32_t *damage, struct wl_list *drag_icons)
-{
- struct render_data data = {
- .damage = damage,
- };
- output_drag_icons_for_each_surface(output, drag_icons, render_surface_iterator, &data);
-}
-
-/**
- * Render all toplevels without descending into popups.
- */
-static void
-render_view_toplevels(struct cg_view *view, struct cg_output *output, pixman_region32_t *damage)
-{
- struct render_data data = {
- .damage = damage,
- };
- double ox = view->lx;
- double oy = view->ly;
- wlr_output_layout_output_coords(output->server->output_layout, output->wlr_output, &ox, &oy);
- output_surface_for_each_surface(output, view->wlr_surface, ox, oy, render_surface_iterator, &data);
-}
-
-static void
-render_view_popups(struct cg_view *view, struct cg_output *output, pixman_region32_t *damage)
-{
- struct render_data data = {
- .damage = damage,
- };
- output_view_for_each_popup_surface(output, view, render_surface_iterator, &data);
-}
-
-void
-output_render(struct cg_output *output, pixman_region32_t *damage)
-{
- struct cg_server *server = output->server;
- struct wlr_output *wlr_output = output->wlr_output;
-
- struct wlr_renderer *renderer = wlr_backend_get_renderer(wlr_output->backend);
- if (!renderer) {
- wlr_log(WLR_DEBUG, "Expected the output backend to have a renderer");
- return;
- }
-
- wlr_renderer_begin(renderer, wlr_output->width, wlr_output->height);
-
- if (!pixman_region32_not_empty(damage)) {
- wlr_log(WLR_DEBUG, "Output isn't damaged but needs a buffer swap");
- goto renderer_end;
- }
-
-#ifdef DEBUG
- if (server->debug_damage_tracking) {
- wlr_renderer_clear(renderer, (float[]){1.0f, 0.0f, 0.0f, 1.0f});
- }
-#endif
-
- float color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
- int nrects;
- pixman_box32_t *rects = pixman_region32_rectangles(damage, &nrects);
- for (int i = 0; i < nrects; i++) {
- scissor_output(wlr_output, &rects[i]);
- wlr_renderer_clear(renderer, color);
- }
-
- // TODO: render only top view, possibly use focused view for this, see #35.
- struct cg_view *view;
- wl_list_for_each_reverse (view, &server->views, link) {
- render_view_toplevels(view, output, damage);
- }
-
- struct cg_view *focused_view = seat_get_focus(server->seat);
- if (focused_view) {
- render_view_popups(focused_view, output, damage);
- }
-
- render_drag_icons(output, damage, &server->seat->drag_icons);
-
-renderer_end:
- /* Draw software cursor in case hardware cursors aren't
- available. This is a no-op when they are. */
- wlr_output_render_software_cursors(wlr_output, damage);
- wlr_renderer_scissor(renderer, NULL);
- wlr_renderer_end(renderer);
-
- int output_width, output_height;
- wlr_output_transformed_resolution(wlr_output, &output_width, &output_height);
-
- pixman_region32_t frame_damage;
- pixman_region32_init(&frame_damage);
-
- enum wl_output_transform transform = wlr_output_transform_invert(wlr_output->transform);
- wlr_region_transform(&frame_damage, &output->damage->current, transform, output_width, output_height);
-
-#ifdef DEBUG
- if (server->debug_damage_tracking) {
- pixman_region32_union_rect(&frame_damage, &frame_damage, 0, 0, output_width, output_height);
- }
-#endif
-
- wlr_output_set_damage(wlr_output, &frame_damage);
- pixman_region32_fini(&frame_damage);
-
- if (!wlr_output_commit(wlr_output)) {
- wlr_log(WLR_ERROR, "Could not commit output");
- }
-}
diff --git a/render.h b/render.h
deleted file mode 100644
index 085b00b..0000000
--- a/render.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CG_RENDER_H
-#define CG_RENDER_H
-
-#include "output.h"
-
-void output_render(struct cg_output *output, pixman_region32_t *damage);
-
-#endif
diff --git a/seat.c b/seat.c
index 08f25a3..5d80e33 100644
--- a/seat.c
+++ b/seat.c
@@ -6,10 +6,14 @@
* See the LICENSE file accompanying this file.
*/
+#define _POSIX_C_SOURCE 200809L
+
#include "config.h"
+#include <assert.h>
#include <linux/input-event-codes.h>
#include <stdlib.h>
+#include <string.h>
#include <wayland-server-core.h>
#include <wlr/backend.h>
#include <wlr/backend/multi.h>
@@ -18,9 +22,11 @@
#include <wlr/types/wlr_idle.h>
#include <wlr/types/wlr_keyboard_group.h>
#include <wlr/types/wlr_primary_selection.h>
+#include <wlr/types/wlr_scene.h>
#include <wlr/types/wlr_seat.h>
-#include <wlr/types/wlr_surface.h>
#include <wlr/types/wlr_touch.h>
+#include <wlr/types/wlr_virtual_keyboard_v1.h>
+#include <wlr/types/wlr_virtual_pointer_v1.h>
#include <wlr/types/wlr_xcursor_manager.h>
#include <wlr/util/log.h>
#if CAGE_HAS_XWAYLAND
@@ -41,42 +47,42 @@ static void drag_icon_update_position(struct cg_drag_icon *drag_icon);
* menus or tooltips. This function tests if any of those are underneath the
* coordinates lx and ly (in output Layout Coordinates). If so, it sets the
* surface pointer to that wlr_surface and the sx and sy coordinates to the
- * coordinates relative to that surface's top-left corner. */
-static bool
-view_at(struct cg_view *view, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy)
+ * coordinates relative to that surface's top-left corner.
+ *
+ * This function iterates over all of our surfaces and attempts to find one
+ * under the cursor. If desktop_view_at returns a view, there is also a
+ * surface. There cannot be a surface without a view, either. It's both or
+ * nothing.
+ */
+static struct cg_view *
+desktop_view_at(struct cg_server *server, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy)
{
- double view_sx = lx - view->lx;
- double view_sy = ly - view->ly;
+ struct wlr_scene_node *node = wlr_scene_node_at(&server->scene->tree.node, lx, ly, sx, sy);
+ if (node == NULL || node->type != WLR_SCENE_NODE_BUFFER) {
+ return NULL;
+ }
- double _sx, _sy;
- struct wlr_surface *_surface = view_wlr_surface_at(view, view_sx, view_sy, &_sx, &_sy);
- if (_surface != NULL) {
- *sx = _sx;
- *sy = _sy;
- *surface = _surface;
- return true;
+ struct wlr_scene_buffer *scene_buffer = wlr_scene_buffer_from_node(node);
+ struct wlr_scene_surface *scene_surface = wlr_scene_surface_from_buffer(scene_buffer);
+ if (!scene_surface) {
+ return NULL;
}
- return false;
-}
+ *surface = scene_surface->surface;
-/* This iterates over all of our surfaces and attempts to find one
- * under the cursor. This relies on server->views being ordered from
- * top-to-bottom. If desktop_view_at returns a view, there is also a
- * surface. There cannot be a surface without a view, either. It's
- * both or nothing. */
-static struct cg_view *
-desktop_view_at(struct cg_server *server, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy)
-{
- struct cg_view *view;
-
- wl_list_for_each (view, &server->views, link) {
- if (view_at(view, lx, ly, surface, sx, sy)) {
- return view;
+ /* Walk up the tree until we find a node with a data pointer. When done,
+ * we've found the node representing the view. */
+ while (!node->data) {
+ if (!node->parent) {
+ node = NULL;
+ break;
}
+
+ node = &node->parent->node;
}
- return NULL;
+ assert(node != NULL);
+ return node->data;
}
static void
@@ -127,16 +133,16 @@ update_capabilities(struct cg_seat *seat)
}
static void
-map_input_device_to_output(struct cg_seat *seat, struct wlr_input_device *device)
+map_input_device_to_output(struct cg_seat *seat, struct wlr_input_device *device, const char *output_name)
{
- if (!device->output_name) {
+ if (!output_name) {
wlr_log(WLR_INFO, "Input device %s cannot be mapped to an output device\n", device->name);
return;
}
struct cg_output *output;
wl_list_for_each (output, &seat->server->outputs, link) {
- if (strcmp(device->output_name, output->wlr_output->name) == 0) {
+ if (strcmp(output_name, output->wlr_output->name) == 0) {
wlr_log(WLR_INFO, "Mapping input device %s to output device %s\n", device->name,
output->wlr_output->name);
wlr_cursor_map_input_to_output(seat->cursor, device, output->wlr_output);
@@ -154,7 +160,7 @@ handle_touch_destroy(struct wl_listener *listener, void *data)
struct cg_seat *seat = touch->seat;
wl_list_remove(&touch->link);
- wlr_cursor_detach_input_device(seat->cursor, touch->device);
+ wlr_cursor_detach_input_device(seat->cursor, &touch->touch->base);
wl_list_remove(&touch->destroy.link);
free(touch);
@@ -162,7 +168,7 @@ handle_touch_destroy(struct wl_listener *listener, void *data)
}
static void
-handle_new_touch(struct cg_seat *seat, struct wlr_input_device *device)
+handle_new_touch(struct cg_seat *seat, struct wlr_touch *wlr_touch)
{
struct cg_touch *touch = calloc(1, sizeof(struct cg_touch));
if (!touch) {
@@ -171,14 +177,14 @@ handle_new_touch(struct cg_seat *seat, struct wlr_input_device *device)
}
touch->seat = seat;
- touch->device = device;
- wlr_cursor_attach_input_device(seat->cursor, device);
+ touch->touch = wlr_touch;
+ wlr_cursor_attach_input_device(seat->cursor, &wlr_touch->base);
wl_list_insert(&seat->touch, &touch->link);
touch->destroy.notify = handle_touch_destroy;
- wl_signal_add(&touch->device->events.destroy, &touch->destroy);
+ wl_signal_add(&wlr_touch->base.events.destroy, &touch->destroy);
- map_input_device_to_output(seat, device);
+ map_input_device_to_output(seat, &wlr_touch->base, wlr_touch->output_name);
}
static void
@@ -188,7 +194,7 @@ handle_pointer_destroy(struct wl_listener *listener, void *data)
struct cg_seat *seat = pointer->seat;
wl_list_remove(&pointer->link);
- wlr_cursor_detach_input_device(seat->cursor, pointer->device);
+ wlr_cursor_detach_input_device(seat->cursor, &pointer->pointer->base);
wl_list_remove(&pointer->destroy.link);
free(pointer);
@@ -196,7 +202,7 @@ handle_pointer_destroy(struct wl_listener *listener, void *data)
}
static void
-handle_new_pointer(struct cg_seat *seat, struct wlr_input_device *device)
+handle_new_pointer(struct cg_seat *seat, struct wlr_pointer *wlr_pointer)
{
struct cg_pointer *pointer = calloc(1, sizeof(struct cg_pointer));
if (!pointer) {
@@ -205,21 +211,42 @@ handle_new_pointer(struct cg_seat *seat, struct wlr_input_device *device)
}
pointer->seat = seat;
- pointer->device = device;
- wlr_cursor_attach_input_device(seat->cursor, device);
+ pointer->pointer = wlr_pointer;
+ wlr_cursor_attach_input_device(seat->cursor, &wlr_pointer->base);
wl_list_insert(&seat->pointers, &pointer->link);
pointer->destroy.notify = handle_pointer_destroy;
- wl_signal_add(&device->events.destroy, &pointer->destroy);
+ wl_signal_add(&wlr_pointer->base.events.destroy, &pointer->destroy);
+
+ map_input_device_to_output(seat, &wlr_pointer->base, wlr_pointer->output_name);
+}
- map_input_device_to_output(seat, device);
+static void
+handle_virtual_pointer(struct wl_listener *listener, void *data)
+{
+ struct cg_server *server = wl_container_of(listener, server, new_virtual_pointer);
+ struct cg_seat *seat = server->seat;
+ struct wlr_virtual_pointer_v1_new_pointer_event *event = data;
+ struct wlr_virtual_pointer_v1 *pointer = event->new_pointer;
+ struct wlr_pointer *wlr_pointer = &pointer->pointer;
+
+ /* We'll want to map the device back to an output later, this is a bit
+ * sub-optimal (we could just keep the suggested_output), but just copy
+ * its name so we do like other devices
+ */
+ if (event->suggested_output != NULL) {
+ wlr_pointer->output_name = strdup(event->suggested_output->name);
+ }
+ /* TODO: event->suggested_seat should be checked if we handle multiple seats */
+ handle_new_pointer(seat, wlr_pointer);
+ update_capabilities(seat);
}
static void
-handle_modifier_event(struct wlr_input_device *device, struct cg_seat *seat)
+handle_modifier_event(struct wlr_keyboard *keyboard, struct cg_seat *seat)
{
- wlr_seat_set_keyboard(seat->seat, device);
- wlr_seat_keyboard_notify_modifiers(seat->seat, &device->keyboard->modifiers);
+ wlr_seat_set_keyboard(seat->seat, keyboard);
+ wlr_seat_keyboard_notify_modifiers(seat->seat, &keyboard->modifiers);
wlr_idle_notify_activity(seat->server->idle, seat->seat);
}
@@ -249,18 +276,18 @@ handle_keybinding(struct cg_server *server, xkb_keysym_t sym)
}
static void
-handle_key_event(struct wlr_input_device *device, struct cg_seat *seat, void *data)
+handle_key_event(struct wlr_keyboard *keyboard, struct cg_seat *seat, void *data)
{
- struct wlr_event_keyboard_key *event = data;
+ struct wlr_keyboard_key_event *event = data;
/* Translate from libinput keycode to an xkbcommon keycode. */
xkb_keycode_t keycode = event->keycode + 8;
const xkb_keysym_t *syms;
- int nsyms = xkb_state_key_get_syms(device->keyboard->xkb_state, keycode, &syms);
+ int nsyms = xkb_state_key_get_syms(keyboard->xkb_state, keycode, &syms);
bool handled = false;
- uint32_t modifiers = wlr_keyboard_get_modifiers(device->keyboard);
+ uint32_t modifiers = wlr_keyboard_get_modifiers(keyboard);
if ((modifiers & WLR_MODIFIER_ALT) && event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
/* If Alt is held down and this button was pressed, we
* attempt to process it as a compositor
@@ -272,7 +299,7 @@ handle_key_event(struct wlr_input_device *device, struct cg_seat *seat, void *da
if (!handled) {
/* Otherwise, we pass it along to the client. */
- wlr_seat_set_keyboard(seat->seat, device);
+ wlr_seat_set_keyboard(seat->seat, keyboard);
wlr_seat_keyboard_notify_key(seat->seat, event->time_msec, event->keycode, event->state);
}
@@ -283,27 +310,32 @@ static void
handle_keyboard_group_key(struct wl_listener *listener, void *data)
{
struct cg_keyboard_group *cg_group = wl_container_of(listener, cg_group, key);
- handle_key_event(cg_group->wlr_group->input_device, cg_group->seat, data);
+ handle_key_event(&cg_group->wlr_group->keyboard, cg_group->seat, data);
}
static void
handle_keyboard_group_modifiers(struct wl_listener *listener, void *data)
{
struct cg_keyboard_group *group = wl_container_of(listener, group, modifiers);
- handle_modifier_event(group->wlr_group->input_device, group->seat);
+ handle_modifier_event(&group->wlr_group->keyboard, group->seat);
}
static void
-cg_keyboard_group_add(struct wlr_input_device *device, struct cg_seat *seat)
+cg_keyboard_group_add(struct wlr_keyboard *keyboard, struct cg_seat *seat, bool virtual)
{
- struct wlr_keyboard *wlr_keyboard = device->keyboard;
-
- struct cg_keyboard_group *group;
- wl_list_for_each (group, &seat->keyboard_groups, link) {
- struct wlr_keyboard_group *wlr_group = group->wlr_group;
- if (wlr_keyboard_group_add_keyboard(wlr_group, wlr_keyboard)) {
- wlr_log(WLR_DEBUG, "Added new keyboard to existing group");
- return;
+ /* We apparently should not group virtual keyboards,
+ * so create a new group with it
+ */
+ if (!virtual) {
+ struct cg_keyboard_group *group;
+ wl_list_for_each (group, &seat->keyboard_groups, link) {
+ if (group->is_virtual)
+ continue;
+ struct wlr_keyboard_group *wlr_group = group->wlr_group;
+ if (wlr_keyboard_group_add_keyboard(wlr_group, keyboard)) {
+ wlr_log(WLR_DEBUG, "Added new keyboard to existing group");
+ return;
+ }
}
}
@@ -315,6 +347,7 @@ cg_keyboard_group_add(struct wlr_input_device *device, struct cg_seat *seat)
return;
}
cg_group->seat = seat;
+ cg_group->is_virtual = virtual;
cg_group->wlr_group = wlr_keyboard_group_create();
if (cg_group->wlr_group == NULL) {
wlr_log(WLR_ERROR, "Failed to create wlr keyboard group.");
@@ -322,14 +355,14 @@ cg_keyboard_group_add(struct wlr_input_device *device, struct cg_seat *seat)
}
cg_group->wlr_group->data = cg_group;
- wlr_keyboard_set_keymap(&cg_group->wlr_group->keyboard, device->keyboard->keymap);
+ wlr_keyboard_set_keymap(&cg_group->wlr_group->keyboard, keyboard->keymap);
- wlr_keyboard_set_repeat_info(&cg_group->wlr_group->keyboard, wlr_keyboard->repeat_info.rate,
- wlr_keyboard->repeat_info.delay);
+ wlr_keyboard_set_repeat_info(&cg_group->wlr_group->keyboard, keyboard->repeat_info.rate,
+ keyboard->repeat_info.delay);
wlr_log(WLR_DEBUG, "Created keyboard group");
- wlr_keyboard_group_add_keyboard(cg_group->wlr_group, wlr_keyboard);
+ wlr_keyboard_group_add_keyboard(cg_group->wlr_group, keyboard);
wl_list_insert(&seat->keyboard_groups, &cg_group->link);
wl_signal_add(&cg_group->wlr_group->keyboard.events.key, &cg_group->key);
@@ -347,36 +380,45 @@ cleanup:
}
static void
-handle_new_keyboard(struct cg_seat *seat, struct wlr_input_device *device)
+handle_new_keyboard(struct cg_seat *seat, struct wlr_keyboard *keyboard, bool virtual)
{
struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
if (!context) {
- wlr_log(WLR_ERROR, "Unable to create XBK context");
+ wlr_log(WLR_ERROR, "Unable to create XKB context");
return;
}
- struct xkb_rule_names rules = {0};
- rules.rules = getenv("XKB_DEFAULT_RULES");
- rules.model = getenv("XKB_DEFAULT_MODEL");
- rules.layout = getenv("XKB_DEFAULT_LAYOUT");
- rules.variant = getenv("XKB_DEFAULT_VARIANT");
- rules.options = getenv("XKB_DEFAULT_OPTIONS");
- struct xkb_keymap *keymap = xkb_map_new_from_names(context, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS);
+ struct xkb_keymap *keymap = xkb_keymap_new_from_names(context, NULL, XKB_KEYMAP_COMPILE_NO_FLAGS);
if (!keymap) {
wlr_log(WLR_ERROR, "Unable to configure keyboard: keymap does not exist");
xkb_context_unref(context);
return;
}
- wlr_keyboard_set_keymap(device->keyboard, keymap);
+ wlr_keyboard_set_keymap(keyboard, keymap);
xkb_keymap_unref(keymap);
xkb_context_unref(context);
- wlr_keyboard_set_repeat_info(device->keyboard, 25, 600);
+ wlr_keyboard_set_repeat_info(keyboard, 25, 600);
+
+ cg_keyboard_group_add(keyboard, seat, virtual);
+
+ wlr_seat_set_keyboard(seat->seat, keyboard);
+}
- cg_keyboard_group_add(device, seat);
+static void
+handle_virtual_keyboard(struct wl_listener *listener, void *data)
+{
+ struct cg_server *server = wl_container_of(listener, server, new_virtual_keyboard);
+ struct cg_seat *seat = server->seat;
+ struct wlr_virtual_keyboard_v1 *keyboard = data;
+ struct wlr_keyboard *wlr_keyboard = &keyboard->keyboard;
+
+ /* TODO: If multiple seats are supported, check keyboard->seat
+ * to select the appropriate one */
- wlr_seat_set_keyboard(seat->seat, device);
+ handle_new_keyboard(seat, wlr_keyboard, true);
+ update_capabilities(seat);
}
static void
@@ -387,13 +429,13 @@ handle_new_input(struct wl_listener *listener, void *data)
switch (device->type) {
case WLR_INPUT_DEVICE_KEYBOARD:
- handle_new_keyboard(seat, device);
+ handle_new_keyboard(seat, wlr_keyboard_from_input_device(device), false);
break;
case WLR_INPUT_DEVICE_POINTER:
- handle_new_pointer(seat, device);
+ handle_new_pointer(seat, wlr_pointer_from_input_device(device));
break;
case WLR_INPUT_DEVICE_TOUCH:
- handle_new_touch(seat, device);
+ handle_new_touch(seat, wlr_touch_from_input_device(device));
break;
case WLR_INPUT_DEVICE_SWITCH:
wlr_log(WLR_DEBUG, "Switch input is not implemented");
@@ -448,10 +490,10 @@ static void
handle_touch_down(struct wl_listener *listener, void *data)
{
struct cg_seat *seat = wl_container_of(listener, seat, touch_down);
- struct wlr_event_touch_down *event = data;
+ struct wlr_touch_down_event *event = data;
double lx, ly;
- wlr_cursor_absolute_to_layout_coords(seat->cursor, event->device, event->x, event->y, &lx, &ly);
+ wlr_cursor_absolute_to_layout_coords(seat->cursor, &event->touch->base, event->x, event->y, &lx, &ly);
double sx, sy;
struct wlr_surface *surface;
@@ -466,7 +508,7 @@ handle_touch_down(struct wl_listener *listener, void *data)
seat->touch_id = event->touch_id;
seat->touch_lx = lx;
seat->touch_ly = ly;
- press_cursor_button(seat, event->device, event->time_msec, BTN_LEFT, WLR_BUTTON_PRESSED, lx, ly);
+ press_cursor_button(seat, &event->touch->base, event->time_msec, BTN_LEFT, WLR_BUTTON_PRESSED, lx, ly);
}
wlr_idle_notify_activity(seat->server->idle, seat->seat);
@@ -476,14 +518,14 @@ static void
handle_touch_up(struct wl_listener *listener, void *data)
{
struct cg_seat *seat = wl_container_of(listener, seat, touch_up);
- struct wlr_event_touch_up *event = data;
+ struct wlr_touch_up_event *event = data;
if (!wlr_seat_touch_get_point(seat->seat, event->touch_id)) {
return;
}
if (wlr_seat_touch_num_points(seat->seat) == 1) {
- press_cursor_button(seat, event->device, event->time_msec, BTN_LEFT, WLR_BUTTON_RELEASED,
+ press_cursor_button(seat, &event->touch->base, event->time_msec, BTN_LEFT, WLR_BUTTON_RELEASED,
seat->touch_lx, seat->touch_ly);
}
@@ -495,14 +537,14 @@ static void
handle_touch_motion(struct wl_listener *listener, void *data)
{
struct cg_seat *seat = wl_container_of(listener, seat, touch_motion);
- struct wlr_event_touch_motion *event = data;
+ struct wlr_touch_motion_event *event = data;
if (!wlr_seat_touch_get_point(seat->seat, event->touch_id)) {
return;
}
double lx, ly;
- wlr_cursor_absolute_to_layout_coords(seat->cursor, event->device, event->x, event->y, &lx, &ly);
+ wlr_cursor_absolute_to_layout_coords(seat->cursor, &event->touch->base, event->x, event->y, &lx, &ly);
double sx, sy;
struct wlr_surface *surface;
@@ -536,7 +578,7 @@ static void
handle_cursor_axis(struct wl_listener *listener, void *data)
{
struct cg_seat *seat = wl_container_of(listener, seat, cursor_axis);
- struct wlr_event_pointer_axis *event = data;
+ struct wlr_pointer_axis_event *event = data;
wlr_seat_pointer_notify_axis(seat->seat, event->time_msec, event->orientation, event->delta,
event->delta_discrete, event->source);
@@ -547,10 +589,10 @@ static void
handle_cursor_button(struct wl_listener *listener, void *data)
{
struct cg_seat *seat = wl_container_of(listener, seat, cursor_button);
- struct wlr_event_pointer_button *event = data;
+ struct wlr_pointer_button_event *event = data;
wlr_seat_pointer_notify_button(seat->seat, event->time_msec, event->button, event->state);
- press_cursor_button(seat, event->device, event->time_msec, event->button, event->state, seat->cursor->x,
+ press_cursor_button(seat, &event->pointer->base, event->time_msec, event->button, event->state, seat->cursor->x,
seat->cursor->y);
wlr_idle_notify_activity(seat->server->idle, seat->seat);
}
@@ -569,10 +611,7 @@ process_cursor_motion(struct cg_seat *seat, uint32_t time)
} else {
wlr_seat_pointer_notify_enter(wlr_seat, surface, sx, sy);
- bool focus_changed = wlr_seat->pointer_state.focused_surface != surface;
- if (!focus_changed && time > 0) {
- wlr_seat_pointer_notify_motion(wlr_seat, time, sx, sy);
- }
+ wlr_seat_pointer_notify_motion(wlr_seat, time, sx, sy);
}
struct cg_drag_icon *drag_icon;
@@ -587,9 +626,9 @@ static void
handle_cursor_motion_absolute(struct wl_listener *listener, void *data)
{
struct cg_seat *seat = wl_container_of(listener, seat, cursor_motion_absolute);
- struct wlr_event_pointer_motion_absolute *event = data;
+ struct wlr_pointer_motion_absolute_event *event = data;
- wlr_cursor_warp_absolute(seat->cursor, event->device, event->x, event->y);
+ wlr_cursor_warp_absolute(seat->cursor, &event->pointer->base, event->x, event->y);
process_cursor_motion(seat, event->time_msec);
wlr_idle_notify_activity(seat->server->idle, seat->seat);
}
@@ -598,22 +637,13 @@ static void
handle_cursor_motion(struct wl_listener *listener, void *data)
{
struct cg_seat *seat = wl_container_of(listener, seat, cursor_motion);
- struct wlr_event_pointer_motion *event = data;
+ struct wlr_pointer_motion_event *event = data;
- wlr_cursor_move(seat->cursor, event->device, event->delta_x, event->delta_y);
+ wlr_cursor_move(seat->cursor, &event->pointer->base, event->delta_x, event->delta_y);
process_cursor_motion(seat, event->time_msec);
wlr_idle_notify_activity(seat->server->idle, seat->seat);
}
-static void
-drag_icon_damage(struct cg_drag_icon *drag_icon)
-{
- struct cg_output *output;
- wl_list_for_each (output, &drag_icon->seat->server->outputs, link) {
- output_damage_surface(output, drag_icon->wlr_drag_icon->surface, drag_icon->lx, drag_icon->ly, true);
- }
-}
-
static void
drag_icon_update_position(struct cg_drag_icon *drag_icon)
{
@@ -621,8 +651,6 @@ drag_icon_update_position(struct cg_drag_icon *drag_icon)
struct cg_seat *seat = drag_icon->seat;
struct wlr_touch_point *point;
- drag_icon_damage(drag_icon);
-
switch (wlr_icon->drag->grab_type) {
case WLR_DRAG_GRAB_KEYBOARD:
return;
@@ -640,7 +668,7 @@ drag_icon_update_position(struct cg_drag_icon *drag_icon)
break;
}
- drag_icon_damage(drag_icon);
+ wlr_scene_node_set_position(&drag_icon->scene_tree->node, drag_icon->lx, drag_icon->ly);
}
static void
@@ -650,6 +678,7 @@ handle_drag_icon_destroy(struct wl_listener *listener, void *data)
wl_list_remove(&drag_icon->link);
wl_list_remove(&drag_icon->destroy.link);
+ wlr_scene_node_destroy(&drag_icon->scene_tree->node);
free(drag_icon);
}
@@ -692,6 +721,11 @@ handle_start_drag(struct wl_listener *listener, void *data)
}
drag_icon->seat = seat;
drag_icon->wlr_drag_icon = wlr_drag_icon;
+ drag_icon->scene_tree = wlr_scene_subsurface_tree_create(&seat->server->scene->tree, wlr_drag_icon->surface);
+ if (!drag_icon->scene_tree) {
+ free(drag_icon);
+ return;
+ }
drag_icon->destroy.notify = handle_drag_icon_destroy;
wl_signal_add(&wlr_drag_icon->events.destroy, &drag_icon->destroy);
@@ -812,6 +846,9 @@ seat_create(struct cg_server *server, struct wlr_backend *backend)
seat->new_input.notify = handle_new_input;
wl_signal_add(&backend->events.new_input, &seat->new_input);
+ server->new_virtual_keyboard.notify = handle_virtual_keyboard;
+ server->new_virtual_pointer.notify = handle_virtual_pointer;
+
wl_list_init(&seat->drag_icons);
seat->request_start_drag.notify = handle_request_start_drag;
wl_signal_add(&seat->seat->events.request_start_drag, &seat->request_start_drag);
@@ -840,7 +877,10 @@ struct cg_view *
seat_get_focus(struct cg_seat *seat)
{
struct wlr_surface *prev_surface = seat->seat->keyboard_state.focused_surface;
- return view_from_wlr_surface(seat->server, prev_surface);
+ if (!prev_surface) {
+ return NULL;
+ }
+ return view_from_wlr_surface(prev_surface);
}
void
diff --git a/seat.h b/seat.h
index 188543d..52cbee4 100644
--- a/seat.h
+++ b/seat.h
@@ -55,12 +55,13 @@ struct cg_keyboard_group {
struct wl_listener key;
struct wl_listener modifiers;
struct wl_list link; // cg_seat::keyboard_groups
+ bool is_virtual;
};
struct cg_pointer {
struct wl_list link; // seat::pointers
struct cg_seat *seat;
- struct wlr_input_device *device;
+ struct wlr_pointer *pointer;
struct wl_listener destroy;
};
@@ -68,7 +69,7 @@ struct cg_pointer {
struct cg_touch {
struct wl_list link; // seat::touch
struct cg_seat *seat;
- struct wlr_input_device *device;
+ struct wlr_touch *touch;
struct wl_listener destroy;
};
@@ -77,6 +78,7 @@ struct cg_drag_icon {
struct wl_list link; // seat::drag_icons
struct cg_seat *seat;
struct wlr_drag_icon *wlr_drag_icon;
+ struct wlr_scene_tree *scene_tree;
/* The drag icon has a position in layout coordinates. */
double lx, ly;
diff --git a/server.h b/server.h
index 817637b..082a435 100644
--- a/server.h
+++ b/server.h
@@ -12,10 +12,6 @@
#include <wlr/xwayland.h>
#endif
-#include "output.h"
-#include "seat.h"
-#include "view.h"
-
enum cg_multi_output_mode {
CAGE_MULTI_OUTPUT_MODE_EXTEND,
CAGE_MULTI_OUTPUT_MODE_LAST,
@@ -25,6 +21,8 @@ struct cg_server {
struct wl_display *wl_display;
struct wl_list views;
struct wlr_backend *backend;
+ struct wlr_renderer *renderer;
+ struct wlr_allocator *allocator;
struct cg_seat *seat;
struct wlr_idle *idle;
@@ -34,6 +32,7 @@ struct cg_server {
enum cg_multi_output_mode output_mode;
struct wlr_output_layout *output_layout;
+ struct wlr_scene *scene;
/* Includes disabled outputs; depending on the output_mode
* some outputs may be disabled. */
struct wl_list outputs; // cg_output::link
@@ -41,6 +40,9 @@ struct cg_server {
struct wl_listener xdg_toplevel_decoration;
struct wl_listener new_xdg_shell_surface;
+
+ struct wl_listener new_virtual_keyboard;
+ struct wl_listener new_virtual_pointer;
#if CAGE_HAS_XWAYLAND
struct wl_listener new_xwayland_surface;
#endif
@@ -48,9 +50,6 @@ struct cg_server {
bool xdg_decoration;
bool allow_vt_switch;
enum wl_output_transform output_transform;
-#ifdef DEBUG
- bool debug_damage_tracking;
-#endif
};
#endif
diff --git a/util.c b/util.c
deleted file mode 100644
index 95de499..0000000
--- a/util.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Cage: A Wayland kiosk.
- *
- * Copyright (C) 2019 The Sway authors
- *
- * See the LICENSE file accompanying this file.
- */
-
-#include <wlr/types/wlr_box.h>
-
-#include "util.h"
-
-int
-scale_length(int length, int offset, float scale)
-{
- /**
- * One does not simply multiply the width by the scale. We allow fractional
- * scaling, which means the resulting scaled width might be a decimal.
- * So we round it.
- *
- * But even this can produce undesirable results depending on the X or Y
- * offset of the box. For example, with a scale of 1.5, a box with
- * width=1 should not scale to 2px if its X coordinate is 1, because the
- * X coordinate would have scaled to 2px.
- */
- return round((offset + length) * scale) - round(offset * scale);
-}
-
-void
-scale_box(struct wlr_box *box, float scale)
-{
- box->width = scale_length(box->width, box->x, scale);
- box->height = scale_length(box->height, box->y, scale);
- box->x = round(box->x * scale);
- box->y = round(box->y * scale);
-}
diff --git a/util.h b/util.h
deleted file mode 100644
index db6bc7d..0000000
--- a/util.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef CG_UTIL_H
-#define CG_UTIL_H
-
-#include <wlr/types/wlr_box.h>
-
-/** Apply scale to a width or height. */
-int scale_length(int length, int offset, float scale);
-
-void scale_box(struct wlr_box *box, float scale);
-
-#endif
diff --git a/view.c b/view.c
index 3f3b0ed..b4a3eca 100644
--- a/view.c
+++ b/view.c
@@ -1,20 +1,20 @@
/*
* Cage: A Wayland kiosk.
*
- * Copyright (C) 2018-2020 Jente Hidskes
+ * Copyright (C) 2018-2021 Jente Hidskes
*
* See the LICENSE file accompanying this file.
*/
#define _POSIX_C_SOURCE 200809L
+#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <wayland-server-core.h>
-#include <wlr/types/wlr_box.h>
#include <wlr/types/wlr_output.h>
-#include <wlr/types/wlr_surface.h>
+#include <wlr/types/wlr_scene.h>
#include "output.h"
#include "seat.h"
@@ -24,96 +24,6 @@
#include "xwayland.h"
#endif
-static void
-view_child_handle_commit(struct wl_listener *listener, void *data)
-{
- struct cg_view_child *child = wl_container_of(listener, child, commit);
- view_damage_part(child->view);
-}
-
-static void subsurface_create(struct cg_view *view, struct wlr_subsurface *wlr_subsurface);
-
-static void
-view_child_handle_new_subsurface(struct wl_listener *listener, void *data)
-{
- struct cg_view_child *child = wl_container_of(listener, child, new_subsurface);
- struct wlr_subsurface *wlr_subsurface = data;
- subsurface_create(child->view, wlr_subsurface);
-}
-
-void
-view_child_finish(struct cg_view_child *child)
-{
- if (!child) {
- return;
- }
-
- view_damage_whole(child->view);
-
- wl_list_remove(&child->link);
- wl_list_remove(&child->commit.link);
- wl_list_remove(&child->new_subsurface.link);
-}
-
-void
-view_child_init(struct cg_view_child *child, struct cg_view *view, struct wlr_surface *wlr_surface)
-{
- child->view = view;
- child->wlr_surface = wlr_surface;
-
- child->commit.notify = view_child_handle_commit;
- wl_signal_add(&wlr_surface->events.commit, &child->commit);
- child->new_subsurface.notify = view_child_handle_new_subsurface;
- wl_signal_add(&wlr_surface->events.new_subsurface, &child->new_subsurface);
-
- wl_list_insert(&view->children, &child->link);
-}
-
-static void
-subsurface_destroy(struct cg_view_child *child)
-{
- if (!child) {
- return;
- }
-
- struct cg_subsurface *subsurface = (struct cg_subsurface *) child;
- wl_list_remove(&subsurface->destroy.link);
- view_child_finish(&subsurface->view_child);
- free(subsurface);
-}
-
-static void
-subsurface_handle_destroy(struct wl_listener *listener, void *data)
-{
- struct cg_subsurface *subsurface = wl_container_of(listener, subsurface, destroy);
- struct cg_view_child *view_child = (struct cg_view_child *) subsurface;
- subsurface_destroy(view_child);
-}
-
-static void
-subsurface_create(struct cg_view *view, struct wlr_subsurface *wlr_subsurface)
-{
- struct cg_subsurface *subsurface = calloc(1, sizeof(struct cg_subsurface));
- if (!subsurface) {
- return;
- }
-
- view_child_init(&subsurface->view_child, view, wlr_subsurface->surface);
- subsurface->view_child.destroy = subsurface_destroy;
- subsurface->wlr_subsurface = wlr_subsurface;
-
- subsurface->destroy.notify = subsurface_handle_destroy;
- wl_signal_add(&wlr_subsurface->events.destroy, &subsurface->destroy);
-}
-
-static void
-handle_new_subsurface(struct wl_listener *listener, void *data)
-{
- struct cg_view *view = wl_container_of(listener, view, new_subsurface);
- struct wlr_subsurface *wlr_subsurface = data;
- subsurface_create(view, wlr_subsurface);
-}
-
char *
view_get_title(struct cg_view *view)
{
@@ -136,24 +46,6 @@ view_is_transient_for(struct cg_view *child, struct cg_view *parent)
return child->impl->is_transient_for(child, parent);
}
-void
-view_damage_part(struct cg_view *view)
-{
- struct cg_output *output;
- wl_list_for_each (output, &view->server->outputs, link) {
- output_damage_surface(output, view->wlr_surface, view->lx, view->ly, false);
- }
-}
-
-void
-view_damage_whole(struct cg_view *view)
-{
- struct cg_output *output;
- wl_list_for_each (output, &view->server->outputs, link) {
- output_damage_surface(output, view->wlr_surface, view->lx, view->ly, true);
- }
-}
-
void
view_activate(struct cg_view *view, bool activate)
{
@@ -174,6 +66,9 @@ view_maximize(struct cg_view *view, struct wlr_box *layout_box)
{
view->lx = layout_box->x;
view->ly = layout_box->y;
+
+ wlr_scene_node_set_position(&view->scene_tree->node, view->lx, view->ly);
+
view->impl->maximize(view, layout_box->width, layout_box->height);
}
@@ -185,33 +80,21 @@ view_center(struct cg_view *view, struct wlr_box *layout_box)
view->lx = (layout_box->width - width) / 2;
view->ly = (layout_box->height - height) / 2;
+
+ wlr_scene_node_set_position(&view->scene_tree->node, view->lx, view->ly);
}
void
view_position(struct cg_view *view)
{
- struct wlr_box *layout_box = wlr_output_layout_get_box(view->server->output_layout, NULL);
+ struct wlr_box layout_box;
+ wlr_output_layout_get_box(view->server->output_layout, NULL, &layout_box);
- if (view_is_primary(view) || view_extends_output_layout(view, layout_box)) {
- view_maximize(view, layout_box);
+ if (view_is_primary(view) || view_extends_output_layout(view, &layout_box)) {
+ view_maximize(view, &layout_box);
} else {
- view_center(view, layout_box);
- }
-}
-
-void
-view_for_each_surface(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data)
-{
- view->impl->for_each_surface(view, iterator, data);
-}
-
-void
-view_for_each_popup_surface(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data)
-{
- if (!view->impl->for_each_popup_surface) {
- return;
+ view_center(view, &layout_box);
}
- view->impl->for_each_popup_surface(view, iterator, data);
}
void
@@ -219,31 +102,24 @@ view_unmap(struct cg_view *view)
{
wl_list_remove(&view->link);
- wl_list_remove(&view->new_subsurface.link);
-
- struct cg_view_child *child, *tmp;
- wl_list_for_each_safe (child, tmp, &view->children, link) {
- child->destroy(child);
- }
+ wlr_scene_node_destroy(&view->scene_tree->node);
+ view->wlr_surface->data = NULL;
view->wlr_surface = NULL;
}
void
view_map(struct cg_view *view, struct wlr_surface *surface)
{
- view->wlr_surface = surface;
-
- struct wlr_subsurface *subsurface;
- wl_list_for_each (subsurface, &view->wlr_surface->subsurfaces_below, parent_link) {
- subsurface_create(view, subsurface);
- }
- wl_list_for_each (subsurface, &view->wlr_surface->subsurfaces_above, parent_link) {
- subsurface_create(view, subsurface);
+ view->scene_tree = wlr_scene_subsurface_tree_create(&view->server->scene->tree, surface);
+ if (!view->scene_tree) {
+ wl_resource_post_no_memory(surface->resource);
+ return;
}
+ view->scene_tree->node.data = view;
- view->new_subsurface.notify = handle_new_subsurface;
- wl_signal_add(&view->wlr_surface->events.new_subsurface, &view->new_subsurface);
+ view->wlr_surface = surface;
+ surface->data = view;
#if CAGE_HAS_XWAYLAND
/* We shouldn't position override-redirect windows. They set
@@ -283,24 +159,11 @@ view_init(struct cg_view *view, struct cg_server *server, enum cg_view_type type
view->server = server;
view->type = type;
view->impl = impl;
-
- wl_list_init(&view->children);
}
struct cg_view *
-view_from_wlr_surface(struct cg_server *server, struct wlr_surface *surface)
-{
- struct cg_view *view;
- wl_list_for_each (view, &server->views, link) {
- if (view->wlr_surface == surface) {
- return view;
- }
- }
- return NULL;
-}
-
-struct wlr_surface *
-view_wlr_surface_at(struct cg_view *view, double sx, double sy, double *sub_x, double *sub_y)
+view_from_wlr_surface(struct wlr_surface *surface)
{
- return view->impl->wlr_surface_at(view, sx, sy, sub_x, sub_y);
+ assert(surface);
+ return surface->data;
}
diff --git a/view.h b/view.h
index cd16e42..5ae13dd 100644
--- a/view.h
+++ b/view.h
@@ -5,9 +5,9 @@
#include <stdbool.h>
#include <wayland-server-core.h>
-#include <wlr/types/wlr_box.h>
-#include <wlr/types/wlr_surface.h>
+#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_xdg_shell.h>
+#include <wlr/util/box.h>
#if CAGE_HAS_XWAYLAND
#include <wlr/xwayland.h>
#endif
@@ -24,16 +24,14 @@ enum cg_view_type {
struct cg_view {
struct cg_server *server;
struct wl_list link; // server::views
- struct wl_list children; // cg_view_child::link
struct wlr_surface *wlr_surface;
+ struct wlr_scene_tree *scene_tree;
/* The view has a position in layout coordinates. */
int lx, ly;
enum cg_view_type type;
const struct cg_view_impl *impl;
-
- struct wl_listener new_subsurface;
};
struct cg_view_impl {
@@ -44,47 +42,18 @@ struct cg_view_impl {
void (*activate)(struct cg_view *view, bool activate);
void (*maximize)(struct cg_view *view, int output_width, int output_height);
void (*destroy)(struct cg_view *view);
- void (*for_each_surface)(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data);
- void (*for_each_popup_surface)(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data);
- struct wlr_surface *(*wlr_surface_at)(struct cg_view *view, double sx, double sy, double *sub_x, double *sub_y);
-};
-
-struct cg_view_child {
- struct cg_view *view;
- struct wlr_surface *wlr_surface;
- struct wl_list link;
-
- struct wl_listener commit;
- struct wl_listener new_subsurface;
-
- void (*destroy)(struct cg_view_child *child);
-};
-
-struct cg_subsurface {
- struct cg_view_child view_child;
- struct wlr_subsurface *wlr_subsurface;
-
- struct wl_listener destroy;
};
char *view_get_title(struct cg_view *view);
bool view_is_primary(struct cg_view *view);
bool view_is_transient_for(struct cg_view *child, struct cg_view *parent);
-void view_damage_part(struct cg_view *view);
-void view_damage_whole(struct cg_view *view);
void view_activate(struct cg_view *view, bool activate);
void view_position(struct cg_view *view);
-void view_for_each_surface(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data);
-void view_for_each_popup_surface(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data);
void view_unmap(struct cg_view *view);
void view_map(struct cg_view *view, struct wlr_surface *surface);
void view_destroy(struct cg_view *view);
void view_init(struct cg_view *view, struct cg_server *server, enum cg_view_type type, const struct cg_view_impl *impl);
-struct cg_view *view_from_wlr_surface(struct cg_server *server, struct wlr_surface *surface);
-struct wlr_surface *view_wlr_surface_at(struct cg_view *view, double sx, double sy, double *sub_x, double *sub_y);
-
-void view_child_finish(struct cg_view_child *child);
-void view_child_init(struct cg_view_child *child, struct cg_view *view, struct wlr_surface *wlr_surface);
+struct cg_view *view_from_wlr_surface(struct wlr_surface *surface);
#endif
diff --git a/xdg_shell.c b/xdg_shell.c
index 2e42347..c577dc5 100644
--- a/xdg_shell.c
+++ b/xdg_shell.c
@@ -6,10 +6,11 @@
* See the LICENSE file accompanying this file.
*/
+#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <wayland-server-core.h>
-#include <wlr/types/wlr_box.h>
+#include <wlr/types/wlr_scene.h>
#include <wlr/types/wlr_xdg_shell.h>
#include <wlr/util/log.h>
@@ -41,105 +42,47 @@ xdg_decoration_handle_request_mode(struct wl_listener *listener, void *data)
wlr_xdg_toplevel_decoration_v1_set_mode(xdg_decoration->wlr_decoration, mode);
}
-static void
-xdg_popup_destroy(struct cg_view_child *child)
-{
- if (!child) {
- return;
- }
-
- struct cg_xdg_popup *popup = (struct cg_xdg_popup *) child;
- wl_list_remove(&popup->destroy.link);
- wl_list_remove(&popup->map.link);
- wl_list_remove(&popup->unmap.link);
- wl_list_remove(&popup->new_popup.link);
- view_child_finish(&popup->view_child);
- free(popup);
-}
-
-static void
-handle_xdg_popup_map(struct wl_listener *listener, void *data)
-{
- struct cg_xdg_popup *popup = wl_container_of(listener, popup, map);
- view_damage_whole(popup->view_child.view);
-}
-
-static void
-handle_xdg_popup_unmap(struct wl_listener *listener, void *data)
+static struct cg_view *
+popup_get_view(struct wlr_xdg_popup *popup)
{
- struct cg_xdg_popup *popup = wl_container_of(listener, popup, unmap);
- view_damage_whole(popup->view_child.view);
-}
-
-static void
-handle_xdg_popup_destroy(struct wl_listener *listener, void *data)
-{
- struct cg_xdg_popup *popup = wl_container_of(listener, popup, destroy);
- struct cg_view_child *view_child = (struct cg_view_child *) popup;
- xdg_popup_destroy(view_child);
-}
-
-static void xdg_popup_create(struct cg_view *view, struct wlr_xdg_popup *wlr_popup);
+ while (true) {
+ if (popup->parent == NULL || !wlr_surface_is_xdg_surface(popup->parent)) {
+ return NULL;
+ }
-static void
-popup_handle_new_xdg_popup(struct wl_listener *listener, void *data)
-{
- struct cg_xdg_popup *popup = wl_container_of(listener, popup, new_popup);
- struct wlr_xdg_popup *wlr_popup = data;
- xdg_popup_create(popup->view_child.view, wlr_popup);
+ struct wlr_xdg_surface *xdg_surface = wlr_xdg_surface_from_wlr_surface(popup->parent);
+ switch (xdg_surface->role) {
+ case WLR_XDG_SURFACE_ROLE_TOPLEVEL:
+ return xdg_surface->data;
+ case WLR_XDG_SURFACE_ROLE_POPUP:
+ popup = xdg_surface->popup;
+ break;
+ case WLR_XDG_SURFACE_ROLE_NONE:
+ return NULL;
+ }
+ }
}
static void
-popup_unconstrain(struct cg_xdg_popup *popup)
+popup_unconstrain(struct cg_view *view, struct wlr_xdg_popup *popup)
{
- struct cg_view *view = popup->view_child.view;
struct cg_server *server = view->server;
- struct wlr_box *popup_box = &popup->wlr_popup->geometry;
+ struct wlr_box *popup_box = &popup->current.geometry;
struct wlr_output_layout *output_layout = server->output_layout;
struct wlr_output *wlr_output =
wlr_output_layout_output_at(output_layout, view->lx + popup_box->x, view->ly + popup_box->y);
- struct wlr_box *output_box = wlr_output_layout_get_box(output_layout, wlr_output);
+ struct wlr_box output_box;
+ wlr_output_layout_get_box(output_layout, wlr_output, &output_box);
struct wlr_box output_toplevel_box = {
- .x = output_box->x - view->lx,
- .y = output_box->y - view->ly,
- .width = output_box->width,
- .height = output_box->height,
+ .x = output_box.x - view->lx,
+ .y = output_box.y - view->ly,
+ .width = output_box.width,
+ .height = output_box.height,
};
- wlr_xdg_popup_unconstrain_from_box(popup->wlr_popup, &output_toplevel_box);
-}
-
-static void
-xdg_popup_create(struct cg_view *view, struct wlr_xdg_popup *wlr_popup)
-{
- struct cg_xdg_popup *popup = calloc(1, sizeof(struct cg_xdg_popup));
- if (!popup) {
- return;
- }
-
- popup->wlr_popup = wlr_popup;
- view_child_init(&popup->view_child, view, wlr_popup->base->surface);
- popup->view_child.destroy = xdg_popup_destroy;
- popup->destroy.notify = handle_xdg_popup_destroy;
- wl_signal_add(&wlr_popup->base->events.destroy, &popup->destroy);
- popup->map.notify = handle_xdg_popup_map;
- wl_signal_add(&wlr_popup->base->events.map, &popup->map);
- popup->unmap.notify = handle_xdg_popup_unmap;
- wl_signal_add(&wlr_popup->base->events.unmap, &popup->unmap);
- popup->new_popup.notify = popup_handle_new_xdg_popup;
- wl_signal_add(&wlr_popup->base->events.new_popup, &popup->new_popup);
-
- popup_unconstrain(popup);
-}
-
-static void
-handle_new_xdg_popup(struct wl_listener *listener, void *data)
-{
- struct cg_xdg_shell_view *xdg_shell_view = wl_container_of(listener, xdg_shell_view, new_popup);
- struct wlr_xdg_popup *wlr_popup = data;
- xdg_popup_create(&xdg_shell_view->view, wlr_popup);
+ wlr_xdg_popup_unconstrain_from_box(popup, &output_toplevel_box);
}
static struct cg_xdg_shell_view *
@@ -152,7 +95,7 @@ static char *
get_title(struct cg_view *view)
{
struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
- return xdg_shell_view->xdg_surface->toplevel->title;
+ return xdg_shell_view->xdg_toplevel->title;
}
static void
@@ -161,7 +104,7 @@ get_geometry(struct cg_view *view, int *width_out, int *height_out)
struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
struct wlr_box geom;
- wlr_xdg_surface_get_geometry(xdg_shell_view->xdg_surface, &geom);
+ wlr_xdg_surface_get_geometry(xdg_shell_view->xdg_toplevel->base, &geom);
*width_out = geom.width;
*height_out = geom.height;
}
@@ -170,9 +113,9 @@ static bool
is_primary(struct cg_view *view)
{
struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
- struct wlr_xdg_surface *parent = xdg_shell_view->xdg_surface->toplevel->parent;
- /* FIXME: role is 0? */
- return parent == NULL; /*&& role == WLR_XDG_SURFACE_ROLE_TOPLEVEL */
+ struct wlr_xdg_toplevel *parent = xdg_shell_view->xdg_toplevel->parent;
+
+ return parent == NULL;
}
static bool
@@ -182,14 +125,13 @@ is_transient_for(struct cg_view *child, struct cg_view *parent)
return false;
}
struct cg_xdg_shell_view *_child = xdg_shell_view_from_view(child);
- struct wlr_xdg_surface *xdg_surface = _child->xdg_surface;
+ struct wlr_xdg_toplevel *xdg_toplevel = _child->xdg_toplevel;
struct cg_xdg_shell_view *_parent = xdg_shell_view_from_view(parent);
- struct wlr_xdg_surface *parent_xdg_surface = _parent->xdg_surface;
- while (xdg_surface) {
- if (xdg_surface->toplevel->parent == parent_xdg_surface) {
+ while (xdg_toplevel) {
+ if (xdg_toplevel->parent == _parent->xdg_toplevel) {
return true;
}
- xdg_surface = xdg_surface->toplevel->parent;
+ xdg_toplevel = xdg_toplevel->parent;
}
return false;
}
@@ -198,15 +140,15 @@ static void
activate(struct cg_view *view, bool activate)
{
struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
- wlr_xdg_toplevel_set_activated(xdg_shell_view->xdg_surface, activate);
+ wlr_xdg_toplevel_set_activated(xdg_shell_view->xdg_toplevel, activate);
}
static void
maximize(struct cg_view *view, int output_width, int output_height)
{
struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
- wlr_xdg_toplevel_set_size(xdg_shell_view->xdg_surface, output_width, output_height);
- wlr_xdg_toplevel_set_maximized(xdg_shell_view->xdg_surface, true);
+ wlr_xdg_toplevel_set_size(xdg_shell_view->xdg_toplevel, output_width, output_height);
+ wlr_xdg_toplevel_set_maximized(xdg_shell_view->xdg_toplevel, true);
}
static void
@@ -216,41 +158,21 @@ destroy(struct cg_view *view)
free(xdg_shell_view);
}
-static void
-for_each_surface(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data)
-{
- struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
- wlr_xdg_surface_for_each_surface(xdg_shell_view->xdg_surface, iterator, data);
-}
-
-static void
-for_each_popup_surface(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data)
-{
- struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
- wlr_xdg_surface_for_each_popup_surface(xdg_shell_view->xdg_surface, iterator, data);
-}
-
-static struct wlr_surface *
-wlr_surface_at(struct cg_view *view, double sx, double sy, double *sub_x, double *sub_y)
-{
- struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
- return wlr_xdg_surface_surface_at(xdg_shell_view->xdg_surface, sx, sy, sub_x, sub_y);
-}
-
static void
handle_xdg_shell_surface_request_fullscreen(struct wl_listener *listener, void *data)
{
struct cg_xdg_shell_view *xdg_shell_view = wl_container_of(listener, xdg_shell_view, request_fullscreen);
- struct wlr_xdg_toplevel_set_fullscreen_event *event = data;
- wlr_xdg_toplevel_set_fullscreen(xdg_shell_view->xdg_surface, event->fullscreen);
-}
-static void
-handle_xdg_shell_surface_commit(struct wl_listener *listener, void *data)
-{
- struct cg_xdg_shell_view *xdg_shell_view = wl_container_of(listener, xdg_shell_view, commit);
- struct cg_view *view = &xdg_shell_view->view;
- view_damage_part(view);
+ /**
+ * Certain clients do not like figuring out their own window geometry if they
+ * display in fullscreen mode, so we set it here.
+ */
+ struct wlr_box layout_box;
+ wlr_output_layout_get_box(xdg_shell_view->view.server->output_layout, NULL, &layout_box);
+ wlr_xdg_toplevel_set_size(xdg_shell_view->xdg_toplevel, layout_box.width, layout_box.height);
+
+ wlr_xdg_toplevel_set_fullscreen(xdg_shell_view->xdg_toplevel,
+ xdg_shell_view->xdg_toplevel->requested.fullscreen);
}
static void
@@ -259,10 +181,6 @@ handle_xdg_shell_surface_unmap(struct wl_listener *listener, void *data)
struct cg_xdg_shell_view *xdg_shell_view = wl_container_of(listener, xdg_shell_view, unmap);
struct cg_view *view = &xdg_shell_view->view;
- view_damage_whole(view);
-
- wl_list_remove(&xdg_shell_view->commit.link);
-
view_unmap(view);
}
@@ -272,12 +190,7 @@ handle_xdg_shell_surface_map(struct wl_listener *listener, void *data)
struct cg_xdg_shell_view *xdg_shell_view = wl_container_of(listener, xdg_shell_view, map);
struct cg_view *view = &xdg_shell_view->view;
- xdg_shell_view->commit.notify = handle_xdg_shell_surface_commit;
- wl_signal_add(&xdg_shell_view->xdg_surface->surface->events.commit, &xdg_shell_view->commit);
-
- view_map(view, xdg_shell_view->xdg_surface->surface);
-
- view_damage_whole(view);
+ view_map(view, xdg_shell_view->xdg_toplevel->base->surface);
}
static void
@@ -290,8 +203,7 @@ handle_xdg_shell_surface_destroy(struct wl_listener *listener, void *data)
wl_list_remove(&xdg_shell_view->unmap.link);
wl_list_remove(&xdg_shell_view->destroy.link);
wl_list_remove(&xdg_shell_view->request_fullscreen.link);
- wl_list_remove(&xdg_shell_view->new_popup.link);
- xdg_shell_view->xdg_surface = NULL;
+ xdg_shell_view->xdg_toplevel = NULL;
view_destroy(view);
}
@@ -304,9 +216,6 @@ static const struct cg_view_impl xdg_shell_view_impl = {
.activate = activate,
.maximize = maximize,
.destroy = destroy,
- .for_each_surface = for_each_surface,
- .for_each_popup_surface = for_each_popup_surface,
- .wlr_surface_at = wlr_surface_at,
};
void
@@ -315,29 +224,64 @@ handle_xdg_shell_surface_new(struct wl_listener *listener, void *data)
struct cg_server *server = wl_container_of(listener, server, new_xdg_shell_surface);
struct wlr_xdg_surface *xdg_surface = data;
- if (xdg_surface->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL) {
- return;
- }
+ switch (xdg_surface->role) {
+ case WLR_XDG_SURFACE_ROLE_TOPLEVEL:;
+ struct cg_xdg_shell_view *xdg_shell_view = calloc(1, sizeof(struct cg_xdg_shell_view));
+ if (!xdg_shell_view) {
+ wlr_log(WLR_ERROR, "Failed to allocate XDG Shell view");
+ return;
+ }
- struct cg_xdg_shell_view *xdg_shell_view = calloc(1, sizeof(struct cg_xdg_shell_view));
- if (!xdg_shell_view) {
- wlr_log(WLR_ERROR, "Failed to allocate XDG Shell view");
- return;
- }
+ view_init(&xdg_shell_view->view, server, CAGE_XDG_SHELL_VIEW, &xdg_shell_view_impl);
+ xdg_shell_view->xdg_toplevel = xdg_surface->toplevel;
+
+ xdg_shell_view->map.notify = handle_xdg_shell_surface_map;
+ wl_signal_add(&xdg_surface->events.map, &xdg_shell_view->map);
+ xdg_shell_view->unmap.notify = handle_xdg_shell_surface_unmap;
+ wl_signal_add(&xdg_surface->events.unmap, &xdg_shell_view->unmap);
+ xdg_shell_view->destroy.notify = handle_xdg_shell_surface_destroy;
+ wl_signal_add(&xdg_surface->events.destroy, &xdg_shell_view->destroy);
+ xdg_shell_view->request_fullscreen.notify = handle_xdg_shell_surface_request_fullscreen;
+ wl_signal_add(&xdg_surface->toplevel->events.request_fullscreen, &xdg_shell_view->request_fullscreen);
+
+ xdg_surface->data = xdg_shell_view;
+ break;
+ case WLR_XDG_SURFACE_ROLE_POPUP:;
+ struct wlr_xdg_popup *popup = xdg_surface->popup;
+ struct cg_view *view = popup_get_view(popup);
+ if (view == NULL) {
+ return;
+ }
+
+ struct wlr_scene_tree *parent_scene_tree = NULL;
+ struct wlr_xdg_surface *parent = wlr_xdg_surface_from_wlr_surface(popup->parent);
+ switch (parent->role) {
+ case WLR_XDG_SURFACE_ROLE_TOPLEVEL:;
+ parent_scene_tree = view->scene_tree;
+ break;
+ case WLR_XDG_SURFACE_ROLE_POPUP:
+ parent_scene_tree = parent->data;
+ break;
+ case WLR_XDG_SURFACE_ROLE_NONE:
+ break;
+ }
+ if (parent_scene_tree == NULL) {
+ return;
+ }
- view_init(&xdg_shell_view->view, server, CAGE_XDG_SHELL_VIEW, &xdg_shell_view_impl);
- xdg_shell_view->xdg_surface = xdg_surface;
-
- xdg_shell_view->map.notify = handle_xdg_shell_surface_map;
- wl_signal_add(&xdg_surface->events.map, &xdg_shell_view->map);
- xdg_shell_view->unmap.notify = handle_xdg_shell_surface_unmap;
- wl_signal_add(&xdg_surface->events.unmap, &xdg_shell_view->unmap);
- xdg_shell_view->destroy.notify = handle_xdg_shell_surface_destroy;
- wl_signal_add(&xdg_surface->events.destroy, &xdg_shell_view->destroy);
- xdg_shell_view->request_fullscreen.notify = handle_xdg_shell_surface_request_fullscreen;
- wl_signal_add(&xdg_surface->toplevel->events.request_fullscreen, &xdg_shell_view->request_fullscreen);
- xdg_shell_view->new_popup.notify = handle_new_xdg_popup;
- wl_signal_add(&xdg_surface->events.new_popup, &xdg_shell_view->new_popup);
+ struct wlr_scene_tree *popup_scene_tree = wlr_scene_xdg_surface_create(parent_scene_tree, xdg_surface);
+ if (popup_scene_tree == NULL) {
+ wlr_log(WLR_ERROR, "Failed to allocate scene-graph node for XDG popup");
+ return;
+ }
+
+ popup_unconstrain(view, popup);
+
+ xdg_surface->data = popup_scene_tree;
+ break;
+ case WLR_XDG_SURFACE_ROLE_NONE:
+ assert(false); // unreachable
+ }
}
void
diff --git a/xdg_shell.h b/xdg_shell.h
index 45d87db..2fd506a 100644
--- a/xdg_shell.h
+++ b/xdg_shell.h
@@ -9,24 +9,12 @@
struct cg_xdg_shell_view {
struct cg_view view;
- struct wlr_xdg_surface *xdg_surface;
+ struct wlr_xdg_toplevel *xdg_toplevel;
struct wl_listener destroy;
struct wl_listener unmap;
struct wl_listener map;
- struct wl_listener commit;
struct wl_listener request_fullscreen;
- struct wl_listener new_popup;
-};
-
-struct cg_xdg_popup {
- struct cg_view_child view_child;
- struct wlr_xdg_popup *wlr_popup;
-
- struct wl_listener destroy;
- struct wl_listener map;
- struct wl_listener unmap;
- struct wl_listener new_popup;
};
struct cg_xdg_decoration {
diff --git a/xwayland.c b/xwayland.c
index 2aae0f9..ef37a49 100644
--- a/xwayland.c
+++ b/xwayland.c
@@ -9,7 +9,6 @@
#include <stdbool.h>
#include <stdlib.h>
#include <wayland-server-core.h>
-#include <wlr/types/wlr_box.h>
#include <wlr/util/log.h>
#include <wlr/xwayland.h>
@@ -96,18 +95,6 @@ destroy(struct cg_view *view)
free(xwayland_view);
}
-static void
-for_each_surface(struct cg_view *view, wlr_surface_iterator_func_t iterator, void *data)
-{
- wlr_surface_for_each_surface(view->wlr_surface, iterator, data);
-}
-
-static struct wlr_surface *
-wlr_surface_at(struct cg_view *view, double sx, double sy, double *sub_x, double *sub_y)
-{
- return wlr_surface_surface_at(view->wlr_surface, sx, sy, sub_x, sub_y);
-}
-
static void
handle_xwayland_surface_request_fullscreen(struct wl_listener *listener, void *data)
{
@@ -116,24 +103,12 @@ handle_xwayland_surface_request_fullscreen(struct wl_listener *listener, void *d
wlr_xwayland_surface_set_fullscreen(xwayland_view->xwayland_surface, xwayland_surface->fullscreen);
}
-static void
-handle_xwayland_surface_commit(struct wl_listener *listener, void *data)
-{
- struct cg_xwayland_view *xwayland_view = wl_container_of(listener, xwayland_view, commit);
- struct cg_view *view = &xwayland_view->view;
- view_damage_part(view);
-}
-
static void
handle_xwayland_surface_unmap(struct wl_listener *listener, void *data)
{
struct cg_xwayland_view *xwayland_view = wl_container_of(listener, xwayland_view, unmap);
struct cg_view *view = &xwayland_view->view;
- view_damage_whole(view);
-
- wl_list_remove(&xwayland_view->commit.link);
-
view_unmap(view);
}
@@ -148,12 +123,7 @@ handle_xwayland_surface_map(struct wl_listener *listener, void *data)
view->ly = xwayland_view->xwayland_surface->y;
}
- xwayland_view->commit.notify = handle_xwayland_surface_commit;
- wl_signal_add(&xwayland_view->xwayland_surface->surface->events.commit, &xwayland_view->commit);
-
view_map(view, xwayland_view->xwayland_surface->surface);
-
- view_damage_whole(view);
}
static void
@@ -179,10 +149,6 @@ static const struct cg_view_impl xwayland_view_impl = {
.activate = activate,
.maximize = maximize,
.destroy = destroy,
- .for_each_surface = for_each_surface,
- /* XWayland doesn't have a separate popup iterator. */
- .for_each_popup_surface = NULL,
- .wlr_surface_at = wlr_surface_at,
};
void
diff --git a/xwayland.h b/xwayland.h
index d257f57..31edb8f 100644
--- a/xwayland.h
+++ b/xwayland.h
@@ -12,7 +12,6 @@ struct cg_xwayland_view {
struct wl_listener destroy;
struct wl_listener unmap;
struct wl_listener map;
- struct wl_listener commit;
struct wl_listener request_fullscreen;
};

View file

@ -1,19 +0,0 @@
pkgbase = bino
pkgdesc = A video player with focus on 3D and Virtual Reality
pkgver = 2.3
pkgrel = 1
url = https://bino3d.org/
arch = x86_64
license = GPL-3.0-or-later
makedepends = cmake
makedepends = qt6-tools
depends = qt6-multimedia
depends = qt6-svg
depends = qvr
source = https://bino3d.org/releases/bino-2.3.tar.gz
source = https://bino3d.org/releases/bino-2.3.tar.gz.sig
validpgpkeys = 2F61B4828BBA779AECB3F32703A2A4AB1E32FD34
sha512sums = 9750deb7e777237c87d3bd1e7d5411b23b55c4c3bac5361848effb59c3253fb4f9355fddbae62c922026318c349657a7fdfecdf4041cd756a92f0440c1e29f4c
sha512sums = SKIP
pkgname = bino

View file

@ -1,31 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: gruenfron <https://aur.archlinux.org/account/gruenfron>
# Contributor: Jose Riha <jose1711 gmail com>
# Contributor: archtux <antonio dot arias99999 at gmail dot com>
pkgname=bino
pkgver=2.3
pkgrel=1
pkgdesc='A video player with focus on 3D and Virtual Reality'
arch=('x86_64')
url='https://bino3d.org/'
license=('GPL-3.0-or-later')
depends=('qt6-multimedia' 'qt6-svg' 'qvr')
makedepends=('cmake' 'qt6-tools')
source=(https://bino3d.org/releases/$pkgname-$pkgver.tar.gz{,.sig})
sha512sums=('9750deb7e777237c87d3bd1e7d5411b23b55c4c3bac5361848effb59c3253fb4f9355fddbae62c922026318c349657a7fdfecdf4041cd756a92f0440c1e29f4c'
'SKIP')
validpgpkeys=('2F61B4828BBA779AECB3F32703A2A4AB1E32FD34')
build() {
cmake -B build -S "$pkgname-$pkgver" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF
cmake --build build
}
package() {
DESTDIR="$pkgdir" cmake --install build
}

View file

@ -1,36 +0,0 @@
#!/bin/sh
VERSION="$(echo $1 | jq -Rr @html)"
BINARY='runsc'
SHIM='containerd-shim-runsc-v1'
URL_BASE="https://storage.googleapis.com/gvisor/releases/release/"
URL="${URL_BASE}${VERSION}/$(uname -m)/"
URL_X64="${URL_BASE}${VERSION}/x86_64/"
URL_ARM="${URL_BASE}${VERSION}/aarch64/"
STATUS=$(curl -s -o /dev/null -I -w "%{http_code}" "${URL}${BINARY}")
EXIT=0
case $STATUS in
200)
echo "Release: ${VERSION}"
echo ""
echo "x86_64 sha512:"
echo "$(curl -s ${URL_X64}${BINARY}.sha512)"
echo "$(curl -s ${URL_X64}${SHIM}.sha512)"
echo ""
echo "aarch64 sha512:"
echo "$(curl -s ${URL_ARM}${BINARY}.sha512)"
echo "$(curl -s ${URL_ARM}${SHIM}.sha512)"
;;
404)
echo "Release ${VERSION} not found"
EXIT=1
;;
*)
echo "Error occured with status ${STATUS}"
EXIT=2
;;
esac
exit $EXIT

View file

@ -1,37 +0,0 @@
pkgbase = clonezilla-unstable
pkgdesc = ncurses partition and disk imaging/cloning program
pkgver = 5.7.6
pkgrel = 1
url = https://clonezilla.org
arch = any
license = GPL-2.0-or-later
depends = drbl
depends = partclone
depends = ntfs-3g
depends = partimage
depends = pigz
depends = sshfs
depends = parted
depends = gptfdisk
depends = dosfstools
depends = gzip
depends = bzip2
depends = pbzip2
depends = lbzip2
depends = lrzip
depends = xz
depends = pixz
depends = lzop
depends = ecryptfs-utils
depends = screen
depends = perl
depends = cifs-utils
provides = clonezilla
conflicts = clonezilla
backup = etc/drbl/drbl-ocs.conf
source = https://free.nchc.org.tw/drbl-core/src/unstable/clonezilla-5.7.6.tar.xz
source = usrbin.patch
sha512sums = f2dbb53059e1c0ff2ac282c820a3216b8e1a95102bf8443c69453fe201b179e18b80ab6e591bd624a7b5a1173bf7764754bc7f608d3af0a7d625de6632ebe9b9
sha512sums = 39e63eaa18ffaed7fe9a2dde449c8b57d4a3dc313024213881bd620d0011671bb7f8a0346df7c247c2da94f8d82afb669057cb05dd9cefffafb680826544d6ac
pkgname = clonezilla-unstable

View file

@ -1,32 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
pkgname=clonezilla-unstable
_pkgname=clonezilla
pkgver=5.7.6
pkgrel=1
pkgdesc="ncurses partition and disk imaging/cloning program"
arch=('any')
url="https://clonezilla.org"
license=('GPL-2.0-or-later')
depends=('drbl' 'partclone' 'ntfs-3g' 'partimage' 'pigz' 'sshfs' 'parted'
'gptfdisk' 'dosfstools' 'gzip' 'bzip2' 'pbzip2' 'lbzip2' 'lrzip'
'xz' 'pixz' 'lzop' 'ecryptfs-utils' 'screen' 'perl' 'cifs-utils')
backup=('etc/drbl/drbl-ocs.conf')
conflicts=("${_pkgname}")
provides=("${_pkgname}")
source=("https://free.nchc.org.tw/drbl-core/src/unstable/${_pkgname}-${pkgver}.tar.xz"
'usrbin.patch')
sha512sums=('f2dbb53059e1c0ff2ac282c820a3216b8e1a95102bf8443c69453fe201b179e18b80ab6e591bd624a7b5a1173bf7764754bc7f608d3af0a7d625de6632ebe9b9'
'39e63eaa18ffaed7fe9a2dde449c8b57d4a3dc313024213881bd620d0011671bb7f8a0346df7c247c2da94f8d82afb669057cb05dd9cefffafb680826544d6ac')
prepare() {
cd "${_pkgname}-${pkgver}"
patch -Np0 -i "${srcdir}/usrbin.patch"
}
package() {
cd "${_pkgname}-${pkgver}"
make DESTDIR="${pkgdir}" install
}

View file

@ -1,13 +0,0 @@
--- Makefile.orig 2013-05-30 17:42:49.851418658 +0100
+++ Makefile 2013-05-30 17:44:41.157482402 +0100
@@ -18,8 +18,8 @@
install:
# install exec files
- install -d ${DESTDIR}/usr/
- cp -a sbin bin ${DESTDIR}/usr/
+ install -d ${DESTDIR}/usr/bin
+ cp -a sbin/* bin/* ${DESTDIR}/usr/bin/
# install setup dir
install -d $(DESTDIR)/$(SHAREDIR)/

View file

@ -1,33 +0,0 @@
pkgbase = discord-electron-openasar
pkgdesc = Discord packaged with OpenAsar using system provided electron (v33) for increased security and performance
pkgver = 0.0.74+830
pkgrel = 1
url = https://discord.com
install = discord-electron-openasar.install
arch = x86_64
license = custom
makedepends = git
makedepends = asar
makedepends = nodejs
makedepends = curl
depends = electron33
depends = libxss
depends = unzip
optdepends = libpulse: Pulseaudio support
optdepends = libappindicator-gtk3: Systray indicator support
optdepends = xdg-utils: Open files
optdepends = python-pyelftools: Required for Krisp patcher
optdepends = python-capstone: Required for Krisp patcher
provides = discord
conflicts = discord
options = !strip
source = https://dl.discordapp.net/apps/linux/0.0.74/discord-0.0.74.tar.gz
source = discord-launcher.sh
source = krisp-patcher.py
source = git+https://github.com/goosemod/openasar.git#commit=f92ee8c3dc6b6ff9829f69a1339e0f82a877929c
sha512sums = 204add0f20df85a45a88c371c419ff6f11c35f783e9ed1ce6323963d0f6570b142d3168512065d17f34aa56e910de30b4bf4153c5d1f306e04b5ca46032de606
sha512sums = 4497ff3df7e2c1e72eea09d6f36a80cabeabfd43bb03b0966795d45e10a02ea6b4c10407661092d057435e0d69d75e958a3dbb1dc5971a215ce09547ec56f666
sha512sums = 42cef68c1f7d574b4fbe859a4dc616e8994c7d16f62bcae3ff1f88e1edc58ac37b39c238d7defa9c97ceda417fcd6224cf0a0fd2608b8d18d0877e3c1befa59c
sha512sums = 4befe9f30b7d11da966692242353becca3f86f7d5b3eb73c48b6f42073b88f7c8a21141d3f84ee2ff10f74a4596d1391f0b200134599a36c9589074bec298573
pkgname = discord-electron-openasar

View file

@ -1,93 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
pkgname=discord-electron-openasar
_pkgname=discord
pkgver=0.0.74+830
_pkgver=${pkgver%%+*}
pkgrel=1
_electronver=33
_electronname="electron${_electronver}"
pkgdesc="Discord packaged with OpenAsar using system provided electron (v${_electronver}) for increased security and performance"
arch=('x86_64')
provides=("${_pkgname}")
conflicts=("${_pkgname}")
url='https://discord.com'
license=('custom')
options=('!strip')
install="$pkgname.install"
depends=("${_electronname}" 'libxss' 'unzip')
makedepends=('git' 'asar' 'nodejs' 'curl')
optdepends=(
'libpulse: Pulseaudio support'
'libappindicator-gtk3: Systray indicator support'
'xdg-utils: Open files'
'python-pyelftools: Required for Krisp patcher'
'python-capstone: Required for Krisp patcher'
)
source=("https://dl.discordapp.net/apps/linux/${_pkgver}/${_pkgname}-${_pkgver}.tar.gz"
'discord-launcher.sh'
'krisp-patcher.py' # original: https://github.com/sersorrel/sys/blob/main/hm/discord/krisp-patcher.py
"git+https://github.com/goosemod/openasar.git#commit=f92ee8c3dc6b6ff9829f69a1339e0f82a877929c")
sha512sums=('204add0f20df85a45a88c371c419ff6f11c35f783e9ed1ce6323963d0f6570b142d3168512065d17f34aa56e910de30b4bf4153c5d1f306e04b5ca46032de606'
'4497ff3df7e2c1e72eea09d6f36a80cabeabfd43bb03b0966795d45e10a02ea6b4c10407661092d057435e0d69d75e958a3dbb1dc5971a215ce09547ec56f666'
'42cef68c1f7d574b4fbe859a4dc616e8994c7d16f62bcae3ff1f88e1edc58ac37b39c238d7defa9c97ceda417fcd6224cf0a0fd2608b8d18d0877e3c1befa59c'
'4befe9f30b7d11da966692242353becca3f86f7d5b3eb73c48b6f42073b88f7c8a21141d3f84ee2ff10f74a4596d1391f0b200134599a36c9589074bec298573')
# just in case I get the version wrong
pkgver() {
cd "${srcdir}/openasar"
printf "%s+%s" "$_pkgver" "$(git rev-list --count HEAD)"
}
prepare() {
# prepare launcher script
sed -i -e "s|@PKGNAME@|${_pkgname}|g" \
-e "s|@PKGVER@|${_pkgver}|g" \
-e "s|@ELECTRON@|${_electronname}|g" \
discord-launcher.sh
# fix the .desktop file
sed -i -e "s|Exec=.*|Exec=/usr/bin/${_pkgname}|" ${_pkgname^}/$_pkgname.desktop
# create the license files
curl -o LICENSE.html https://discord.com/terms
curl -o OSS-LICENSES.html https://discord.com/licenses
}
build() {
cd "${srcdir}"/openasar
# pack openasar
sed -i -e "s|nightly|nightly-$(git rev-parse HEAD | cut -c 1-7)|" src/index.js
sed -i -e "/config.setup = true/a\ config.autoupdate = false;" src/config/index.js
sed -i -e "s|process.resourcesPath|'/usr/lib/${_pkgname}/resources'|" src/utils/buildInfo.js
sed -i -e "s|^Exec=\${exec}$|Exec=/usr/bin/${_pkgname}|" \
-e "s|^Name=\${basename(exec)}$|Name=${_pkgname^}|" src/autoStart.js
node scripts/strip.js
asar p src app.asar
}
package() {
# create necessary directories
install -d "${pkgdir}"/usr/lib/$_pkgname
# copy relevant data
cp -r ${_pkgname^}/resources "${pkgdir}"/usr/lib/$_pkgname/
# intall icon and desktop file
install -Dm 644 ${_pkgname^}/$_pkgname.png "${pkgdir}"/usr/share/pixmaps/$_pkgname.png
install -Dm 644 ${_pkgname^}/$_pkgname.desktop "${pkgdir}"/usr/share/applications/$_pkgname.desktop
# overwrite Discord asar
install -Dm 644 openasar/app.asar "${pkgdir}"/usr/lib/$_pkgname/resources/
# install the launch script
install -Dm 755 discord-launcher.sh "${pkgdir}"/usr/bin/$_pkgname
# install krisp patcher
install -Dm 644 krisp-patcher.py "${pkgdir}"/usr/lib/$_pkgname/
# install licenses
install -Dm 644 LICENSE.html "${pkgdir}"/usr/share/licenses/$_pkgname/LICENSE.html
install -Dm 644 OSS-LICENSES.html "${pkgdir}"/usr/share/licenses/$_pkgname/OSS-LICENSES.html
}

View file

@ -1,43 +0,0 @@
post_upgrade() {
# return if old package version is greater than or equal to 0.0.55+827-1...
(( $(vercmp $2 '0.0.55+827-1') >= 0 )) && return
cat <<EOF
==> Instead of using 'rizin' to patch Krisp support a patcher written in Python
is now used. Consider installing the necessary optional dependencies to use
this feature.
EOF
# return if old package version is greater than or equal to 0.0.39+824-2...
(( $(vercmp $2 '0.0.39+824-2') >= 0 )) && return
cat <<EOF
==> In order to patch Krisp noise suppression support set 'PATCH_KRISP=true'
in '~/.config/discord.conf' in addition to having 'rizin' installed.
EOF
# return if old package version is greater than or equal to 0.0.27+809-5...
(( $(vercmp $2 '0.0.27+809-5') >= 0 )) && return
cat <<EOF
==> The launch script will now patch Krisp noise suppression support
if 'rizin' is installed. Restart your Discord client after update
to apply the patch.
EOF
# return if old package version is greater than or equal to 0.0.27+809-2...
(( $(vercmp $2 '0.0.27+809-2') >= 0 )) && return
cat <<EOF
==> You can now set additional Electron flags in '~/.config/discord-flags.conf'.
EOF
}
post_install() {
cat <<EOF
==> For Krisp noise suppression support consider installing the necessary optional
dependencies and setting 'PATCH_KRISP=true' in '~/.config/discord.conf'.
Restart your Discord client afterwards to apply the patch.
==> Additional Electron flags can be set in '~/.config/discord-flags.conf'.
EOF
}

View file

@ -1,41 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
declare -a flags
declare -l PATCH_KRISP
[[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@.conf" ]] && source "${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@.conf"
flags_file="${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@-flags.conf"
krisp_bin="${DISCORD_USER_DATA_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@}/@PKGVER@/modules/@PKGNAME@_krisp/@PKGNAME@_krisp.node"
if [[ "${PATCH_KRISP:-}" == true ]] && [[ -w "${krisp_bin}" ]]; then
if hash python &> /dev/null && python -c 'import capstone; import elftools' &> /dev/null; then
# Patch Krisp binary to ignore signature check
echo -n 'Running Krisp patcher... '
python /usr/lib/@PKGNAME@/krisp-patcher.py "${krisp_bin}"
fi
fi
if [[ -r "${flags_file}" ]]; then
# Replacing because old flag does not work
if [[ -w "${flags_file}" ]] && grep -q '\--ignore-gpu-blacklist' "${flags_file}"; then
sed -i 's|--ignore-gpu-blacklist|--ignore-gpu-blocklist|' "${flags_file}"
fi
mapfile -t < "${flags_file}"
fi
for line in "${MAPFILE[@]}"; do
if [[ ! "${line}" =~ ^[[:space:]]*#.* ]] && [[ -n "${line}" ]]; then
flags+=("${line}")
fi
done
unset flags_file krisp_bin
exec /usr/lib/@ELECTRON@/electron \
/usr/lib/@PKGNAME@/resources/app.asar \
--ozone-platform-hint=auto \
"${flags[@]}" "$@"

View file

@ -1,85 +0,0 @@
import sys
import shutil
from elftools.elf.elffile import ELFFile
from capstone import *
from capstone.x86 import *
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} [path to discord_krisp.node]")
# "Unix programs generally use 2 for command line syntax errors and 1 for all other kind of errors."
sys.exit(2)
executable = sys.argv[1]
elf = ELFFile(open(executable, "rb"))
symtab = elf.get_section_by_name('.symtab')
krisp_initialize_address = symtab.get_symbol_by_name("_ZN7discordL17DoKrispInitializeEv")[0].entry.st_value
isSignedByDiscord_address = symtab.get_symbol_by_name("_ZN7discord4util17IsSignedByDiscordERKNSt4__Cr12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE")[0].entry.st_value
text = elf.get_section_by_name('.text')
text_start = text['sh_addr']
text_start_file = text['sh_offset']
# This seems to always be zero (.text starts at the right offset in the file). Do it just in case?
address_to_file = text_start_file - text_start
# Done with the ELF now.
# elf.close()
krisp_initialize_offset = krisp_initialize_address - address_to_file
isSignedByDiscord_offset = krisp_initialize_address - address_to_file
f = open(executable, "rb")
f.seek(krisp_initialize_offset)
krisp_initialize = f.read(96)
f.close()
# States
found_issigned_by_discord_call = False
found_issigned_by_discord_test = False
found_issigned_by_discord_je = False
found_already_patched = False
je_location = None
je_size = 0
# We are looking for a call to IsSignedByDiscord, followed by a test, followed by a je.
# Then we replace the je with nops.
md = Cs(CS_ARCH_X86, CS_MODE_64)
md.detail = True
for i in md.disasm(krisp_initialize, krisp_initialize_address):
if i.id == X86_INS_CALL:
if i.operands[0].type == X86_OP_IMM:
if i.operands[0].imm == isSignedByDiscord_address:
found_issigned_by_discord_call = True
if i.id == X86_INS_TEST:
if found_issigned_by_discord_call:
found_issigned_by_discord_test = True
if i.id == X86_INS_JE:
if found_issigned_by_discord_test:
found_issigned_by_discord_je = True
je_location = i.address
je_size = len(i.bytes)
break
if i.id == X86_INS_NOP:
if found_issigned_by_discord_test:
found_already_patched = True
break
if je_location:
print(f"Found patch location: 0x{je_location:x}")
shutil.copyfile(executable, executable + ".orig")
f = open(executable, 'rb+')
f.seek(je_location - address_to_file)
f.write(b'\x90' * je_size) # je can be larger than 2 bytes given a large enough displacement :(
f.close()
else:
if found_already_patched:
print("Couldn't find patch location - already patched.")
else:
print("Couldn't find patch location - review manually. Sorry.")

View file

@ -1,57 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
readonly all_off="$(tput sgr0)"
readonly bold="${all_off}$(tput bold)"
readonly white="${bold}$(tput setaf 7)"
readonly blue="${bold}$(tput setaf 4)"
readonly red="${bold}$(tput setaf 1)"
msg() {
printf "${blue}::${white} $1${all_off}\n"
}
error() {
printf "${red}::${white} $1${all_off}\n"
}
msgbegin() {
printf "${blue}::${white} $1"
}
msgend() {
printf "$1${all_off}\n"
}
readonly krisp_zip='discord_krisp-1.zip'
readonly krisp_bin='discord_krisp.node'
# head to directory of this script
cd $(dirname "$0")
# update package to version used in PKGBUILD
source PKGBUILD
msg "Running updpkgsums (Updating checksums)"
updpkgsums
msg "Running mksrcinfo (Updating SRCINFO file)"
makepkg --printsrcinfo > .SRCINFO
msg "Getting Krisp module"
curl -O "https://dl.discordapp.net/apps/linux/${_pkgver:-${pkgver}}/modules/${krisp_zip}"
unzip "${krisp_zip}" "${krisp_bin}"
msg "Checking if Krisp module is patchable (watch output)"
python krisp-patcher.py "${krisp_bin}"
#msg "Updating Krisp module checksum"
#readonly chcksm=$(b2sum "${krisp_bin}.orig" | head -c 128)
#sed -i "s/^_krisp_b2sum='.*'$/_krisp_b2sum='${chcksm}'/" PKGBUILD
msgbegin "Cleaning up... "
rm -f "${krisp_zip}" "${krisp_bin}" "${krisp_bin}.orig"
msgend "Done"

View file

@ -1,28 +0,0 @@
pkgbase = discord-electron
pkgdesc = Discord using system provided electron (v33) for increased security and performance
pkgver = 0.0.74
pkgrel = 1
url = https://discord.com
install = discord-electron.install
arch = x86_64
license = custom
makedepends = asar
makedepends = curl
depends = electron33
depends = libxss
optdepends = libpulse: Pulseaudio support
optdepends = libappindicator-gtk3: Systray indicator support
optdepends = xdg-utils: Open files
optdepends = python-pyelftools: Required for Krisp patcher
optdepends = python-capstone: Required for Krisp patcher
provides = discord
conflicts = discord
options = !strip
source = https://dl.discordapp.net/apps/linux/0.0.74/discord-0.0.74.tar.gz
source = discord-launcher.sh
source = krisp-patcher.py
sha512sums = 204add0f20df85a45a88c371c419ff6f11c35f783e9ed1ce6323963d0f6570b142d3168512065d17f34aa56e910de30b4bf4153c5d1f306e04b5ca46032de606
sha512sums = 4497ff3df7e2c1e72eea09d6f36a80cabeabfd43bb03b0966795d45e10a02ea6b4c10407661092d057435e0d69d75e958a3dbb1dc5971a215ce09547ec56f666
sha512sums = 42cef68c1f7d574b4fbe859a4dc616e8994c7d16f62bcae3ff1f88e1edc58ac37b39c238d7defa9c97ceda417fcd6224cf0a0fd2608b8d18d0877e3c1befa59c
pkgname = discord-electron

View file

@ -1,83 +0,0 @@
pkgname=discord-electron
_pkgname=discord
pkgver=0.0.74
pkgrel=1
_electronver=33
_electronname="electron${_electronver}"
pkgdesc="Discord using system provided electron (v${_electronver}) for increased security and performance"
arch=('x86_64')
provides=("${_pkgname}")
conflicts=("${_pkgname}")
url='https://discord.com'
license=('custom')
options=('!strip')
install="$pkgname.install"
depends=("${_electronname}" 'libxss')
makedepends=('asar' 'curl')
optdepends=(
'libpulse: Pulseaudio support'
'libappindicator-gtk3: Systray indicator support'
'xdg-utils: Open files'
'python-pyelftools: Required for Krisp patcher'
'python-capstone: Required for Krisp patcher'
)
source=("https://dl.discordapp.net/apps/linux/${pkgver}/${_pkgname}-${pkgver}.tar.gz"
'discord-launcher.sh'
'krisp-patcher.py') # original: https://github.com/sersorrel/sys/blob/main/hm/discord/krisp-patcher.py
sha512sums=('204add0f20df85a45a88c371c419ff6f11c35f783e9ed1ce6323963d0f6570b142d3168512065d17f34aa56e910de30b4bf4153c5d1f306e04b5ca46032de606'
'4497ff3df7e2c1e72eea09d6f36a80cabeabfd43bb03b0966795d45e10a02ea6b4c10407661092d057435e0d69d75e958a3dbb1dc5971a215ce09547ec56f666'
'42cef68c1f7d574b4fbe859a4dc616e8994c7d16f62bcae3ff1f88e1edc58ac37b39c238d7defa9c97ceda417fcd6224cf0a0fd2608b8d18d0877e3c1befa59c')
prepare() {
# prepare launcher script
sed -i -e "s|@PKGNAME@|${_pkgname}|g" \
-e "s|@PKGVER@|${pkgver}|g" \
-e "s|@ELECTRON@|${_electronname}|g" \
discord-launcher.sh
# fix the .desktop file
sed -i -e "s|Exec=.*|Exec=/usr/bin/${_pkgname}|" ${_pkgname^}/$_pkgname.desktop
# create the license files
curl -o LICENSE.html https://discord.com/terms
curl -o OSS-LICENSES.html https://discord.com/licenses
}
build() {
cd "${srcdir}"/${_pkgname^}
# use system electron
asar e resources/app.asar resources/app
rm resources/app.asar
sed -i -e "/resourcesPath = .*;$/d" -e "s|return resourcesPath|return '/usr/lib/${_pkgname}/resources'|" resources/app/common/paths.js
sed -i -e "s|process.resourcesPath|'/usr/lib/${_pkgname}/resources'|" resources/app/app_bootstrap/buildInfo.js
sed -i -e "/^const appName/d" -e "/^const exePath/d" -e "/^const exeDir/d" -e "/^const iconPath/d" \
-e "s|^Exec=\${exePath}$|Exec=/usr/bin/${_pkgname}|" \
-e "s|^Name=\${appName}$|Name=${_pkgname^}|" \
-e "s|^Icon=\${iconPath}$|Icon=/usr/share/pixmaps/${_pkgname}.png|" \
resources/app/app_bootstrap/autoStart/linux.js
asar p resources/app resources/app.asar
rm -rf resources/app
}
package() {
# create necessary directories
install -d "${pkgdir}"/usr/lib/$_pkgname
# copy relevant data
cp -r ${_pkgname^}/resources "${pkgdir}"/usr/lib/$_pkgname/
# intall icon and desktop file
install -Dm 644 ${_pkgname^}/$_pkgname.png "${pkgdir}"/usr/share/pixmaps/$_pkgname.png
install -Dm 644 ${_pkgname^}/$_pkgname.desktop "${pkgdir}"/usr/share/applications/$_pkgname.desktop
# install the launch script
install -Dm 755 discord-launcher.sh "${pkgdir}"/usr/bin/$_pkgname
# install krisp patcher
install -Dm 644 krisp-patcher.py "${pkgdir}"/usr/lib/$_pkgname/
# install licenses
install -Dm 644 LICENSE.html "${pkgdir}"/usr/share/licenses/$_pkgname/LICENSE.html
install -Dm 644 OSS-LICENSES.html "${pkgdir}"/usr/share/licenses/$_pkgname/OSS-LICENSES.html
}

View file

@ -1,44 +0,0 @@
post_upgrade() {
# return if old package version is greater than or equal to 0.0.55-1...
(( $(vercmp $2 '0.0.55-1') >= 0 )) && return
cat <<EOF
==> Instead of using 'rizin' to patch Krisp support a patcher written in Python
is now used. Consider installing the necessary optional dependencies to use
this feature.
EOF
# return if old package version is greater than or equal to 0.0.39-2...
(( $(vercmp $2 '0.0.39-2') >= 0 )) && return
cat <<EOF
==> In order to patch Krisp noise suppression support set 'PATCH_KRISP=true'
in '~/.config/discord.conf' in addition to having 'rizin' installed.
EOF
# return if old package version is greater than or equal to 0.0.27-5...
(( $(vercmp $2 '0.0.27-5') >= 0 )) && return
cat <<EOF
==> The launch script will now patch Krisp noise suppression support
if 'rizin' is installed. Restart your Discord client after update
to apply the patch.
EOF
# return if old package version is greater than or equal to 0.0.27-2...
(( $(vercmp $2 '0.0.27-2') >= 0 )) && return
cat <<EOF
==> You can now set additional Electron flags in '~/.config/discord-flags.conf'.
EOF
}
post_install() {
cat <<EOF
==> For Krisp noise suppression support consider installing the necessary optional
dependencies and setting 'PATCH_KRISP=true' in '~/.config/discord.conf'.
Restart your Discord client afterwards to apply the patch.
==> In case of performance problems consider setting additional flags
in '~/.config/discord-flags.conf'.
EOF
}

View file

@ -1,41 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
declare -a flags
declare -l PATCH_KRISP
[[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@.conf" ]] && source "${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@.conf"
flags_file="${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@-flags.conf"
krisp_bin="${DISCORD_USER_DATA_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/@PKGNAME@}/@PKGVER@/modules/@PKGNAME@_krisp/@PKGNAME@_krisp.node"
if [[ "${PATCH_KRISP:-}" == true ]] && [[ -w "${krisp_bin}" ]]; then
if hash python &> /dev/null && python -c 'import capstone; import elftools' &> /dev/null; then
# Patch Krisp binary to ignore signature check
echo -n 'Running Krisp patcher... '
python /usr/lib/@PKGNAME@/krisp-patcher.py "${krisp_bin}"
fi
fi
if [[ -r "${flags_file}" ]]; then
# Replacing because old flag does not work
if [[ -w "${flags_file}" ]] && grep -q '\--ignore-gpu-blacklist' "${flags_file}"; then
sed -i 's|--ignore-gpu-blacklist|--ignore-gpu-blocklist|' "${flags_file}"
fi
mapfile -t < "${flags_file}"
fi
for line in "${MAPFILE[@]}"; do
if [[ ! "${line}" =~ ^[[:space:]]*#.* ]] && [[ -n "${line}" ]]; then
flags+=("${line}")
fi
done
unset flags_file krisp_bin
exec /usr/lib/@ELECTRON@/electron \
/usr/lib/@PKGNAME@/resources/app.asar \
--ozone-platform-hint=auto \
"${flags[@]}" "$@"

View file

@ -1,85 +0,0 @@
import sys
import shutil
from elftools.elf.elffile import ELFFile
from capstone import *
from capstone.x86 import *
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} [path to discord_krisp.node]")
# "Unix programs generally use 2 for command line syntax errors and 1 for all other kind of errors."
sys.exit(2)
executable = sys.argv[1]
elf = ELFFile(open(executable, "rb"))
symtab = elf.get_section_by_name('.symtab')
krisp_initialize_address = symtab.get_symbol_by_name("_ZN7discordL17DoKrispInitializeEv")[0].entry.st_value
isSignedByDiscord_address = symtab.get_symbol_by_name("_ZN7discord4util17IsSignedByDiscordERKNSt4__Cr12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE")[0].entry.st_value
text = elf.get_section_by_name('.text')
text_start = text['sh_addr']
text_start_file = text['sh_offset']
# This seems to always be zero (.text starts at the right offset in the file). Do it just in case?
address_to_file = text_start_file - text_start
# Done with the ELF now.
# elf.close()
krisp_initialize_offset = krisp_initialize_address - address_to_file
isSignedByDiscord_offset = krisp_initialize_address - address_to_file
f = open(executable, "rb")
f.seek(krisp_initialize_offset)
krisp_initialize = f.read(96)
f.close()
# States
found_issigned_by_discord_call = False
found_issigned_by_discord_test = False
found_issigned_by_discord_je = False
found_already_patched = False
je_location = None
je_size = 0
# We are looking for a call to IsSignedByDiscord, followed by a test, followed by a je.
# Then we replace the je with nops.
md = Cs(CS_ARCH_X86, CS_MODE_64)
md.detail = True
for i in md.disasm(krisp_initialize, krisp_initialize_address):
if i.id == X86_INS_CALL:
if i.operands[0].type == X86_OP_IMM:
if i.operands[0].imm == isSignedByDiscord_address:
found_issigned_by_discord_call = True
if i.id == X86_INS_TEST:
if found_issigned_by_discord_call:
found_issigned_by_discord_test = True
if i.id == X86_INS_JE:
if found_issigned_by_discord_test:
found_issigned_by_discord_je = True
je_location = i.address
je_size = len(i.bytes)
break
if i.id == X86_INS_NOP:
if found_issigned_by_discord_test:
found_already_patched = True
break
if je_location:
print(f"Found patch location: 0x{je_location:x}")
shutil.copyfile(executable, executable + ".orig")
f = open(executable, 'rb+')
f.seek(je_location - address_to_file)
f.write(b'\x90' * je_size) # je can be larger than 2 bytes given a large enough displacement :(
f.close()
else:
if found_already_patched:
print("Couldn't find patch location - already patched.")
else:
print("Couldn't find patch location - review manually. Sorry.")

View file

@ -1,57 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
readonly all_off="$(tput sgr0)"
readonly bold="${all_off}$(tput bold)"
readonly white="${bold}$(tput setaf 7)"
readonly blue="${bold}$(tput setaf 4)"
readonly red="${bold}$(tput setaf 1)"
msg() {
printf "${blue}::${white} $1${all_off}\n"
}
error() {
printf "${red}::${white} $1${all_off}\n"
}
msgbegin() {
printf "${blue}::${white} $1"
}
msgend() {
printf "$1${all_off}\n"
}
readonly krisp_zip='discord_krisp-1.zip'
readonly krisp_bin='discord_krisp.node'
# head to directory of this script
cd $(dirname "$0")
# update package to version used in PKGBUILD
source PKGBUILD
msg "Running updpkgsums (Updating checksums)"
updpkgsums
msg "Running mksrcinfo (Updating SRCINFO file)"
makepkg --printsrcinfo > .SRCINFO
msg "Getting Krisp module"
curl -O "https://dl.discordapp.net/apps/linux/${_pkgver:-${pkgver}}/modules/${krisp_zip}"
unzip "${krisp_zip}" "${krisp_bin}"
msg "Checking if Krisp module is patchable (watch output)"
python krisp-patcher.py "${krisp_bin}"
#msg "Updating Krisp module checksum"
#readonly chcksm=$(b2sum "${krisp_bin}.orig" | head -c 128)
#sed -i "s/^_krisp_b2sum='.*'$/_krisp_b2sum='${chcksm}'/" PKGBUILD
msgbegin "Cleaning up... "
rm -f "${krisp_zip}" "${krisp_bin}" "${krisp_bin}.orig"
msgend "Done"

View file

@ -1,19 +0,0 @@
pkgbase = ect
pkgdesc = File compressor, supports postcompression of PNG, JPEG, GZIP and ZIP files
pkgver = 0.9.5
pkgrel = 2
url = https://github.com/fhanau/efficient-compression-tool
arch = x86_64
license = Apache-2.0
makedepends = nasm
makedepends = git
makedepends = cmake
depends = gcc-libs
source = git+https://github.com/fhanau/efficient-compression-tool.git#tag=v0.9.5
source = git+https://github.com/glennrp/libpng.git#commit=f135775ad4e5d4408d2e12ffcc71bb36e6b48551
source = git+https://github.com/fhanau/mozjpeg.git#commit=182457e3e26e1e078d5dbd09137cf04865be2e49
sha512sums = a1d0ad86aa8e6d720575daf7e833c3b787ac51595774b99b6fd4a8ece616150c2e2c174aa97a2bc0b89e16d6cd93ec0c0d657430c1a41bf08b121368af0a4abc
sha512sums = 13e286cf091b284d15888a959a8be5a90977bed92d861fd72d465199bd6112641b47d74a525d4100868d528a25921958e9ab579643b705befe48e5756ffa301f
sha512sums = 1bdd9efa8d9c49a16cf5f2135ed29dc120bc1b31eec7130802d22b3d09bf10fe337f734b39b38e422bbe6e1719aca6744d49e2b435c2cb94cbf401d89086947a
pkgname = ect

View file

@ -1,41 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Stefan Husmann <stefan-husmann@t-online.de>
# Contributor: William J. Bowman <aur@williamjbowman.com>
pkgname=ect
_pkgname=efficient-compression-tool
pkgver=0.9.5
pkgrel=2
pkgdesc='File compressor, supports postcompression of PNG, JPEG, GZIP and ZIP files'
url="https://github.com/fhanau/$_pkgname"
arch=('x86_64')
license=('Apache-2.0')
depends=('gcc-libs')
makedepends=('nasm' 'git' 'cmake')
source=("git+$url.git#tag=v$pkgver"
'git+https://github.com/glennrp/libpng.git#commit=f135775ad4e5d4408d2e12ffcc71bb36e6b48551'
'git+https://github.com/fhanau/mozjpeg.git#commit=182457e3e26e1e078d5dbd09137cf04865be2e49')
sha512sums=('a1d0ad86aa8e6d720575daf7e833c3b787ac51595774b99b6fd4a8ece616150c2e2c174aa97a2bc0b89e16d6cd93ec0c0d657430c1a41bf08b121368af0a4abc'
'13e286cf091b284d15888a959a8be5a90977bed92d861fd72d465199bd6112641b47d74a525d4100868d528a25921958e9ab579643b705befe48e5756ffa301f'
'1bdd9efa8d9c49a16cf5f2135ed29dc120bc1b31eec7130802d22b3d09bf10fe337f734b39b38e422bbe6e1719aca6744d49e2b435c2cb94cbf401d89086947a')
prepare() {
cd "$_pkgname"
git submodule init
git config submodule.src/libpng.url "$srcdir"/libpng
git config submodule.src/mozjpeg.url "$srcdir"/mozjpeg
git -c protocol.file.allow=always submodule update
}
build() {
cmake -B build -S "$_pkgname"/src \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release
cmake --build build
}
package() {
DESTDIR="$pkgdir" cmake --install build
# Some things expect this to be an all-caps name
ln -s ect "$pkgdir"/usr/bin/ECT
}

View file

@ -1,29 +0,0 @@
pkgbase = firefox-syncstorage
pkgdesc = Sync storage server with built-in token server for running a self-hosted firefox sync server
pkgver = 0.17.13
pkgrel = 1
url = https://github.com/mozilla-services/syncstorage-rs
install = firefox-syncstorage.install
arch = i686
arch = x86_64
arch = arm
arch = armv6h
arch = armv7h
arch = aarch64
license = MPL-2.0
makedepends = rust
makedepends = cmake
makedepends = pkgconf
makedepends = mariadb-libs
depends = openssl
depends = python-fxa
depends = python-tokenlib
optdepends = mysql: for use with a local database server
options = !lto
backup = etc/firefox-syncstorage.toml
source = https://github.com/mozilla-services/syncstorage-rs/archive/0.17.13/syncstorage-rs-0.17.13.tar.gz
source = firefox-syncstorage.service
sha512sums = 5966864b6699a3d38ea598280fa2415826ff3d737862a4d7c412502fd8d5821665985ae85e11e1f3255c7e6c154da29d808532778bed490c6f166aeb60477a73
sha512sums = 4c5fbb99160613ba3fb0fedce97f04f63b92699fe79c6edd899d4ec5f297c5a98c0c211df3eb9a6579c12c57f4c63513747ed8944a60fc76e32f1e0c0f5e3a95
pkgname = firefox-syncstorage

View file

@ -1,37 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: jewelux <jewelux.aur@prejo.de>
# Based off the firefox-syncstorage-git PKGBUILD from jewelux
pkgname=firefox-syncstorage
_pkgname=syncstorage-rs
pkgver=0.17.13
pkgrel=1
pkgdesc='Sync storage server with built-in token server for running a self-hosted firefox sync server'
arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64')
url="https://github.com/mozilla-services/${_pkgname}"
license=('MPL-2.0')
depends=('openssl' 'python-fxa' 'python-tokenlib')
makedepends=('rust' 'cmake' 'pkgconf' 'mariadb-libs')
optdepends=('mysql: for use with a local database server')
options=('!lto')
install="${pkgname}.install"
source=("https://github.com/mozilla-services/${_pkgname}/archive/${pkgver}/${_pkgname}-${pkgver}.tar.gz"
"${pkgname}.service")
sha512sums=('5966864b6699a3d38ea598280fa2415826ff3d737862a4d7c412502fd8d5821665985ae85e11e1f3255c7e6c154da29d808532778bed490c6f166aeb60477a73'
'4c5fbb99160613ba3fb0fedce97f04f63b92699fe79c6edd899d4ec5f297c5a98c0c211df3eb9a6579c12c57f4c63513747ed8944a60fc76e32f1e0c0f5e3a95')
backup=("etc/${pkgname}.toml")
build() {
cd "${_pkgname}-${pkgver}"
cargo build --release
}
package() {
cd "${_pkgname}-${pkgver}"
# Installing manually
install -Dm 755 target/release/syncserver "${pkgdir}"/usr/bin/"${pkgname}"
install -Dm 644 config/local.example.toml "${pkgdir}"/etc/"${pkgname}".toml
install -Dm 644 "${srcdir}/${pkgname}".service "${pkgdir}"/usr/lib/systemd/system/"${pkgname}".service
}

View file

@ -1,11 +0,0 @@
post_install() {
getent group syncstorage &>/dev/null || groupadd -r syncstorage >/dev/null
getent passwd syncstorage &>/dev/null || useradd -r -s /usr/bin/false \
-g syncstorage -G syncstorage syncstorage >/dev/null
}
pre_remove() {
getent passwd syncstorage &>/dev/null && userdel syncstorage >/dev/null
getent group syncstorage &>/dev/null && groupdel syncstorage >/dev/null
true
}

View file

@ -1,24 +0,0 @@
[Unit]
Description=Actix web server running Mozilla Firefox Sync Storage
Wants=mysql.service
After=network.target mysql.service
[Service]
ExecStart=/usr/bin/firefox-syncstorage --config=/etc/firefox-syncstorage.toml
Restart=on-abort
User=syncstorage
Group=syncstorage
UMask=007
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
[Install]
WantedBy=multi-user.target

View file

@ -1,19 +0,0 @@
pkgbase = florence
pkgdesc = A configurable on-screen virtual keyboard
pkgver = 0.6.3
pkgrel = 3
url = http://sourceforge.net/projects/florence/
arch = i686
arch = x86_64
license = GPL-2.0-or-later
makedepends = intltool>=0.23
depends = gtk3
depends = libxml2
depends = librsvg
depends = libxtst
depends = gettext
depends = gstreamer>=1.0
source = http://sourceforge.net/projects/florence/files/florence/0.6.3/florence-0.6.3.tar.bz2
sha512sums = c527e8c40c9a594106420a6187945d79dfa7ddb4f628805cd188c8a37f79f42cbc1f74b80e21186f104a79c4d5e90c7a9d93cbe35bf1c6ebfe874db047fbef3c
pkgname = florence

View file

@ -1,36 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: UshakovVasilii <UshakovVasilii@yahoo.com>
# Contributor: Charon77 <evans.jahja@yahoo.com>
# Contributor: debdj <debd92@gmail.com>
pkgname=florence
pkgver=0.6.3
pkgrel=3
pkgdesc='A configurable on-screen virtual keyboard'
arch=('i686' 'x86_64')
url="http://sourceforge.net/projects/${pkgname}/"
license=('GPL-2.0-or-later')
depends=('gtk3' 'libxml2' 'librsvg' 'libxtst' 'gettext' 'gstreamer>=1.0') # http://florence.sourceforge.net/english/install.html
makedepends=('intltool>=0.23')
source=("http://sourceforge.net/projects/${pkgname}/files/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.bz2")
sha512sums=('c527e8c40c9a594106420a6187945d79dfa7ddb4f628805cd188c8a37f79f42cbc1f74b80e21186f104a79c4d5e90c7a9d93cbe35bf1c6ebfe874db047fbef3c')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
./configure --prefix=/usr \
--without-notification \
--without-at-spi \
--with-panelapplet \
--with-xtst \
--with-docs \
--disable-static \
--without-docs
make -j1
}
package() {
cd "${srcdir}/${pkgname}-${pkgver}"
make -j1 DESTDIR="${pkgdir}" install
}

View file

@ -1,21 +0,0 @@
pkgbase = gvisor-bin
pkgdesc = OCI container sandbox runtime focused on security, efficiency, and ease of use
pkgver = 20241104.0
pkgrel = 1
url = https://gvisor.dev
arch = x86_64
arch = aarch64
license = Apache-2.0
optdepends = docker: for Docker runtime support
provides = gvisor
conflicts = gvisor
source_x86_64 = runsc-x86_64-20241104.0::https://storage.googleapis.com/gvisor/releases/release/20241104.0/x86_64/runsc
source_x86_64 = containerd-shim-runsc-v1-x86_64-20241104.0::https://storage.googleapis.com/gvisor/releases/release/20241104.0/x86_64/containerd-shim-runsc-v1
sha512sums_x86_64 = cc7377e0edc89e1dc11b6c4b678ebc3df4f356baa6a0bf73b78fbb1483694b378592b731b7b27900cc0035ed747d6b35449cdce25bfb7e3a5be3bb11806cf5f7
sha512sums_x86_64 = 955254fba6c8199d6ee20aac2b7c0fde3aa97a752a827a7ef26d34f2e3ea5cdf27cb78648413dbc03e4278a5828c7a43240c6a5b2656029c62778fbee9e7c22c
source_aarch64 = runsc-aarch64-20241104.0::https://storage.googleapis.com/gvisor/releases/release/20241104.0/aarch64/runsc
source_aarch64 = containerd-shim-runsc-v1-aarch64-20241104.0::https://storage.googleapis.com/gvisor/releases/release/20241104.0/aarch64/containerd-shim-runsc-v1
sha512sums_aarch64 = 89cc1914b390e206cfd60ece8987338f501e35b771e9d55f775a392508c1c371119a937f0bd6c76857a60f73010b29f4baf124b1047d57e0a8bdbfb046cfba45
sha512sums_aarch64 = c24f4ba4a08eb8025d204cf83cb0bbdb72913ac63a5e91f600e66c3fcdb7f97817056e8c9045a3d47187da88f59e27bf417e92fbb12b593d42c633e1f895fb24
pkgname = gvisor-bin

View file

@ -1,2 +0,0 @@
/runsc-*
/containerd-shim-runsc-v1-*

View file

@ -1,36 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Brad Erhart <tocusso underscore malty at aleeas dot com>
pkgname='gvisor-bin'
_pkgbin='runsc'
_pkgshim='containerd-shim-runsc-v1'
pkgver=20241104.0
pkgrel=1
pkgdesc='OCI container sandbox runtime focused on security, efficiency, and ease of use'
arch=('x86_64' 'aarch64')
url='https://gvisor.dev'
license=('Apache-2.0')
optdepends=('docker: for Docker runtime support')
provides=(
"${pkgname%-bin}"
)
conflicts=(
"${pkgname%-bin}"
)
source_x86_64=(
"$_pkgbin-x86_64-$pkgver::https://storage.googleapis.com/${pkgname%-bin}/releases/release/$pkgver/x86_64/$_pkgbin"
"$_pkgshim-x86_64-$pkgver::https://storage.googleapis.com/${pkgname%-bin}/releases/release/$pkgver/x86_64/$_pkgshim"
)
source_aarch64=(
"$_pkgbin-aarch64-$pkgver::https://storage.googleapis.com/${pkgname%-bin}/releases/release/$pkgver/aarch64/$_pkgbin"
"$_pkgshim-aarch64-$pkgver::https://storage.googleapis.com/${pkgname%-bin}/releases/release/$pkgver/aarch64/$_pkgshim"
)
sha512sums_x86_64=('cc7377e0edc89e1dc11b6c4b678ebc3df4f356baa6a0bf73b78fbb1483694b378592b731b7b27900cc0035ed747d6b35449cdce25bfb7e3a5be3bb11806cf5f7'
'955254fba6c8199d6ee20aac2b7c0fde3aa97a752a827a7ef26d34f2e3ea5cdf27cb78648413dbc03e4278a5828c7a43240c6a5b2656029c62778fbee9e7c22c')
sha512sums_aarch64=('89cc1914b390e206cfd60ece8987338f501e35b771e9d55f775a392508c1c371119a937f0bd6c76857a60f73010b29f4baf124b1047d57e0a8bdbfb046cfba45'
'c24f4ba4a08eb8025d204cf83cb0bbdb72913ac63a5e91f600e66c3fcdb7f97817056e8c9045a3d47187da88f59e27bf417e92fbb12b593d42c633e1f895fb24')
package() {
install -Dm 755 "$_pkgbin-$CARCH-$pkgver" "$pkgdir/usr/bin/$_pkgbin"
install -Dm 755 "$_pkgshim-$CARCH-$pkgver" "$pkgdir/usr/bin/$_pkgshim"
}

View file

@ -1,17 +0,0 @@
pkgbase = gvisor-git
pkgdesc = OCI container sandbox runtime focused on security, efficiency, and ease of use
pkgver = 20241104.0
pkgrel = 1
url = https://gvisor.dev
arch = x86_64
arch = aarch64
license = Apache-2.0
makedepends = git
makedepends = go
optdepends = docker: for Docker runtime support
provides = gvisor
conflicts = gvisor
source = git+https://github.com/google/gvisor#branch=go
sha512sums = SKIP
pkgname = gvisor-git

View file

@ -1,45 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Vincent Kobel (v@kobl.one)
pkgname='gvisor-git'
_pkgbin='runsc'
_pkgshim='containerd-shim-runsc-v1'
pkgver=20241104.0
pkgrel=1
pkgdesc='OCI container sandbox runtime focused on security, efficiency, and ease of use'
arch=('x86_64' 'aarch64')
url='https://gvisor.dev'
license=('Apache-2.0')
makedepends=('git' 'go')
optdepends=('docker: for Docker runtime support')
provides=(
"${pkgname%-git}"
)
conflicts=(
"${pkgname%-git}"
)
source=("git+https://github.com/google/${pkgname%-git}#branch=go")
sha512sums=('SKIP')
pkgver() {
cd "${pkgname%-git}"
git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/release-//g;s/-/./g'
}
build() {
cd "${pkgname%-git}"
export CGO_CPPFLAGS="${CPPFLAGS}"
export CGO_CFLAGS="${CFLAGS}"
export CGO_CXXFLAGS="${CXXFLAGS}"
export CGO_LDFLAGS="${LDFLAGS}"
export GOPATH="${srcdir}"
export GOFLAGS="-buildmode=pie -trimpath -mod=readonly -modcacherw"
go build -v -o "bin/$_pkgbin" -ldflags "-linkmode=external -compressdwarf=false -X gvisor.dev/gvisor/runsc/version.version=${pkgver}" gvisor.dev/gvisor/runsc
go build -v -o "bin/$_pkgshim" -ldflags "-linkmode=external -compressdwarf=false" gvisor.dev/gvisor/shim
}
package() {
cd "${pkgname%-git}"
install -Dm 755 "bin/$_pkgbin" "$pkgdir/usr/bin/$_pkgbin"
install -Dm 755 "bin/$_pkgshim" "$pkgdir/usr/bin/$_pkgshim"
}

View file

@ -1,28 +0,0 @@
pkgbase = lib32-amdvlk-2023q3.3
pkgdesc = AMD's standalone Vulkan driver for Pre-GFX10 GPUs (Vega, Polaris)
pkgver = 2023.Q3.3
pkgrel = 2
url = https://github.com/GPUOpen-Drivers
arch = x86_64
license = MIT
makedepends = perl-xml-xpath
makedepends = python
makedepends = lib32-wayland
makedepends = lib32-libxrandr
makedepends = xorg-server-devel
makedepends = cmake
makedepends = ninja
makedepends = git
depends = lib32-zstd
provides = lib32-amdvlk
provides = lib32-vulkan-driver
conflicts = lib32-amdvlk
options = !lto
source = https://github.com/GPUOpen-Drivers/AMDVLK/archive/v-2023.Q3.3.tar.gz
sha512sums = 19e799030daee33d516f1276e08cd598a8ea7f8341b3955bda31b8576459486dbd3401d33670bfabb1872341025716e9610a8e9c4072a07a206eac90bd0f6ace
pkgname = lib32-amdvlk-2023q3.3
depends = lib32-glibc
depends = lib32-gcc-libs
depends = lib32-zlib
depends = lib32-zstd

View file

@ -1,72 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Laurent Carlier <lordheavym@gmail.com>
# Contributor: lod <aur@cyber-anlage.de>
pkgname=lib32-amdvlk-2023q3.3
_pkgname=lib32-amdvlk
pkgver=2023.Q3.3
pkgrel=2
pkgdesc="AMD's standalone Vulkan driver for Pre-GFX10 GPUs (Vega, Polaris)"
arch=('x86_64')
url="https://github.com/GPUOpen-Drivers"
license=('MIT')
provides=("${_pkgname}" 'lib32-vulkan-driver')
conflicts=("${_pkgname}")
depends=('lib32-zstd')
makedepends=('perl-xml-xpath' 'python' 'lib32-wayland' 'lib32-libxrandr' 'xorg-server-devel' 'cmake' 'ninja' 'git')
options=('!lto')
source=("https://github.com/GPUOpen-Drivers/AMDVLK/archive/v-${pkgver}.tar.gz")
sha512sums=('19e799030daee33d516f1276e08cd598a8ea7f8341b3955bda31b8576459486dbd3401d33670bfabb1872341025716e9610a8e9c4072a07a206eac90bd0f6ace')
prepare() {
local nrepos path name revision
nrepos=$(xpath -q -e //project AMDVLK-v-${pkgver}/default.xml | wc -l)
while (($nrepos>0))
do
path=$(xpath -q -e //project[$nrepos]/@path AMDVLK-v-${pkgver}/default.xml | sed 's/ path="drivers\/\(.*\)"/\1/g')
name=$(xpath -q -e //project[$nrepos]/@name AMDVLK-v-${pkgver}/default.xml | sed 's/ name="\(.*\)"/\1/g')
revision=$(xpath -q -e //project[$nrepos]/@revision AMDVLK-v-${pkgver}/default.xml | sed 's/ revision="\(.*\)"/\1/g')
git clone --recurse-submodules https://github.com/GPUOpen-Drivers/$name $path
pushd $path
git checkout $revision
git submodule update
popd
(( nrepos-- ))
done
}
build() {
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
cd ${srcdir}/xgl
cmake -H. -Bbuilds/Release \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS=-m32 \
-DCMAKE_CXX_FLAGS=-m32 \
-DLLVM_TARGET_ARCH:STRING=i686 \
-DLLVM_DEFAULT_TARGET_TRIPLE="i686-pc-linux-gnu" \
-DBUILD_WAYLAND_SUPPORT=On \
-DVKI_RAY_TRACING=Off \
-G Ninja
ninja -C builds/Release
}
package() {
depends=('lib32-glibc' 'lib32-gcc-libs' 'lib32-zlib' 'lib32-zstd')
install -m755 -d "${pkgdir}"/usr/lib32
install -m755 -d "${pkgdir}"/usr/share/vulkan/icd.d
install -m755 -d "${pkgdir}"/usr/share/vulkan/implicit_layer.d
install -m755 -d "${pkgdir}"/usr/share/licenses/${_pkgname}
install xgl/builds/Release/icd/amdvlk32.so "${pkgdir}"/usr/lib32/
install xgl/builds/Release/icd/amd_icd32.json "${pkgdir}"/usr/share/vulkan/icd.d/
install xgl/builds/Release/icd/amd_icd32.json "${pkgdir}"/usr/share/vulkan/implicit_layer.d/
install AMDVLK-v-${pkgver}/LICENSE.txt "${pkgdir}"/usr/share/licenses/${_pkgname}/
sed -i "s/\/lib/\/lib32/g" "${pkgdir}"/usr/share/vulkan/icd.d/amd_icd32.json
sed -i "s/\/lib/\/lib32/g" "${pkgdir}"/usr/share/vulkan/implicit_layer.d/amd_icd32.json
}

View file

@ -1,27 +0,0 @@
pkgbase = libqxt
pkgdesc = Provides a suite of cross-platform utility classes to add functionality not readily available in the Qt toolkit
pkgver = 0.6.2
pkgrel = 5
url = http://www.libqxt.org
arch = i686
arch = x86_64
license = CPL-1.0 OR LGPL-2.1-only
makedepends = avahi
makedepends = libxrandr
depends = qt4
depends = openssl
depends = db
optdepends = avahi: Zeroconf support
options = !emptydirs
source = http://bitbucket.org/libqxt/libqxt/get/v0.6.2.tar.bz2
source = libqxt-linking.patch
source = libqxt-media-keys.patch
source = libqxt-header-fix.patch
source = libqxt-gcc6.patch
sha512sums = 13bc6d33694b43b07a1f40c27641389e21c5b172d75ee2f5cca1b818dc6c89e5f7d458cc6085b00079ae0b6dc63bca20fb2522125d293845e24612124e8d2592
sha512sums = 6694fdea69fb0a84f4e8fc48c004f75599689624ca3a2b4cb60dd30115c8a2e3cd4e54a5a4e105050888d390610671f2e6087603135ccee9b899d1df24e982b9
sha512sums = 35c5374d86f5a16a2e1bf002a4e02e2f33aa819db0ec568a73822daf5174a23b6496d96977ca319b0c3d2f312f2e31d75cd6b9983a87c8cd1b20520d20d504a3
sha512sums = 01497cccc20ae7c39209cdb37260267e756d8e7bb276685019001f4288bff900b2aed0dcfefd5e2afdf411258bec078c4c0803a99eb218ceb230eed5f54ce958
sha512sums = 0f508074218c50aa004896038b6834b98a7a9a5f790b21db673d5c71536f7598be86fae0c0b674dc428fb102d987bedd752c6f5689b8062b9581cb92615f48c0
pkgname = libqxt

View file

@ -1,50 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: (epsilom) Xavier Corredor <xavier.corredor.llano (a) gmail.com>
# Contributor: Roberto Alsina <ralsina@kde.org>
# Contributor: Tim Besard <tim.besard@gmail.com>
pkgname=libqxt
pkgver=0.6.2
pkgrel=5
_pkgsuffix=dadc327c2a6a
pkgdesc='Provides a suite of cross-platform utility classes to add functionality not readily available in the Qt toolkit'
arch=('i686' 'x86_64')
url='http://www.libqxt.org'
license=('CPL-1.0 OR LGPL-2.1-only')
depends=('qt4' 'openssl' 'db')
makedepends=('avahi' 'libxrandr')
optdepends=('avahi: Zeroconf support')
options=('!emptydirs')
source=("http://bitbucket.org/${pkgname}/${pkgname}/get/v${pkgver}.tar.bz2"
'libqxt-linking.patch'
'libqxt-media-keys.patch'
'libqxt-header-fix.patch'
'libqxt-gcc6.patch')
sha512sums=('13bc6d33694b43b07a1f40c27641389e21c5b172d75ee2f5cca1b818dc6c89e5f7d458cc6085b00079ae0b6dc63bca20fb2522125d293845e24612124e8d2592'
'6694fdea69fb0a84f4e8fc48c004f75599689624ca3a2b4cb60dd30115c8a2e3cd4e54a5a4e105050888d390610671f2e6087603135ccee9b899d1df24e982b9'
'35c5374d86f5a16a2e1bf002a4e02e2f33aa819db0ec568a73822daf5174a23b6496d96977ca319b0c3d2f312f2e31d75cd6b9983a87c8cd1b20520d20d504a3'
'01497cccc20ae7c39209cdb37260267e756d8e7bb276685019001f4288bff900b2aed0dcfefd5e2afdf411258bec078c4c0803a99eb218ceb230eed5f54ce958'
'0f508074218c50aa004896038b6834b98a7a9a5f790b21db673d5c71536f7598be86fae0c0b674dc428fb102d987bedd752c6f5689b8062b9581cb92615f48c0')
prepare() {
cd "${srcdir}/${pkgname}-${pkgname}-${_pkgsuffix}"
patch -p1 -i '../libqxt-linking.patch'
patch -p1 -i '../libqxt-media-keys.patch'
patch -p1 -i '../libqxt-header-fix.patch'
patch -p1 -i '../libqxt-gcc6.patch'
}
build() {
cd "${srcdir}/${pkgname}-${pkgname}-${_pkgsuffix}"
./configure -qmake-bin '/usr/bin/qmake-qt4' \
-prefix '/usr' \
-libdir '/usr/lib' \
-docdir '/usr/share/doc'
make
#make docs
}
package() {
cd "${srcdir}/${pkgname}-${pkgname}-${_pkgsuffix}"
make INSTALL_ROOT="${pkgdir}" install
}

View file

@ -1,11 +0,0 @@
--- a/src/core/qxtslotjob.cpp 2011-11-24 16:10:32.000000000 -0600
+++ b/src/core/qxtslotjob.cpp 2016-03-07 16:20:32.758268253 -0600
@@ -174,7 +174,7 @@ This uses QxtSignalWaiter so it will _no
QVariant QxtFuture::delayedResult(int msec)
{
- if (!waiter->wait(msec, false))
+ if (!waiter->wait(msec, NULL))
return QVariant();
return job->result();
}

View file

@ -1,19 +0,0 @@
diff -rupN libqxt.old/src/network/qxtnetwork.h libqxt/src/network/qxtnetwork.h
--- libqxt.old/src/network/qxtnetwork.h 2010-11-07 09:18:41.000000000 -0500
+++ libqxt/src/network/qxtnetwork.h 2011-08-25 19:18:47.000000000 -0400
@@ -26,13 +26,13 @@
#define QXTNETWORK_H_INCLUDED
#include "qxtjsonrpcclient.h"
-#include "qxtjsonrpcresponse.h"
+#include "qxtjsonrpccall.h"
#include "qxtmailmessage.h"
#include "qxtmailattachment.h"
#include "qxtsmtp.h"
#include "qxtrpcpeer.h"
#include "qxttcpconnectionmanager.h"
#include "qxtxmlrpcclient.h"
-#include "qxtxmlrpcresponse.h"
+#include "qxtxmlrpccall.h"
#endif // QXTNETWORK_H_INCLUDED

View file

@ -1,8 +0,0 @@
diff -rupN libqxt.old/config.tests/xrandr/xrandr.pro libqxt/config.tests/xrandr/xrandr.pro
--- libqxt.old/config.tests/xrandr/xrandr.pro 2010-11-07 09:18:41.000000000 -0500
+++ libqxt/config.tests/xrandr/xrandr.pro 2010-11-25 05:28:29.000000000 -0500
@@ -5,3 +5,4 @@ DEPENDPATH += .
INCLUDEPATH += .
SOURCES += main.cpp
!win32:LIBS+=-lXrandr
+LIBS+=-lX11

View file

@ -1,407 +0,0 @@
diff -rupN libqxt.old/src/gui/keymapper_x11.h libqxt/src/gui/keymapper_x11.h
--- libqxt.old/src/gui/keymapper_x11.h 1969-12-31 19:00:00.000000000 -0500
+++ libqxt/src/gui/keymapper_x11.h 2010-07-18 15:37:16.000000000 -0400
@@ -0,0 +1,364 @@
+#ifndef KEYMAPPER_X11_H
+#define KEYMAPPER_X11_H
+
+// (davidsansome) Nicked from qkeymapper_x11.cpp
+
+#include <Qt>
+
+#define XK_MISCELLANY
+#define XK_LATIN1
+#define XK_KOREAN
+#define XK_XKB_KEYS
+#include <X11/keysymdef.h>
+
+//
+// Keyboard event translation
+//
+
+#ifndef XK_ISO_Left_Tab
+#define XK_ISO_Left_Tab 0xFE20
+#endif
+
+#ifndef XK_dead_hook
+#define XK_dead_hook 0xFE61
+#endif
+
+#ifndef XK_dead_horn
+#define XK_dead_horn 0xFE62
+#endif
+
+#ifndef XK_Codeinput
+#define XK_Codeinput 0xFF37
+#endif
+
+#ifndef XK_Kanji_Bangou
+#define XK_Kanji_Bangou 0xFF37 /* same as codeinput */
+#endif
+
+// Fix old X libraries
+#ifndef XK_KP_Home
+#define XK_KP_Home 0xFF95
+#endif
+#ifndef XK_KP_Left
+#define XK_KP_Left 0xFF96
+#endif
+#ifndef XK_KP_Up
+#define XK_KP_Up 0xFF97
+#endif
+#ifndef XK_KP_Right
+#define XK_KP_Right 0xFF98
+#endif
+#ifndef XK_KP_Down
+#define XK_KP_Down 0xFF99
+#endif
+#ifndef XK_KP_Prior
+#define XK_KP_Prior 0xFF9A
+#endif
+#ifndef XK_KP_Next
+#define XK_KP_Next 0xFF9B
+#endif
+#ifndef XK_KP_End
+#define XK_KP_End 0xFF9C
+#endif
+#ifndef XK_KP_Insert
+#define XK_KP_Insert 0xFF9E
+#endif
+#ifndef XK_KP_Delete
+#define XK_KP_Delete 0xFF9F
+#endif
+
+// the next lines are taken from XFree > 4.0 (X11/XF86keysyms.h), defining some special
+// multimedia keys. They are included here as not every system has them.
+#define XF86XK_Standby 0x1008FF10
+#define XF86XK_AudioLowerVolume 0x1008FF11
+#define XF86XK_AudioMute 0x1008FF12
+#define XF86XK_AudioRaiseVolume 0x1008FF13
+#define XF86XK_AudioPlay 0x1008FF14
+#define XF86XK_AudioStop 0x1008FF15
+#define XF86XK_AudioPrev 0x1008FF16
+#define XF86XK_AudioNext 0x1008FF17
+#define XF86XK_HomePage 0x1008FF18
+#define XF86XK_Calculator 0x1008FF1D
+#define XF86XK_Mail 0x1008FF19
+#define XF86XK_Start 0x1008FF1A
+#define XF86XK_Search 0x1008FF1B
+#define XF86XK_AudioRecord 0x1008FF1C
+#define XF86XK_Back 0x1008FF26
+#define XF86XK_Forward 0x1008FF27
+#define XF86XK_Stop 0x1008FF28
+#define XF86XK_Refresh 0x1008FF29
+#define XF86XK_Favorites 0x1008FF30
+#define XF86XK_AudioPause 0x1008FF31
+#define XF86XK_AudioMedia 0x1008FF32
+#define XF86XK_MyComputer 0x1008FF33
+#define XF86XK_OpenURL 0x1008FF38
+#define XF86XK_Launch0 0x1008FF40
+#define XF86XK_Launch1 0x1008FF41
+#define XF86XK_Launch2 0x1008FF42
+#define XF86XK_Launch3 0x1008FF43
+#define XF86XK_Launch4 0x1008FF44
+#define XF86XK_Launch5 0x1008FF45
+#define XF86XK_Launch6 0x1008FF46
+#define XF86XK_Launch7 0x1008FF47
+#define XF86XK_Launch8 0x1008FF48
+#define XF86XK_Launch9 0x1008FF49
+#define XF86XK_LaunchA 0x1008FF4A
+#define XF86XK_LaunchB 0x1008FF4B
+#define XF86XK_LaunchC 0x1008FF4C
+#define XF86XK_LaunchD 0x1008FF4D
+#define XF86XK_LaunchE 0x1008FF4E
+#define XF86XK_LaunchF 0x1008FF4F
+// end of XF86keysyms.h
+
+// Special keys used by Qtopia, mapped into the X11 private keypad range.
+#define QTOPIAXK_Select 0x11000601
+#define QTOPIAXK_Yes 0x11000602
+#define QTOPIAXK_No 0x11000603
+#define QTOPIAXK_Cancel 0x11000604
+#define QTOPIAXK_Printer 0x11000605
+#define QTOPIAXK_Execute 0x11000606
+#define QTOPIAXK_Sleep 0x11000607
+#define QTOPIAXK_Play 0x11000608
+#define QTOPIAXK_Zoom 0x11000609
+#define QTOPIAXK_Context1 0x1100060A
+#define QTOPIAXK_Context2 0x1100060B
+#define QTOPIAXK_Context3 0x1100060C
+#define QTOPIAXK_Context4 0x1100060D
+#define QTOPIAXK_Call 0x1100060E
+#define QTOPIAXK_Hangup 0x1100060F
+#define QTOPIAXK_Flip 0x11000610
+
+// keyboard mapping table
+static const unsigned int KeyTbl[] = {
+
+ // misc keys
+
+ XK_Escape, Qt::Key_Escape,
+ XK_Tab, Qt::Key_Tab,
+ XK_ISO_Left_Tab, Qt::Key_Backtab,
+ XK_BackSpace, Qt::Key_Backspace,
+ XK_Return, Qt::Key_Return,
+ XK_Insert, Qt::Key_Insert,
+ XK_Delete, Qt::Key_Delete,
+ XK_Clear, Qt::Key_Delete,
+ XK_Pause, Qt::Key_Pause,
+ XK_Print, Qt::Key_Print,
+ 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq
+ 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq
+
+ // cursor movement
+
+ XK_Home, Qt::Key_Home,
+ XK_End, Qt::Key_End,
+ XK_Left, Qt::Key_Left,
+ XK_Up, Qt::Key_Up,
+ XK_Right, Qt::Key_Right,
+ XK_Down, Qt::Key_Down,
+ XK_Prior, Qt::Key_PageUp,
+ XK_Next, Qt::Key_PageDown,
+
+ // modifiers
+
+ XK_Shift_L, Qt::Key_Shift,
+ XK_Shift_R, Qt::Key_Shift,
+ XK_Shift_Lock, Qt::Key_Shift,
+ XK_Control_L, Qt::Key_Control,
+ XK_Control_R, Qt::Key_Control,
+ XK_Meta_L, Qt::Key_Meta,
+ XK_Meta_R, Qt::Key_Meta,
+ XK_Alt_L, Qt::Key_Alt,
+ XK_Alt_R, Qt::Key_Alt,
+ XK_Caps_Lock, Qt::Key_CapsLock,
+ XK_Num_Lock, Qt::Key_NumLock,
+ XK_Scroll_Lock, Qt::Key_ScrollLock,
+ XK_Super_L, Qt::Key_Super_L,
+ XK_Super_R, Qt::Key_Super_R,
+ XK_Menu, Qt::Key_Menu,
+ XK_Hyper_L, Qt::Key_Hyper_L,
+ XK_Hyper_R, Qt::Key_Hyper_R,
+ XK_Help, Qt::Key_Help,
+ 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab
+ 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11)
+ 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12)
+
+ // numeric and function keypad keys
+
+ XK_KP_Space, Qt::Key_Space,
+ XK_KP_Tab, Qt::Key_Tab,
+ XK_KP_Enter, Qt::Key_Enter,
+ //XK_KP_F1, Qt::Key_F1,
+ //XK_KP_F2, Qt::Key_F2,
+ //XK_KP_F3, Qt::Key_F3,
+ //XK_KP_F4, Qt::Key_F4,
+ XK_KP_Home, Qt::Key_Home,
+ XK_KP_Left, Qt::Key_Left,
+ XK_KP_Up, Qt::Key_Up,
+ XK_KP_Right, Qt::Key_Right,
+ XK_KP_Down, Qt::Key_Down,
+ XK_KP_Prior, Qt::Key_PageUp,
+ XK_KP_Next, Qt::Key_PageDown,
+ XK_KP_End, Qt::Key_End,
+ XK_KP_Begin, Qt::Key_Clear,
+ XK_KP_Insert, Qt::Key_Insert,
+ XK_KP_Delete, Qt::Key_Delete,
+ XK_KP_Equal, Qt::Key_Equal,
+ XK_KP_Multiply, Qt::Key_Asterisk,
+ XK_KP_Add, Qt::Key_Plus,
+ XK_KP_Separator, Qt::Key_Comma,
+ XK_KP_Subtract, Qt::Key_Minus,
+ XK_KP_Decimal, Qt::Key_Period,
+ XK_KP_Divide, Qt::Key_Slash,
+
+ // International input method support keys
+
+ // International & multi-key character composition
+ XK_ISO_Level3_Shift, Qt::Key_AltGr,
+ XK_Multi_key, Qt::Key_Multi_key,
+ XK_Codeinput, Qt::Key_Codeinput,
+ XK_SingleCandidate, Qt::Key_SingleCandidate,
+ XK_MultipleCandidate, Qt::Key_MultipleCandidate,
+ XK_PreviousCandidate, Qt::Key_PreviousCandidate,
+
+ // Misc Functions
+ XK_Mode_switch, Qt::Key_Mode_switch,
+ XK_script_switch, Qt::Key_Mode_switch,
+
+ // Japanese keyboard support
+ XK_Kanji, Qt::Key_Kanji,
+ XK_Muhenkan, Qt::Key_Muhenkan,
+ //XK_Henkan_Mode, Qt::Key_Henkan_Mode,
+ XK_Henkan_Mode, Qt::Key_Henkan,
+ XK_Henkan, Qt::Key_Henkan,
+ XK_Romaji, Qt::Key_Romaji,
+ XK_Hiragana, Qt::Key_Hiragana,
+ XK_Katakana, Qt::Key_Katakana,
+ XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana,
+ XK_Zenkaku, Qt::Key_Zenkaku,
+ XK_Hankaku, Qt::Key_Hankaku,
+ XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku,
+ XK_Touroku, Qt::Key_Touroku,
+ XK_Massyo, Qt::Key_Massyo,
+ XK_Kana_Lock, Qt::Key_Kana_Lock,
+ XK_Kana_Shift, Qt::Key_Kana_Shift,
+ XK_Eisu_Shift, Qt::Key_Eisu_Shift,
+ XK_Eisu_toggle, Qt::Key_Eisu_toggle,
+ //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou,
+ //XK_Zen_Koho, Qt::Key_Zen_Koho,
+ //XK_Mae_Koho, Qt::Key_Mae_Koho,
+ XK_Kanji_Bangou, Qt::Key_Codeinput,
+ XK_Zen_Koho, Qt::Key_MultipleCandidate,
+ XK_Mae_Koho, Qt::Key_PreviousCandidate,
+
+#ifdef XK_KOREAN
+ // Korean keyboard support
+ XK_Hangul, Qt::Key_Hangul,
+ XK_Hangul_Start, Qt::Key_Hangul_Start,
+ XK_Hangul_End, Qt::Key_Hangul_End,
+ XK_Hangul_Hanja, Qt::Key_Hangul_Hanja,
+ XK_Hangul_Jamo, Qt::Key_Hangul_Jamo,
+ XK_Hangul_Romaja, Qt::Key_Hangul_Romaja,
+ //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput,
+ XK_Hangul_Codeinput, Qt::Key_Codeinput,
+ XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja,
+ XK_Hangul_Banja, Qt::Key_Hangul_Banja,
+ XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja,
+ XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja,
+ //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate,
+ //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate,
+ //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate,
+ XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate,
+ XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate,
+ XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate,
+ XK_Hangul_Special, Qt::Key_Hangul_Special,
+ //XK_Hangul_switch, Qt::Key_Hangul_switch,
+ XK_Hangul_switch, Qt::Key_Mode_switch,
+#endif // XK_KOREAN
+
+ // dead keys
+ XK_dead_grave, Qt::Key_Dead_Grave,
+ XK_dead_acute, Qt::Key_Dead_Acute,
+ XK_dead_circumflex, Qt::Key_Dead_Circumflex,
+ XK_dead_tilde, Qt::Key_Dead_Tilde,
+ XK_dead_macron, Qt::Key_Dead_Macron,
+ XK_dead_breve, Qt::Key_Dead_Breve,
+ XK_dead_abovedot, Qt::Key_Dead_Abovedot,
+ XK_dead_diaeresis, Qt::Key_Dead_Diaeresis,
+ XK_dead_abovering, Qt::Key_Dead_Abovering,
+ XK_dead_doubleacute, Qt::Key_Dead_Doubleacute,
+ XK_dead_caron, Qt::Key_Dead_Caron,
+ XK_dead_cedilla, Qt::Key_Dead_Cedilla,
+ XK_dead_ogonek, Qt::Key_Dead_Ogonek,
+ XK_dead_iota, Qt::Key_Dead_Iota,
+ XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound,
+ XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound,
+ XK_dead_belowdot, Qt::Key_Dead_Belowdot,
+ XK_dead_hook, Qt::Key_Dead_Hook,
+ XK_dead_horn, Qt::Key_Dead_Horn,
+
+ // Special multimedia keys
+ // currently only tested with MS internet keyboard
+
+ // browsing keys
+ XF86XK_Back, Qt::Key_Back,
+ XF86XK_Forward, Qt::Key_Forward,
+ XF86XK_Stop, Qt::Key_Stop,
+ XF86XK_Refresh, Qt::Key_Refresh,
+ XF86XK_Favorites, Qt::Key_Favorites,
+ XF86XK_AudioMedia, Qt::Key_LaunchMedia,
+ XF86XK_OpenURL, Qt::Key_OpenUrl,
+ XF86XK_HomePage, Qt::Key_HomePage,
+ XF86XK_Search, Qt::Key_Search,
+
+ // media keys
+ XF86XK_AudioLowerVolume, Qt::Key_VolumeDown,
+ XF86XK_AudioMute, Qt::Key_VolumeMute,
+ XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp,
+ XF86XK_AudioPlay, Qt::Key_MediaPlay,
+ XF86XK_AudioStop, Qt::Key_MediaStop,
+ XF86XK_AudioPrev, Qt::Key_MediaPrevious,
+ XF86XK_AudioNext, Qt::Key_MediaNext,
+ XF86XK_AudioRecord, Qt::Key_MediaRecord,
+
+ // launch keys
+ XF86XK_Mail, Qt::Key_LaunchMail,
+ XF86XK_MyComputer, Qt::Key_Launch0,
+ XF86XK_Calculator, Qt::Key_Launch1,
+ XF86XK_Standby, Qt::Key_Standby,
+
+ XF86XK_Launch0, Qt::Key_Launch2,
+ XF86XK_Launch1, Qt::Key_Launch3,
+ XF86XK_Launch2, Qt::Key_Launch4,
+ XF86XK_Launch3, Qt::Key_Launch5,
+ XF86XK_Launch4, Qt::Key_Launch6,
+ XF86XK_Launch5, Qt::Key_Launch7,
+ XF86XK_Launch6, Qt::Key_Launch8,
+ XF86XK_Launch7, Qt::Key_Launch9,
+ XF86XK_Launch8, Qt::Key_LaunchA,
+ XF86XK_Launch9, Qt::Key_LaunchB,
+ XF86XK_LaunchA, Qt::Key_LaunchC,
+ XF86XK_LaunchB, Qt::Key_LaunchD,
+ XF86XK_LaunchC, Qt::Key_LaunchE,
+ XF86XK_LaunchD, Qt::Key_LaunchF,
+
+ // Qtopia keys
+ QTOPIAXK_Select, Qt::Key_Select,
+ QTOPIAXK_Yes, Qt::Key_Yes,
+ QTOPIAXK_No, Qt::Key_No,
+ QTOPIAXK_Cancel, Qt::Key_Cancel,
+ QTOPIAXK_Printer, Qt::Key_Printer,
+ QTOPIAXK_Execute, Qt::Key_Execute,
+ QTOPIAXK_Sleep, Qt::Key_Sleep,
+ QTOPIAXK_Play, Qt::Key_Play,
+ QTOPIAXK_Zoom, Qt::Key_Zoom,
+ QTOPIAXK_Context1, Qt::Key_Context1,
+ QTOPIAXK_Context2, Qt::Key_Context2,
+ QTOPIAXK_Context3, Qt::Key_Context3,
+ QTOPIAXK_Context4, Qt::Key_Context4,
+ QTOPIAXK_Call, Qt::Key_Call,
+ QTOPIAXK_Hangup, Qt::Key_Hangup,
+ QTOPIAXK_Flip, Qt::Key_Flip,
+
+ 0, 0
+};
+
+#endif // KEYMAPPER_X11_H
diff -rupN libqxt.old/src/gui/qxtglobalshortcut_x11.cpp libqxt/src/gui/qxtglobalshortcut_x11.cpp
--- libqxt.old/src/gui/qxtglobalshortcut_x11.cpp 2010-07-18 15:32:53.000000000 -0400
+++ libqxt/src/gui/qxtglobalshortcut_x11.cpp 2010-07-18 15:41:25.000000000 -0400
@@ -26,6 +26,8 @@
#include <QX11Info>
#include <X11/Xlib.h>
+#include "keymapper_x11.h"
+
static int (*original_x_errhandler)(Display* display, XErrorEvent* event);
static int qxt_x_errhandler(Display* display, XErrorEvent *event)
@@ -83,8 +85,25 @@ quint32 QxtGlobalShortcutPrivate::native
quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)
{
+ // (davidsansome) Try the table from QKeyMapper first - this seems to be
+ // the only way to get Keysyms for the media keys.
+ unsigned int keysym = 0;
+ int i = 0;
+ while (KeyTbl[i]) {
+ if (KeyTbl[i+1] == static_cast<uint>(key)) {
+ keysym = KeyTbl[i];
+ break;
+ }
+ i += 2;
+ }
+
+ // If that didn't work then fall back on XStringToKeysym
+ if (!keysym) {
+ keysym = XStringToKeysym(QKeySequence(key).toString().toLatin1().data());
+ }
+
Display* display = QX11Info::display();
- return XKeysymToKeycode(display, XStringToKeysym(QKeySequence(key).toString().toLatin1().data()));
+ return XKeysymToKeycode(display, keysym);
}
bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods)

View file

@ -1,17 +0,0 @@
pkgbase = linpack
pkgdesc = Benchmark that measures a system's floating-point rate of execution by solving dense linear equations
pkgver = 2025.0.0
pkgrel = 1
url = https://software.intel.com/en-us/articles/intel-math-kernel-library-linpack-download
arch = x86_64
license = LicenseRef-Intel-SmpL-2022
options = !strip
backup = etc/linpack.conf
source = https://downloadmirror.intel.com/837792/l_onemklbench_p_2025.0.0_777.tgz
source = linpack.conf
source = linpack_runme_xeon64
sha512sums = b8d44e945c928f6128aab3474d1a8ff3d3fc6caf1d13df5726382c3f2f6e598633f47e4e29293f3540a11e4d24896b2b1ab016d5abbe4d8b6fdcdcc8c5974ca0
sha512sums = 69b049a3a1c0b674e471bc61e1f88f729db1dd454eb0bfc9adde7c3a4876bb396a91f57f19d5e1add906ee4282068d8cd0fa5f1a59bf8a96784846a3c9f63ab1
sha512sums = 3e880d4e0af8154ac1d591177e08ceda28f5ff5fbf698e47f99de8621e37137ecf26024048bd0ee81fc7af73ca8ae0deeb0a309325970a701ac5f13b571bdb60
pkgname = linpack

View file

@ -1,31 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: graysky <graysky AT archlinux dot us>
pkgname='linpack'
_pkgver=2025.0.0_777
_pkgid=837792
pkgver=${_pkgver%%_*}
_math_kernel_lib=${pkgver%%.0}
pkgrel=1
pkgdesc="Benchmark that measures a system's floating-point rate of execution by solving dense linear equations"
arch=('x86_64')
url='https://software.intel.com/en-us/articles/intel-math-kernel-library-linpack-download'
license=('LicenseRef-Intel-SmpL-2022')
backup=('etc/linpack.conf')
options=('!strip')
source=("https://downloadmirror.intel.com/${_pkgid}/l_onemklbench_p_${_pkgver}.tgz"
'linpack.conf'
'linpack_runme_xeon64')
sha512sums=('b8d44e945c928f6128aab3474d1a8ff3d3fc6caf1d13df5726382c3f2f6e598633f47e4e29293f3540a11e4d24896b2b1ab016d5abbe4d8b6fdcdcc8c5974ca0'
'69b049a3a1c0b674e471bc61e1f88f729db1dd454eb0bfc9adde7c3a4876bb396a91f57f19d5e1add906ee4282068d8cd0fa5f1a59bf8a96784846a3c9f63ab1'
'3e880d4e0af8154ac1d591177e08ceda28f5ff5fbf698e47f99de8621e37137ecf26024048bd0ee81fc7af73ca8ae0deeb0a309325970a701ac5f13b571bdb60')
package() {
local _base="${srcdir}/benchmarks_${_math_kernel_lib}"
local _test="${_base}/linux/share/mkl/benchmarks/linpack"
install -Dm755 linpack_runme_xeon64 "${pkgdir}/usr/bin/linpack_runme_xeon64"
install -Dm644 linpack.conf "${pkgdir}/usr/share/${pkgname}/linpack.conf"
install -Dm644 "${_base}/license.txt" "${pkgdir}/usr/share/licenses/linpack/license.txt"
install -Dm755 "${_test}/xlinpack_xeon64" "${pkgdir}/usr/bin/xlinpack_xeon64"
}

View file

@ -1,22 +0,0 @@
Sample Intel(R) LINPACK data file
Intel(R) LINPACK data
1 # number of tests
12600 # problem sizes
12600 # leading dimensions
100 # times to run a test
4 # alignment values (in KBytes)
# Change the problem sizes and leading dimensions to suite your FREE physical memory
#
# Memory use = 8 x (problem size)^2
# or
# Problem size = sqrt (memory use / 8)
#
# Consider the following as a conservative guide
# For 1 GB use a problem size and leading dimensions of 6300
# For 2 GB use a problem size and leading dimensions of 12600
# For 4 GB use a problem size and leading dimensions of 18900
# For 8 GB use a problem size and leading dimensions of 25200
# For 16 GB use a problem size and leading dimensions of 31500
# For 32 GB use a problem size and leading dimensions of 37800
# For 64 GB use a problem size and leading dimensions of 44100

View file

@ -1,26 +0,0 @@
#!/usr/bin/env bash
#
export KMP_AFFINITY=nowarnings,compact
SKEL_CONFIG="/usr/share/linpack"
CONFIG="$SKEL_CONFIG/linpack.conf"
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
[[ -f "$SKEL_CONFIG/linpack.conf" ]] || {
echo "ERROR: Missing $SKEL_CONFIG/linpack.conf - reinstall this package." ; exit 1 ; }
[[ -d $XDG_CONFIG_HOME ]] || mkdir $XDG_CONFIG_HOME
[[ -f "$XDG_CONFIG_HOME/linpack.conf" ]] || cp "$CONFIG" "$XDG_CONFIG_HOME"
echo -e "Edit \E[31m$XDG_CONFIG_HOME/linpack.conf\E[37m to adjust the amount of physical memory to consume."
echo
echo -e "Starting calculation.... hit ctrl+c to stop."
echo -e "Consult \E[31m~/lin_xeon64.txt\E[37m for results as they are caculated."
date
date >> ~/lin_xeon64.txt
/usr/bin/xlinpack_xeon64 $XDG_CONFIG_HOME/linpack.conf >> ~/lin_xeon64.txt
date >> ~/lin_xeon64.txt
echo -n "Done: "
date

View file

@ -1,174 +0,0 @@
#!/hint/bash
# shellcheck disable=2034
#
# /etc/makepkg.conf
#
#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o')
# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/wget
#-- The package required by makepkg to download VCS sources
# Format: 'protocol::package'
VCSCLIENTS=('bzr::breezy'
'fossil::fossil'
'git::git'
'hg::mercurial'
'svn::subversion')
#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="x86_64"
CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
#CPPFLAGS=""
CFLAGS="-march=x86-64-v3 -O3 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -mpclmul"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
-Wl,-z,pack-relative-relocs"
LTOFLAGS="-flto=auto -falign-functions=32"
RUSTFLAGS="-Copt-level=3 -Ctarget-cpu=x86-64-v3 -Clink-arg=-z -Clink-arg=pack-relative-relocs -Ccodegen-units=1"
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j $(nproc)"
#-- Debugging flags
DEBUG_CFLAGS="-g"
DEBUG_CXXFLAGS="$DEBUG_CFLAGS"
DEBUG_RUSTFLAGS="-C debuginfo=2"
#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign)
# A negated environment option will do the opposite of the comments below.
#
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#-- check: Run the check() function if present in the PKGBUILD
#-- sign: Generate PGP signature file
#
BUILDENV=(!distcc color !ccache check !sign)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#
#-- Specify a directory for package building.
#BUILDDIR=/tmp/makepkg
#########################################################################
# GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings
#########################################################################
#
# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages
#-- staticlibs: Leave static library (.a) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS
#-- debug: Add debugging flags as specified in DEBUG_* variables
#-- lto: Add compile flags for building with link time optimization
#-- autodeps: Automatically add depends/provides
#
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge debug lto)
#-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512, b2
INTEGRITY_CHECK=(sha256)
#-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="--strip-all"
#-- Options to be used when stripping shared libraries. See `man strip' for details.
STRIP_SHARED="--strip-unneeded"
#-- Options to be used when stripping static libraries. See `man strip' for details.
STRIP_STATIC="--strip-debug"
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#-- Directory to store source code in for debug packages
DBGSRCDIR="/usr/src/debug"
#-- Prefix and directories for library autodeps
LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32')
#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source packages: specify a fixed directory where all src packages will be placed
#SRCPKGDEST=/home/srcpackages
#-- Log files: specify a fixed directory where all log files will be placed
#LOGDEST=/home/makepkglogs
#-- Packager: name/email of the person or organization building packages
PACKAGER="Manuel Hüsers <aur@huesers.de>"
#-- Specify a key to use for package signing
#GPGKEY=""
#########################################################################
# COMPRESSION DEFAULTS
#########################################################################
#
COMPRESSGZ=(gzip -c -f -n)
COMPRESSBZ2=(bzip2 -c -f)
COMPRESSXZ=(xz -c -z -)
COMPRESSZST=(zstd -c -T0 -)
COMPRESSLRZ=(lrzip -q)
COMPRESSLZO=(lzop -q)
COMPRESSZ=(compress -c -f)
COMPRESSLZ4=(lz4 -q)
COMPRESSLZ=(lzip -c -f)
#########################################################################
# EXTENSION DEFAULTS
#########################################################################
#
PKGEXT='.pkg.tar.zst'
SRCEXT='.src.tar.gz'
#########################################################################
# OTHER
#########################################################################
#
#-- Command used to run pacman as root, instead of trying sudo and su
#PACMAN_AUTH=()
# vim: set ft=sh ts=2 sw=2 et:
export KCPPFLAGS=" -march=x86-64-v3 -O3"
export FFLAGS=$CFLAGS
export KCFLAGS=" -march=x86-64-v3 -O3"
export FCFLAGS=$CFLAGS
export GOAMD64=v3
export CARGO_PROFILE_RELEASE_LTO=fat

View file

@ -1,16 +0,0 @@
pkgbase = nginx-mod-form-input
pkgdesc = Nginx module that reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded", and parse the arguments in request body into nginx variables.
pkgver = 0.12
pkgrel = 1
url = https://github.com/calio/form-input-nginx-module
arch = x86_64
license = BSD-2-Clause
makedepends = nginx-src
depends = nginx
depends = nginx-mod-ndk
source = https://github.com/vision5/ngx_devel_kit/archive/v0.3.1/ngx_devel_kit-0.3.1.tar.gz
source = https://github.com/calio/form-input-nginx-module/archive/v0.12/form-input-0.12.tar.gz
sha512sums = de1e3349d8dd08e5982279b2219dc8a8006739f0409b8e0f5c50d93434beff1fbafba43e9c5ac85a5fab90afc5c0a7244a340610339c36f82f2cba7233e72de9
sha512sums = 1c5c5ab74156cac09da44a2dcdd84f7c03c9919a23a847e63613e00e3781ecd73d5ad12446174b4fdef9d064257a31570a8dbcccc00d8266f7048e3dcde0362e
pkgname = nginx-mod-form-input

View file

@ -1,42 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Manuel Hüsers <aur@huesers.de>
pkgname=nginx-mod-form-input
pkgver=0.12
pkgrel=1
_modname="${pkgname#nginx-mod-}"
_ndkver='0.3.1'
pkgdesc='Nginx module that reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded", and parse the arguments in request body into nginx variables.'
arch=('x86_64')
depends=('nginx' 'nginx-mod-ndk')
makedepends=('nginx-src')
url="https://github.com/calio/$_modname-nginx-module"
license=('BSD-2-Clause')
source=(
https://github.com/vision5/ngx_devel_kit/archive/v$_ndkver/ngx_devel_kit-$_ndkver.tar.gz
https://github.com/calio/$_modname-nginx-module/archive/v$pkgver/$_modname-$pkgver.tar.gz
)
sha512sums=('de1e3349d8dd08e5982279b2219dc8a8006739f0409b8e0f5c50d93434beff1fbafba43e9c5ac85a5fab90afc5c0a7244a340610339c36f82f2cba7233e72de9'
'1c5c5ab74156cac09da44a2dcdd84f7c03c9919a23a847e63613e00e3781ecd73d5ad12446174b4fdef9d064257a31570a8dbcccc00d8266f7048e3dcde0362e')
build() {
cp -r /usr/src/nginx .
cd "$srcdir"/nginx
./configure --with-compat \
--add-module=../ngx_devel_kit-$_ndkver \
--add-dynamic-module=../$_modname-nginx-module-$pkgver
make modules
}
package() {
cd "$srcdir"/nginx/objs
for mod in *.so; do
install -Dm755 $mod "$pkgdir"/usr/lib/nginx/modules/$mod
done
install -Dm644 "$srcdir"/$_modname-nginx-module-$pkgver/README.md \
"$pkgdir"/usr/share/licenses/$pkgname/README.md
}

View file

@ -1,19 +0,0 @@
pkgbase = nginx-mod-traffic-accounting
pkgdesc = Monitor the incoming and outgoing traffic metrics in realtime for NGINX
pkgver = 2.0+18+g46aae3e
pkgrel = 1
url = https://github.com/Lax/traffic-accounting-nginx-module
arch = x86_64
license = BSD-2-Clause
makedepends = nginx-src
depends = nginx
source = https://github.com/Lax/traffic-accounting-nginx-module/archive/v2.0/traffic-accounting-nginx-module-2.0.tar.gz
source = d53a4a6.patch
source = server_addr.patch
source = succ_collect.patch
sha512sums = 0df34c3765e18dc5cc5a053d3a17dbee17a686a1f6e76ad057c262741c4e4465c66bcef86e627a19258f836cad5f14745bf046fd396b00960ad79ed20c2a07bb
sha512sums = c99fea97563bcb9463d5f4ef1880fe336ed8a675d964687cf3d70fdc50e8d2b2b7d83efbe3fe8ba35945cfaa83a17a6b9b432dc5daa5fc3228efff568ac6ff44
sha512sums = 8624b4201e390465ceb0274c8e6241ed9075c9d600661c52ad2d77078f92b19fd011d8fe9878a4453519db465d644f430439eabb438ab7810d126955ee814910
sha512sums = 1d0993d1f3f00f3682d6717192f95836bbf0f1d113e1fdf8b1437dd3f2ec250e36a687ed6238cc17019a829ce6d59baea7bda79bab154b5cba5b088452b0aec8
pkgname = nginx-mod-traffic-accounting

View file

@ -1,53 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
pkgname=nginx-mod-traffic-accounting
pkgver=2.0+18+g46aae3e
pkgrel=1
_modname="traffic-accounting-nginx-module"
pkgdesc='Monitor the incoming and outgoing traffic metrics in realtime for NGINX'
arch=('x86_64')
makedepends=('nginx-src')
depends=('nginx')
url="https://github.com/Lax/${_modname}"
license=('BSD-2-Clause')
source=(
"https://github.com/Lax/${_modname}/archive/v${pkgver%%+*}/${_modname}-${pkgver%%+*}.tar.gz"
"d53a4a6.patch"
"server_addr.patch"
"succ_collect.patch"
)
sha512sums=('0df34c3765e18dc5cc5a053d3a17dbee17a686a1f6e76ad057c262741c4e4465c66bcef86e627a19258f836cad5f14745bf046fd396b00960ad79ed20c2a07bb'
'c99fea97563bcb9463d5f4ef1880fe336ed8a675d964687cf3d70fdc50e8d2b2b7d83efbe3fe8ba35945cfaa83a17a6b9b432dc5daa5fc3228efff568ac6ff44'
'8624b4201e390465ceb0274c8e6241ed9075c9d600661c52ad2d77078f92b19fd011d8fe9878a4453519db465d644f430439eabb438ab7810d126955ee814910'
'1d0993d1f3f00f3682d6717192f95836bbf0f1d113e1fdf8b1437dd3f2ec250e36a687ed6238cc17019a829ce6d59baea7bda79bab154b5cba5b088452b0aec8')
prepare() {
mkdir -p build
cd build
ln -sf /usr/src/nginx/auto
ln -sf /usr/src/nginx/src
cd "../${_modname}-${pkgver%%+*}"
patch -Np1 -i '../d53a4a6.patch'
patch -Np1 -i '../server_addr.patch'
patch -Np1 -i '../succ_collect.patch'
}
build() {
cd build
/usr/src/nginx/configure --with-compat --with-stream --add-dynamic-module="../${_modname}-${pkgver%%+*}"
make modules
}
package() {
install -Dm644 "$srcdir"/"${_modname}-${pkgver%%+*}"/LICENSE \
"$pkgdir"/usr/share/licenses/$pkgname/LICENSE
cd build/objs
for mod in ngx_*.so; do
install -Dm755 $mod "$pkgdir"/usr/lib/nginx/modules/$mod
done
}

View file

@ -1,235 +0,0 @@
diff --git a/src/http/ngx_http_accounting_module.c b/src/http/ngx_http_accounting_module.c
index 63eccf0..23a5fc3 100644
--- a/src/http/ngx_http_accounting_module.c
+++ b/src/http/ngx_http_accounting_module.c
@@ -139,7 +139,7 @@ ngx_http_accounting_process_init(ngx_cycle_t *cycle)
}
if (amcf->current == NULL) {
- if (ngx_traffic_accounting_period_create(cycle->pool, amcf) != NGX_OK)
+ if (ngx_traffic_accounting_period_create(amcf) != NGX_OK)
return NGX_ERROR;
}
@@ -206,7 +206,7 @@ worker_process_alarm_handler(ngx_event_t *ev)
amcf = ngx_http_cycle_get_module_main_conf(ngx_cycle, ngx_http_accounting_module);
- ngx_traffic_accounting_period_rotate(amcf->current->pool, amcf);
+ ngx_traffic_accounting_period_rotate(amcf);
ngx_traffic_accounting_period_rbtree_iterate(amcf->previous,
worker_process_export_metrics,
amcf->previous->created_at,
@@ -243,10 +243,10 @@ ngx_http_accounting_request_handler(ngx_http_request_t *r)
amcf = ngx_http_get_module_main_conf(r, ngx_http_accounting_module);
- metrics = ngx_traffic_accounting_period_fetch_metrics(amcf->current, accounting_id);
+ metrics = ngx_traffic_accounting_period_fetch_metrics(amcf->current, accounting_id, amcf->log);
if (metrics == NULL) { return NGX_ERROR; }
- if (ngx_traffic_accounting_metrics_init(metrics, amcf->current->pool, ngx_http_statuses_len) == NGX_ERROR)
+ if (ngx_traffic_accounting_metrics_init(metrics, ngx_http_statuses_len, amcf->log) == NGX_ERROR)
return NGX_ERROR;
amcf->current->updated_at = ngx_timeofday();
diff --git a/src/ngx_traffic_accounting.h b/src/ngx_traffic_accounting.h
index 1812927..462becf 100644
--- a/src/ngx_traffic_accounting.h
+++ b/src/ngx_traffic_accounting.h
@@ -38,21 +38,19 @@ typedef struct {
ngx_rbtree_t rbtree;
ngx_rbtree_node_t sentinel;
- ngx_pool_t *pool;
-
ngx_time_t *created_at;
ngx_time_t *updated_at;
} ngx_traffic_accounting_period_t;
-ngx_int_t ngx_traffic_accounting_metrics_init(ngx_traffic_accounting_metrics_t *metrics, ngx_pool_t *pool, size_t len);
+ngx_int_t ngx_traffic_accounting_metrics_init(ngx_traffic_accounting_metrics_t *metrics, size_t len, ngx_log_t *log);
ngx_int_t ngx_traffic_accounting_period_init(ngx_traffic_accounting_period_t *period);
-void ngx_traffic_accounting_period_insert(ngx_traffic_accounting_period_t *period, ngx_str_t *name);
+void ngx_traffic_accounting_period_insert(ngx_traffic_accounting_period_t *period, ngx_str_t *name, ngx_log_t *log);
void ngx_traffic_accounting_period_insert_metrics(ngx_traffic_accounting_period_t *period, ngx_traffic_accounting_metrics_t *metrics);
void ngx_traffic_accounting_period_delete(ngx_traffic_accounting_period_t *period, ngx_str_t *name);
void ngx_traffic_accounting_period_delete_metrics(ngx_traffic_accounting_period_t *period, ngx_traffic_accounting_metrics_t *metrics);
ngx_traffic_accounting_metrics_t * ngx_traffic_accounting_period_lookup_metrics(ngx_traffic_accounting_period_t *period, ngx_str_t *name);
-ngx_traffic_accounting_metrics_t * ngx_traffic_accounting_period_fetch_metrics(ngx_traffic_accounting_period_t *period, ngx_str_t *name);
+ngx_traffic_accounting_metrics_t * ngx_traffic_accounting_period_fetch_metrics(ngx_traffic_accounting_period_t *period, ngx_str_t *name, ngx_log_t *log);
typedef ngx_int_t (*ngx_traffic_accounting_period_iterate_func)(void *val, void *para1, void *para2);
diff --git a/src/ngx_traffic_accounting_module.c b/src/ngx_traffic_accounting_module.c
index ebc877a..2291db7 100644
--- a/src/ngx_traffic_accounting_module.c
+++ b/src/ngx_traffic_accounting_module.c
@@ -9,15 +9,14 @@
ngx_int_t
-ngx_traffic_accounting_period_create(ngx_pool_t *pool, ngx_traffic_accounting_main_conf_t *amcf)
+ngx_traffic_accounting_period_create(ngx_traffic_accounting_main_conf_t *amcf)
{
ngx_traffic_accounting_period_t *period;
- period = ngx_pcalloc(pool, sizeof(ngx_traffic_accounting_period_t));
+ period = ngx_calloc(sizeof(ngx_traffic_accounting_period_t), amcf->log);
if (period == NULL)
return NGX_ERROR;
- period->pool = pool;
ngx_traffic_accounting_period_init(period);
period->created_at = ngx_timeofday();
@@ -28,11 +27,11 @@ ngx_traffic_accounting_period_create(ngx_pool_t *pool, ngx_traffic_accounting_ma
}
ngx_int_t
-ngx_traffic_accounting_period_rotate(ngx_pool_t *pool, ngx_traffic_accounting_main_conf_t *amcf)
+ngx_traffic_accounting_period_rotate(ngx_traffic_accounting_main_conf_t *amcf)
{
- ngx_pfree(pool, amcf->previous);
+ ngx_free(amcf->previous);
amcf->previous = amcf->current;
- return ngx_traffic_accounting_period_create(pool, amcf);
+ return ngx_traffic_accounting_period_create(amcf);
}
diff --git a/src/ngx_traffic_accounting_module.h b/src/ngx_traffic_accounting_module.h
index 08881f1..adfccec 100644
--- a/src/ngx_traffic_accounting_module.h
+++ b/src/ngx_traffic_accounting_module.h
@@ -46,8 +46,8 @@ ngx_str_t * ngx_traffic_accounting_get_accounting_id(void *entry, ngx_get_loc_co
ngx_get_indexed_variable_pt get_indexed_variable);
-ngx_int_t ngx_traffic_accounting_period_create(ngx_pool_t *pool, ngx_traffic_accounting_main_conf_t *amcf);
-ngx_int_t ngx_traffic_accounting_period_rotate(ngx_pool_t *pool, ngx_traffic_accounting_main_conf_t *amcf);
+ngx_int_t ngx_traffic_accounting_period_create(ngx_traffic_accounting_main_conf_t *amcf);
+ngx_int_t ngx_traffic_accounting_period_rotate(ngx_traffic_accounting_main_conf_t *amcf);
#endif /* _NGX_TRAFFIC_ACCOUNTING_MODULE_H_INCLUDED_ */
diff --git a/src/ngx_traffic_accounting_period_metrics.c b/src/ngx_traffic_accounting_period_metrics.c
index b6b7055..7376ad9 100644
--- a/src/ngx_traffic_accounting_period_metrics.c
+++ b/src/ngx_traffic_accounting_period_metrics.c
@@ -10,17 +10,17 @@
static void ngx_traffic_accounting_period_insert_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
ngx_int_t
-ngx_traffic_accounting_metrics_init(ngx_traffic_accounting_metrics_t *metrics, ngx_pool_t *pool, size_t len)
+ngx_traffic_accounting_metrics_init(ngx_traffic_accounting_metrics_t *metrics, size_t len, ngx_log_t *log)
{
if (metrics->nr_status == NULL) {
- metrics->nr_status = ngx_pcalloc(pool, sizeof(ngx_uint_t) * len);
+ metrics->nr_status = ngx_calloc(sizeof(ngx_uint_t) * len, log);
if (metrics->nr_status == NULL)
return NGX_ERROR;
}
if (metrics->nr_upstream_status == NULL) {
- metrics->nr_upstream_status = ngx_pcalloc(pool, sizeof(ngx_uint_t) * len);
+ metrics->nr_upstream_status = ngx_calloc(sizeof(ngx_uint_t) * len, log);
if (metrics->nr_upstream_status == NULL)
return NGX_ERROR;
@@ -39,14 +39,14 @@ ngx_traffic_accounting_period_init(ngx_traffic_accounting_period_t *period)
}
void
-ngx_traffic_accounting_period_insert(ngx_traffic_accounting_period_t *period, ngx_str_t *name)
+ngx_traffic_accounting_period_insert(ngx_traffic_accounting_period_t *period, ngx_str_t *name, ngx_log_t *log)
{
ngx_traffic_accounting_metrics_t *metrics;
- metrics = ngx_pcalloc(period->pool, sizeof(ngx_traffic_accounting_metrics_t));
+ metrics = ngx_calloc(sizeof(ngx_traffic_accounting_metrics_t), log);
void *data;
- data = ngx_pcalloc(period->pool, name->len+1);
+ data = ngx_calloc(name->len+1, log);
ngx_memcpy(data, name->data, name->len);
metrics->name.data = data;
@@ -82,7 +82,7 @@ void
ngx_traffic_accounting_period_delete_metrics(ngx_traffic_accounting_period_t *period, ngx_traffic_accounting_metrics_t *metrics)
{
ngx_rbtree_delete(&period->rbtree, &metrics->rbnode);
- ngx_pfree(period->pool, metrics);
+ ngx_free(metrics);
}
ngx_traffic_accounting_metrics_t *
@@ -124,7 +124,7 @@ ngx_traffic_accounting_period_lookup_metrics(ngx_traffic_accounting_period_t *pe
}
ngx_traffic_accounting_metrics_t *
-ngx_traffic_accounting_period_fetch_metrics(ngx_traffic_accounting_period_t *period, ngx_str_t *name)
+ngx_traffic_accounting_period_fetch_metrics(ngx_traffic_accounting_period_t *period, ngx_str_t *name, ngx_log_t *log)
{
ngx_traffic_accounting_metrics_t *n;
@@ -132,7 +132,7 @@ ngx_traffic_accounting_period_fetch_metrics(ngx_traffic_accounting_period_t *per
if (n != NULL)
return n;
- ngx_traffic_accounting_period_insert(period, name);
+ ngx_traffic_accounting_period_insert(period, name, log);
return ngx_traffic_accounting_period_lookup_metrics(period, name);
}
@@ -158,9 +158,10 @@ ngx_traffic_accounting_period_rbtree_iterate(ngx_traffic_accounting_period_t *pe
if (rc == NGX_DONE) {
/* NGX_DONE -> destroy node */
ngx_rbtree_delete(rbtree, node);
- ngx_pfree(period->pool, n->nr_status);
- ngx_pfree(period->pool, n->nr_upstream_status);
- ngx_pfree(period->pool, n);
+ ngx_free(n->nr_status);
+ ngx_free(n->nr_upstream_status);
+ ngx_free(n->name.data);
+ ngx_free(n);
goto done;
}
diff --git a/src/stream/ngx_stream_accounting_module.c b/src/stream/ngx_stream_accounting_module.c
index b1839d1..3db787d 100644
--- a/src/stream/ngx_stream_accounting_module.c
+++ b/src/stream/ngx_stream_accounting_module.c
@@ -136,7 +136,7 @@ ngx_stream_accounting_process_init(ngx_cycle_t *cycle)
}
if (amcf->current == NULL) {
- if (ngx_traffic_accounting_period_create(cycle->pool, amcf) != NGX_OK)
+ if (ngx_traffic_accounting_period_create(amcf) != NGX_OK)
return NGX_ERROR;
}
@@ -203,7 +203,7 @@ worker_process_alarm_handler(ngx_event_t *ev)
amcf = ngx_stream_cycle_get_module_main_conf(ngx_cycle, ngx_stream_accounting_module);
- ngx_traffic_accounting_period_rotate(amcf->current->pool, amcf);
+ ngx_traffic_accounting_period_rotate(amcf);
ngx_traffic_accounting_period_rbtree_iterate(amcf->previous,
worker_process_export_metrics,
amcf->previous->created_at,
@@ -240,10 +240,10 @@ ngx_stream_accounting_session_handler(ngx_stream_session_t *s)
amcf = ngx_stream_get_module_main_conf(s, ngx_stream_accounting_module);
- metrics = ngx_traffic_accounting_period_fetch_metrics(amcf->current, accounting_id);
+ metrics = ngx_traffic_accounting_period_fetch_metrics(amcf->current, accounting_id, amcf->log);
if (metrics == NULL) { return NGX_ERROR; }
- if (ngx_traffic_accounting_metrics_init(metrics, amcf->current->pool, ngx_stream_statuses_len) == NGX_ERROR)
+ if (ngx_traffic_accounting_metrics_init(metrics, ngx_stream_statuses_len, amcf->log) == NGX_ERROR)
return NGX_ERROR;
amcf->current->updated_at = ngx_timeofday();

View file

@ -1,80 +0,0 @@
diff --git a/src/http/ngx_http_accounting_module.c b/src/http/ngx_http_accounting_module.c
index 23a5fc3..ecc62d2 100644
--- a/src/http/ngx_http_accounting_module.c
+++ b/src/http/ngx_http_accounting_module.c
@@ -237,7 +237,6 @@ ngx_http_accounting_request_handler(ngx_http_request_t *r)
ngx_time_t *tp = ngx_timeofday();
ngx_msec_int_t ms = 0;
ngx_http_upstream_state_t *state;
-
accounting_id = ngx_http_accounting_get_accounting_id(r);
if (accounting_id == NULL) { return NGX_ERROR; }
@@ -251,6 +250,27 @@ ngx_http_accounting_request_handler(ngx_http_request_t *r)
amcf->current->updated_at = ngx_timeofday();
+ if (0 == metrics->server_addr.len) {
+ u_char var_name_buf[256] = {0};
+ ngx_str_t server_addr_var_name = ngx_string("server_addr");
+ ngx_uint_t server_addr_key = ngx_hash_strlow(var_name_buf, server_addr_var_name.data, server_addr_var_name.len);
+ ngx_http_variable_value_t* server_addr_val = ngx_http_get_variable(r, &server_addr_var_name, server_addr_key);
+
+ if (NULL == server_addr_val) {
+ // ngx_log_error(NGXTA_LOG_LEVEL, amcf->log, ngx_errno,
+ // ngx_realpath_n " get server_addr failed");
+ return NGX_ERROR;
+ } else {
+ // ngx_log_error(NGXTA_LOG_LEVEL, amcf->log, 0,
+ // ngx_realpath_n " %s", server_addr_val->data);
+ }
+ metrics->server_addr.data = ngx_calloc(server_addr_val->len + 1, amcf->log);
+ if (NULL == metrics->server_addr.data) {
+ return NGX_ERROR;
+ }
+ memcpy(metrics->server_addr.data, server_addr_val->data, server_addr_val->len);
+ metrics->server_addr.len = server_addr_val->len;
+ }
metrics->nr_entries += 1;
metrics->bytes_in += r->request_length;
metrics->bytes_out += r->connection->sent;
diff --git a/src/ngx_traffic_accounting.h b/src/ngx_traffic_accounting.h
index 462becf..6046d78 100644
--- a/src/ngx_traffic_accounting.h
+++ b/src/ngx_traffic_accounting.h
@@ -24,6 +24,7 @@ typedef struct {
ngx_rbtree_node_t rbnode;
ngx_str_t name;
+ ngx_str_t server_addr;
ngx_uint_t nr_entries;
ngx_uint_t bytes_in;
diff --git a/src/ngx_traffic_accounting_log.c b/src/ngx_traffic_accounting_log.c
index 9b4cd46..652cefb 100644
--- a/src/ngx_traffic_accounting_log.c
+++ b/src/ngx_traffic_accounting_log.c
@@ -35,9 +35,10 @@ ngx_traffic_accounting_log_metrics(void *val, void *para1, void *para2,
last = msg_buf + NGX_MAX_ERROR_STR;
p = ngx_slprintf(p, last,
- "pid:%i|from:%i|to:%i|accounting_id:%V|%s:%ui|bytes_in:%ui|bytes_out:%ui|latency_ms:%ui|upstream_latency_ms:%ui",
+ "pid:%i|from:%i|to:%i|server_addr:%V|accounting_id:%V|%s:%ui|bytes_in:%ui|bytes_out:%ui|latency_ms:%ui|upstream_latency_ms:%ui",
ngx_getpid(),
created_at->sec, updated_at->sec,
+ &metrics->server_addr,
&metrics->name, entry_n,
metrics->nr_entries,
metrics->bytes_in, metrics->bytes_out,
diff --git a/src/ngx_traffic_accounting_period_metrics.c b/src/ngx_traffic_accounting_period_metrics.c
index 7376ad9..d454a3c 100644
--- a/src/ngx_traffic_accounting_period_metrics.c
+++ b/src/ngx_traffic_accounting_period_metrics.c
@@ -161,6 +161,7 @@ ngx_traffic_accounting_period_rbtree_iterate(ngx_traffic_accounting_period_t *pe
ngx_free(n->nr_status);
ngx_free(n->nr_upstream_status);
ngx_free(n->name.data);
+ ngx_free(n->server_addr.data);
ngx_free(n);
goto done;

View file

@ -1,96 +0,0 @@
From 46aae3eccffea884430d72f3d6cfc664a5789853 Mon Sep 17 00:00:00 2001
From: David-Hang-12138 <david.hang@senseguard.ai>
Date: Thu, 15 Sep 2022 21:57:00 +0800
Subject: [PATCH] DEVHUB-73 added option for collecting only successful
requests.
---
src/http/ngx_http_accounting_module.c | 27 +++++++++++++++++-------
src/ngx_traffic_accounting_module.h | 1 +
src/ngx_traffic_accounting_module_conf.c | 2 ++
3 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/src/http/ngx_http_accounting_module.c b/src/http/ngx_http_accounting_module.c
index ecc62d2..a35759c 100644
--- a/src/http/ngx_http_accounting_module.c
+++ b/src/http/ngx_http_accounting_module.c
@@ -62,6 +62,13 @@ static ngx_command_t ngx_http_accounting_commands[] = {
0,
NULL},
+ { ngx_string("accounting_20x"),
+ NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_MAIN_CONF_OFFSET,
+ offsetof(ngx_http_accounting_main_conf_t, log_20x),
+ NULL},
+
ngx_null_command
};
@@ -242,6 +249,18 @@ ngx_http_accounting_request_handler(ngx_http_request_t *r)
amcf = ngx_http_get_module_main_conf(r, ngx_http_accounting_module);
+ if (r->err_status) {
+ status = r->err_status;
+ } else if (r->headers_out.status) {
+ status = r->headers_out.status;
+ } else {
+ status = NGX_HTTP_STATUS_UNSET;
+ }
+
+ if (amcf->log_20x && NGX_HTTP_SPECIAL_RESPONSE <= status) {
+ // Only log successful requests whose response code is 10x or 20x
+ return NGX_DECLINED;
+ }
metrics = ngx_traffic_accounting_period_fetch_metrics(amcf->current, accounting_id, amcf->log);
if (metrics == NULL) { return NGX_ERROR; }
@@ -275,14 +294,6 @@ ngx_http_accounting_request_handler(ngx_http_request_t *r)
metrics->bytes_in += r->request_length;
metrics->bytes_out += r->connection->sent;
- if (r->err_status) {
- status = r->err_status;
- } else if (r->headers_out.status) {
- status = r->headers_out.status;
- } else {
- status = NGX_HTTP_STATUS_UNSET;
- }
-
metrics->nr_status[ngx_status_bsearch(status, ngx_http_statuses, ngx_http_statuses_len)] += 1;
ms = (ngx_msec_int_t)((tp->sec - r->start_sec) * 1000 + (tp->msec - r->start_msec));
diff --git a/src/ngx_traffic_accounting_module.h b/src/ngx_traffic_accounting_module.h
index adfccec..acc7d0b 100644
--- a/src/ngx_traffic_accounting_module.h
+++ b/src/ngx_traffic_accounting_module.h
@@ -18,6 +18,7 @@ typedef struct {
ngx_log_t *log;
time_t interval;
ngx_flag_t perturb;
+ ngx_flag_t log_20x; // account only 20x success responses
ngx_traffic_accounting_period_t *current;
ngx_traffic_accounting_period_t *previous;
diff --git a/src/ngx_traffic_accounting_module_conf.c b/src/ngx_traffic_accounting_module_conf.c
index ce1da71..d937666 100644
--- a/src/ngx_traffic_accounting_module_conf.c
+++ b/src/ngx_traffic_accounting_module_conf.c
@@ -20,6 +20,7 @@ ngx_traffic_accounting_create_main_conf(ngx_conf_t *cf)
amcf->enable = NGX_CONF_UNSET;
amcf->interval = NGX_CONF_UNSET;
amcf->perturb = NGX_CONF_UNSET;
+ amcf->log_20x = NGX_CONF_UNSET;
return amcf;
}
@@ -32,6 +33,7 @@ ngx_traffic_accounting_init_main_conf(ngx_conf_t *cf, void *conf)
if (amcf->enable == NGX_CONF_UNSET) { amcf->enable = 0; }
if (amcf->interval == NGX_CONF_UNSET) { amcf->interval = 60; }
if (amcf->perturb == NGX_CONF_UNSET) { amcf->perturb = 0; }
+ if (amcf->log_20x == NGX_CONF_UNSET) { amcf->log_20x = 0; }
return NGX_CONF_OK;
}

View file

@ -1,20 +0,0 @@
pkgbase = ntfs2btrfs-git
pkgdesc = In-place conversion of Microsoft's NTFS filesystem to the open-source filesystem Btrfs
pkgver = 20240115.r0.g1d55788
pkgrel = 1
url = https://github.com/maharmstone/ntfs2btrfs
arch = x86_64
license = GPL-2.0-or-later
makedepends = git
makedepends = cmake
makedepends = pkgconf
depends = fmt
depends = zlib
depends = lzo
depends = zstd
provides = ntfs2btrfs
conflicts = ntfs2btrfs
source = git+https://github.com/maharmstone/ntfs2btrfs.git
sha512sums = SKIP
pkgname = ntfs2btrfs-git

View file

@ -1,35 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: N Fytilis <n-fit AT live.com>
pkgname=ntfs2btrfs-git
pkgver=20240115.r0.g1d55788
pkgrel=1
pkgdesc="In-place conversion of Microsoft's NTFS filesystem to the open-source filesystem Btrfs"
arch=('x86_64')
url="https://github.com/maharmstone/${pkgname%-git}"
license=('GPL-2.0-or-later')
depends=('fmt' 'zlib' 'lzo' 'zstd')
makedepends=('git' 'cmake' 'pkgconf')
provides=("${pkgname%-git}")
conflicts=("${pkgname%-git}")
source=("git+${url}.git")
sha512sums=('SKIP')
pkgver() {
cd "${pkgname%-git}"
git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/release-//g;s/-/./g'
}
build() {
cmake -B build -S "${pkgname%-git}" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_SBINDIR=bin \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF
cmake --build build
}
package() {
DESTDIR="$pkgdir" cmake --install build
}

View file

@ -1,17 +0,0 @@
pkgbase = ntfs2btrfs
pkgdesc = In-place conversion of Microsoft's NTFS filesystem to the open-source filesystem Btrfs
pkgver = 20240115
pkgrel = 1
url = https://github.com/maharmstone/ntfs2btrfs
arch = x86_64
license = GPL-2.0-or-later
makedepends = cmake
makedepends = pkgconf
depends = fmt
depends = zlib
depends = lzo
depends = zstd
source = https://github.com/maharmstone/ntfs2btrfs/archive/20240115/ntfs2btrfs-20240115.tar.gz
sha512sums = c614e33b83a4dad25b07335f42161223804935bbee19a72a6576fe361a7edf91502773facc14c767e02abff03fd26d902ab2cd0d8f8bcde8ba10c56869d01873
pkgname = ntfs2btrfs

View file

@ -1,27 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
pkgname=ntfs2btrfs
pkgver=20240115
pkgrel=1
pkgdesc="In-place conversion of Microsoft's NTFS filesystem to the open-source filesystem Btrfs"
arch=('x86_64')
url="https://github.com/maharmstone/$pkgname"
license=('GPL-2.0-or-later')
depends=('fmt' 'zlib' 'lzo' 'zstd')
makedepends=('cmake' 'pkgconf')
source=("$url/archive/$pkgver/$pkgname-$pkgver.tar.gz")
sha512sums=('c614e33b83a4dad25b07335f42161223804935bbee19a72a6576fe361a7edf91502773facc14c767e02abff03fd26d902ab2cd0d8f8bcde8ba10c56869d01873')
build() {
cmake -B build -S "$pkgname-$pkgver" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_SBINDIR=bin \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF
cmake --build build
}
package() {
DESTDIR="$pkgdir" cmake --install build
}

View file

@ -1,28 +0,0 @@
pkgbase = obs-vkcapture
pkgver = 1.5.1
pkgrel = 1
url = https://github.com/nowrep/obs-vkcapture
arch = x86_64
license = GPL-2.0-or-later
makedepends = gcc
makedepends = cmake
makedepends = vulkan-headers
makedepends = lib32-gcc-libs
makedepends = lib32-vulkan-icd-loader
makedepends = lib32-libgl
makedepends = lib32-libegl
depends = vulkan-icd-loader
depends = libgl
depends = libegl
depends = obs-studio>=27
source = https://github.com/nowrep/obs-vkcapture/archive/v1.5.1/obs-vkcapture-1.5.1.tar.gz
sha512sums = 9477fd738cdf80e09aad46e58ee5e325aa4f5ae72fbe1cb22918d4910fd997ba2a012ce7ca3b24b1b3734983b94e9b7df391f3deca569a79c90c5d115a1a5eed
pkgname = obs-vkcapture
pkgdesc = OBS Linux Vulkan/OpenGL game capture
pkgname = lib32-obs-vkcapture
pkgdesc = OBS Linux Vulkan/OpenGL game capture (32-bit)
depends = lib32-vulkan-icd-loader
depends = lib32-libgl
depends = lib32-libegl

View file

@ -1,49 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
pkgbase=obs-vkcapture
pkgname=("$pkgbase" "lib32-$pkgbase")
pkgver=1.5.1
pkgrel=1
url="https://github.com/nowrep/$pkgbase"
license=('GPL-2.0-or-later')
arch=('x86_64')
depends=('vulkan-icd-loader' 'libgl' 'libegl' 'obs-studio>=27')
makedepends=('gcc' 'cmake' 'vulkan-headers' 'lib32-gcc-libs' 'lib32-vulkan-icd-loader' 'lib32-libgl' 'lib32-libegl')
source=("https://github.com/nowrep/$pkgbase/archive/v$pkgver/$pkgbase-$pkgver.tar.gz")
sha512sums=('9477fd738cdf80e09aad46e58ee5e325aa4f5ae72fbe1cb22918d4910fd997ba2a012ce7ca3b24b1b3734983b94e9b7df391f3deca569a79c90c5d115a1a5eed')
build() {
cmake -B build -S "$pkgbase-$pkgver" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_INSTALL_DATADIR=/share \
-DCMAKE_BUILD_TYPE=Release
cmake --build build
export CFLAGS="-m32 ${CFLAGS}"
export CXXFLAGS="-m32 ${CXXFLAGS}"
export LDFLAGS="-m32 ${LDFLAGS}"
cmake -B build32 -S "$pkgbase-$pkgver" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib32 \
-DCMAKE_INSTALL_DATADIR=/share \
-DCMAKE_LIBRARY_PATH=/usr/lib32 \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_PLUGIN=OFF
cmake --build build32
}
package_obs-vkcapture() {
pkgdesc='OBS Linux Vulkan/OpenGL game capture'
DESTDIR="$pkgdir" cmake --install build
}
package_lib32-obs-vkcapture() {
pkgdesc='OBS Linux Vulkan/OpenGL game capture (32-bit)'
depends=('lib32-vulkan-icd-loader' 'lib32-libgl' 'lib32-libegl')
DESTDIR="$pkgdir" cmake --install build32
rm -r "$pkgdir/usr/bin"
}

View file

@ -1,13 +0,0 @@
pkgbase = plymouth-theme-arch-logo
pkgdesc = A remake of the ubuntu-logo Plymouth theme, based on the debian-logo theme, but featuring the Arch Linux logo.
pkgver = 1
pkgrel = 2
url = https://www.gnome-look.org/content/show.php/Arch-logo+plymouth?content=141697
install = plymouth-theme-arch-logo.install
arch = any
license = GPL-3.0-or-later
depends = plymouth
source = plymouth-theme-arch-logo.tar.gz
sha512sums = 0c834bccc32d8d2df1a0bf2ae859487eef273ddf8047a7444f3630dffbbf04a9d014242304c5b2bcd9172bea2e04195f329dfe1fe4661bcc5af29ca64104af06
pkgname = plymouth-theme-arch-logo

View file

@ -1,26 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Manuel Hüsers <aur@huesers.de>
# Contributor: Guillermo Garcia <ahioros@NO-SPAM.gmail.com>
pkgname=plymouth-theme-arch-logo
pkgver=1
pkgrel=2
pkgdesc='A remake of the ubuntu-logo Plymouth theme, based on the debian-logo theme, but featuring the Arch Linux logo.'
arch=('any')
# Alternative website(s)
#url='http://karlinux.deviantart.com/art/Arch-Logo-Plymouth-Theme-209553250'
url='https://www.gnome-look.org/content/show.php/Arch-logo+plymouth?content=141697'
license=('GPL-3.0-or-later')
depends=('plymouth')
install="${pkgname}.install"
source=(
'plymouth-theme-arch-logo.tar.gz'
)
sha512sums=('0c834bccc32d8d2df1a0bf2ae859487eef273ddf8047a7444f3630dffbbf04a9d014242304c5b2bcd9172bea2e04195f329dfe1fe4661bcc5af29ca64104af06')
package() {
cd "${srcdir}/arch-logo"
rm -fv *~
mkdir -p "${pkgdir}/usr/share/plymouth/themes/arch-logo"
install -Dvm644 * "${pkgdir}/usr/share/plymouth/themes/arch-logo"
}

View file

@ -1,12 +0,0 @@
post_install() {
cat <<EOF
==> To activate the theme, run as root:
==> plymouth-set-default-theme -R arch-logo
EOF
}
post_upgrade() {
post_install $1
}

View file

@ -1,16 +0,0 @@
pkgbase = polkit-explorer-git
pkgdesc = Present PolicyKit information in a human-readable form.
pkgver = 22.3ad139b
pkgrel = 5
url = https://github.com/scarygliders/polkit-explorer
arch = any
license = ISC
makedepends = git
depends = pyside6
depends = python-lxml
provides = polkit-explorer
conflicts = polkit-explorer
source = git+https://github.com/scarygliders/polkit-explorer.git
sha512sums = SKIP
pkgname = polkit-explorer-git

View file

@ -1,35 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Alad Wenter <https://wiki.archlinux.org/index.php/Special:EmailUser/Alad>
pkgname=polkit-explorer-git
_pkgname=${pkgname%-git}
pkgver=22.3ad139b
pkgrel=5
pkgdesc='Present PolicyKit information in a human-readable form.'
arch=('any')
url="https://github.com/scarygliders/${_pkgname}"
license=('ISC')
depends=('pyside6' 'python-lxml')
makedepends=('git')
conflicts=('polkit-explorer')
provides=('polkit-explorer')
source=("git+${url}.git")
sha512sums=('SKIP')
pkgver() {
cd "${srcdir}/${_pkgname}"
printf '%s.%s' "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
package() {
cd "${srcdir}/${_pkgname}"
install -d -m755 "${pkgdir}"/{usr/bin,opt/$_pkgname}
install -m644 Ui_*.py "${pkgdir}/opt/${_pkgname}/"
install -m755 'polkitex.py' "${pkgdir}/opt/${_pkgname}/"
ln -s "/opt/${_pkgname}/polkitex.py" "${pkgdir}/usr/bin/polkitex"
install -Dm644 'LICENSE' "${pkgdir}/usr/share/licenses/${_pkgname}/LICENSE"
install -Dm644 "polkitex.desktop" "${pkgdir}/usr/share/applications/${_pkgname}.desktop"
}

View file

@ -1,15 +0,0 @@
#!/bin/sh
[ -z "$CHROOT" ] && echo "CHROOT env var is unset." && exit 1
sudo -v || exit 1
[ ! -d "$CHROOT/root" ] && sudo mkarchroot -M "$(dirname "$0")"/makepkg.conf "$CHROOT/root" base-devel
arch-nspawn "$CHROOT/root" pacman -Syu
mkdir -p -m 0755 "$CHROOT/$USER"
mountpoint -q "$CHROOT/$USER"
test $? -ne 0 && sudo mount -t tmpfs -o defaults,nodev,mode=0755,uid=$(id -u),gid=$(id -g) tmpfs "$CHROOT/$USER"
exit 0

View file

@ -1,16 +0,0 @@
pkgbase = qvr
pkgdesc = A library that makes writing Virtual Reality (VR) applications very easy
pkgver = 4.1.0
pkgrel = 1
url = https://marlam.de/qvr/
arch = x86_64
license = MIT
makedepends = cmake
depends = qt6-base
source = https://marlam.de/qvr/releases/qvr-4.1.0.tar.gz
source = https://marlam.de/qvr/releases/qvr-4.1.0.tar.gz.sig
validpgpkeys = 2F61B4828BBA779AECB3F32703A2A4AB1E32FD34
sha512sums = 609b706f06d21668db85dbdc282a1b86931ba380c0044e2918bbcd11903748ccc83579d9790dcf372ea8ebc7c86daa6810f12a43b8d7fc941b32b17f34c0b716
sha512sums = SKIP
pkgname = qvr

View file

@ -1,28 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
pkgname=qvr
pkgver=4.1.0
pkgrel=1
pkgdesc='A library that makes writing Virtual Reality (VR) applications very easy'
arch=('x86_64')
url='https://marlam.de/qvr/'
license=('MIT')
depends=('qt6-base')
makedepends=('cmake')
source=(https://marlam.de/qvr/releases/$pkgname-$pkgver.tar.gz{,.sig})
sha512sums=('609b706f06d21668db85dbdc282a1b86931ba380c0044e2918bbcd11903748ccc83579d9790dcf372ea8ebc7c86daa6810f12a43b8d7fc941b32b17f34c0b716'
'SKIP')
validpgpkeys=('2F61B4828BBA779AECB3F32703A2A4AB1E32FD34')
build() {
cmake -B build -S "$pkgname-$pkgver/libqvr" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF
cmake --build build
}
package() {
DESTDIR="$pkgdir" cmake --install build
}

View file

@ -1,16 +0,0 @@
pkgbase = rc-local
pkgdesc = Support for legacy rc.local scripts
pkgver = 4
pkgrel = 1
url = https://aur.archlinux.org/packages/rc-local/
install = rc-local.install
arch = any
license = LGPL-2.1-or-later
depends = systemd
backup = etc/rc.local
source = rc.local
source = rc-local.service
sha512sums = 4c3f8498957d47cf2c6ed6d755f6d6a6e42a59ac176b5a752ea4cdd23418d009c180bd53609bc34a1b11f720d71e702d71b4014ae4f98008c89f86323dc9afab
sha512sums = 85c7eafe5d79c4829b48c4df867e28bdb0b4464cab3581fd67e288648d416ceb69fe4e6b5193f86517f1e9578ef05fba8f708097625de6b903c6794fbec5078e
pkgname = rc-local

View file

@ -1,23 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: megadriver <megadriver at gmx dot com>
# Contributor: $pooky Hunter <spookyh+arch@gmail.org>
pkgname=rc-local
pkgver=4
pkgrel=1
pkgdesc='Support for legacy rc.local scripts'
url="https://aur.archlinux.org/packages/${pkgname}/"
arch=('any')
license=('LGPL-2.1-or-later')
install="${pkgname}.install"
depends=('systemd')
backup=('etc/rc.local')
source=('rc.local'
'rc-local.service')
sha512sums=('4c3f8498957d47cf2c6ed6d755f6d6a6e42a59ac176b5a752ea4cdd23418d009c180bd53609bc34a1b11f720d71e702d71b4014ae4f98008c89f86323dc9afab'
'85c7eafe5d79c4829b48c4df867e28bdb0b4464cab3581fd67e288648d416ceb69fe4e6b5193f86517f1e9578ef05fba8f708097625de6b903c6794fbec5078e')
package() {
install -Dm755 'rc.local' "${pkgdir}/etc/rc.local"
install -Dm644 'rc-local.service' "${pkgdir}/usr/lib/systemd/system/rc-local.service"
}

View file

@ -1,8 +0,0 @@
post_install() {
cat <<EOF
==> Please activate the rc-local service to execute /etc/rc.local on boot.
==> Run as root: systemctl enable rc-local.service
EOF
}

View file

@ -1,20 +0,0 @@
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

View file

@ -1,14 +0,0 @@
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0

View file

@ -1,18 +0,0 @@
pkgbase = rcedit-bin
pkgdesc = Command line tool to edit resources of windows exe files
pkgver = 2.0.0
pkgrel = 4
url = https://github.com/electron/rcedit
arch = any
license = MIT
depends = wine
provides = rcedit
conflicts = rcedit
source = https://github.com/electron/rcedit/releases/download/v2.0.0/rcedit-x64.exe
source = https://raw.githubusercontent.com/electron/rcedit/v2.0.0/LICENSE
source = rcedit.sh
sha512sums = c13e7ffd60169c348e16a3ea59a171c1777acdb241f950c11a6e9b69c955a3a4eb3432182aee7f489a87a555d0bd51fde3b597826f7c1e6488f1f5097359ab4d
sha512sums = ca664e9ec12e6e23878c55f2b56e44fac50fc8b88c71499a4794fe3a0e8de18008c7435970628c8386410534dd5cc27af3ea5e7a818d6244f6159bc183969638
sha512sums = ce46f14c4e7c945c69fdfbc48bfd22c8241f653a974f4950d8378bb81943144f5b3ee2e49cb08a26637c46558327184c6504714f7e781f86fbf7b0c64f561bd0
pkgname = rcedit-bin

View file

@ -1,26 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: jdigi78 <jdigiovanni78 at gmail dot com>
pkgname=rcedit-bin
_pkgname=${pkgname%-bin}
pkgver=2.0.0
pkgrel=4
pkgdesc='Command line tool to edit resources of windows exe files'
arch=('any')
url="https://github.com/electron/${_pkgname}"
license=('MIT')
depends=('wine')
provides=("${_pkgname}")
conflicts=("${_pkgname}")
source=("https://github.com/electron/${_pkgname}/releases/download/v${pkgver}/${_pkgname}-x64.exe"
"https://raw.githubusercontent.com/electron/${_pkgname}/v${pkgver}/LICENSE"
"${_pkgname}.sh")
sha512sums=('c13e7ffd60169c348e16a3ea59a171c1777acdb241f950c11a6e9b69c955a3a4eb3432182aee7f489a87a555d0bd51fde3b597826f7c1e6488f1f5097359ab4d'
'ca664e9ec12e6e23878c55f2b56e44fac50fc8b88c71499a4794fe3a0e8de18008c7435970628c8386410534dd5cc27af3ea5e7a818d6244f6159bc183969638'
'ce46f14c4e7c945c69fdfbc48bfd22c8241f653a974f4950d8378bb81943144f5b3ee2e49cb08a26637c46558327184c6504714f7e781f86fbf7b0c64f561bd0')
package() {
install -Dm755 "${_pkgname}-x64.exe" "${pkgdir}/opt/${_pkgname}/${_pkgname}-x64.exe"
install -Dm755 "${_pkgname}.sh" "${pkgdir}/usr/bin/${_pkgname}"
install -Dm644 "LICENSE" "${pkgdir}/usr/share/licenses/${_pkgname}/LICENSE"
}

View file

@ -1,4 +0,0 @@
#!/bin/sh
export WINEDEBUG=-all
export DISPLAY=""
exec wine /opt/rcedit/rcedit-x64.exe "$@"

View file

@ -1,14 +0,0 @@
pkgbase = sierra-breeze-enhanced
pkgdesc = A kwin decoration with support for transparency, rounded corners, multiple titlebar button presets and more
pkgver = 2.0.1
pkgrel = 1
url = https://github.com/kupiqu/sierrabreezeenhanced
arch = x86_64
license = GPL-3.0-or-later
makedepends = cmake
makedepends = extra-cmake-modules
depends = kwin
source = https://github.com/kupiqu/sierrabreezeenhanced/archive/V2.0.1/sierra-breeze-enhanced-V2.0.1.tar.gz
sha512sums = 1c7f55e979c854135a4c6e21d9838df8de0b7dd0ee252f100c8b622e72224d19bf8e06318ad43367112f6c3422ac5ac44242b74635cce5e96107c1ea447ce838
pkgname = sierra-breeze-enhanced

View file

@ -1,30 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Leo sk <sk.griffinix@gmail.com>
pkgname=sierra-breeze-enhanced
_pkgname=SierraBreezeEnhanced
pkgver=2.0.1
pkgrel=1
pkgdesc="A kwin decoration with support for transparency, rounded corners, multiple titlebar button presets and more"
arch=('x86_64')
url="https://github.com/kupiqu/${_pkgname,,}"
license=('GPL-3.0-or-later')
depends=('kwin')
makedepends=('cmake' 'extra-cmake-modules')
source=("${url}/archive/V${pkgver}/${pkgname}-V${pkgver}.tar.gz")
sha512sums=('1c7f55e979c854135a4c6e21d9838df8de0b7dd0ee252f100c8b622e72224d19bf8e06318ad43367112f6c3422ac5ac44242b74635cce5e96107c1ea447ce838')
build() {
cmake -B build -S "${_pkgname}-${pkgver}" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DKDE_INSTALL_LIBDIR=lib \
-DBUILD_TESTING=OFF \
-DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
-Wno-dev
}
package() {
#DESTDIR="$pkgdir" cmake --install build
make -C build DESTDIR="$pkgdir" install
}

View file

@ -1,34 +0,0 @@
pkgbase = spot-client
pkgdesc = Gtk/Rust native Spotify client
pkgver = 0.4.1
pkgrel = 1
url = https://github.com/xou816/spot
arch = x86_64
arch = i686
arch = arm
arch = armv6h
arch = armv7h
arch = aarch64
license = MIT
checkdepends = appstream-glib
makedepends = cargo
makedepends = meson>=0.59.0
makedepends = blueprint-compiler>=0.8.1
depends = alsa-lib
depends = cairo
depends = glib2
depends = glibc
depends = graphene
depends = gtk4
depends = libadwaita
depends = libpulse
depends = openssl
depends = pango
optdepends = org.freedesktop.secrets
options = !lto
source = https://github.com/xou816/spot/archive/0.4.1/spot-0.4.1.tar.gz
source = disable-clippy.patch
sha512sums = 05ee8ce9277230a0f6c25411b41788a508551a61cd436bdd6bb0d8245030b0523232c0e30c7d2f98977382e687ec0f502cb6eb9b95a7dbaae97042ec596f407e
sha512sums = 4e38fff2a5867c46749959ceb0fb16372f12c8f8038b6a33d43e126e741f43e524e1499bb9b514e56b036097aaa0ac5dd149823c2c9eba277ab0ea4f58d5fb55
pkgname = spot-client

View file

@ -1,51 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Daniel Peukert <daniel@peukert.cc>
# Contributor: NicoHood <archlinux {cat} nicohood {dog} de>
_projectname='spot'
pkgname="$_projectname-client"
pkgver='0.4.1'
pkgrel='1'
pkgdesc='Gtk/Rust native Spotify client'
arch=('x86_64' 'i686' 'arm' 'armv6h' 'armv7h' 'aarch64')
url="https://github.com/xou816/$_projectname"
license=('MIT')
depends=('alsa-lib' 'cairo' 'glib2' 'glibc' 'graphene' 'gtk4' 'libadwaita' 'libpulse' 'openssl' 'pango')
optdepends=('org.freedesktop.secrets')
makedepends=('cargo' 'meson>=0.59.0' 'blueprint-compiler>=0.8.1')
checkdepends=('appstream-glib')
options=('!lto') # Build breaks with LTO enabled
source=("https://github.com/xou816/$_projectname/archive/$pkgver/$_projectname-$pkgver.tar.gz"
'disable-clippy.patch')
sha512sums=('05ee8ce9277230a0f6c25411b41788a508551a61cd436bdd6bb0d8245030b0523232c0e30c7d2f98977382e687ec0f502cb6eb9b95a7dbaae97042ec596f407e'
'4e38fff2a5867c46749959ceb0fb16372f12c8f8038b6a33d43e126e741f43e524e1499bb9b514e56b036097aaa0ac5dd149823c2c9eba277ab0ea4f58d5fb55')
validpgpkeys=() # Waiting for https://github.com/xou816/spot/issues/283
_sourcedirectory="$_projectname-$pkgver"
_builddirectory='build'
prepare() {
cd "$srcdir/$_sourcedirectory/"
# Disable failing clippy tests
patch -Np1 < '../disable-clippy.patch'
}
build() {
cd "$srcdir/"
# We're not using arch-meson, because upstream recommends using --buildtype 'release'
# The offline build flag is turned off, as we're not predownloading rust dependencies
meson setup --prefix '/usr' --libexecdir 'lib' --sbindir 'bin' --buildtype 'release' --wrap-mode 'nodownload' \
-Db_lto='true' -Db_pie='true' -Doffline='false' "$_sourcedirectory" "$_builddirectory"
meson compile -C "$_builddirectory"
}
check() {
cd "$srcdir/"
meson test -C "$_builddirectory" --timeout-multiplier -1
}
package() {
cd "$srcdir/"
meson install -C "$_builddirectory" --destdir "$pkgdir"
install -Dm644 "$_sourcedirectory/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}

View file

@ -1,24 +0,0 @@
diff --git a/src/meson.build b/src/meson.build
index 900f3fa..e08b062 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -149,19 +149,3 @@ test('Unit tests',
timeout: 180,
env: env
)
-
-test('Clippy',
- cargo,
- args: [
- 'clippy',
- '--manifest-path', cargo_manifest,
- '--target-dir', meson.project_build_root() / 'src',
- '--',
- '-D', 'warnings',
- '-A', 'clippy::module_inception',
- '-A', 'clippy::new_without_default',
- '-A', 'clippy::enum-variant-names'
- ],
- timeout: 180,
- env: env
-)

View file

@ -1,16 +0,0 @@
pkgbase = sublime-text-3
pkgdesc = Sophisticated text editor for code, html and prose (legacy version)
pkgver = 3.3211
pkgrel = 5
url = https://www.sublimetext.com/3
install = sublime-text-3.install
arch = x86_64
license = custom
depends = libpng
depends = gtk2
source = https://download.sublimetext.com/sublime_text_3_build_3211_x64.tar.bz2
source = sublime-text-3.sh
sha512sums = a6a068119eff95c5360e9ccbe1d845e7a93e4ad13b3659073752a7bd0e87f4691555820185514875649e677a4e8702e2338f74f5584fc80f69c16b323685d6f1
sha512sums = ac56e9b7dddaebb3d222795cfc644109c93cc3f79695b8f9ee56022c74fe04a1134dd54cab07c74ff1f96b783cb3dbc026c16095552f1d2dd83115ea274dc2e9
pkgname = sublime-text-3

View file

@ -1,46 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: marcospb19 <marcospb19@hotmail.com>
pkgname=sublime-text-3
pkgver=3.3211
pkgrel=5
pkgdesc='Sophisticated text editor for code, html and prose (legacy version)'
arch=('x86_64')
url='https://www.sublimetext.com/3'
license=('custom')
depends=('libpng' 'gtk2')
install="${pkgname}.install"
source=("https://download.sublimetext.com/sublime_text_3_build_${pkgver:2}_x64.tar.bz2"
"${pkgname}.sh")
sha512sums=('a6a068119eff95c5360e9ccbe1d845e7a93e4ad13b3659073752a7bd0e87f4691555820185514875649e677a4e8702e2338f74f5584fc80f69c16b323685d6f1'
'ac56e9b7dddaebb3d222795cfc644109c93cc3f79695b8f9ee56022c74fe04a1134dd54cab07c74ff1f96b783cb3dbc026c16095552f1d2dd83115ea274dc2e9')
prepare() {
sed -i -e "s|@ST_PATH@|/opt/sublime_text_3|g" "${pkgname}.sh"
# Adjust naming in desktop entry
sed -i -e 's#Sublime Text#Sublime Text 3#g' 'sublime_text_3/sublime_text.desktop'
sed -i -e 's#sublime-text#sublime-text-3#g' 'sublime_text_3/sublime_text.desktop'
sed -i -e 's#/opt/sublime_text/sublime_text#/usr/bin/subl3#g' 'sublime_text_3/sublime_text.desktop'
sed -i -e '\#^StartupNotify=#a StartupWMClass=subl3' 'sublime_text_3/sublime_text.desktop'
}
package() {
# Install sublime text 3
install -dm755 "${pkgdir}/opt"
cp --preserve=mode -r 'sublime_text_3' "${pkgdir}/opt/sublime_text_3"
rm -f "${pkgdir}/opt/sublime_text_3/sublime_text.desktop"
# Install icons
for res in 128x128 16x16 256x256 32x32 48x48; do
install -dm755 "${pkgdir}/usr/share/icons/hicolor/${res}/apps"
ln -s "/opt/sublime_text_3/Icon/${res}/sublime-text.png" "${pkgdir}/usr/share/icons/hicolor/${res}/apps/sublime-text-3.png"
done
# Install desktop entry and executable
install -dm755 "${pkgdir}/usr/share/applications"
install -Dm644 'sublime_text_3/sublime_text.desktop' "${pkgdir}/usr/share/applications/sublime_text_3.desktop"
install -dm755 "${pkgdir}/usr/bin"
install -Dm755 "${pkgname}.sh" "${pkgdir}/usr/bin/subl3"
}

View file

@ -1,18 +0,0 @@
post_install() {
cat << _EOF
==> sublime-text-3 install note:
------------------------------------------------------------------------------
Since this is the last version of Sublime Text 3, you might want to disable
in-application reminders about new Sublime Text versions (reportedly only
works as a licensed user).
Add the following setting to your User Preferences file:
"update_check": false
_EOF
}
post_upgrade() {
post_install
}

View file

@ -1,3 +0,0 @@
#!/bin/sh
exec @ST_PATH@/sublime_text "$@"

View file

@ -1,20 +0,0 @@
pkgbase = sublime-text-4
pkgdesc = Sophisticated text editor for code, html and prose - stable build
pkgver = 4.4180
pkgrel = 1
url = https://www.sublimetext.com/download
arch = x86_64
arch = aarch64
license = custom
depends = libpng
depends = gtk3
provides = sublime-text
conflicts = sublime-text
source = sublime-text-4.sh
sha512sums = ac56e9b7dddaebb3d222795cfc644109c93cc3f79695b8f9ee56022c74fe04a1134dd54cab07c74ff1f96b783cb3dbc026c16095552f1d2dd83115ea274dc2e9
source_x86_64 = sublime_text_4_4_4180_1_x64.tar.xz::https://download.sublimetext.com/sublime_text_build_4180_x64.tar.xz
sha512sums_x86_64 = a115a352311a964268a1460710c562a7843b52c14c452745edb8706ac726e97b867931659b1a3286d44cb19b880f42f00af5bffe88aaa7916181a690e8324e1a
source_aarch64 = sublime_text_4_4_4180_1_arm64.tar.xz::https://download.sublimetext.com/sublime_text_build_4180_arm64.tar.xz
sha512sums_aarch64 = b127def4ad73cf390fc4fc69cae0bf71b9171b20579a742fbf2b18e3e40d3e0c37e1f8ceff7f7e2d1d8e71bcf3967a6ba282b1a94af5a5bbc88f0f99d89f9b84
pkgname = sublime-text-4

View file

@ -1,43 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
pkgname=sublime-text-4
pkgver=4.4180
pkgrel=1
pkgdesc='Sophisticated text editor for code, html and prose - stable build'
arch=('x86_64' 'aarch64')
url='https://www.sublimetext.com/download'
license=('custom')
depends=('libpng' 'gtk3')
conflicts=('sublime-text')
provides=('sublime-text')
source=("${pkgname}.sh")
source_x86_64=("${pkgname//-/_}_${pkgver/./_}_${pkgrel}_x64.tar.xz::https://download.sublimetext.com/sublime_text_build_${pkgver:2}_x64.tar.xz")
source_aarch64=("${pkgname//-/_}_${pkgver/./_}_${pkgrel}_arm64.tar.xz::https://download.sublimetext.com/sublime_text_build_${pkgver:2}_arm64.tar.xz")
sha512sums=('ac56e9b7dddaebb3d222795cfc644109c93cc3f79695b8f9ee56022c74fe04a1134dd54cab07c74ff1f96b783cb3dbc026c16095552f1d2dd83115ea274dc2e9')
sha512sums_x86_64=('a115a352311a964268a1460710c562a7843b52c14c452745edb8706ac726e97b867931659b1a3286d44cb19b880f42f00af5bffe88aaa7916181a690e8324e1a')
sha512sums_aarch64=('b127def4ad73cf390fc4fc69cae0bf71b9171b20579a742fbf2b18e3e40d3e0c37e1f8ceff7f7e2d1d8e71bcf3967a6ba282b1a94af5a5bbc88f0f99d89f9b84')
prepare() {
sed -i -e "s|@ST_PATH@|/opt/sublime_text|g" "${pkgname}.sh"
sed -i -e 's#/opt/sublime_text/sublime_text#/usr/bin/subl#g' 'sublime_text/sublime_text.desktop'
sed -i -e '\#^StartupNotify=#a StartupWMClass=subl' 'sublime_text/sublime_text.desktop'
}
package() {
install -dm755 "${pkgdir}/opt"
cp --preserve=mode -r 'sublime_text' "${pkgdir}/opt/sublime_text"
rm -f "${pkgdir}/opt/sublime_text/sublime_text.desktop"
for res in 128x128 16x16 256x256 32x32 48x48; do
install -dm755 "${pkgdir}/usr/share/icons/hicolor/${res}/apps"
ln -s "/opt/sublime_text/Icon/${res}/sublime-text.png" "${pkgdir}/usr/share/icons/hicolor/${res}/apps/sublime-text.png"
done
install -dm755 "${pkgdir}/usr/share/applications"
install -Dm644 'sublime_text/sublime_text.desktop' "${pkgdir}/usr/share/applications/sublime_text.desktop"
install -dm755 "${pkgdir}/usr/bin"
install -Dm755 "${pkgname}.sh" "${pkgdir}/usr/bin/subl"
}

View file

@ -1,3 +0,0 @@
#!/bin/sh
exec @ST_PATH@/sublime_text "$@"

View file

@ -1,21 +0,0 @@
pkgbase = sublime-text-dev
pkgdesc = Sophisticated text editor for code, html and prose - dev build
pkgver = 4.4183
pkgrel = 1
url = https://www.sublimetext.com/dev
install = sublime-text-dev.install
arch = x86_64
arch = aarch64
license = custom
depends = libpng
depends = gtk3
provides = sublime-text
conflicts = sublime-text
source = sublime-text-dev.sh
sha512sums = ac56e9b7dddaebb3d222795cfc644109c93cc3f79695b8f9ee56022c74fe04a1134dd54cab07c74ff1f96b783cb3dbc026c16095552f1d2dd83115ea274dc2e9
source_x86_64 = sublime_text_dev_4_4183_1_x64.tar.xz::https://download.sublimetext.com/sublime_text_build_4183_x64.tar.xz
sha512sums_x86_64 = f7218a7486b22937618e9eaa20fbc4d47d8d58a5bdef1579c1bd68aeca147c3195c34b988675d317c00c2be529e56c5e2ff01b5a9f64f9755e1d6bd89f5b21f0
source_aarch64 = sublime_text_dev_4_4183_1_arm64.tar.xz::https://download.sublimetext.com/sublime_text_build_4183_arm64.tar.xz
sha512sums_aarch64 = 329a54202c5837832f5666de8e32de53b80fbb61e3c1fcd424e12de8d793c5ddb7f1179053a0d60f19882895c24445f38c64f758dc2ca953d646e0dc19ea626a
pkgname = sublime-text-dev

View file

@ -1,46 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Sander Boom <sanderboom@gmail.com>
# Contributor: realitygaps <realitygaps at yahoo dot com>
pkgname=sublime-text-dev
pkgver=4.4183
pkgrel=1
pkgdesc='Sophisticated text editor for code, html and prose - dev build'
arch=('x86_64' 'aarch64')
url='https://www.sublimetext.com/dev'
license=('custom')
depends=('libpng' 'gtk3')
conflicts=('sublime-text')
provides=('sublime-text')
install=${pkgname}.install
source=("${pkgname}.sh")
source_x86_64=("${pkgname//-/_}_${pkgver/./_}_${pkgrel}_x64.tar.xz::https://download.sublimetext.com/sublime_text_build_${pkgver:2}_x64.tar.xz")
source_aarch64=("${pkgname//-/_}_${pkgver/./_}_${pkgrel}_arm64.tar.xz::https://download.sublimetext.com/sublime_text_build_${pkgver:2}_arm64.tar.xz")
sha512sums=('ac56e9b7dddaebb3d222795cfc644109c93cc3f79695b8f9ee56022c74fe04a1134dd54cab07c74ff1f96b783cb3dbc026c16095552f1d2dd83115ea274dc2e9')
sha512sums_x86_64=('f7218a7486b22937618e9eaa20fbc4d47d8d58a5bdef1579c1bd68aeca147c3195c34b988675d317c00c2be529e56c5e2ff01b5a9f64f9755e1d6bd89f5b21f0')
sha512sums_aarch64=('329a54202c5837832f5666de8e32de53b80fbb61e3c1fcd424e12de8d793c5ddb7f1179053a0d60f19882895c24445f38c64f758dc2ca953d646e0dc19ea626a')
prepare() {
sed -i -e "s|@ST_PATH@|/opt/sublime_text|g" "${pkgname}.sh"
sed -i -e 's#/opt/sublime_text/sublime_text#/usr/bin/subl#g' 'sublime_text/sublime_text.desktop'
sed -i -e '\#^StartupNotify=#a StartupWMClass=subl' 'sublime_text/sublime_text.desktop'
}
package() {
install -dm755 "${pkgdir}/opt"
cp --preserve=mode -r 'sublime_text' "${pkgdir}/opt/sublime_text"
rm -f "${pkgdir}/opt/sublime_text/sublime_text.desktop"
for res in 128x128 16x16 256x256 32x32 48x48; do
install -dm755 "${pkgdir}/usr/share/icons/hicolor/${res}/apps"
ln -s "/opt/sublime_text/Icon/${res}/sublime-text.png" "${pkgdir}/usr/share/icons/hicolor/${res}/apps/sublime-text.png"
done
install -dm755 "${pkgdir}/usr/share/applications"
install -Dm644 'sublime_text/sublime_text.desktop' "${pkgdir}/usr/share/applications/sublime_text.desktop"
install -dm755 "${pkgdir}/usr/bin"
install -Dm755 "${pkgname}.sh" "${pkgdir}/usr/bin/subl"
}

View file

@ -1,28 +0,0 @@
post_install() {
cat << _EOF
==> sublime-text-dev install note:
------------------------------------------------------------------------------
This package is used for the actual 'dev' branch of Sublime Text that
requires a license to be purchased from the Sublime Text website.
If you want to keep using the latest stable release you should instead
install 'sublime-text-4' or use the official repos provided by Sublime Text.
To disable in-application reminders about new Sublime Text dev versions,
add the following setting to your User Preferences file:
"update_check": false
_EOF
}
post_upgrade() {
cat << _EOF
==> sublime-text-dev upgrade note:
------------------------------------------------------------------------------
To disable in-application reminders about new Sublime Text dev versions,
add the following setting to your User Preferences file:
"update_check": false
_EOF
}

View file

@ -1,3 +0,0 @@
#!/bin/sh
exec @ST_PATH@/sublime_text "$@"

View file

@ -1,50 +0,0 @@
pkgbase = tuned-git
pkgdesc = Daemon that performs monitoring and adaptive configuration of devices in the system
pkgver = 2.24.0.r6.g35eed3c
pkgrel = 2
url = https://github.com/redhat-performance/tuned
arch = any
license = GPL-2.0-or-later
makedepends = desktop-file-utils
makedepends = git
depends = ethtool
depends = gawk
depends = hdparm
depends = polkit
depends = perf
depends = python-configobj
depends = python-dbus
depends = python-gobject
depends = python-linux-procfs
depends = python-pyudev
source = git+https://github.com/redhat-performance/tuned.git
sha512sums = SKIP
pkgname = tuned-git
optdepends = virt-what: Virtual machine detection
optdepends = systemtap: Detailed system monitoring
optdepends = tuned-ppd: power-profiles-daemon api translation
optdepends = wireless_tools: Wireless device power management
optdepends = x86_energy_perf_policy: Energy Performance Bias (EPB) support
provides = tuned
conflicts = tuned
backup = etc/tuned/active_profile
backup = etc/tuned/bootcmdline
backup = etc/tuned/cpu-partitioning-powersave-variables.conf
backup = etc/tuned/cpu-partitioning-variables.conf
backup = etc/tuned/post_loaded_profile
backup = etc/tuned/profile_mode
backup = etc/tuned/realtime-variables.conf
backup = etc/tuned/realtime-virtual-guest-variables.conf
backup = etc/tuned/realtime-virtual-host-variables.conf
backup = etc/tuned/tuned-main.conf
pkgname = tuned-ppd-git
pkgdesc = Daemon that allows applications to easily transition to TuneD from power-profiles-daemon (PPD)
depends = tuned
provides = tuned-ppd
provides = power-profiles-daemon
conflicts = tuned-ppd
conflicts = power-profiles-daemon
options = !emptydirs
backup = etc/tuned/ppd.conf

View file

@ -1,75 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Wes Jackson <icebal dot 7 at gmail dot com>
# Contributor: Iwan Timmer <irtimmer@gmail.com>
# Contributor: Timothée Ravier <tim at siosm dot fr>
# Contributor: Tom <reztho at archlinux dot org>
_pkgbase=tuned
pkgbase="${_pkgbase}-git"
pkgname=("${_pkgbase}-git" "${_pkgbase}-ppd-git")
pkgver=2.24.0.r6.g35eed3c
pkgrel=2
pkgdesc='Daemon that performs monitoring and adaptive configuration of devices in the system'
arch=('any')
url="https://github.com/redhat-performance/${_pkgbase}"
license=('GPL-2.0-or-later')
depends=('ethtool' 'gawk' 'hdparm' 'polkit' 'perf' 'python-configobj'
'python-dbus' 'python-gobject' 'python-linux-procfs' 'python-pyudev')
makedepends=('desktop-file-utils' 'git')
source=("git+${url}.git")
sha512sums=('SKIP')
pkgver() {
cd "${_pkgbase}"
git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/^v//g;s/-/./g'
}
prepare() {
cd "${_pkgbase}"
mv libexec lib
sed -i 's|/libexec/|/lib/|g' Makefile
sed -i 's|/sbin/|/bin/|g' Makefile tuned.service tuned-gui.py tuned-gui.desktop tuned/ppd/tuned-ppd.service
sed -i 's|install-ppd: install$|install-ppd: install-dirs|' Makefile
}
package_tuned-git() {
optdepends=('virt-what: Virtual machine detection'
'systemtap: Detailed system monitoring'
'tuned-ppd: power-profiles-daemon api translation'
'wireless_tools: Wireless device power management'
'x86_energy_perf_policy: Energy Performance Bias (EPB) support')
provides=("${_pkgbase}")
conflicts=("${_pkgbase}")
backup=('etc/tuned/active_profile'
'etc/tuned/bootcmdline'
'etc/tuned/cpu-partitioning-powersave-variables.conf'
'etc/tuned/cpu-partitioning-variables.conf'
'etc/tuned/post_loaded_profile'
'etc/tuned/profile_mode'
'etc/tuned/realtime-variables.conf'
'etc/tuned/realtime-virtual-guest-variables.conf'
'etc/tuned/realtime-virtual-host-variables.conf'
'etc/tuned/tuned-main.conf')
cd "${_pkgbase}"
make DESTDIR="${pkgdir}" install
rm -rv "${pkgdir}"/{run,var}
python -m compileall -d /usr/lib "${pkgdir}/usr/lib"
python -O -m compileall -d /usr/lib "${pkgdir}/usr/lib"
}
package_tuned-ppd-git() {
pkgdesc='Daemon that allows applications to easily transition to TuneD from power-profiles-daemon (PPD)'
depends=("${_pkgbase}")
provides=("${_pkgbase}-ppd" 'power-profiles-daemon')
conflicts=("${_pkgbase}-ppd" 'power-profiles-daemon')
backup=('etc/tuned/ppd.conf')
options=('!emptydirs')
cd "${_pkgbase}"
make DESTDIR="${pkgdir}" install-ppd
}

View file

@ -1,20 +0,0 @@
pkgbase = waifu2x-ncnn-vulkan
pkgdesc = waifu2x converter ncnn version, runs fast on intel / amd / nvidia GPU with vulkan
pkgver = 20220728
pkgrel = 1
url = https://github.com/nihui/waifu2x-ncnn-vulkan
arch = x86_64
arch = aarch64
license = MIT
makedepends = cmake
makedepends = glslang
makedepends = vulkan-headers
makedepends = ncnn
depends = vulkan-icd-loader
depends = libwebp
source = https://github.com/nihui/waifu2x-ncnn-vulkan/archive/20220728/waifu2x-ncnn-vulkan-20220728.tar.gz
source = model_path.patch
sha512sums = ea17cbbcb7318586793222c6c7139f67395c49c567b601969b829fc426eb517308509b7c1da69171fcbf8e68baa5cec3e52e98159e3c5e6c35ce47a8514dadb7
sha512sums = 1a286730a7168f63c56544b334277234b84415bcc4c2956c8f8f39ef0d864f9de4ecb38cb9491da91c45b43d5ecdba0018931c2926fb6e2aea98edf3ca42657a
pkgname = waifu2x-ncnn-vulkan

View file

@ -1,41 +0,0 @@
pkgname=waifu2x-ncnn-vulkan
pkgver=20220728
pkgrel=1
pkgdesc='waifu2x converter ncnn version, runs fast on intel / amd / nvidia GPU with vulkan'
arch=('x86_64' 'aarch64')
url="https://github.com/nihui/$pkgname"
license=('MIT')
depends=('vulkan-icd-loader' 'libwebp')
makedepends=('cmake' 'glslang' 'vulkan-headers' 'ncnn')
source=("https://github.com/nihui/$pkgname/archive/$pkgver/$pkgname-$pkgver.tar.gz"
'model_path.patch')
sha512sums=('ea17cbbcb7318586793222c6c7139f67395c49c567b601969b829fc426eb517308509b7c1da69171fcbf8e68baa5cec3e52e98159e3c5e6c35ce47a8514dadb7'
'1a286730a7168f63c56544b334277234b84415bcc4c2956c8f8f39ef0d864f9de4ecb38cb9491da91c45b43d5ecdba0018931c2926fb6e2aea98edf3ca42657a')
prepare() {
cd $pkgname-$pkgver
# TODO: Make proper patch
patch -Np1 < '../model_path.patch'
}
build() {
cmake -B build -S "$pkgname-$pkgver/src" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DGLSLANG_TARGET_DIR=/usr/lib/cmake \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_SYSTEM_NCNN=on \
-DUSE_SYSTEM_WEBP=on
cmake --build build
}
package() {
install -Dm755 -t "$pkgdir/usr/bin" build/$pkgname
install -Dm644 -t "$pkgdir/usr/share/licenses/$pkgname" $pkgname-$pkgver/LICENSE
cd $pkgname-$pkgver/models
for f in models-*/*; do
install -Dm644 "$f" "$pkgdir/usr/share/$pkgname/$f"
done
}

View file

@ -1,26 +0,0 @@
diff --git a/src/filesystem_utils.h b/src/filesystem_utils.h
index fdf172c..9706dc9 100644
--- a/src/filesystem_utils.h
+++ b/src/filesystem_utils.h
@@ -169,7 +169,7 @@ static path_t sanitize_filepath(const path_t& path)
if (filepath_is_readable(path))
return path;
- return get_executable_directory() + path;
+ return "/usr/share/waifu2x-ncnn-vulkan/" + path;
}
#endif // FILESYSTEM_UTILS_H
diff --git a/src/main.cpp b/src/main.cpp
index fa10e6f..5590b2f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -470,7 +470,7 @@ int main(int argc, char** argv)
int noise = 0;
int scale = 2;
std::vector<int> tilesize;
- path_t model = PATHSTR("models-cunet");
+ path_t model = PATHSTR("/usr/share/waifu2x-ncnn-vulkan/models-cunet");
std::vector<int> gpuid;
int jobs_load = 1;
std::vector<int> jobs_proc;

View file

@ -1,12 +0,0 @@
pkgbase = wxedid
pkgdesc = wxWidgets-based EDID (Extended Display Identification Data) editor
pkgver = 0.0.31
pkgrel = 1
url = https://sourceforge.net/projects/wxedid/
arch = x86_64
license = GPL-3.0-or-later
depends = wxwidgets-gtk3
source = https://downloads.sourceforge.net/wxedid/wxedid-0.0.31.tar.gz
sha512sums = 9e83ce46912ef1a43bccfa4e4086697cfec444ef932040e618210d682a6fa4a40bf78aece953e10a959ae7a38671b5782a0a4562cd776f71b5784c3bd1fcda5d
pkgname = wxedid

View file

@ -1,30 +0,0 @@
# Maintainer: Manuel Hüsers <aur@huesers.de>
# Contributor: Jonathan Liu <net147@gmail.com>
pkgname=wxedid
pkgver=0.0.31
pkgrel=1
pkgdesc='wxWidgets-based EDID (Extended Display Identification Data) editor'
arch=('x86_64')
url="https://sourceforge.net/projects/${pkgname}/"
license=('GPL-3.0-or-later')
depends=('wxwidgets-gtk3')
source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz")
sha512sums=('9e83ce46912ef1a43bccfa4e4086697cfec444ef932040e618210d682a6fa4a40bf78aece953e10a959ae7a38671b5782a0a4562cd776f71b5784c3bd1fcda5d')
build() {
cd "${pkgname}-${pkgver}"
autoreconf -f -i
./configure --prefix=/usr
make
}
check() {
cd "${pkgname}-${pkgver}"
make check
}
package() {
cd "${pkgname}-${pkgver}"
make DESTDIR="$pkgdir" install
}