port to pika os 4
Some checks failed
PikaOS Package Build & Release (Canary) (amd64-v3) / build (push) Has been cancelled
PikaOS Package Build Only (Canary) (amd64-v3) / build (push) Successful in 1m6s
PikaOS Package Build Only (amd64-v3) / build (push) Failing after 1s
PikaOS Package Build & Release (amd64-v3) / build (push) Failing after 1s

This commit is contained in:
Ward from fusion-voyager-3 2024-07-30 02:03:13 +03:00
parent 454f715984
commit ece7daacc4
26 changed files with 360 additions and 1199 deletions

1
.github/build-canary-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/build-nest-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/release-canary-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/release-nest-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

37
.github/workflows/build-canaryv3.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: PikaOS Package Build Only (Canary) (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/build-canary-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:canaryv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh

37
.github/workflows/build-nestv3.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: PikaOS Package Build Only (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/build-nest-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:nestv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh

40
.github/workflows/release-canaryv3.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: PikaOS Package Build & Release (Canary) (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/release-canary-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:canaryv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh

40
.github/workflows/release-nestv3.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: PikaOS Package Build & Release (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/release-nest-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:nestv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh

View File

@ -1,49 +0,0 @@
name: PikaOS Package Release
on:
workflow_dispatch
jobs:
build:
runs-on: self-hosted
container:
image: ghcr.io/pikaos-linux/pika-package-container:latest
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- name: Import GPG key
id: import_gpg
uses: crazy-max/ghaction-import-gpg@v5
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
if_key_exists: replace
- name: Update apt cache
run: apt update -y
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh
- name: Purge cache
uses: strrife/cloudflare-chunked-purge-action@master
env:
# Zone is required by both authentication methods
CLOUDFLARE_ZONE: ${{ secrets.CLOUDFLARE_ZONE }}
CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
PURGE_URLS: ${{ vars.PURGE_URLS }}

24
LICENSE.md Normal file
View File

@ -0,0 +1,24 @@
MIT License (With DPKG packaging compatibility)
Copyright (c) 2024 PikaOS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
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 OR COPYRIGHT HOLDERS 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.
Notes:
The files covered by this license are any files and directories in the root of this repository (including but not limited to: `main.sh`, `release.sh`, and `.github`), with the exception of the `debian` directory and its contents if `debian/copyright` exists, and declares any files or directories as a different LICENSE/COPYRIGHT.

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
xwayland (2:24.1.1-101pika1) pikauwu; urgency=medium
* Update to pikaos 4 and new release
-- Ward Nakchbandi <hotrod.master@hotmail.com> Thu, 04 Oct 2022 17:50:00 +0300
xwayland (2:24.1.0-100pika1) pikauwu; urgency=medium xwayland (2:24.1.0-100pika1) pikauwu; urgency=medium
* Update to pikauwu * Update to pikauwu

26
debian/control vendored
View File

@ -8,25 +8,26 @@ Build-Depends:
meson, meson,
pkg-config, pkg-config,
quilt, quilt,
libdrm-dev (>= 2.4.89), libdecor-0-dev,
libdrm-dev (>= 2.4.116),
libepoxy-dev, libepoxy-dev,
libgcrypt-dev, libgcrypt-dev,
libgbm-dev, libgbm-dev,
libnvidia-egl-wayland-dev, libnvidia-egl-wayland-dev,
libpixman-1-dev, libpixman-1-dev,
libtirpc-dev,
libxcvt-dev, libxcvt-dev,
libxfont-dev, libxfont-dev,
libxkbfile-dev, libxkbfile-dev,
libxshmfence-dev, libxshmfence-dev,
libxv-dev, libxv-dev,
libwayland-dev, libwayland-dev,
libwayland-dev:native,
mesa-common-dev, mesa-common-dev,
x11proto-dev, x11proto-dev (>= 2023.2),
x11proto-present-dev,
xfonts-utils, xfonts-utils,
xtrans-dev, xtrans-dev,
wayland-protocols, wayland-protocols,
libudev-dev,
Standards-Version: 4.6.0 Standards-Version: 4.6.0
Vcs-Git: https://salsa.debian.org/xorg-team/wayland/xwayland.git Vcs-Git: https://salsa.debian.org/xorg-team/wayland/xwayland.git
Vcs-Browser: https://salsa.debian.org/xorg-team/wayland/xwayland Vcs-Browser: https://salsa.debian.org/xorg-team/wayland/xwayland
@ -36,22 +37,11 @@ Package: xwayland
Architecture: linux-any Architecture: linux-any
Depends: Depends:
xserver-common, xserver-common,
libc6, ${shlibs:Depends},
libdrm2, ${misc:Depends},
libepoxy0,
libgbm1,
libgcrypt20,
libgl1,
libpixman-1-0,
libtirpc3,
libwayland-client0,
libxau6,
libxcvt0,
libxdmcp6,
libxfont2,
libxshmfence1,
libnvidia-egl-wayland1 libnvidia-egl-wayland1
Description: X server for running X clients under Wayland Description: X server for running X clients under Wayland
This package provides an X server running on top of wayland, using wayland This package provides an X server running on top of wayland, using wayland
input devices for input and forwarding either the root window or individual input devices for input and forwarding either the root window or individual
top-level windows as wayland surfaces. top-level windows as wayland surfaces.

1
debian/files vendored
View File

@ -1 +0,0 @@
xwayland_22.1.3-99pika2_source.buildinfo x11 optional

15
debian/rules vendored
View File

@ -1,9 +1,5 @@
#!/usr/bin/make -f #!/usr/bin/make -f
export DEB_CFLAGS_MAINT_APPEND=-Wno-error
export DEB_LDFLAGS_MAINT_APPEND=-Wno-error
export DEB_BUILD_OPTIONS=nocheck
include /usr/share/dpkg/pkg-info.mk include /usr/share/dpkg/pkg-info.mk
SUPPORT = https://www.debian.org/support SUPPORT = https://www.debian.org/support
@ -13,13 +9,8 @@ SUPPORT = https://www.debian.org/support
override_dh_auto_configure: override_dh_auto_configure:
dh_auto_configure -- \ dh_auto_configure -- \
-Dbuilder_addr="debian-x@lists.debian.org" \ -Dbuilder_addr="debian-x@lists.debian.org"
-Dbuilder_string="$(DEB_SOURCE) $(DEB_VERSION_UPSTREAM) ($(SUPPORT))" \ -Dbuilder_string="$(DEB_SOURCE) $(DEB_VERSION_UPSTREAM) ($(SUPPORT))"
-Dxkb_dir=/usr/share/X11/xkb \
-Dxkb_output_dir=/var/lib/xkb \
-Dxcsecurity=true \
-Dglamor=true \
-Ddri3=true
override_dh_auto_install: override_dh_auto_install:
dh_auto_install --destdir=debian/tmp dh_auto_install --destdir=debian/tmp
@ -36,3 +27,5 @@ override_dh_clean:
gentarball: gentarball:
git archive --format=tar upstream-unstable --prefix=$(DEB_SOURCE)-$(DEB_VERSION_UPSTREAM)/ \ git archive --format=tar upstream-unstable --prefix=$(DEB_SOURCE)-$(DEB_VERSION_UPSTREAM)/ \
| gzip -9 > ../$(DEB_SOURCE)_$(DEB_VERSION_UPSTREAM).orig.tar.gz | gzip -9 > ../$(DEB_SOURCE)_$(DEB_VERSION_UPSTREAM).orig.tar.gz

View File

@ -1 +1 @@
3.0 (native) 3.0 (quilt)

View File

@ -1,493 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
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
gZp+x8Yi4yc+nrIcmbB1
=SX54
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQINBEoIZDEBEAD5MrFJC9Hi4mXZ97HlFotHIrkMURIFkvl17XEuJ8Jh3hlzJD/q
K1ByzQGHozzVcfbg4lP4lzqfdps6WCbusqtVYcTF61jjFhYo398lBgpKHUBbsEPC
SfYp5WkoICa824zcmWO9qYizGqkpd1C6gdQtK6ZaGjLx3xt08M9oVZqj+E2SsPHz
WaYLugCwCKhlbVTaP28OGy7tBRY6hcLtiZc2CNpr0YjZ53B7Ubs0BVYQutYxho7l
u0ChE9zNesy4KaIOumXZjTUrMCLpxF/01M1tfzXArMMLAqx3F1M6QIuy18F1zJ2W
LlkRwJi47NTiJ6jwLUYKBTN9T3nmy0oNAvv5v4B8nWgZAOjjDC2pFoVJa1O3K8Ab
vSRA3L/N+80MxM9VK5bw451pDqNhxn5q0yeS+RBagmOb2PZSMIuw9adooMurAfDJ
hsxqp3KaCTdYX5p+mCczNkoKMRUQiVUi250426o69IAmtpVi1q+MV0qWLl2tSvx4
I4iph9XAhho7ycb4jziWf46ZljnhoGn54EU5GEqH0huakYcXK7XoNxU0XzS/eQuD
qVy2NH2C945h3LAtMo4zr49VZXjNnFn++zZqCUHASDX6Y3h8uMpzIY6Eslu2S85W
gpb+V4M5RvKPeuEJTuzxJOOW/B3nyoWFQfN6SXWGVW618dLEmFmQnyLBwwARAQAB
tCxKdWxpZW4gQ3Jpc3RhdSA8anVsaWVuLmNyaXN0YXVAZW5zLWx5b24ub3JnPokC
PAQTAQgAJgIbAwIeAQIXgAYLCQgHAwIGFQoJCAsCBRYCAwEABQJK4Fj7AhkBAAoJ
EDEBgAUJBeQMu/wP/jmGDVXrXZXtNJ7Ov94iDBwcEBlLoNHUyH4FWQG05eW3CqT0
w9ZOvZEQ/kKlSjpdZzPiYMjgunl7D78aoL4Il2qKyirlT+trt+v79rl5VkD2xJx/
gi7iN34VJQ50iGBxyxPicUjkXUO17kpJ2/uw/7/pNG0buBDbLGPwYPQFyV3UVOv7
R8chvmAqtujck1961gRffKPihiv6sj4zjGs8ukmLCO3EgLzpz3shBfJyq6GNMNmy
aVX7hAcwhErKCrPeGVlzFpCLbtqIxpq6uPfxrDI20LhQkQ9NPD/4t1qkvenRCY77
wqoiUBSYlpsKND2I2mywOE2FVMj34aBKvn96YsZWlj3Rkc++JvzdZQy09WQIUXt5
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
=+xMJ
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2
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
gPSRdLLYOLo=
=+H4u
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=VZ/9
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQGiBDsehS8RBACbsIQEX31aYSIuEKxEnEX82ezMR8z3LG8ktv1KjyNErUX9Pt7A
UC7W3W0bLUhu8Le8S2va6hi7GfSAifl0ih3k6Bv1Itzgnd+7ZmSrvCN8yGJaHNQf
AevAuEboIb+MaVHo9EMJj4ikOcRZCmQWw7evu/D9uQdtkCnRY9iJiAGxbwCguBHt
poGMxDOINCr5UU6qt+m4O+UD/355ohBBzzyh49lTj0kTFKr0Ozd20G2FbcqHgfFL
1dc1MPyigej2gLga2osu2QY0ObvAGkOuWBi3LTY8Zs8uqFGDC4ZAwMPoFy3yzu3n
e6T7d/68rJil0QcdQjzzHi6ekqHuhst4a+/+D23hZa8MJBEcdOhRhsaDVGAJSFEQ
B1qLBACOs0xN+XblejO35gsDSVVk8s+FUUw3TSWJBfZa3ImpV2U2tBO4qck+wqbH
NfdnU/crrsHahjzBjvk8Up7VoY8oT+z03sal2vXEonS279xN2B92TttrAgwosujg
uFO/7tvzymWC76rDEwue8TsADE11ErjwaBTs8ZXfnN/uAANgPLQjTWljaGVsIERh
ZW56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD6IXgQTEQIAHgUCQFXxJgIbAwYLCQgH
AwIDFQIDAxYCAQIeAQIXgAAKCRBaga+OatuyAIrPAJ9ykonXI3oQcX83N2qzCESt
LNW47gCeLWm/QiPYjqtGUnnSbyuTQfIySkK0I01pY2hlbCBEYWVuemVyIDxkYWVu
emVyQGRlYmlhbi5vcmc+iF8EExECABcFAjsehTAFCwcKAwQDFQMCAxYCAQIXgAAS
CRBaga+OatuyAAdlR1BHAAEBZpkAn0sVwcTHLSaky8J9iI7+VSWG1FivAJkBsKAF
BDC5qPAnrvzSQ4JJEvdsbbkBDQQ7HoVFEAQAlmRy+SU/AkKA2LDfunQZKEqYUYap
/9rfFlkSmMio3HOyEVEWd5nN7h/kuHNtfX+8ibn5lewRbKakl9nPIKZg/DzpBwXH
Jl+WQDEfH0t4P7z0SXFvDrBPQJwu9K/xE59TWbxiEZtXqDbNbIsPT+dpAZVvx7gW
FUoY1jYQRseAUGsAAwYD/RWS0U4LEUF3MtDXtEJPAInfGnI/iqwskfTIKgDbqsfb
MTZHMHKGtMVNhnNsUSJ3d10aIc4EQv5s77YY21+JgqZtOSPW0xknwvqG4o41pWsB
IXMu9lrZ2VzbONr1lKSwqaB7kE5MpaBvJ6kRzmrFKO5ixitfnF8uBNkLlpuGHO2l
iEYEGBECAAYFAjsehUUACgkQWoGvjmrbsgCWxwCfZR+TZ3r/engK7LP81fsqkvZ1
DxYAn1QPkkRqSF+h953w9Ko4zuM47csI
=b3kC
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQGiBERd0h4RBACflXMwRMuZ/gICB7oM/SwnYMoDeRVaZHYT2RtI6iaNQpovoMas
fbLX31icweQm9sMLQJR/bNABpp28Fs1S4yNt9SwAProigexyWl3fFE3uqoVRmglZ
uQdyXl7nnPC7A3hxHPX88tsZS4UlLFRssTjNnrzzhSR3xyyIlOJnmG5pJwCg/yaH
DECRtdWm9gIJZwfM6S+ANYUD/0s6FPCIdbDqCzNcMH7YZID+JjBOU3VlRdXfzGmx
Iy2aPBpC9pkb0EUEL94QZ5Ysa1EGNnNUPq8dQWOr/NllCt2/l0HDLGoziBCpBTvG
ZNnFaJoErG0kmCH2u0w9VmKKSBq6C0sI8rFW1JthKc/bu6ucBKKbpi4sFYAMyZHn
sNbzA/9VYevyns5TmZeR7t+x8YRj6xZxWVNGm20gnBBhHVnq/EGIn4a/YN1NLFNc
4EuarFnzl0w6L1IQHanM+ajBJgzL4oSYCufhTSXgA2utrpIRtKkRW9JH6zt3J5hk
W8oIcEsY3YRKQ3iVKS3Kz8PgSwezNewFT6o3Juu//95O5qSm8rQiT2xpdmllciBG
b3VyZGFuIDxmb3VyZGFuQHhmY2Uub3JnPohpBBMRAgApAhsjBgsJCAcDAgQVAggD
BBYCAwECHgECF4AFCRpUHdIFAkajy3QCGQEACgkQFHBtvh5LRUA0hwCff1hwCeEu
cHWkhFAO4EiIiGEUxJwAoNlgcwHVYhqSesplI6ePAoEfDac5tCNPbGl2aWVyIEZv
dXJkYW4gPGZvdXJkYW5AZ21haWwuY29tPohmBBMRAgAmAhsjBgsJCAcDAgQVAggD
BBYCAwECHgECF4AFAkajy1gFCRpUHdIACgkQFHBtvh5LRUCEqACfcmzhRUwchMrd
uClwQJXrF+6gSJQAoJlrYElt2c6BsCVxtJJxEakjwww8tCVPbGl2aWVyIEZvdXJk
YW4gPG9mb3VyZGFuQHJlZGhhdC5jb20+iGYEExECACYCGyMGCwkIBwMCBBUCCAME
FgIDAQIeAQIXgAUCRqPLWAUJGlQd0gAKCRAUcG2+HktFQKczAKDeq33Q9kYEKPAL
5FdFAfX5HOdbMQCgrJ1XMhV5ELa+QYhFTH6TmNfffeg=
=gHbK
-----END PGP PUBLIC KEY BLOCK-----

4
debian/watch vendored
View File

@ -1,4 +0,0 @@
#git=git://anongit.freedesktop.org/xorg/xserver
version=3
opts="pgpsigurlmangle=s/$/.sig/" \
https://xorg.freedesktop.org/releases/individual/xserver/ xwayland-(.*)\.tar\.xz

View File

@ -1 +1,4 @@
usr usr/bin/Xwayland
usr/lib/*/pkgconfig/
usr/share/applications/org.freedesktop.Xwayland.desktop
usr/share/man/man1/Xwayland.1

16
main.sh
View File

@ -1,16 +1,24 @@
#! /bin/bash
set -e
VERSION="24.1.1"
source ./pika-build-config.sh
echo "$PIKA_BUILD_ARCH" > pika-build-arch
# Clone Upstream # Clone Upstream
git clone https://gitlab.freedesktop.org/xorg/xserver -b xwayland-24.1 ./xwayland git clone https://gitlab.freedesktop.org/xorg/xserver -b xwayland-"$VERSION" ./xwayland
cp -rvf ./debian ./xwayland/ cp -rvf ./debian ./xwayland/
#cp -vf ./meson.build ./xwayland/
cd ./xwayland cd ./xwayland
for i in $(cat ../patches/series) ; do echo "Applying Patch: $i" && patch -Np1 -i ../patches/$i || bash -c "echo "Applying Patch $i Failed!" && exit 2"; done for i in $(cat ../patches/series) ; do echo "Applying Patch: $i" && patch -Np1 -i ../patches/$i || bash -c "echo "Applying Patch $i Failed!" && exit 2"; done
# Get build deps # Get build deps
apt update
apt upgrade -y
apt-get build-dep ./ -y apt-get build-dep ./ -y
# Build package # Build package
LOGNAME=root dh_make --createorig -y -l -p xwayland_"$VERSION" || echo "dh-make: Ignoring Last Error"
dpkg-buildpackage --no-sign dpkg-buildpackage --no-sign
# Move the debs to output # Move the debs to output

View File

@ -1,606 +0,0 @@
project('xwayland', 'c',
default_options: [
'buildtype=debugoptimized',
'c_std=gnu99',
],
version: '24.1.0',
meson_version: '>= 0.52.0',
)
release_date = '2024-01-16'
add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc'])
cc = meson.get_compiler('c')
add_project_arguments('-fno-strict-aliasing', language : 'c')
add_project_arguments('-fvisibility=hidden', language : 'c')
add_project_link_arguments('-fvisibility=hidden', language : 'c')
if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
test_wflags = [
'-Wall',
'-Wpointer-arith',
'-Wmissing-declarations',
'-Wformat=2',
'-Wstrict-prototypes',
'-Wmissing-prototypes',
'-Wnested-externs',
'-Wbad-function-cast',
'-Wold-style-definition',
'-Wunused',
'-Wuninitialized',
'-Wshadow',
'-Wmissing-noreturn',
'-Wmissing-format-attribute',
'-Wredundant-decls',
'-Wno-error',
]
else
test_wflags = []
endif
common_wflags = []
foreach wflag: test_wflags
if cc.has_argument(wflag)
common_wflags += [ wflag ]
endif
endforeach
add_project_arguments(common_wflags, language : ['c', 'objc'])
libdrm_req = '>= 2.4.109'
libselinux_req = '>= 2.0.86'
xext_req = '>= 1.0.99.4'
wayland_req = '>= 1.21.0'
wayland_protocols_req = '>= 1.30'
gbm_req = '>= 10.2'
xproto_dep = dependency('xproto', version: '>= 7.0.31', fallback: ['xorgproto', 'ext_xorgproto'])
randrproto_dep = dependency('randrproto', version: '>= 1.6.0', fallback: ['xorgproto', 'ext_xorgproto'])
renderproto_dep = dependency('renderproto', version: '>= 0.11', fallback: ['xorgproto', 'ext_xorgproto'])
xextproto_dep = dependency('xextproto', version: '>= 7.2.99.901', fallback: ['xorgproto', 'ext_xorgproto'])
inputproto_dep = dependency('inputproto', version: '>= 2.3.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
kbproto_dep = dependency('kbproto', version: '>= 1.0.3', fallback: ['xorgproto', 'ext_xorgproto'])
fontsproto_dep = dependency('fontsproto', version: '>= 2.1.3', fallback: ['xorgproto', 'ext_xorgproto'])
fixesproto_dep = dependency('fixesproto', version: '>= 6.0', fallback: ['xorgproto', 'ext_xorgproto'])
damageproto_dep = dependency('damageproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto'])
xcmiscproto_dep = dependency('xcmiscproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'])
bigreqsproto_dep = dependency('bigreqsproto', version: '>= 1.1.0', fallback: ['xorgproto', 'ext_xorgproto'])
presentproto_dep = dependency('presentproto', version: '>= 1.3', fallback: ['xorgproto', 'ext_xorgproto'])
xtrans_dep = dependency('xtrans', version: '>= 1.3.5')
videoproto_dep = dependency('videoproto', fallback: ['xorgproto', 'ext_xorgproto'])
compositeproto_dep = dependency('compositeproto', version: '>= 0.4', fallback: ['xorgproto', 'ext_xorgproto'])
recordproto_dep = dependency('recordproto', version: '>= 1.13.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
scrnsaverproto_dep = dependency('scrnsaverproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto'])
resourceproto_dep = dependency('resourceproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'])
dri3proto_dep = dependency('dri3proto', version: '>= 1.2', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri3') == 'true')
xineramaproto_dep = dependency('xineramaproto', fallback: ['xorgproto', 'ext_xorgproto'])
xf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('xf86bigfont'))
xf86vidmodeproto_dep = dependency('xf86vidmodeproto', version: '>= 2.2.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
xshmfence_dep = dependency('xshmfence', version: '>= 1.1', required: false)
xwaylandproto_dep = dependency('xwaylandproto', version: '>= 1.0', fallback: ['xorgproto', 'ext_xorgproto'], required: false)
pixman_dep = dependency('pixman-1')
libbsd_dep = dependency('libbsd-overlay', required: false)
xkbcomp_dep = dependency('xkbcomp', required: false)
xkbfile_dep = dependency('xkbfile')
xfont2_dep = dependency('xfont2', version: '>= 2.0')
# libsystemd-daemon was moved into libsystemd in version 209
libsystemd_daemon_dep = dependency('libsystemd', version: '>= 209', required: false)
if not libsystemd_daemon_dep.found()
libsystemd_daemon_dep = dependency('libsystemd-daemon', required: false)
endif
build_hashtable = false
# Resolve default values of some options
xkb_dir = get_option('xkb_dir')
if xkb_dir == ''
if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig'
xkb_dir = xkbcomp_dep.get_pkgconfig_variable('xkbconfigdir')
endif
if xkb_dir == ''
xkb_dir = join_paths(get_option('prefix'), 'share/X11/xkb')
endif
endif
xkb_output_dir = get_option('xkb_output_dir')
if xkb_output_dir == ''
xkb_output_dir = join_paths(xkb_dir, 'compiled')
endif
xkb_bin_dir = get_option('xkb_bin_dir')
if xkb_bin_dir == ''
if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig'
xkb_bin_dir = xkbcomp_dep.get_pkgconfig_variable('bindir')
endif
if xkb_bin_dir == ''
xkb_bin_dir = join_paths(get_option('prefix'), get_option('bindir'))
endif
endif
dfp = get_option('default_font_path')
if dfp == ''
fontrootdir = get_option('fontrootdir')
if fontrootdir == ''
fontutil_dep = dependency('fontutil', required: false)
if fontutil_dep.found()
fontrootdir = fontutil_dep.get_pkgconfig_variable('fontrootdir')
else
fontrootdir = join_paths(get_option('prefix'), get_option('datadir'), 'fonts', 'X11')
endif
endif
dfp_elements = [
join_paths(fontrootdir, 'misc'),
join_paths(fontrootdir, 'TTF'),
join_paths(fontrootdir, 'OTF'),
join_paths(fontrootdir, 'Type1'),
join_paths(fontrootdir, '100dpi'),
join_paths(fontrootdir, '75dpi'),
]
if host_machine.system() == 'darwin'
dfp_elements += [
'/Library/Fonts',
'/System/Library/Fonts',
]
endif
default_font_path = ','.join(dfp_elements)
else
default_font_path = dfp
endif
build_glamor = get_option('glamor')
with_dtrace = get_option('dtrace')
if with_dtrace
dtrace = find_program('dtrace', required: true)
endif
build_xwayland = true
xwayland_path = get_option('xwayland-path')
if (xwayland_path == '')
xwayland_path = join_paths(get_option('prefix'), get_option('bindir'))
endif
xwayland_dep = [
dependency('wayland-client', version: wayland_req, required: true),
dependency('wayland-protocols', version: wayland_protocols_req, required: true),
dependency('libxcvt', fallback: ['libxcvt', 'libxcvt_dep'], required: true),
]
if build_glamor
xwayland_dep += dependency('libdrm', version: libdrm_req, required: true)
xwayland_dep += dependency('epoxy', required: true)
endif
if get_option('ipv6') == 'auto'
build_ipv6 = cc.has_function('getaddrinfo')
else
build_ipv6 = get_option('ipv6') == 'true'
endif
gbm_dep = dependency('', required: false)
epoxy_dep = dependency('', required: false)
if build_glamor
gbm_dep = dependency('gbm', version: gbm_req, required: false)
epoxy_dep = dependency('epoxy', required: false)
endif
libdecor_dep = dependency('libdecor-0', required: false)
libdecor_option = get_option('libdecor')
if libdecor_option == 'auto'
have_libdecor = libdecor_dep.found()
else
have_libdecor = libdecor_option == 'true'
if have_libdecor and not libdecor_dep.found()
error('libdecor support requested but not found')
endif
endif
eglstream_option = get_option('xwayland_eglstream')
if build_glamor
eglstream_dep = dependency('wayland-eglstream-protocols', required:false)
if eglstream_option == 'auto'
build_eglstream = eglstream_dep.found()
else
build_eglstream = eglstream_option == 'true'
if build_eglstream and not eglstream_dep.found()
error('glamor EGLStream support requested, but wayland-eglstream-protocols not found')
endif
endif
else
build_eglstream = false
endif
if build_xwayland
libei_dep = dependency('libei-1.0', version: '>= 1.0.0', required: get_option('xwayland_ei') in ['portal', 'socket'])
liboeffis_dep = dependency('liboeffis-1.0', version: '>= 1.0.0', required: get_option('xwayland_ei') == 'portal')
build_ei = libei_dep.found() and get_option('xwayland_ei') != 'false'
build_ei_portal = liboeffis_dep.found() and get_option('xwayland_ei') in ['portal', 'auto']
else
build_ei = false
build_ei_portal = false
endif
# Lots of sha1 options, because Linux is about choice :)
# The idea behind the ordering here is that we should first prefer system
# builtin providers, and then smaller implementations of over larger ones.
test_sha1 = [
'libc', # libmd API is in libc on some BSDs
'CommonCrypto', # darwin API
'CryptoAPI', # windows API
'libmd', # other BSDs & Solaris
'libsha1', # "a tiny library providing a SHA1 implementation, created for facilitating X server compilation on embedded devices where larger libraries containing SHA1 implementations are not needed"
'libnettle',
'libgcrypt', # in debian base system
'libcrypto',
]
if get_option('sha1') != 'auto'
test_sha1 = [get_option('sha1')]
endif
sha1_found = false
foreach t : test_sha1
if t == 'libc'
if cc.has_function('SHA1Init')
sha1_found = true
sha1_dep = dependency('', required: false)
endif
elif t == 'CommonCrypto'
if cc.has_function('CC_SHA1_Init')
sha1_found = true
sha1_dep = dependency('', required: false)
endif
elif t == 'CryptoAPI'
if cc.has_header('wincrypt.h')
sha1_found = true
sha1_dep = dependency('', required: false)
endif
elif t == 'libmd'
md_dep = cc.find_library('md', required: false)
if md_dep.found()
sha1_found = true
sha1_dep = md_dep
endif
elif t == 'libsha1'
libsha1_dep = dependency('libsha1', required: false)
if libsha1_dep.found()
sha1_found = true
sha1_dep = libsha1_dep
endif
elif t == 'libnettle'
nettle_dep = dependency('nettle', required: false)
if nettle_dep.found()
sha1_found = true
sha1_dep = nettle_dep
endif
elif t == 'libgcrypt'
gcrypt_dep = dependency('libgcrypt', required: false)
if gcrypt_dep.found()
sha1_found = true
sha1_dep = gcrypt_dep
endif
elif t == 'libcrypto'
# we don't need all of OpenSSL, just libcrypto
libcrypto_dep = cc.find_library('crypto', required: false)
openssl_dep = dependency('openssl', required: false)
if libcrypto_dep.found() or openssl_dep.found()
sha1_found = true
if libcrypto_dep.found()
sha1_dep = libcrypto_dep
else
sha1_dep = openssl_dep
endif
endif
endif
if sha1_found
sha1 = t
break
endif
endforeach
if sha1_found
message('Using @0@ SHA1 functions'.format(sha1))
else
if get_option('sha1') != 'auto'
error('@0@ SHA1 requested, but not found'.format(get_option('sha1')))
else
error('No suitable SHA1 implementation found')
endif
endif
xdmcp_dep = dependency('', required : false)
if get_option('xdmcp')
xdmcp_dep = dependency('xdmcp')
endif
has_xdm_auth = get_option('xdm-auth-1')
if not xdmcp_dep.found()
has_xdm_auth = false
endif
build_glx = get_option('glx')
if build_glx
build_hashtable = true
endif
libdrm_dep = dependency('libdrm', version: libdrm_req, required: false)
if get_option('dri3') == 'auto'
build_dri3 = dri3proto_dep.found() and xshmfence_dep.found() and libdrm_dep.found()
else
build_dri3 = get_option('dri3') == 'true'
if build_dri3
if not xshmfence_dep.found()
error('DRI3 requested, but xshmfence not found')
endif
endif
endif
libdrm_required = build_dri3
if not libdrm_dep.found() and libdrm_required
error('DRI requested, but LIBDRM not found')
endif
build_dpms = get_option('dpms')
build_xf86bigfont = get_option('xf86bigfont')
build_screensaver = get_option('screensaver')
build_res = get_option('xres')
if build_res
build_hashtable = true
endif
build_xace = get_option('xace')
build_xinerama = get_option('xinerama')
build_xsecurity = get_option('xcsecurity')
if build_xsecurity
if not build_xace
error('cannot build Security extension without X-ACE')
endif
endif
build_xv = get_option('xv')
build_mitshm = false
if get_option('mitshm') == 'auto'
build_mitshm = cc.has_header('sys/shm.h')
elif get_option('mitshm') == 'true'
build_mitshm = true
endif
m_dep = cc.find_library('m', required : false)
dl_dep = cc.find_library('dl', required : false)
common_dep = [
xproto_dep,
randrproto_dep,
renderproto_dep,
xextproto_dep,
inputproto_dep,
kbproto_dep,
fontsproto_dep,
fixesproto_dep,
damageproto_dep,
xcmiscproto_dep,
bigreqsproto_dep,
presentproto_dep,
xtrans_dep,
libsystemd_daemon_dep,
videoproto_dep,
compositeproto_dep,
recordproto_dep,
scrnsaverproto_dep,
resourceproto_dep,
dri3proto_dep,
xineramaproto_dep,
xf86bigfontproto_dep,
xf86vidmodeproto_dep,
pixman_dep,
libbsd_dep,
xkbfile_dep,
xfont2_dep,
xdmcp_dep,
]
inc = include_directories(
'Xext',
'Xi',
'composite',
'damageext',
'fb',
'glamor',
'mi',
'miext/damage',
'miext/sync',
'dbe',
'dri3',
'include',
'present',
'randr',
'render',
'xfixes',
)
build_xselinux = false
if get_option('xselinux') != 'false'
dep_selinux = dependency('libselinux', version: libselinux_req,
required: get_option('xselinux') == 'true')
dep_audit = dependency('audit', required: get_option('xselinux') == 'true')
if get_option('xselinux') == 'true'
build_xselinux = true
else
build_xselinux = dep_selinux.found() and dep_audit.found()
endif
if build_xselinux
common_dep += dep_selinux
common_dep += dep_audit
endif
endif
socket_dep = []
if host_machine.system() == 'windows'
socket_dep = meson.get_compiler('c').find_library('ws2_32')
common_dep += socket_dep
endif
if get_option('libunwind')
common_dep += dependency('libunwind', required: true)
endif
glx_inc = include_directories('glx')
top_dir_inc = include_directories('.')
serverconfigdir = get_option('serverconfigdir')
if serverconfigdir == ''
serverconfigdir = join_paths(get_option('prefix'), get_option('libdir'), 'xorg')
endif
manpage_config = configuration_data()
manpage_config.set('vendorversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
manpage_config.set('xorgversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
manpage_config.set('xservername', 'Xorg')
manpage_config.set('xconfigfile', 'xorg.conf')
manpage_config.set('projectroot', get_option('prefix'))
manpage_config.set('apploaddir', '$(appdefaultdir)')
manpage_config.set('appmansuffix', '1')
manpage_config.set('drivermansuffix', '4')
manpage_config.set('adminmansuffix', '8')
manpage_config.set('libmansuffix', '3')
manpage_config.set('miscmansuffix', '7')
manpage_config.set('filemansuffix', '5')
manpage_config.set('datadir', join_paths(get_option('prefix'), get_option('datadir')))
manpage_config.set('mandir', join_paths(get_option('prefix'), get_option('mandir')))
manpage_config.set('sysconfdir', join_paths(get_option('prefix'), get_option('sysconfdir')))
manpage_config.set('xconfigdir', 'xorg.conf.d')
manpage_config.set('xkbdir', xkb_dir)
manpage_config.set('XKB_DFLT_RULES', get_option('xkb_default_rules'))
manpage_config.set('XKB_DFLT_MODEL', get_option('xkb_default_model'))
manpage_config.set('XKB_DFLT_LAYOUT', get_option('xkb_default_layout'))
manpage_config.set('XKB_DFLT_VARIANT', get_option('xkb_default_variant'))
manpage_config.set('XKB_DFLT_OPTIONS', get_option('xkb_default_options'))
manpage_config.set('bundle_id_prefix', '...')
manpage_config.set('default_font_path', default_font_path)
require_docs = get_option('docs') == 'true'
require_devel_docs = get_option('devel-docs') == 'true'
require_docs_pdf = (require_docs or require_devel_docs) and get_option('docs-pdf') == 'true'
sgml_doctools_dep = dependency('xorg-sgml-doctools',
required: require_docs or require_devel_docs)
xmlto = find_program('xmlto', required: require_docs or require_devel_docs)
xsltproc = find_program('xsltproc', required: require_docs or require_devel_docs)
fop = find_program('fop', required: require_docs_pdf)
build_docs = (get_option('docs') != 'false' and
sgml_doctools_dep.found() and
xmlto.found())
build_docs_devel = (get_option('devel-docs') != 'false' and
sgml_doctools_dep.found() and
xmlto.found())
build_docs_pdf = (get_option('docs-pdf') != 'false' and
(build_docs or build_docs_devel) and
fop.found())
if build_docs or build_docs_devel
doc_sgml_path = sgml_doctools_dep.get_pkgconfig_variable('sgmlrootdir')
doc_stylesheet_srcdir = join_paths(doc_sgml_path, 'X11')
# once we bump meson dependency to 0.56.0 we can use
# meson.project_build_root() instead of meson.build_root()
# Meson does not and will not support functions so we are copy-pasting
# documentation build code around which is unfortunate
# See https://mesonbuild.com/FAQ.html#why-doesnt-meson-have-user-defined-functionsmacros
docs_xmlto_search_flags = [
'--searchpath', doc_stylesheet_srcdir,
'--searchpath', meson.build_root(),
]
docs_xslt_search_flags = [
'--path', doc_stylesheet_srcdir,
'--path', meson.build_root(),
]
endif
# Include must come first, as it sets up dix-config.h
subdir('include')
# X server core
subdir('dix')
subdir('dri3')
subdir('glx')
subdir('fb')
subdir('mi')
subdir('os')
# X extensions
subdir('composite')
subdir('damageext')
subdir('dbe')
subdir('miext/damage')
subdir('miext/sync')
subdir('present')
subdir('randr')
subdir('record')
subdir('render')
subdir('xfixes')
subdir('xkb')
subdir('Xext')
subdir('Xi')
# other
if build_glamor
subdir('glamor')
endif
subdir('doc')
# Common static libraries of all X servers
libxserver = [
libxserver_mi,
libxserver_dix,
libxserver_composite,
libxserver_damageext,
libxserver_dbe,
libxserver_randr,
libxserver_miext_damage,
libxserver_render,
libxserver_present,
libxserver_xext,
libxserver_miext_sync,
libxserver_xfixes,
libxserver_xi,
libxserver_xkb,
libxserver_record,
libxserver_os,
]
libxserver += libxserver_dri3
subdir('hw')
if host_machine.system() != 'windows'
subdir('test')
endif
install_man(configure_file(
input: 'man/Xserver.man',
output: 'Xserver.1',
configuration: manpage_config,
))

View File

@ -1,2 +0,0 @@
xwayland_22.1.3.orig.tar.xz
#https://gitlab.freedesktop.org/xorg/xserver.git

View File

@ -1,4 +1,3 @@
#1120.patch xwayland-Detect-gbm_bo_get_fd_for_plane-at-runtime
#967.patch
0001-xwayland-patch-fix-vsync.patch 0001-xwayland-patch-fix-vsync.patch
xwayland-pointer-warp-fix.patch xwayland-pointer-warp-fix.patch

View File

@ -0,0 +1,126 @@
Description: xwayland: Detect gbm_bo_get_fd_for_plane at runtime
`gbm_bo_get_fd_for_plane` was introduced in Mesa 21 but some
proprietary GBM implementations (Xilinx) still haven't been updated
to support it:
```
/usr/bin/Xwayland: symbol lookup error: /usr/bin/Xwayland: undefined symbol: gbm_bo_get_fd_for_plane
```
.
Since distros would like to build a single Xwayland binary for all
OEMs of the same architecture, we now make the function always
available.
.
If a real implementation of `gbm_bo_get_fd_for_plane` exists at runtime
then it will be used, otherwise fall back to `gbm_bo_get_fd` or fail.
Author: Daniel van Vugt <daniel.van.vugt@canonical.com>
Origin: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/946
Bug-Ubuntu: https://launchpad.net/bugs/1987628
Forwarded: yes
Last-Update: 2022-08-25
--- a/hw/xwayland/xwayland-glamor-gbm.c
+++ b/hw/xwayland/xwayland-glamor-gbm.c
@@ -32,6 +32,7 @@
#include <fcntl.h>
#include <errno.h>
+#include <dlfcn.h>
#include <sys/stat.h>
#include <xf86drm.h>
#include <drm_fourcc.h>
@@ -147,6 +148,33 @@ is_device_path_render_node (const char *
return is_render_node;
}
+static int (*real_gbm_bo_get_fd_for_plane)(struct gbm_bo *, int);
+
+static void
+init_gbm_abi(void)
+{
+ if (!real_gbm_bo_get_fd_for_plane) {
+ real_gbm_bo_get_fd_for_plane = dlsym(RTLD_NEXT,
+ "gbm_bo_get_fd_for_plane");
+ if (!real_gbm_bo_get_fd_for_plane)
+ LogMessageVerb(X_WARNING, 0,
+ "gbm_bo_get_fd_for_plane is not supported natively.\n");
+ }
+}
+
+static int
+xwl_gbm_bo_get_fd_for_plane(struct gbm_bo *bo, int plane)
+{
+ if (real_gbm_bo_get_fd_for_plane)
+ return real_gbm_bo_get_fd_for_plane(bo, plane);
+
+ if (plane == 0)
+ return gbm_bo_get_fd(bo);
+
+ errno = ENOSYS;
+ return -1;
+}
+
static PixmapPtr
xwl_glamor_gbm_create_pixmap_for_bo(ScreenPtr screen, struct gbm_bo *bo,
int depth,
@@ -155,7 +183,6 @@ xwl_glamor_gbm_create_pixmap_for_bo(Scre
PixmapPtr pixmap;
struct xwl_pixmap *xwl_pixmap;
struct xwl_screen *xwl_screen = xwl_screen_get(screen);
-#ifdef GBM_BO_FD_FOR_PLANE
struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen);
uint64_t modifier = gbm_bo_get_modifier(bo);
const int num_planes = gbm_bo_get_plane_count(bo);
@@ -203,7 +230,6 @@ xwl_glamor_gbm_create_pixmap_for_bo(Scre
};
for (plane = 0; plane < num_planes; plane++) fds[plane] = -1;
-#endif
xwl_pixmap = calloc(1, sizeof(*xwl_pixmap));
if (xwl_pixmap == NULL)
@@ -224,7 +250,6 @@ xwl_glamor_gbm_create_pixmap_for_bo(Scre
xwl_pixmap->buffer = NULL;
xwl_pixmap->implicit_modifier = implicit_modifier;
-#ifdef GBM_BO_FD_FOR_PLANE
if (xwl_gbm->dmabuf_capable) {
#define ADD_ATTR(attrs, num, attr) \
do { \
@@ -239,7 +264,7 @@ xwl_glamor_gbm_create_pixmap_for_bo(Scre
ADD_ATTR(img_attrs, attr_num, gbm_bo_get_format(bo));
for (plane = 0; plane < num_planes; plane++) {
- fds[plane] = gbm_bo_get_fd_for_plane(bo, plane);
+ fds[plane] = xwl_gbm_bo_get_fd_for_plane(bo, plane);
ADD_ATTR(img_attrs, attr_num, planeAttrs[plane][PLANE_FD]);
ADD_ATTR(img_attrs, attr_num, fds[plane]);
ADD_ATTR(img_attrs, attr_num, planeAttrs[plane][PLANE_OFFSET]);
@@ -266,7 +291,6 @@ xwl_glamor_gbm_create_pixmap_for_bo(Scre
}
}
else
-#endif
{
xwl_pixmap->image = eglCreateImageKHR(xwl_screen->egl_display,
EGL_NO_CONTEXT,
@@ -1705,6 +1729,8 @@ xwl_glamor_init_gbm(struct xwl_screen *x
return FALSE;
}
+ init_gbm_abi();
+
dixSetPrivate(&xwl_screen->screen->devPrivates, &xwl_gbm_private_key,
xwl_gbm);
--- a/include/meson.build
+++ b/include/meson.build
@@ -109,8 +109,6 @@ conf_data.set('GLAMOR_HAS_GBM_LINEAR',
build_glamor and gbm_dep.found() and gbm_dep.version().version_compare('>= 10.6') ? '1' : false)
conf_data.set('GBM_BO_WITH_MODIFIERS',
build_glamor and gbm_dep.found() and gbm_dep.version().version_compare('>= 17.1') ? '1' : false)
-conf_data.set('GBM_BO_FD_FOR_PLANE',
- build_glamor and gbm_dep.found() and gbm_dep.version().version_compare('>= 21.1') ? '1' : false)
conf_data.set('GBM_BO_WITH_MODIFIERS2',
build_glamor and gbm_dep.found() and gbm_dep.version().version_compare('>= 21.3') ? '1' : false)

10
pika-build-config/amd64-v3.sh Executable file
View File

@ -0,0 +1,10 @@
#! /bin/bash
export PIKA_BUILD_ARCH="amd64-v3"
export DEBIAN_FRONTEND="noninteractive"
export DEB_BUILD_MAINT_OPTIONS="optimize=+lto -march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_CFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_CPPFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_CXXFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_LDFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_BUILD_OPTIONS="nocheck notest terse"
export DPKG_GENSYMBOLS_CHECK_LEVEL=0

5
pika-build-config/i386.sh Executable file
View File

@ -0,0 +1,5 @@
#! /bin/bash
export PIKA_BUILD_ARCH="i386"
export DEBIAN_FRONTEND="noninteractive"
export DEB_BUILD_OPTIONS="nocheck notest terse"
export DPKG_GENSYMBOLS_CHECK_LEVEL=0

View File

@ -1,8 +1,2 @@
# send debs to server # send debs to server
rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/incoming/ rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/cockatiel-incoming/
# add debs to repo
ssh ferreo@direct.pika-os.com 'aptly repo add -force-replace -remove-files pikauwu-main /srv/www/incoming/'
# publish the repo
ssh ferreo@direct.pika-os.com 'aptly publish update -batch -skip-contents -force-overwrite pikauwu filesystem:pikarepo:'