From ece7daacc48e4074fb5cb60fbc2ad3ffc7c64523 Mon Sep 17 00:00:00 2001 From: Ward from fusion-voyager-3 Date: Tue, 30 Jul 2024 02:03:13 +0300 Subject: [PATCH] port to pika os 4 --- .github/build-canary-v3 | 1 + .github/build-nest-v3 | 1 + .github/release-canary-v3 | 1 + .github/release-nest-v3 | 1 + .github/workflows/build-canaryv3.yml | 37 ++ .github/workflows/build-nestv3.yml | 37 ++ .github/workflows/release-canaryv3.yml | 40 ++ .github/workflows/release-nestv3.yml | 40 ++ .github/workflows/release.yml | 49 -- LICENSE.md | 24 + debian/changelog | 6 + debian/control | 26 +- debian/files | 1 - debian/rules | 15 +- debian/source/format | 2 +- debian/upstream/signing-key.asc | 493 -------------- debian/watch | 4 - debian/xwayland.install | 5 +- main.sh | 16 +- meson.build | 606 ------------------ orig.source.txt | 2 - patches/series | 3 +- ...t-gbm_bo_get_fd_for_plane-at-runtime.patch | 126 ++++ pika-build-config/amd64-v3.sh | 10 + pika-build-config/i386.sh | 5 + release.sh | 8 +- 26 files changed, 360 insertions(+), 1199 deletions(-) create mode 100644 .github/build-canary-v3 create mode 100644 .github/build-nest-v3 create mode 100644 .github/release-canary-v3 create mode 100644 .github/release-nest-v3 create mode 100644 .github/workflows/build-canaryv3.yml create mode 100644 .github/workflows/build-nestv3.yml create mode 100644 .github/workflows/release-canaryv3.yml create mode 100644 .github/workflows/release-nestv3.yml delete mode 100644 .github/workflows/release.yml create mode 100644 LICENSE.md delete mode 100644 debian/files delete mode 100644 debian/upstream/signing-key.asc delete mode 100644 debian/watch delete mode 100644 meson.build delete mode 100644 orig.source.txt create mode 100755 patches/xwayland-Detect-gbm_bo_get_fd_for_plane-at-runtime.patch create mode 100755 pika-build-config/amd64-v3.sh create mode 100755 pika-build-config/i386.sh diff --git a/.github/build-canary-v3 b/.github/build-canary-v3 new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/.github/build-canary-v3 @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/.github/build-nest-v3 b/.github/build-nest-v3 new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/.github/build-nest-v3 @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/.github/release-canary-v3 b/.github/release-canary-v3 new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.github/release-canary-v3 @@ -0,0 +1 @@ +1 diff --git a/.github/release-nest-v3 b/.github/release-nest-v3 new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/.github/release-nest-v3 @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/.github/workflows/build-canaryv3.yml b/.github/workflows/build-canaryv3.yml new file mode 100644 index 0000000..bff3d86 --- /dev/null +++ b/.github/workflows/build-canaryv3.yml @@ -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 diff --git a/.github/workflows/build-nestv3.yml b/.github/workflows/build-nestv3.yml new file mode 100644 index 0000000..3c9c34d --- /dev/null +++ b/.github/workflows/build-nestv3.yml @@ -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 diff --git a/.github/workflows/release-canaryv3.yml b/.github/workflows/release-canaryv3.yml new file mode 100644 index 0000000..436c8ff --- /dev/null +++ b/.github/workflows/release-canaryv3.yml @@ -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 diff --git a/.github/workflows/release-nestv3.yml b/.github/workflows/release-nestv3.yml new file mode 100644 index 0000000..ed42bb7 --- /dev/null +++ b/.github/workflows/release-nestv3.yml @@ -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 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index cd071c3..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -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 }} diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..16ff30b --- /dev/null +++ b/LICENSE.md @@ -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. diff --git a/debian/changelog b/debian/changelog index 0e96e37..d23195d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +xwayland (2:24.1.1-101pika1) pikauwu; urgency=medium + + * Update to pikaos 4 and new release + + -- Ward Nakchbandi Thu, 04 Oct 2022 17:50:00 +0300 + xwayland (2:24.1.0-100pika1) pikauwu; urgency=medium * Update to pikauwu diff --git a/debian/control b/debian/control index c715ade..087aa42 100644 --- a/debian/control +++ b/debian/control @@ -8,25 +8,26 @@ Build-Depends: meson, pkg-config, quilt, - libdrm-dev (>= 2.4.89), + libdecor-0-dev, + libdrm-dev (>= 2.4.116), libepoxy-dev, libgcrypt-dev, libgbm-dev, libnvidia-egl-wayland-dev, libpixman-1-dev, + libtirpc-dev, libxcvt-dev, libxfont-dev, libxkbfile-dev, libxshmfence-dev, libxv-dev, libwayland-dev, + libwayland-dev:native, mesa-common-dev, - x11proto-dev, - x11proto-present-dev, + x11proto-dev (>= 2023.2), xfonts-utils, xtrans-dev, wayland-protocols, - libudev-dev, Standards-Version: 4.6.0 Vcs-Git: https://salsa.debian.org/xorg-team/wayland/xwayland.git Vcs-Browser: https://salsa.debian.org/xorg-team/wayland/xwayland @@ -36,22 +37,11 @@ Package: xwayland Architecture: linux-any Depends: xserver-common, - libc6, - libdrm2, - libepoxy0, - libgbm1, - libgcrypt20, - libgl1, - libpixman-1-0, - libtirpc3, - libwayland-client0, - libxau6, - libxcvt0, - libxdmcp6, - libxfont2, - libxshmfence1, + ${shlibs:Depends}, + ${misc:Depends}, libnvidia-egl-wayland1 Description: X server for running X clients under 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 top-level windows as wayland surfaces. + diff --git a/debian/files b/debian/files deleted file mode 100644 index 17686aa..0000000 --- a/debian/files +++ /dev/null @@ -1 +0,0 @@ -xwayland_22.1.3-99pika2_source.buildinfo x11 optional diff --git a/debian/rules b/debian/rules index 3806ea7..374dd09 100755 --- a/debian/rules +++ b/debian/rules @@ -1,9 +1,5 @@ #!/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 SUPPORT = https://www.debian.org/support @@ -13,13 +9,8 @@ SUPPORT = https://www.debian.org/support override_dh_auto_configure: dh_auto_configure -- \ - -Dbuilder_addr="debian-x@lists.debian.org" \ - -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 + -Dbuilder_addr="debian-x@lists.debian.org" + -Dbuilder_string="$(DEB_SOURCE) $(DEB_VERSION_UPSTREAM) ($(SUPPORT))" override_dh_auto_install: dh_auto_install --destdir=debian/tmp @@ -36,3 +27,5 @@ override_dh_clean: gentarball: git archive --format=tar upstream-unstable --prefix=$(DEB_SOURCE)-$(DEB_VERSION_UPSTREAM)/ \ | gzip -9 > ../$(DEB_SOURCE)_$(DEB_VERSION_UPSTREAM).orig.tar.gz + + diff --git a/debian/source/format b/debian/source/format index 89ae9db..163aaf8 100644 --- a/debian/source/format +++ b/debian/source/format @@ -1 +1 @@ -3.0 (native) +3.0 (quilt) diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc deleted file mode 100644 index 0b52e48..0000000 --- a/debian/upstream/signing-key.asc +++ /dev/null @@ -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 - -mQGNBFnVVFMBDACz5+V0s2/JjDuvutBbI4hAO3Zgb8mlny5nM/YgkCCVe79MsOAe -5Kn4Gj+lc8LiwJ4fyYPAWx1FIliryYE4RgpnKhipQhZB/UcvImTHQA4tqIavReyo -H4o5+CbPgRY7XNE2wRWOogWd3WuSeuq/37mu1gORmq3KogzuarjJvffLNL4saA+w -J37BXWhQ3P+eRiyF0qHaozf+bMenqtWEy0n0IQEg5wUS/zGXVlOX3fNhJeskq93a -US0bu3axZL4sxOMKxnhRK0XDziFaiMu/DTj4Y0SWDXgK0owkcc7Ow2eAX52Z+zvw -m9O3nBaQvQV7cUxNwYBmc2WkVts9XBrGT7tZ3HmFAkzB6YyPfdXYT4TpyFLofLVs -JDvpa8iXkOmy22JUuqJlW36Idpmv/2jNkEfiIbby3wwZtONJOD9xNxCmOiVGA59+ -q+Lgs0aCWzomNx07zMOEeVvLOj9ficZhTqfvhZrkPD4iEOKKIpRRjCyDyMa0HTb7 -XAkDYk/NcZe4kQsAEQEAAbQcQWRhbSBKYWNrc29uIDxhamF4QG53bmsubmV0PokB -zgQTAQgAOBYhBJle1cimE46wlh8YR0wJ3YPKqlCyBQJZ1VRTAhsDBQsJCAcCBhUI -CQoLAgQWAgMBAh4BAheAAAoJEEwJ3YPKqlCy6A4L/Ru8dHFdsNKvKtBH9szNgd5d -qcjEVWzw6YZKRTVpqw30O9uTcfuHzjV5ATIVTPEdXLklQficyCb4mGQLwxL2q5kT -YMrGteTwBt4pYExo/DYIEZom3f9+75+OgN1PleXQ9pTYo+Ndw18GsnD/sW04HX2I -IGKY3qUX3qhlxG6zdXsHTTIoCCBXrWepaD/IdA9Nw37tiyaTq2NH/ChcxFN7SuYr -SWpBkPRhcsxKDju7j+s4KzO9f1QYFB2Vi3TbbYLEJ3BJg6AxVoiVe4B9xfl6KfCa -EUjFWMqUprWiOjxNAdRUnfBN3UF2O/BxAtgZMk3RwVGG7fAEkfACkws8G5lcraTu -kHQJBfzdlbbwrQG4020kRRdNihblPHZAWI5PJG5jpdGcqftyD+lRvv4gljHpAg/I -eMK4rHjGANX3uQvcCelNwKf8TPVIDTB5vYvWmnHtRmEQkIeHhrMRzjhZej+uzNDF -FpKPZayGn2uyPLv77aZCQmEs1O1EafWz1+IfBWDUmLkBjQRZ1VRTAQwA5E5W/FDK -wfm+owkPenG0VYoXRfLlrBDvHcewLt04evdygHZZxNdV9Ycpsve9INdEg4nTJHj4 -mf302faUGECtiMKek78mfymzbAXS0kEXc2NoaXtEgFlPhavM4e8PpJ5aAKEsSHnQ -1HMS2KJ4bPbDNSLpWkT4HBDAzsJHOFNDu0Z6TsyG/bA1VLoj0iMC9jL8xWz1lOBN -iAhukMkjHOvmeq4BA2ktH5CUh8qwn8iEyw4sps5RcFKanIeru3sg8SVed4w0oCId -Tw54mSNE3vzGiK9tDk0yhDRq2oFT7ER4r0Cr3ctyAsDPJCwhgVJ2YWAGdHewdfg6 -l1hfsvmO1omjR1SQBSEbw6Ftl6GySd91rsvT9i5+3LiNIpYgYb2L6wNn7cSXc9NF -RXDWtw07P1mRJiRrBHwX1Brro7h9tvFT751F5yWSDdah5dUaqbl0C3cmXMoM+FLv -E0dECfuM/mwOvtvlYzL1htdTSLZRb25dddZ6nTlH3sLkVpd9oZRSd7kdABEBAAGJ -AbYEGAEIACAWIQSZXtXIphOOsJYfGEdMCd2DyqpQsgUCWdVUUwIbDAAKCRBMCd2D -yqpQsjd+C/sHZFFz3zSLBo1sUIHCGl6P2DYHatEoQTP7R8g1kAHd145pAGrvXzR4 -F6T5SgM8t4a04Ia2SJLaptNXpf1pJXKlEpEaCb/oDhB/eCt8sOilcqSojkEmpe7z -1xZY/ePNSzbsXDWTOagTM70UdaxgDand1dxMs2q8+Q3y3xZltXcYDmM48a/mRwe7 -rtPK68v3A54ZbcXojNcIMS1JBk+XcuBbmeI0yfGkcqbO2hiP8W81n1mb96jfZ/wj -QhNzLqI3zxRnFHPiBMLy9tF0odNCRccQ2mbKdV2cfOIF5WKC4lrcyqz3eit2RYdS -W3PPUqS3x2696I40zI2KoFjRn7YcWJ6T+skZPWW5bHCVcUN57v7270IG2MCA6D6a -Rto7m6yUbLNgGadDyIjTQladTN1aKYK/QAsxS4y+EhkAPeaQRvZxBhZEocjIAE0B -D2qzco+dq7IuQHIhXTnGRGEsS0bQdEnpQAoTQMVRo7loR2/XqzCIjkG40JH7Cr/r -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----- diff --git a/debian/watch b/debian/watch deleted file mode 100644 index 937cd8b..0000000 --- a/debian/watch +++ /dev/null @@ -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 diff --git a/debian/xwayland.install b/debian/xwayland.install index 73752c9..a0d0ffb 100644 --- a/debian/xwayland.install +++ b/debian/xwayland.install @@ -1 +1,4 @@ -usr +usr/bin/Xwayland +usr/lib/*/pkgconfig/ +usr/share/applications/org.freedesktop.Xwayland.desktop +usr/share/man/man1/Xwayland.1 diff --git a/main.sh b/main.sh index 3041186..9cc2260 100755 --- a/main.sh +++ b/main.sh @@ -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 -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 -vf ./meson.build ./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 # Get build deps -apt update -apt upgrade -y apt-get build-dep ./ -y # Build package +LOGNAME=root dh_make --createorig -y -l -p xwayland_"$VERSION" || echo "dh-make: Ignoring Last Error" dpkg-buildpackage --no-sign # Move the debs to output diff --git a/meson.build b/meson.build deleted file mode 100644 index 6fa7e5a..0000000 --- a/meson.build +++ /dev/null @@ -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, -)) diff --git a/orig.source.txt b/orig.source.txt deleted file mode 100644 index 2f0d313..0000000 --- a/orig.source.txt +++ /dev/null @@ -1,2 +0,0 @@ -xwayland_22.1.3.orig.tar.xz -#https://gitlab.freedesktop.org/xorg/xserver.git diff --git a/patches/series b/patches/series index a665195..b02fb8d 100644 --- a/patches/series +++ b/patches/series @@ -1,4 +1,3 @@ -#1120.patch -#967.patch +xwayland-Detect-gbm_bo_get_fd_for_plane-at-runtime 0001-xwayland-patch-fix-vsync.patch xwayland-pointer-warp-fix.patch diff --git a/patches/xwayland-Detect-gbm_bo_get_fd_for_plane-at-runtime.patch b/patches/xwayland-Detect-gbm_bo_get_fd_for_plane-at-runtime.patch new file mode 100755 index 0000000..4a887a4 --- /dev/null +++ b/patches/xwayland-Detect-gbm_bo_get_fd_for_plane-at-runtime.patch @@ -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 +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 + #include ++#include + #include + #include + #include +@@ -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) + + diff --git a/pika-build-config/amd64-v3.sh b/pika-build-config/amd64-v3.sh new file mode 100755 index 0000000..10285b4 --- /dev/null +++ b/pika-build-config/amd64-v3.sh @@ -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 diff --git a/pika-build-config/i386.sh b/pika-build-config/i386.sh new file mode 100755 index 0000000..7629d66 --- /dev/null +++ b/pika-build-config/i386.sh @@ -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 diff --git a/release.sh b/release.sh index 1575255..660f48f 100755 --- a/release.sh +++ b/release.sh @@ -1,8 +1,2 @@ # send debs to server -rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/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:' \ No newline at end of file +rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/cockatiel-incoming/