From 705d1ce6795a110231e9e02f05f869ff32b9098f Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 14:42:09 +0100 Subject: [PATCH 01/42] .github: export MACHINE the right way Otherwise, paths constructed on "build xserver sdk" step aren't valid. Signed-off-by: Mike Gelfand --- .github/workflows/build-xserver.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-xserver.yml b/.github/workflows/build-xserver.yml index d1d8d2bc1..c7cdda103 100644 --- a/.github/workflows/build-xserver.yml +++ b/.github/workflows/build-xserver.yml @@ -20,7 +20,8 @@ jobs: - name: prepare build environment run: | - export MACHINE=`gcc -dumpmachine` + MACHINE=`gcc -dumpmachine` + echo "MACHINE=$MACHINE" >> "$GITHUB_ENV" echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV" sudo chown root /bin/tar && sudo chmod u+s /bin/tar @@ -78,7 +79,8 @@ jobs: - name: prepare build environment run: | - export MACHINE=`gcc -dumpmachine` + MACHINE=`gcc -dumpmachine` + echo "MACHINE=$MACHINE" >> "$GITHUB_ENV" echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/$MACHINE/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV" sudo chown root /bin/tar && sudo chmod u+s /bin/tar From bc8518f8f8357b7958c6d9979e6206490febc3e1 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 13:58:15 +0100 Subject: [PATCH 02/42] .github: drop sudo for prerequisites builds Files aren't being installed into privileged directories as part of the build but instead into $X11_PREFIX which resides in current user's home directory. Change the cache key to avoid reusing old cache entries, which would lead to permission errors. Signed-off-by: Mike Gelfand --- .github/workflows/build-xserver.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-xserver.yml b/.github/workflows/build-xserver.yml index c7cdda103..2a83db818 100644 --- a/.github/workflows/build-xserver.yml +++ b/.github/workflows/build-xserver.yml @@ -42,11 +42,11 @@ jobs: ${{ env.X11_PREFIX }} ${{ env.X11_BUILD_DIR }}/xts ${{ env.X11_BUILD_DIR }}/piglit - key: ${{ runner.os }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }} - restore-keys: ${{ runner.os }}-x11-deps- + key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }} + restore-keys: ${{ runner.name }}-x11-deps- - name: generic prereq - run: sudo .github/scripts/install-prereq.sh + run: .github/scripts/install-prereq.sh - name: build run: .gitlab-ci/meson-build.sh @@ -101,11 +101,11 @@ jobs: ${{ env.X11_PREFIX }} ${{ env.X11_BUILD_DIR }}/xts ${{ env.X11_BUILD_DIR }}/piglit - key: ${{ runner.os }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }} - restore-keys: ${{ runner.os }}-x11-deps- + key: ${{ runner.name }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }} + restore-keys: ${{ runner.name }}-x11-deps- - name: generic prereq - run: sudo .github/scripts/install-prereq.sh + run: .github/scripts/install-prereq.sh - name: build xserver sdk run: | From 5e98d8c571f66233649fce71c3625b044f23f5e3 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 13:49:10 +0100 Subject: [PATCH 03/42] .gitlab-ci: only look for files when validating man pages Build directory may sometimes contain directories ending with a period and a digit, e.g. in my case * ./meson-private/cmake_xshmfence/CMakeFiles/4.0.3 * ./meson-private/__CMake_compiler_info__/CMakeFiles/4.0.3 Since man pages are files, filter out the rest. Signed-off-by: Mike Gelfand --- .gitlab-ci/manpages-check | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci/manpages-check b/.gitlab-ci/manpages-check index cf2b15349..5d189e7db 100755 --- a/.gitlab-ci/manpages-check +++ b/.gitlab-ci/manpages-check @@ -1,6 +1,6 @@ #!/bin/sh -find build/ -regex ".*\.[1-9]$" -exec grep -E \ +find build/ -type f -regex ".*\.[1-9]$" -exec grep -E \ @vendorversion@\|\ @xorgversion@\|\ @xservername@\|\ From 5ed2865bdd386120e3f29797a153574c97db724e Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 14:16:43 +0100 Subject: [PATCH 04/42] .github: don't override env vars set externally Helpful for CI builds where we could be setting different paths on different runners (due to OS or something else). Signed-off-by: Mike Gelfand --- .github/scripts/conf.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/scripts/conf.sh b/.github/scripts/conf.sh index fd6fb5320..7a0576b7f 100644 --- a/.github/scripts/conf.sh +++ b/.github/scripts/conf.sh @@ -1,6 +1,8 @@ -export X11_PREFIX=/home/runner/x11 +export X11_PREFIX="${X11_PREFIX:-$HOME/x11}" +export X11_BUILD_DIR="${X11_BUILD_DIR:-$HOME/build-deps}" +export DRV_BUILD_DIR="${DRV_BUILD_DIR:-$HOME/build-drivers}" + +export FDO_CI_CONCURRENT=`nproc` + export PATH="$X11_PREFIX/bin:$PATH" export PKG_CONFIG_PATH="$X11_PREFIX/lib/x86_64-linux-gnu/pkgconfig:$X11_PREFIX/lib/pkgconfig:$X11_PREFIX/share/pkgconfig:$PKG_CONFIG_PATH" -export FDO_CI_CONCURRENT=`nproc` -export X11_BUILD_DIR=/home/runner/build-deps -export DRV_BUILD_DIR=/home/runner/build-drivers From 87c8520ba369fb7dd28de40152331e00fe118b4b Mon Sep 17 00:00:00 2001 From: callmetango Date: Thu, 26 Jun 2025 18:40:30 +0000 Subject: [PATCH 05/42] .github: Add new issue forms Add the following forms for issue creation: * Bug report * Feature request * Code cleanup * Documentation update * Organizational task * add issue type selection page on "New Issue" call * mention Github Discussions and the mailing list where appropriate Fixes #257 Signed-off-by: callmetango --- .github/ISSUE_TEMPLATE/01-bug-report.yml | 66 +++++++++++++++++++ .github/ISSUE_TEMPLATE/02-feature-request.yml | 49 ++++++++++++++ .github/ISSUE_TEMPLATE/03-code-cleanup.yml | 50 ++++++++++++++ .github/ISSUE_TEMPLATE/04-doc-update.yml | 39 +++++++++++ .github/ISSUE_TEMPLATE/05-org-task.yml | 44 +++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 8 +++ 6 files changed, 256 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/01-bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/02-feature-request.yml create mode 100644 .github/ISSUE_TEMPLATE/03-code-cleanup.yml create mode 100644 .github/ISSUE_TEMPLATE/04-doc-update.yml create mode 100644 .github/ISSUE_TEMPLATE/05-org-task.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/01-bug-report.yml b/.github/ISSUE_TEMPLATE/01-bug-report.yml new file mode 100644 index 000000000..890e9568e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-bug-report.yml @@ -0,0 +1,66 @@ +name: 🐞 Bug report +description: Create a report to help us improve + +labels: [bug, needs-triage] +#type: bug + +body: + - type: markdown + attributes: + value: | + Please fill out the sections below to help everyone identify and fix the bug. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions). + - type: dropdown + id: affected-version + attributes: + label: Select the version + options: + - 25.0.0.0 + - 25.0.0.1 + - Git master branch + - other or don't know + default: 1 + validations: + required: true + - type: textarea + id: description + attributes: + label: Describe your issue + placeholder: When I did X then Y happened. + validations: + required: true + - type: textarea + id: steps + attributes: + label: Steps to reproduce + placeholder: | + 1. Start ... + 2. Do this + 3. Do that + validations: + required: true + - type: textarea + id: expected + attributes: + label: What did you expect? + placeholder: I expected this to happen. + - type: textarea + id: environment + attributes: + label: Additional Information + description: Additional information you want to provide such as logs, system info, environment, screenshots, etc. + placeholder: | + Add any other context about the bug here. + - type: checkboxes + id: checks + attributes: + label: Extra fields + options: + - label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues) + required: true + - label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md) + required: true + - label: I'd like to work on this issue + - type: markdown + attributes: + value: | + Thanks for reporting this issue! We will get back to you as soon as possible. diff --git a/.github/ISSUE_TEMPLATE/02-feature-request.yml b/.github/ISSUE_TEMPLATE/02-feature-request.yml new file mode 100644 index 000000000..f9fa434e7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-feature-request.yml @@ -0,0 +1,49 @@ +name: ✨ Feature request +description: Suggest a feature for this software +labels: [enhancement, needs-triage] + +body: + - type: markdown + attributes: + value: | + Please fill out the sections below to properly describe the new software feature you are suggesting. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions). + - type: textarea + id: description + attributes: + label: "Describe the feature" + placeholder: A thing in X that allows to do Y. + validations: + required: true + - type: textarea + id: rationale + attributes: + label: "It should be implemented because" + placeholder: Doing Y is needed for Z. + validations: + required: true + - type: textarea + id: alternative + attributes: + label: "What are the alternatives?" + placeholder: We could do A or B instead. + - type: textarea + id: context + attributes: + label: Additional context + description: Additional information you want to provide such as references to related issues or protocols, the implications on existing use cases, etc. + placeholder: | + Add any other context about the feature request here. + - type: checkboxes + id: checks + attributes: + label: Extra fields + options: + - label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues) + required: true + - label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md) + required: true + - label: I'd like to work on this issue + - type: markdown + attributes: + value: | + Thanks for your suggestion! Let's see together if it can be implemented. diff --git a/.github/ISSUE_TEMPLATE/03-code-cleanup.yml b/.github/ISSUE_TEMPLATE/03-code-cleanup.yml new file mode 100644 index 000000000..2c419e857 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03-code-cleanup.yml @@ -0,0 +1,50 @@ +name: 🔧 Code cleanup +description: Level up the source code +labels: [code-cleanup, needs-triage] +#type: codecleanup + +body: + - type: markdown + attributes: + value: | + Please fill out the sections below to properly describe the code cleanup you are suggesting. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions). + - type: textarea + id: description + attributes: + label: "Describe the cleanup" + placeholder: C in X needs to be changed into D. + validations: + required: true + - type: textarea + id: rationale + attributes: + label: "It should be done because" + placeholder: Having D is needed for E. + validations: + required: true + - type: textarea + id: alternative + attributes: + label: "What are the alternatives?" + placeholder: We could do A or B instead. + - type: textarea + id: context + attributes: + label: Additional context + description: Additional information you want to provide such as implications on existing code, how to ensure API/ABI stability, which tests are needed or to be run, related issues, etc. + placeholder: | + Add any other context about the cleanup here. + - type: checkboxes + id: checks + attributes: + label: Extra fields + options: + - label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues) + required: true + - label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md) + required: true + - label: I'd like to work on this issue + - type: markdown + attributes: + value: | + Thanks for looking at the source code! Let's see together how it can be improved. diff --git a/.github/ISSUE_TEMPLATE/04-doc-update.yml b/.github/ISSUE_TEMPLATE/04-doc-update.yml new file mode 100644 index 000000000..5d20ca6b6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/04-doc-update.yml @@ -0,0 +1,39 @@ +name: 🔖 Documentation update +description: Make your mark for better documentation + +labels: [documentation, needs-triage] +#type: docchange + +body: + - type: markdown + attributes: + value: | + Please fill out the sections below to help others understand our software. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions). + - type: textarea + id: description + attributes: + label: Describe the update + placeholder: These things need to be better documented. + validations: + required: true + - type: textarea + id: environment + attributes: + label: Additional Information + description: Additional information you want to provide such as tickets related to changes in the software, affected files, screenshots, etc. + placeholder: | + Add any other context about the update here. + - type: checkboxes + id: checks + attributes: + label: Extra fields + options: + - label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues) + required: true + - label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md) + required: true + - label: I'd like to work on this issue + - type: markdown + attributes: + value: | + Thanks for requesting this update! We will get back to you as soon as possible. diff --git a/.github/ISSUE_TEMPLATE/05-org-task.yml b/.github/ISSUE_TEMPLATE/05-org-task.yml new file mode 100644 index 000000000..049b03baf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/05-org-task.yml @@ -0,0 +1,44 @@ +name: ✅ Organizational task +description: Create a task for project organization + +labels: [needs-triage, organization] +#type: task + +body: + - type: markdown + attributes: + value: | + Please fill out the sections below to get organizational things done. If you have a general idea or question then please use the [discussions](https://github.com/orgs/X11Libre/discussions). + - type: textarea + id: description + attributes: + label: Describe the task + placeholder: These things need to be done. + validations: + required: true + - type: textarea + id: rationale + attributes: + label: "It should be done because" + placeholder: Doing Y is needed for Z. + - type: textarea + id: environment + attributes: + label: Additional Information + description: Additional information you want to provide such as the context for bigger tasks, the implicatons on existing workflows, related issues, etc. + placeholder: | + Add any other context about the task here. + - type: checkboxes + id: checks + attributes: + label: Extra fields + options: + - label: I have checked the existing [issues](https://github.com/X11Libre/xserver/issues) + required: true + - label: I have read the [Contributing Guidelines](https://github.com/X11Libre/xserver/blob/master/CONTRIBUTING.md) + required: true + - label: I'd like to work on this issue + - type: markdown + attributes: + value: | + Thanks for adding this task! We will get back to you as soon as possible. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..5d1b3a851 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: XLibre Community Support + url: https://github.com/orgs/X11Libre/discussions + about: Please ask and answer questions here. + - name: Mailing List + url: https://www.freelists.org/list/xlibre + about: You can join the discussions on our mailing list. From b5d569a884c9c6749f3cf90eee913cc43d9e3cc9 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:14 +0100 Subject: [PATCH 06/42] xext: add/fix include guards where missing/broken Signed-off-by: Mike Gelfand --- Xext/geext_priv.h | 2 ++ Xext/panoramiXh.h | 6 +++++- Xext/xvdisp.h | 5 +++++ Xext/xvdix_priv.h | 2 ++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Xext/geext_priv.h b/Xext/geext_priv.h index 5774c7528..95aeb812d 100644 --- a/Xext/geext_priv.h +++ b/Xext/geext_priv.h @@ -2,7 +2,9 @@ * * Copyright © 2024 Enrico Weigelt, metux IT consult */ + #ifndef _XORG_GEEXT_PRIV_H +#define _XORG_GEEXT_PRIV_H #include diff --git a/Xext/panoramiXh.h b/Xext/panoramiXh.h index 2762a59ac..d92da7fd3 100644 --- a/Xext/panoramiXh.h +++ b/Xext/panoramiXh.h @@ -1,8 +1,10 @@ - /* * Server dispatcher function replacements */ +#ifndef XSERVER_PANORAMIXH_H +#define XSERVER_PANORAMIXH_H + extern int PanoramiXCreateWindow(ClientPtr client); extern int PanoramiXChangeWindowAttributes(ClientPtr client); extern int PanoramiXDestroyWindow(ClientPtr client); @@ -71,3 +73,5 @@ extern int connBlockScreenStart; extern xConnSetupPrefix connSetupPrefix; extern int (*SavedProcVector[256]) (ClientPtr client); + +#endif /* XSERVER_PANORAMIXH_H */ diff --git a/Xext/xvdisp.h b/Xext/xvdisp.h index 944959c99..55d21091f 100644 --- a/Xext/xvdisp.h +++ b/Xext/xvdisp.h @@ -1,2 +1,7 @@ +#ifndef XSERVER_XVDISP_H +#define XSERVER_XVDISP_H + extern void XineramifyXv(void); extern int xvUseXinerama; + +#endif /* XSERVER_XVDISP_H */ diff --git a/Xext/xvdix_priv.h b/Xext/xvdix_priv.h index d1ddb68f2..a64a5625a 100644 --- a/Xext/xvdix_priv.h +++ b/Xext/xvdix_priv.h @@ -2,7 +2,9 @@ * * Copyright © 2024 Enrico Weigelt, metux IT consult */ + #ifndef _XORG_XVDIX_PRIV_H +#define _XORG_XVDIX_PRIV_H #include From 7fbd8db7a4a4212e9aba5fc503fe8f3cf0e5adfd Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:19 +0100 Subject: [PATCH 07/42] config: add/fix include guards where missing/broken Signed-off-by: Mike Gelfand --- config/config-backends.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/config-backends.h b/config/config-backends.h index 5f07557b7..cb09ef5be 100644 --- a/config/config-backends.h +++ b/config/config-backends.h @@ -23,6 +23,9 @@ * Author: Daniel Stone */ +#ifndef XSERVER_CONFIG_BACKENDS_H +#define XSERVER_CONFIG_BACKENDS_H + #ifdef HAVE_DIX_CONFIG_H #include #endif @@ -44,3 +47,5 @@ void config_hal_fini(void); int config_wscons_init(void); void config_wscons_fini(void); #endif + +#endif /* XSERVER_CONFIG_BACKENDS_H */ From 166d1b5e6b9a052f31cfd57a8b461983a7d24a56 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:19 +0100 Subject: [PATCH 08/42] fb: add/fix include guards where missing/broken Skipped headers designed for multiple or non-trivial inclusion: * fb/fbbits.h Signed-off-by: Mike Gelfand --- fb/wfbrename.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fb/wfbrename.h b/fb/wfbrename.h index c7ac73ea0..531ab4172 100644 --- a/fb/wfbrename.h +++ b/fb/wfbrename.h @@ -1,3 +1,6 @@ +#ifndef XSERVER_WFBRENAME_H +#define XSERVER_WFBRENAME_H + #define fbAddTraps wfbAddTraps #define fbAddTriangles wfbAddTriangles #define fbAllocatePrivates wfbAllocatePrivates @@ -118,3 +121,5 @@ #define fbWinPrivateKeyRec wfbWinPrivateKeyRec #define free_pixman_pict wfb_free_pixman_pict #define image_from_pict wfb_image_from_pict + +#endif /* XSERVER_WFBRENAME_H */ From c06a2a3ed7d7e2004faf4e1ae22864c716087a63 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:19 +0100 Subject: [PATCH 09/42] hw: add/fix include guards where missing/broken Skipped headers designed for multiple or non-trivial inclusion: * hw/xfree86/dri2/pci_ids/i810_pci_ids.h * hw/xfree86/dri2/pci_ids/i915_pci_ids.h * hw/xfree86/dri2/pci_ids/i965_pci_ids.h * hw/xfree86/dri2/pci_ids/r200_pci_ids.h * hw/xfree86/dri2/pci_ids/r300_pci_ids.h * hw/xfree86/dri2/pci_ids/r600_pci_ids.h * hw/xfree86/dri2/pci_ids/radeon_pci_ids.h * hw/xfree86/dri2/pci_ids/radeonsi_pci_ids.h * hw/xfree86/dri2/pci_ids/virtio_gpu_pci_ids.h * hw/xfree86/dri2/pci_ids/vmwgfx_pci_ids.h Signed-off-by: Mike Gelfand --- hw/kdrive/ephyr/ephyr_glamor.h | 5 +++++ hw/xfree86/common/xf86VGAarbiterPriv.h | 5 +++++ hw/xfree86/dri2/dri2int.h | 5 +++++ hw/xfree86/drivers/modesetting/driver.h | 5 +++++ hw/xfree86/int10/vbeModes.h | 1 + hw/xfree86/parser/configProcs.h | 5 +++++ hw/xquartz/NSUserDefaults+XQuartzDefaults.h | 5 +++++ hw/xquartz/xpr/driWrap.h | 2 ++ hw/xwin/glx/winpriv.h | 5 +++++ hw/xwin/winauth.h | 5 +++++ hw/xwin/winlayouts.h | 5 +++++ hw/xwin/winmonitors.h | 5 +++++ 12 files changed, 53 insertions(+) diff --git a/hw/kdrive/ephyr/ephyr_glamor.h b/hw/kdrive/ephyr/ephyr_glamor.h index fc4a80d9f..6c80aabde 100644 --- a/hw/kdrive/ephyr/ephyr_glamor.h +++ b/hw/kdrive/ephyr/ephyr_glamor.h @@ -21,6 +21,9 @@ * IN THE SOFTWARE. */ +#ifndef XSERVER_KDRIVE_EPHYR_GLAMOR_H +#define XSERVER_KDRIVE_EPHYR_GLAMOR_H + #include #include "dix-config.h" @@ -63,3 +66,5 @@ ephyr_glamor_damage_redisplay(struct ephyr_glamor *glamor, } #endif /* !GLAMOR */ + +#endif /* XSERVER_KDRIVE_EPHYR_GLAMOR_H */ diff --git a/hw/xfree86/common/xf86VGAarbiterPriv.h b/hw/xfree86/common/xf86VGAarbiterPriv.h index e4ca3450c..03c907bba 100644 --- a/hw/xfree86/common/xf86VGAarbiterPriv.h +++ b/hw/xfree86/common/xf86VGAarbiterPriv.h @@ -24,6 +24,9 @@ * */ +#ifndef XSERVER_XFREE86_XF86VGAARBITERPRIV_H +#define XSERVER_XFREE86_XF86VGAARBITERPRIV_H + #ifdef HAVE_XORG_CONFIG_H #include #endif @@ -273,3 +276,5 @@ static void VGAarbiterGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst, static void VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor * color, int nRect, xRectangle *rects); + +#endif /* XSERVER_XFREE86_XF86VGAARBITERPRIV_H */ diff --git a/hw/xfree86/dri2/dri2int.h b/hw/xfree86/dri2/dri2int.h index 7f53eba45..4bb272616 100644 --- a/hw/xfree86/dri2/dri2int.h +++ b/hw/xfree86/dri2/dri2int.h @@ -23,4 +23,9 @@ * Author: Daniel Stone */ +#ifndef XSERVER_XFREE86_DRI2INT_H +#define XSERVER_XFREE86_DRI2INT_H + extern Bool DRI2ModuleSetup(void); + +#endif /* XSERVER_XFREE86_DRI2INT_H */ diff --git a/hw/xfree86/drivers/modesetting/driver.h b/hw/xfree86/drivers/modesetting/driver.h index 62b0db0cc..43114b4ae 100644 --- a/hw/xfree86/drivers/modesetting/driver.h +++ b/hw/xfree86/drivers/modesetting/driver.h @@ -29,6 +29,9 @@ * Aaron Plattner */ +#ifndef XSERVER_XFREE86_DRIVER_H +#define XSERVER_XFREE86_DRIVER_H + #include #include #include @@ -261,3 +264,5 @@ void ms_drain_drm_events(ScreenPtr screen); Bool ms_window_has_variable_refresh(modesettingPtr ms, WindowPtr win); void ms_present_set_screen_vrr(ScrnInfoPtr scrn, Bool vrr_enabled); Bool ms_tearfree_is_active_on_crtc(xf86CrtcPtr crtc); + +#endif /* XSERVER_XFREE86_DRIVER_H */ diff --git a/hw/xfree86/int10/vbeModes.h b/hw/xfree86/int10/vbeModes.h index ee0257c15..8ad5ea9c2 100644 --- a/hw/xfree86/int10/vbeModes.h +++ b/hw/xfree86/int10/vbeModes.h @@ -29,6 +29,7 @@ */ #ifndef _VBE_MODES_H +#define _VBE_MODES_H /* * This is intended to be stored in the DisplayModeRec's private area. diff --git a/hw/xfree86/parser/configProcs.h b/hw/xfree86/parser/configProcs.h index 93e3e6706..ef71c4d5a 100644 --- a/hw/xfree86/parser/configProcs.h +++ b/hw/xfree86/parser/configProcs.h @@ -29,6 +29,9 @@ /* exported functions are/were used by the X Server */ +#ifndef XSERVER_XFREE86_CONFIGPROCS_H +#define XSERVER_XFREE86_CONFIGPROCS_H + #include /* Device.c */ @@ -146,3 +149,5 @@ xf86freeExtensions(XF86ConfExtensionsPtr ptr); void ErrorF(const char *f, ...); #endif + +#endif /* XSERVER_XFREE86_CONFIGPROCS_H */ diff --git a/hw/xquartz/NSUserDefaults+XQuartzDefaults.h b/hw/xquartz/NSUserDefaults+XQuartzDefaults.h index 2f180b241..c0d1b6e96 100644 --- a/hw/xquartz/NSUserDefaults+XQuartzDefaults.h +++ b/hw/xquartz/NSUserDefaults+XQuartzDefaults.h @@ -6,6 +6,9 @@ // Copyright (c) 2021 Apple Inc. All rights reserved. // +#ifndef XSERVER_XQUARTZ_NSUSERDEFAULTS_XQUARTZDEFAULTS_H +#define XSERVER_XQUARTZ_NSUSERDEFAULTS_XQUARTZDEFAULTS_H + #import extern NSString * const XQuartzPrefKeyAppsMenu; @@ -47,3 +50,5 @@ extern NSString * const XQuartzPrefKeySyncPrimaryOnSelect; + (NSUserDefaults *)xquartzDefaults; @end + +#endif /* XSERVER_XQUARTZ_NSUSERDEFAULTS_XQUARTZDEFAULTS_H */ diff --git a/hw/xquartz/xpr/driWrap.h b/hw/xquartz/xpr/driWrap.h index 1bc34ee9e..c00452d9c 100644 --- a/hw/xquartz/xpr/driWrap.h +++ b/hw/xquartz/xpr/driWrap.h @@ -28,6 +28,8 @@ */ #ifndef DRIWRAP_H +#define DRIWRAP_H + #include "scrnintstr.h" Bool diff --git a/hw/xwin/glx/winpriv.h b/hw/xwin/glx/winpriv.h index 6f695a971..dfa21bcc2 100644 --- a/hw/xwin/glx/winpriv.h +++ b/hw/xwin/glx/winpriv.h @@ -4,9 +4,14 @@ * Authors: Alexander Gottwald */ +#ifndef XSERVER_XWIN_WINPRIV_H +#define XSERVER_XWIN_WINPRIV_H + #include #include HWND winGetWindowInfo(WindowPtr pWin); Bool winCheckScreenAiglxIsSupported(ScreenPtr pScreen); void winSetScreenAiglxIsActive(ScreenPtr pScreen); + +#endif /* XSERVER_XWIN_WINPRIV_H */ diff --git a/hw/xwin/winauth.h b/hw/xwin/winauth.h index 97cfe52a1..9cde26864 100644 --- a/hw/xwin/winauth.h +++ b/hw/xwin/winauth.h @@ -19,8 +19,13 @@ * IN THE SOFTWARE. */ +#ifndef XSERVER_XWIN_WINAUTH_H +#define XSERVER_XWIN_WINAUTH_H + #include #include // for BOOL BOOL winGenerateAuthorization(void); xcb_auth_info_t * winGetXcbAuthInfo(void); + +#endif /* XSERVER_XWIN_WINAUTH_H */ diff --git a/hw/xwin/winlayouts.h b/hw/xwin/winlayouts.h index 904410a2d..f2bfd49df 100644 --- a/hw/xwin/winlayouts.h +++ b/hw/xwin/winlayouts.h @@ -27,6 +27,9 @@ * XKB settings. */ +#ifndef XSERVER_XWIN_WINLAYOUTS_H +#define XSERVER_XWIN_WINLAYOUTS_H + typedef struct { unsigned int winlayout; int winkbtype; @@ -98,3 +101,5 @@ WinKBLayoutRec winKBLayouts[] = { See http://technet.microsoft.com/en-us/library/cc766503%28WS.10%29.aspx for a listing of input locale (keyboard layout) codes */ + +#endif /* XSERVER_XWIN_WINLAYOUTS_H */ diff --git a/hw/xwin/winmonitors.h b/hw/xwin/winmonitors.h index 5fe3ecd52..87805ba1e 100644 --- a/hw/xwin/winmonitors.h +++ b/hw/xwin/winmonitors.h @@ -27,6 +27,9 @@ from The Open Group. */ +#ifndef XSERVER_XWIN_WINMONITORS_H +#define XSERVER_XWIN_WINMONITORS_H + /* data returned for monitor information */ struct GetMonitorInfoData { int requestedMonitor; @@ -41,3 +44,5 @@ struct GetMonitorInfoData { }; Bool QueryMonitor(int i, struct GetMonitorInfoData *data); + +#endif /* XSERVER_XWIN_WINMONITORS_H */ From f5e00916aabbe189b1d683b57c908b6d895da27f Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:19 +0100 Subject: [PATCH 10/42] include: add/fix include guards where missing/broken Signed-off-by: Mike Gelfand --- include/dix-config-apple-verbatim.h | 5 +++++ include/xwin-config.h.meson.in | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/include/dix-config-apple-verbatim.h b/include/dix-config-apple-verbatim.h index f429d200e..52106dbec 100644 --- a/include/dix-config-apple-verbatim.h +++ b/include/dix-config-apple-verbatim.h @@ -1,8 +1,13 @@ /* Do not include this file directly. It is included at the end of */ +#ifndef XSERVER_CONFIG_APPLE_VERBATIM_H +#define XSERVER_CONFIG_APPLE_VERBATIM_H + /* Correctly set _XSERVER64 for OSX fat binaries */ #if defined(__LP64__) && !defined(_XSERVER64) #define _XSERVER64 1 #elif !defined(__LP64__) && defined(_XSERVER64) #undef _XSERVER64 #endif + +#endif /* XSERVER_CONFIG_APPLE_VERBATIM_H */ diff --git a/include/xwin-config.h.meson.in b/include/xwin-config.h.meson.in index bf2a696d6..1066fd525 100644 --- a/include/xwin-config.h.meson.in +++ b/include/xwin-config.h.meson.in @@ -4,6 +4,10 @@ * This file has all defines used in the xwin ddx * */ + +#ifndef XSERVER_XWIN_CONFIG_H +#define XSERVER_XWIN_CONFIG_H + #include /* Winsock networking */ @@ -17,3 +21,5 @@ /* Whether we should re-locate the root to where the executable lives */ #mesondefine RELOCATE_PROJECTROOT + +#endif /* XSERVER_XWIN_CONFIG_H */ From 32b26ccf9e66dfb2c5342d57ca52d93a9292e9bc Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:19 +0100 Subject: [PATCH 11/42] mi: add/fix include guards where missing/broken Signed-off-by: Mike Gelfand --- mi/miline.h | 2 +- mi/mipoly.h | 5 +++++ mi/misprite.h | 21 +++++++++++++-------- mi/miwideline.h | 5 +++++ mi/mizerarc.h | 5 +++++ 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/mi/miline.h b/mi/miline.h index 7ef3b015a..c40e4a98e 100644 --- a/mi/miline.h +++ b/mi/miline.h @@ -1,4 +1,3 @@ - /* Copyright 1994, 1998 The Open Group @@ -26,6 +25,7 @@ in this Software without prior written authorization from The Open Group. */ #ifndef MILINE_H +#define MILINE_H #include "screenint.h" #include "privates.h" diff --git a/mi/mipoly.h b/mi/mipoly.h index 10632f232..b947d20ce 100644 --- a/mi/mipoly.h +++ b/mi/mipoly.h @@ -78,6 +78,9 @@ from The Open Group. * drawn (as with the even-odd rule). */ +#ifndef XSERVER_MIPOLY_H +#define XSERVER_MIPOLY_H + /* * for the winding number rule */ @@ -172,3 +175,5 @@ typedef struct _ScanLineListBlock { pAET = pAET->next; \ } \ } + +#endif /* XSERVER_MIPOLY_H */ diff --git a/mi/misprite.h b/mi/misprite.h index aa67f3229..db0dce25f 100644 --- a/mi/misprite.h +++ b/mi/misprite.h @@ -1,11 +1,3 @@ -/* - * misprite.h - * - * software-sprite/sprite drawing interface spec - * - * mi versions of these routines exist. - */ - /* Copyright 1989, 1998 The Open Group @@ -31,6 +23,17 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ +/* + * misprite.h + * + * software-sprite/sprite drawing interface spec + * + * mi versions of these routines exist. + */ + +#ifndef XSERVER_MISPRITE_H +#define XSERVER_MISPRITE_H + Bool miSpriteInitialize(ScreenPtr pScreen, miPointerScreenFuncPtr screenFuncs); Bool miDCRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); @@ -44,3 +47,5 @@ Bool miDCRestoreUnderCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y, int w, int h); Bool miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen); void miDCDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen); + +#endif /* XSERVER_MISPRITE_H */ diff --git a/mi/miwideline.h b/mi/miwideline.h index 88bc3d6c8..39a2727e4 100644 --- a/mi/miwideline.h +++ b/mi/miwideline.h @@ -28,6 +28,9 @@ from The Open Group. /* Author: Keith Packard, MIT X Consortium */ +#ifndef XSERVER_MIWIDELINE_H +#define XSERVER_MIWIDELINE_H + #include "mifpoly.h" /* for ICEIL */ /* @@ -91,3 +94,5 @@ typedef struct _LineFace { ValidateGC (pDrawable, pGC); \ } \ } + +#endif /* XSERVER_MIWIDELINE_H */ diff --git a/mi/mizerarc.h b/mi/mizerarc.h index 165e281ed..945efe088 100644 --- a/mi/mizerarc.h +++ b/mi/mizerarc.h @@ -24,6 +24,9 @@ in this Software without prior written authorization from The Open Group. ********************************************************/ +#ifndef XSERVER_MIZERARC_H +#define XSERVER_MIZERARC_H + typedef struct { int x; int y; @@ -122,3 +125,5 @@ extern _X_EXPORT Bool miZeroArcSetup(xArc * /*arc */ , miZeroArcRec * /*info */ , Bool /*ok360 */ ); + +#endif /* XSERVER_MIZERARC_H */ From 565309bb3382f35f2768a6df10eb263b591606e3 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:19 +0100 Subject: [PATCH 12/42] miext: add/fix include guards where missing/broken Skipped headers designed for multiple or non-trivial inclusion: * miext/shadow/shrotpack.h * miext/shadow/shrotpackYX.h Signed-off-by: Mike Gelfand --- miext/shadow/c2p_core.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/miext/shadow/c2p_core.h b/miext/shadow/c2p_core.h index d0db2b5f3..6babd61af 100644 --- a/miext/shadow/c2p_core.h +++ b/miext/shadow/c2p_core.h @@ -27,6 +27,9 @@ * DEALINGS IN THE SOFTWARE. */ +#ifndef XSERVER_C2P_CORE_H +#define XSERVER_C2P_CORE_H + #include "os/bug_priv.h" /* @@ -186,3 +189,5 @@ static inline void transp2x(CARD32 d[], unsigned int n) _transp(d, 1, 0, n, mask); return; } + +#endif /* XSERVER_C2P_CORE_H */ From c4ca14eff06cdeb9f3a9372571d7387d73a100b2 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:20 +0100 Subject: [PATCH 13/42] pseudoramix: add/fix include guards where missing/broken Signed-off-by: Mike Gelfand --- pseudoramiX/pseudoramiX.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pseudoramiX/pseudoramiX.h b/pseudoramiX/pseudoramiX.h index 5393062ee..e7b255336 100644 --- a/pseudoramiX/pseudoramiX.h +++ b/pseudoramiX/pseudoramiX.h @@ -2,7 +2,12 @@ * Minimal implementation of PanoramiX/Xinerama */ +#ifndef XSERVER_PSEUDORAMIX_H +#define XSERVER_PSEUDORAMIX_H + void PseudoramiXAddScreen(int x, int y, int w, int h); void PseudoramiXResetScreens(void); + +#endif /* XSERVER_PSEUDORAMIX_H */ From 26f56735c5ffcc91dba83fc5763c5e2fb19b01d1 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 24 Jun 2025 22:50:20 +0100 Subject: [PATCH 14/42] record: add/fix include guards where missing/broken Signed-off-by: Mike Gelfand --- record/set.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/record/set.h b/record/set.h index 74ddda75b..82a8e9ce5 100644 --- a/record/set.h +++ b/record/set.h @@ -51,6 +51,9 @@ from The Open Group. The following types and functions/macros define the ADT. */ +#ifndef XSERVER_SET_H +#define XSERVER_SET_H + /* an interval of set members */ typedef struct { CARD16 first; @@ -133,3 +136,5 @@ int RecordSetMemoryRequirements(RecordSetInterval * /*pIntervals */ , process interval; } */ + +#endif /* XSERVER_SET_H */ From 6a10d96761530603c4e6ea54d225a15ccaa9e669 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 26 Jun 2025 14:45:33 +0200 Subject: [PATCH 15/42] rootless: fix missing include of dix/screen_hooks_priv.h We're using XorgScreenWindowPositionParamRec here, so need to include that header. Signed-off-by: Enrico Weigelt, metux IT consult --- miext/rootless/rootlessWindow.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/miext/rootless/rootlessWindow.h b/miext/rootless/rootlessWindow.h index 8a030939b..00e95b8a0 100644 --- a/miext/rootless/rootlessWindow.h +++ b/miext/rootless/rootlessWindow.h @@ -34,6 +34,8 @@ #ifndef _ROOTLESSWINDOW_H #define _ROOTLESSWINDOW_H +#include "dix/screen_hooks_priv.h" + #include "rootlessCommon.h" Bool RootlessCreateWindow(WindowPtr pWin); From d89b3596f04e9f040f57e0e81920b85813570aba Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 12:36:41 +0100 Subject: [PATCH 16/42] xquartz: depend on libX11 (includes X11/Xlib.h) Signed-off-by: Mike Gelfand --- hw/xquartz/mach-startup/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xquartz/mach-startup/meson.build b/hw/xquartz/mach-startup/meson.build index 2f7694252..8b5afd980 100644 --- a/hw/xquartz/mach-startup/meson.build +++ b/hw/xquartz/mach-startup/meson.build @@ -62,7 +62,7 @@ x11_bin = executable('X11.bin', mach_startup[3], # mach_startupUser.c ], link_with: x11_bin_libs, - dependencies: [xproto_dep, x11_bin_deps, mach_startup_dep], + dependencies: [xproto_dep, x11_dep, x11_bin_deps, mach_startup_dep], include_directories: [inc, '..', top_dir_inc], c_args: xquartz_defs, link_args: ['-Objc'], From edb020e306018123f1a7c359d80d28b1af81955d Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 12:40:36 +0100 Subject: [PATCH 17/42] xquartz: depend on libXdmcp (includes osdep.h which includes X11/Xdmcp.h) Signed-off-by: Mike Gelfand --- hw/xquartz/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xquartz/meson.build b/hw/xquartz/meson.build index 83e79eae8..d8dd7cd98 100644 --- a/hw/xquartz/meson.build +++ b/hw/xquartz/meson.build @@ -76,7 +76,7 @@ libXquartz = static_library('Xquartz', c_args: libxquartz_defs, objc_args: libxquartz_defs, include_directories: [inc, '../../pseudoramiX', '../../miext/rootless', top_dir_inc], - dependencies: [xproto_dep, pixman_dep], + dependencies: [xproto_dep, xdmcp_dep, pixman_dep], link_with: [libxserver_pseudoramix, libxserver_miext_rootless], ) From 3e89bd7409d1ee7e0a66a1ab28458ed40161d7f0 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 12:43:18 +0100 Subject: [PATCH 18/42] xquartz: add missing include for `DeliverEvents` Signed-off-by: Mike Gelfand --- hw/xquartz/quartz.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c index 794d648dd..da30f1f08 100644 --- a/hw/xquartz/quartz.c +++ b/hw/xquartz/quartz.c @@ -33,6 +33,8 @@ #include +#include "dix/dix_priv.h" + #include "quartzRandR.h" #include "inputstr.h" #include "quartz.h" From 4f7000f62044c2b30c948144105a7ed0b62c711a Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 26 Jun 2025 12:44:24 +0100 Subject: [PATCH 19/42] xquartz: add missing include for `XkbSetRulesDflts` Signed-off-by: Mike Gelfand --- hw/xquartz/darwin.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c index 296757118..74d889606 100644 --- a/hw/xquartz/darwin.c +++ b/hw/xquartz/darwin.c @@ -38,6 +38,7 @@ #include "os/ddx_priv.h" #include "os/log_priv.h" #include "os/osdep.h" +#include "xkb/xkbsrv_priv.h" #include "os.h" #include "servermd.h" From f40afc89832d1faf19beb4d394956208a98462cc Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Wed, 25 Jun 2025 02:32:00 +0100 Subject: [PATCH 20/42] .github: .gitlab-ci: add macos (xquartz) build job Signed-off-by: Mike Gelfand --- .github/scripts/conf.sh | 7 +++- .github/scripts/install-prereq.sh | 7 ++++ .github/scripts/macos/install-pkg.sh | 38 ++++++++++++++++++ .github/scripts/util.sh | 13 ++++++- .github/workflows/build-xserver.yml | 58 ++++++++++++++++++++++++++++ .gitlab-ci/check-ddx-build.sh | 1 + 6 files changed, 121 insertions(+), 3 deletions(-) create mode 100755 .github/scripts/macos/install-pkg.sh diff --git a/.github/scripts/conf.sh b/.github/scripts/conf.sh index 7a0576b7f..7cdab25d2 100644 --- a/.github/scripts/conf.sh +++ b/.github/scripts/conf.sh @@ -1,8 +1,13 @@ +export X11_OS=`uname -s` + export X11_PREFIX="${X11_PREFIX:-$HOME/x11}" export X11_BUILD_DIR="${X11_BUILD_DIR:-$HOME/build-deps}" export DRV_BUILD_DIR="${DRV_BUILD_DIR:-$HOME/build-drivers}" -export FDO_CI_CONCURRENT=`nproc` +case "$X11_OS" in +Darwin) export FDO_CI_CONCURRENT=`sysctl -n hw.logicalcpu` ;; +Linux) export FDO_CI_CONCURRENT=`nproc` ;; +esac export PATH="$X11_PREFIX/bin:$PATH" export PKG_CONFIG_PATH="$X11_PREFIX/lib/x86_64-linux-gnu/pkgconfig:$X11_PREFIX/lib/pkgconfig:$X11_PREFIX/share/pkgconfig:$PKG_CONFIG_PATH" diff --git a/.github/scripts/install-prereq.sh b/.github/scripts/install-prereq.sh index e201126a1..2bdbeb65a 100755 --- a/.github/scripts/install-prereq.sh +++ b/.github/scripts/install-prereq.sh @@ -8,10 +8,13 @@ mkdir -p $X11_BUILD_DIR cd $X11_BUILD_DIR build_meson rendercheck https://gitlab.freedesktop.org/xorg/test/rendercheck rendercheck-1.6 +if [ "$X11_OS" = "Linux" ]; then build_meson drm https://gitlab.freedesktop.org/mesa/drm libdrm-2.4.121 \ -Domap=enabled +fi build_meson libxcvt https://gitlab.freedesktop.org/xorg/lib/libxcvt libxcvt-0.1.0 build_ac xorgproto https://gitlab.freedesktop.org/xorg/proto/xorgproto xorgproto-2024.1 +if [ "$X11_OS" = "Linux" ]; then build_meson wayland https://gitlab.freedesktop.org/wayland/wayland 1.21.0 \ -Dtests=false -Ddocumentation=false -Ddtd_validation=false build_meson wayland-protocols https://gitlab.freedesktop.org/wayland/wayland-protocols 1.38 @@ -19,6 +22,10 @@ build_meson libdecor https://gitlab.freedesktop.org/libdecor/libdecor -D{demo,install_demo}=false build_meson libei https://gitlab.freedesktop.org/libinput/libei 1.0.0 \ -Dtests=disabled -Ddocumentation=[] -Dliboeffis=enabled +fi +if [ "$X11_OS" = "Darwin" ]; then +build_ac xset https://gitlab.freedesktop.org/xorg/app/xset xset-1.2.5 +fi build_ac_xts xts https://gitlab.freedesktop.org/xorg/test/xts master # dbbfa96c036e596346147081cbceda136e7c86c1 clone_source piglit https://gitlab.freedesktop.org/mesa/piglit main # 265896c86f90cb72e8f218ba6a3617fca8b9a1e3 diff --git a/.github/scripts/macos/install-pkg.sh b/.github/scripts/macos/install-pkg.sh new file mode 100755 index 000000000..56d2ef236 --- /dev/null +++ b/.github/scripts/macos/install-pkg.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +set -e + +brew update + +brew install \ + autoconf \ + automake \ + bdftopcf \ + libapplewm \ + libtool \ + libx11 \ + libxau \ + libxaw \ + libxcb \ + libxdmcp \ + libxext \ + libxfixes \ + libxfont2 \ + libxkbfile \ + libxi \ + libxmu \ + libxrender \ + libxt \ + libxtst \ + meson \ + mkfontscale \ + pkgconf \ + pixman \ + util-macros \ + xdpyinfo \ + xkbcomp \ + xkeyboard-config \ + xtrans + +pip3 install --break-system-packages \ + mako diff --git a/.github/scripts/util.sh b/.github/scripts/util.sh index 43bccfd24..29e87ff3d 100644 --- a/.github/scripts/util.sh +++ b/.github/scripts/util.sh @@ -82,8 +82,17 @@ build_ac_xts() { clone_source "$pkgname" "$url" "$ref" ( cd $pkgname - CFLAGS=-fcommon ./autogen.sh --prefix=$X11_PREFIX - xvfb-run make -j${FDO_CI_CONCURRENT:-4} install + CFLAGS='-fcommon' + if [ "$X11_OS" = "Darwin" ]; then + sed -E -i~ 's|(\[XTS\], \[)|\1xt xmu xaw7 |' configure.ac + sed -E -i~ -e 's|(XTextProperty)[[:space:]]+(text_prop_good)|\1 *\2|' -e 's|(style_good),[[:space:]]*&(text_prop_good)|\1,\2|' -e 's|text_prop_good\.|text_prop_good->|' xts5/Xlib14/X{mb,wc}TextListToTextProperty.m + CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0" + if cc -Werror=unknown-warning-option -Wincompatible-function-pointer-types -c -xc -o /dev/null /dev/null 2>/dev/null; then + CFLAGS="$CFLAGS -Wno-error=incompatible-function-pointer-types" + fi + fi + ./autogen.sh --prefix=$X11_PREFIX CFLAGS="$CFLAGS" + make -j${FDO_CI_CONCURRENT:-4} install ) touch $X11_PREFIX/$pkgname.DONE fi diff --git a/.github/workflows/build-xserver.yml b/.github/workflows/build-xserver.yml index 2a83db818..417db1bfd 100644 --- a/.github/workflows/build-xserver.yml +++ b/.github/workflows/build-xserver.yml @@ -119,3 +119,61 @@ jobs: - name: compile drivers run: .github/scripts/compile-drivers.sh + + xserver-build-macos: + env: + MESON_ARGS: -Dprefix=/tmp -Dglx=false -Dxnest=false + X11_PREFIX: /Users/runner/x11 + X11_BUILD_DIR: /Users/runner/build-deps + runs-on: macos-latest + steps: + - name: Check out repository code + uses: actions/checkout@v4 + + - name: prepare build environment + run: | + echo "PKG_CONFIG_PATH=$X11_PREFIX/share/pkgconfig:$X11_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV" + + - name: homebrew cache + uses: actions/cache@v4 + with: + path: /Users/runner/Library/Caches/Homebrew + key: ${{ runner.os }}-homebrew-cache-${{ hashFiles('.github/scripts/macos/install-pkg.sh') }} + restore-keys: ${{ runner.os }}-homebrew-cache- + + - name: pkg install + run: .github/scripts/macos/install-pkg.sh + + - name: X11 prereq cache + uses: actions/cache@v4 + with: + path: | + ${{ env.X11_PREFIX }} + ${{ env.X11_BUILD_DIR }}/xts + ${{ env.X11_BUILD_DIR }}/piglit + key: ${{ runner.os }}-x11-deps-${{ hashFiles('.github/scripts/install-prereq.sh') }} + restore-keys: ${{ runner.os }}-x11-deps- + + - name: generic prereq + run: .github/scripts/install-prereq.sh + + - name: build + run: .gitlab-ci/meson-build.sh + + - name: tests (may fail) + continue-on-error: true + run: meson test -C "${{ env.MESON_BUILDDIR }}" --print-errorlogs -j1 || true + env: + XTEST_DIR: ${{ env.X11_BUILD_DIR }}/xts + PIGLIT_DIR: ${{ env.X11_BUILD_DIR }}/piglit + + - name: archive build logs + uses: actions/upload-artifact@v4 + with: + name: build-logs-macos + path: | + build/meson-logs/* + - name: ddx build check + run: .gitlab-ci/check-ddx-build.sh + - name: manpage check + run: .gitlab-ci/manpages-check diff --git a/.gitlab-ci/check-ddx-build.sh b/.gitlab-ci/check-ddx-build.sh index 3b3a65f38..6361571ff 100755 --- a/.gitlab-ci/check-ddx-build.sh +++ b/.gitlab-ci/check-ddx-build.sh @@ -19,6 +19,7 @@ fi [[ "$BUILD_XEPHYR" == true ]] && check_executable "hw/kdrive/ephyr/Xephyr" [[ "$BUILD_XNEST" == true ]] && check_executable "hw/xnest/Xnest" [[ "$BUILD_XORG" == true ]] && check_executable "hw/xfree86/Xorg" +[[ "$BUILD_XQUARTZ" == true ]] && check_executable "hw/xquartz/mach-startup/Xquartz" [[ "$BUILD_XVFB" == true ]] && check_executable "hw/vfb/Xvfb" exit 0 From 9ab598e2b2c5647a9d0d043f1f1c2c6d6ab2fb8b Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Fri, 27 Jun 2025 14:41:14 +0100 Subject: [PATCH 21/42] .github: add comments explaning the reasons behind xts patching Signed-off-by: Mike Gelfand --- .github/scripts/util.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/scripts/util.sh b/.github/scripts/util.sh index 29e87ff3d..cd74de195 100644 --- a/.github/scripts/util.sh +++ b/.github/scripts/util.sh @@ -84,9 +84,20 @@ build_ac_xts() { cd $pkgname CFLAGS='-fcommon' if [ "$X11_OS" = "Darwin" ]; then + # xts5/include/XtTest.h includes => needs xt + # xts5/src/libXtaw/*.c include and => need xmu and xaw7 sed -E -i~ 's|(\[XTS\], \[)|\1xt xmu xaw7 |' configure.ac + # xts5/Xlib14/X{mb,wc}TextListToTextProperty.m define a function accepting `XTextProperty` but call it passing + #`XTextProperty*`; since the parameter is seemingly meant for output, accept it as pointer sed -E -i~ -e 's|(XTextProperty)[[:space:]]+(text_prop_good)|\1 *\2|' -e 's|(style_good),[[:space:]]*&(text_prop_good)|\1,\2|' -e 's|text_prop_good\.|text_prop_good->|' xts5/Xlib14/X{mb,wc}TextListToTextProperty.m + # xts5/Xlib*/*.m forward-declare `strcpy()` which is incompatible with _FORTIFY_SOURCE > 0 where `strcpy` is + # a macro; set _FORTIFY_SOURCE to 0 as we don't care much about security in this test code CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0" + # declarations for `XtAppSetError{,Msg}Handler()` in (libXt) make it hard to write warning- + # free code: they want a noreturn-annotated handler as input but return old handler without noreturn annotation, + # so e.g. `XtAppSetErrorHandler(XtAppSetErrorHandler(NULL))` (similar to xts5/Xt13/XtAppSetError*Handler.m) + # doesn't compile complaining about incompatible function pointers, at least with Apple Clang 16 (not sure why + # it treats this warning as error by default though) if cc -Werror=unknown-warning-option -Wincompatible-function-pointer-types -c -xc -o /dev/null /dev/null 2>/dev/null; then CFLAGS="$CFLAGS -Wno-error=incompatible-function-pointer-types" fi From 8f50b8cc191f0d51525e6754fc5287f1348308b2 Mon Sep 17 00:00:00 2001 From: notbabaisyou Date: Thu, 26 Jun 2025 18:57:01 +0200 Subject: [PATCH 22/42] Xext: Fix typo in xace.h `modsetting` -> `modesetting` Signed-off-by: notbabaisyou --- Xext/xace.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xext/xace.h b/Xext/xace.h index b9c81accf..db1dd750e 100644 --- a/Xext/xace.h +++ b/Xext/xace.h @@ -78,7 +78,7 @@ int XaceHookPropertyAccess(ClientPtr ptr, WindowPtr pWin, PropertyPtr *ppProp, Mask access_mode); int XaceHookSelectionAccess(ClientPtr ptr, Selection ** ppSel, Mask access_mode); -/* needs to be exported for in-tree modsetting, but not part of public API */ +/* needs to be exported for in-tree modesetting, but not part of public API */ _X_EXPORT int XaceHookResourceAccess(ClientPtr client, XID id, RESTYPE rtype, void *res, RESTYPE ptype, void *parent, Mask access_mode); From 4afcb1cd7b91ad3ea729683d5b93db7186616cef Mon Sep 17 00:00:00 2001 From: notbabaisyou Date: Thu, 26 Jun 2025 18:57:35 +0200 Subject: [PATCH 23/42] modesetting: Fix typo. `modsetCreateScreenResources` -> `modesetCreateScreenResources` Signed-off-by: notbabaisyou --- hw/xfree86/drivers/modesetting/driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c index 43783c4b1..7c8d779dc 100644 --- a/hw/xfree86/drivers/modesetting/driver.c +++ b/hw/xfree86/drivers/modesetting/driver.c @@ -1631,7 +1631,7 @@ msStopFlippingPixmapTracking(DrawablePtr src, } static Bool -modsetCreateScreenResources(ScreenPtr pScreen) +modesetCreateScreenResources(ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); modesettingPtr ms = modesettingPTR(pScrn); @@ -1941,7 +1941,7 @@ ScreenInit(ScreenPtr pScreen, int argc, char **argv) return FALSE; } - pScreen->CreateScreenResources = modsetCreateScreenResources; + pScreen->CreateScreenResources = modesetCreateScreenResources; xf86SetBlackWhitePixels(pScreen); From 25c002c54b58a81518f7cac6ab6dffa52e53ee56 Mon Sep 17 00:00:00 2001 From: Bastiaan Quast Date: Sat, 21 Jun 2025 11:23:30 -0600 Subject: [PATCH 24/42] CONTRIBUTION.md: "MR" / "MRs" -> pull request(s) --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5640ebf4e..dd351c31b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,9 +10,9 @@ Keep in mind that history is also a piece of documentation. 3. Once release is out, bugfixes should be submitted separately, against - the affected release branch(es) as well as master (so multiple MRs) + the affected release branch(es) as well as master (so multiple pull requests) 4. If new functions or types are introduced, these should be documented in-code, so we can generate docs directly from the code :) -5. Use MR tags if you can - if we need some more, just ask. +5. Use pull request tags if you can - if we need some more, just ask. From 461411c798c263f70daa96f7136614dfefda6adc Mon Sep 17 00:00:00 2001 From: notbabaisyou Date: Sun, 15 Jun 2025 20:15:37 +0200 Subject: [PATCH 25/42] modesetting: allow enabling atomic mode. The Linux kernel has long had code preventing Xorg from using atomic modesetting due to various bugs in it's implementation, some of these issues have since been fixed but some issues remain namely with DPMS and other smaller things, we should allow users to opt-in by setting "Option 'Atomic' 'True'" This shouldn't cause any issues as the feature remains disabled by default. Co-authored-by: Daniel Abrecht Signed-off-by: notbabaisyou --- hw/xfree86/drivers/modesetting/driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c index 7c8d779dc..d509f4400 100644 --- a/hw/xfree86/drivers/modesetting/driver.c +++ b/hw/xfree86/drivers/modesetting/driver.c @@ -1306,7 +1306,7 @@ PreInit(ScrnInfoPtr pScrn, int flags) ms->atomic_modeset_capable = (ret == 0); if (xf86ReturnOptValBool(ms->drmmode.Options, OPTION_ATOMIC, FALSE)) { - ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 1); + ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 2); ms->atomic_modeset = (ret == 0); if (!ms->atomic_modeset) xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Atomic modesetting not supported\n"); From 7fb4ba10f257a6efce4123f2ad744920e3d23c3f Mon Sep 17 00:00:00 2001 From: notbabaisyou Date: Tue, 24 Jun 2025 22:29:48 +0200 Subject: [PATCH 26/42] glamor: Enable dmabuf_capable for Zink This lets Zink take advantage of DRM modifiers on GPUs letting it properly handle tiled buffers. Signed-off-by: notbabaisyou --- glamor/glamor_egl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c index 11ba189a8..88c3737f2 100644 --- a/glamor/glamor_egl.c +++ b/glamor/glamor_egl.c @@ -1192,6 +1192,8 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd) "dmabuf_capable"); else if (strstr((const char *)renderer, "Intel")) glamor_egl->dmabuf_capable = TRUE; + else if (strstr((const char *)renderer, "zink")) + glamor_egl->dmabuf_capable = TRUE; else glamor_egl->dmabuf_capable = FALSE; } From 949e4e4fa0b813b094f5c1744368f5c15e216426 Mon Sep 17 00:00:00 2001 From: Collin Date: Thu, 26 Jun 2025 22:24:51 -0500 Subject: [PATCH 27/42] Update build-xserver.yml to have correct permissions to resolve CodeQL alert https://github.com/HaplessIdiot/xserver/security/code-scanning/16 Adds permissions to build in read only to support ubuntu package standards. --- .github/workflows/build-xserver.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-xserver.yml b/.github/workflows/build-xserver.yml index 417db1bfd..d86ebb379 100644 --- a/.github/workflows/build-xserver.yml +++ b/.github/workflows/build-xserver.yml @@ -1,5 +1,8 @@ name: Build X servers +permissions: + contents: read + env: MESON_BUILDDIR: "build" X11_PREFIX: /home/runner/x11 From d441e4783ee7ad8f9e81e9ad7d332eadc98391b3 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 30 Jun 2025 12:37:35 +0200 Subject: [PATCH 28/42] .github: 01-bug-report: use 25.0.0.X instead of listing all minor releases Listing all patchlevels in the ticket form would quickly explode it. Users are expected to always run the latest patchlevel (4th digit), because they're only receiving urgent bug and security fixes, not getting anything new, that could break other things. Signed-off-by: Enrico Weigelt, metux IT consult --- .github/ISSUE_TEMPLATE/01-bug-report.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-bug-report.yml b/.github/ISSUE_TEMPLATE/01-bug-report.yml index 890e9568e..2f9159f78 100644 --- a/.github/ISSUE_TEMPLATE/01-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/01-bug-report.yml @@ -14,8 +14,7 @@ body: attributes: label: Select the version options: - - 25.0.0.0 - - 25.0.0.1 + - 25.0.0.X - Git master branch - other or don't know default: 1 From d08631bef1f4d4d8617e19af7b5c579f45b91686 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 30 Jun 2025 12:44:10 +0200 Subject: [PATCH 29/42] minor release 25.0.0.2 minor bugfix release. Signed-off-by: Enrico Weigelt, metux IT consult --- meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 2a5500635..433bfaf8a 100644 --- a/meson.build +++ b/meson.build @@ -3,10 +3,10 @@ project('xserver', 'c', 'buildtype=debugoptimized', 'c_std=gnu99', ], - version: '25.0.0.1', + version: '25.0.0.2', meson_version: '>= 0.58.0', ) -release_date = '2025-06-21' +release_date = '2025-06-30' add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc']) cc = meson.get_compiler('c') From ccf9787bd65823163e3dde6bc2f4554d16d6d6bc Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 30 Jun 2025 16:04:42 +0200 Subject: [PATCH 30/42] .github: add building mouse driver xf86-input-mouse is now supported Linux again, so add it to the build. Signed-off-by: Enrico Weigelt, metux IT consult --- .github/scripts/compile-drivers.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/scripts/compile-drivers.sh b/.github/scripts/compile-drivers.sh index 7145042d3..a68076e38 100755 --- a/.github/scripts/compile-drivers.sh +++ b/.github/scripts/compile-drivers.sh @@ -14,6 +14,7 @@ cd $DRV_BUILD_DIR build_drv_ac xf86-input-elographics $X11L_DRV_GIT/xf86-input-elographics master build_drv_ac xf86-input-evdev $X11L_DRV_GIT/xf86-input-evdev master build_drv_ac xf86-input-libinput $X11L_DRV_GIT/xf86-input-libinput master +build_drv_ac xf86-input-mouse $X11L_DRV_GIT/xf86-input-mouse master build_drv_ac xf86-input-synaptics $X11L_DRV_GIT/xf86-input-synaptics master build_drv_ac xf86-video-amdgpu $X11L_DRV_GIT/xf86-video-amdgpu xf86-video-amdgpu-23.0.0 From 6a3162d623c87f2429620443ec8ca2f3e7c6c487 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 30 Jun 2025 13:44:22 +0200 Subject: [PATCH 31/42] Xnest: fix analyzer warning on uninitialized `DefaultVisual` In xnestOpenScreen(), some compilers/analyzers spitting out a false alarm on `defaultVisual` field potentially used uninitialized. This can't practically happen, but not all compilers/analyzers really can see that. Adding a zero initializer doesn't cost us anything, so silencing that false alarm is trivial. Signed-off-by: Enrico Weigelt, metux IT consult --- hw/xnest/Screen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c index 25a7ccae8..7bf522a55 100644 --- a/hw/xnest/Screen.c +++ b/hw/xnest/Screen.c @@ -164,7 +164,7 @@ Bool xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[]) { unsigned long valuemask; - VisualID defaultVisual; + VisualID defaultVisual = 0; int rootDepth; miPointerScreenPtr PointPriv; From 6c2f17a5e02198a0fd0cbc62dc07c9360b64b53f Mon Sep 17 00:00:00 2001 From: Tautvis Date: Tue, 1 Jul 2025 13:23:20 +0200 Subject: [PATCH 32/42] xf86vidmode: fix result copying in ProcVidModeGetMonitor() The monitor values (vendor and model) accidentally had been copied at the start of the payload, instead of being appended after the previously copied data, and also moving the wrong pointer, thus corrupting the reply and causing some clients to hang. Signed-off-by: Tautvis Signed-off-by: Enrico Weigelt, metux IT consult --- Xext/vidmode.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Xext/vidmode.c b/Xext/vidmode.c index f9bbf9830..a192cff29 100644 --- a/Xext/vidmode.c +++ b/Xext/vidmode.c @@ -1280,7 +1280,7 @@ ProcVidModeGetMonitor(ClientPtr client) + nHsync + nVrefresh + nVendorItems + nModelItems }; - const int buflen = nHsync * nVrefresh + nVendorItems + nModelItems; + const int buflen = nHsync + nVrefresh + nVendorItems + nModelItems; CARD32 *sendbuf = calloc(buflen, sizeof(CARD32)); if (!sendbuf) @@ -1302,22 +1302,22 @@ ProcVidModeGetMonitor(ClientPtr client) bufwalk++; } - memcpy(sendbuf, + memcpy(bufwalk, pVidMode->GetMonitorValue(pScreen, VIDMODE_MON_VENDOR, 0).ptr, vendorLength); - sendbuf += nVendorItems; + bufwalk += nVendorItems; - memcpy(sendbuf, + memcpy(bufwalk, pVidMode->GetMonitorValue(pScreen, VIDMODE_MON_MODEL, 0).ptr, modelLength); - sendbuf += nModelItems; + bufwalk += nModelItems; if (client->swapped) { swaps(&rep.sequenceNumber); swapl(&rep.length); } - WriteToClient(client, SIZEOF(xXF86VidModeGetMonitorReply), &rep); + WriteToClient(client, sizeof(xXF86VidModeGetMonitorReply), &rep); WriteToClient(client, buflen * sizeof(CARD32), sendbuf); free(sendbuf); From 3d266528a977de931f58a2f8d309e968bbc7a211 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Mon, 30 Jun 2025 13:44:54 +0300 Subject: [PATCH 33/42] kdrive: ephyr: use c99 struct initialization For better readability and robustness against future changes, it's better to use named struct initializers instead of array-like lists. Signed-off-by: stefan11111 Signed-off-by: Enrico Weigelt, metux IT consult --- hw/kdrive/ephyr/ephyr.c | 26 ++++++++++++-------------- hw/kdrive/ephyr/ephyrinit.c | 26 +++++++++++--------------- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c index 9b00ed11f..cdc22cecf 100644 --- a/hw/kdrive/ephyr/ephyr.c +++ b/hw/kdrive/ephyr/ephyr.c @@ -1435,12 +1435,11 @@ MouseFini(KdPointerInfo * pi) } KdPointerDriver EphyrMouseDriver = { - "ephyr", - MouseInit, - MouseEnable, - MouseDisable, - MouseFini, - NULL, + .name = "ephyr", + .Init = MouseInit, + .Enable = MouseEnable, + .Disable = MouseDisable, + .Fini = MouseFini, }; /* Keyboard */ @@ -1509,12 +1508,11 @@ EphyrKeyboardBell(KdKeyboardInfo * ki, int volume, int frequency, int duration) } KdKeyboardDriver EphyrKeyboardDriver = { - "ephyr", - EphyrKeyboardInit, - EphyrKeyboardEnable, - EphyrKeyboardLeds, - EphyrKeyboardBell, - EphyrKeyboardDisable, - EphyrKeyboardFini, - NULL, + .name = "ephyr", + .Init = EphyrKeyboardInit, + .Enable = EphyrKeyboardEnable, + .Leds = EphyrKeyboardLeds, + .Bell = EphyrKeyboardBell, + .Disable = EphyrKeyboardDisable, + .Fini = EphyrKeyboardFini, }; diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c index ff0d5d0cc..fd5e73f82 100644 --- a/hw/kdrive/ephyr/ephyrinit.c +++ b/hw/kdrive/ephyr/ephyrinit.c @@ -390,23 +390,19 @@ OsVendorInit(void) } KdCardFuncs ephyrFuncs = { - ephyrCardInit, /* cardinit */ - ephyrScreenInitialize, /* scrinit */ - ephyrInitScreen, /* initScreen */ - ephyrFinishInitScreen, /* finishInitScreen */ - ephyrCreateResources, /* createRes */ - ephyrScreenFini, /* scrfini */ - ephyrCardFini, /* cardfini */ + .cardinit = ephyrCardInit, + .scrinit = ephyrScreenInitialize, + .initScreen = ephyrInitScreen, + .finishInitScreen = ephyrFinishInitScreen, + .createRes = ephyrCreateResources, - 0, /* initCursor */ + .scrfini = ephyrScreenFini, + .cardfini = ephyrCardFini, - 0, /* initAccel */ - 0, /* enableAccel */ - 0, /* disableAccel */ - 0, /* finiAccel */ + /* no cursor or accel funcs here */ - ephyrGetColors, /* getColors */ - ephyrPutColors, /* putColors */ + .getColors = ephyrGetColors, + .putColors = ephyrPutColors, - ephyrCloseScreen, /* closeScreen */ + .closeScreen = ephyrCloseScreen, }; From a4c3c9da4d2f0333f75637bb94cb103495ee1754 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 1 Jul 2025 12:36:44 +0200 Subject: [PATCH 34/42] xf86bigfont: fix compiler warning on unused variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > ../Xext/xf86bigfont.c: In function ‘SProcXF86BigfontQueryVersion’: > ../include/dix.h:65:12: warning: unused variable ‘stuff’ [-Wunused-variable] > 65 | type * stuff = (type *)client->requestBuffer; Signed-off-by: Enrico Weigelt, metux IT consult --- Xext/xf86bigfont.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c index 13ad79a98..fb62c463c 100644 --- a/Xext/xf86bigfont.c +++ b/Xext/xf86bigfont.c @@ -647,7 +647,6 @@ ProcXF86BigfontDispatch(ClientPtr client) static int _X_COLD SProcXF86BigfontQueryVersion(ClientPtr client) { - REQUEST(xXF86BigfontQueryVersionReq); return ProcXF86BigfontQueryVersion(client); } From 28e739e05b2725b7ddfec9e4515c85b221b7a636 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 1 Jul 2025 12:42:18 +0200 Subject: [PATCH 35/42] xfree86: loadmod: locally scope the errtype variable In CheckVersion() the errtype variable is used in two separate scopes, but not globally, so it's cleaner to have it only in the scopes that are actually using it. Signed-off-by: Enrico Weigelt, metux IT consult --- hw/xfree86/loader/loadmod.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c index be9335dd5..2cdf91fd2 100644 --- a/hw/xfree86/loader/loadmod.c +++ b/hw/xfree86/loader/loadmod.c @@ -417,7 +417,6 @@ CheckVersion(const char *module, XF86ModuleVersionInfo * data, { int vercode[4]; long ver = data->xf86version; - MessageType errtype; LogMessage(X_INFO, "Module %s: vendor=\"%s\"\n", data->modname ? data->modname : "UNKNOWN!", @@ -458,6 +457,7 @@ CheckVersion(const char *module, XF86ModuleVersionInfo * data, vermaj = GET_ABI_MAJOR(ver); vermin = GET_ABI_MINOR(ver); if (abimaj != vermaj) { + MessageType errtype; if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL) errtype = X_WARNING; else @@ -469,6 +469,7 @@ CheckVersion(const char *module, XF86ModuleVersionInfo * data, return FALSE; } else if (abimin > vermin) { + MessageType errtype; if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL) errtype = X_WARNING; else From c24372893bc69cec93cabb72d44cb4e5658f789f Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 26 Jun 2025 13:04:02 +0200 Subject: [PATCH 36/42] xfree86: compat: consolidate logging Consolidate the redundant warnings into generic functions. Signed-off-by: Enrico Weigelt, metux IT consult --- hw/xfree86/compat/README | 4 ++++ hw/xfree86/compat/clientexception.c | 9 +++------ hw/xfree86/compat/log.c | 10 ++++------ hw/xfree86/compat/meson.build | 1 + hw/xfree86/compat/nvidiabug.c | 31 +++++++++++++++++++++++++++++ hw/xfree86/compat/xf86_compat.h | 12 +++++++++++ 6 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 hw/xfree86/compat/nvidiabug.c create mode 100644 hw/xfree86/compat/xf86_compat.h diff --git a/hw/xfree86/compat/README b/hw/xfree86/compat/README index 19af90339..fd8c3b0f7 100644 --- a/hw/xfree86/compat/README +++ b/hw/xfree86/compat/README @@ -1 +1,5 @@ special compat code for legacy drivers, namely Nvidia proprietary + +NVidia is lacking behind for at least a year and don't actually clean up +their spaghetti code. That's why we need to keep several special compat +functions to emulate prehistoric behaviour. diff --git a/hw/xfree86/compat/clientexception.c b/hw/xfree86/compat/clientexception.c index 6005f22c4..cabde3ff2 100644 --- a/hw/xfree86/compat/clientexception.c +++ b/hw/xfree86/compat/clientexception.c @@ -4,6 +4,8 @@ #include "dix/dix_priv.h" +#include "xf86_compat.h" + /* * this is specifically for NVidia proprietary driver: they're again lagging * behind a year, doing at least some minimal cleanup of their code base. @@ -13,12 +15,7 @@ _X_EXPORT void MarkClientException(ClientPtr pClient); void MarkClientException(ClientPtr pClient) { - LogMessageVerb(X_WARNING, 0, "Bogus driver calling DIX-internal function MarkClientException() !\n"); - LogMessageVerb(X_WARNING, 0, "External drivers really should never ever call this function.\n"); - LogMessageVerb(X_WARNING, 0, "Nor should they ever DIX-internal fields like ClientRec->noClientException\n"); - LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n"); - LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n"); - LogMessageVerb(X_WARNING, 0, "And just don't buy Nvidia hardware, ever.\n"); + xf86NVidiaBugInternalFunc("MarkClientException()"); dixMarkClientException(pClient); } diff --git a/hw/xfree86/compat/log.c b/hw/xfree86/compat/log.c index 97f238071..64014e205 100644 --- a/hw/xfree86/compat/log.c +++ b/hw/xfree86/compat/log.c @@ -4,6 +4,8 @@ #include "include/os.h" +#include "xf86_compat.h" + #undef xf86Msg #undef xf86MsgVerb @@ -17,9 +19,7 @@ _X_EXPORT void xf86Msg(MessageType type, const char *format, ...) void xf86Msg(MessageType type, const char *format, ...) { - LogMessageVerb(X_WARNING, 0, "Outdated driver still using xf86Msg() !\n"); - LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n"); - LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n"); + xf86NVidiaBugInternalFunc("xf86Msg()"); va_list ap; @@ -39,9 +39,7 @@ _X_EXPORT void xf86MsgVerb(MessageType type, int verb, const char *format, ...) void xf86MsgVerb(MessageType type, int verb, const char *format, ...) { - LogMessageVerb(X_WARNING, 0, "Outdated driver still using xf86MsgVerb() !\n"); - LogMessageVerb(X_WARNING, 0, "File a bug report to driver vendor or use a FOSS driver.\n"); - LogMessageVerb(X_WARNING, 0, "Proprietary drivers are inherently unstable, they just can't be done right.\n"); + xf86NVidiaBugInternalFunc("xf86MsgVerb()"); va_list ap; va_start(ap, format); diff --git a/hw/xfree86/compat/meson.build b/hw/xfree86/compat/meson.build index d863ab2d8..b3835efdc 100644 --- a/hw/xfree86/compat/meson.build +++ b/hw/xfree86/compat/meson.build @@ -1,6 +1,7 @@ srcs_xorg_compat = [ 'clientexception.c', 'log.c', + 'nvidiabug.c', 'ones.c', 'xf86Helper.c', ] diff --git a/hw/xfree86/compat/nvidiabug.c b/hw/xfree86/compat/nvidiabug.c new file mode 100644 index 000000000..7c2c138fc --- /dev/null +++ b/hw/xfree86/compat/nvidiabug.c @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: MIT OR X11 + * + * Copyright © 2024 Enrico Weigelt, metux IT consult + */ +#include + +#include "include/os.h" + +#include "xf86_compat.h" + +void xf86NVidiaBug(void) +{ + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] file a bug report to driver vendor or use a free Xlibre driver.\n"); + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] Proprietary drivers are inherently unstable, they just can't be done right.\n"); + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] For NVidia report here: https://forums.developer.nvidia.com/c/gpu-graphics/linux/148\n"); + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] And better don't buy NVidia HW until they've fixed their mess.\n"); +} + +void xf86NVidiaBugInternalFunc(const char* name) +{ + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] calling internal function: %s\n", name); + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] this function is not supposed to be by drivers ever\n"); + xf86NVidiaBug(); +} + +void xf86NVidiaBugObsoleteFunc(const char* name) +{ + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] calling obsolete function: %s\n", name); + LogMessageVerb(X_WARNING, 0, "[DRIVER BUG] this function is not supposed to be by drivers ever\n"); + xf86NVidiaBug(); +} diff --git a/hw/xfree86/compat/xf86_compat.h b/hw/xfree86/compat/xf86_compat.h new file mode 100644 index 000000000..34c46e819 --- /dev/null +++ b/hw/xfree86/compat/xf86_compat.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: MIT OR X11 + * + * Copyright © 2024 Enrico Weigelt, metux IT consult + */ +#ifndef __XFREE86_COMPAT_XF86_COMPAT_H +#define __XFREE86_COMPAT_XF86_COMPAT_H + +void xf86NVidiaBug(void); +void xf86NVidiaBugInternalFunc(const char* name); +void xf86NVidiaBugObsoleteFunc(const char* name); + +#endif /* __XFREE86_COMPAT_XF86_COMPAT_H */ From 4036b8c163379b8edd9b29c4e260953effd626bf Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 30 Jun 2025 10:10:32 +0200 Subject: [PATCH 37/42] os: log: vpnprintf(): ignore reverse justification modifier The only caller is libinput, and we don't really need it, just silencing bug message. Signed-off-by: Enrico Weigelt, metux IT consult --- os/log.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/os/log.c b/os/log.c index 60837b10d..c0ff0ee93 100644 --- a/os/log.c +++ b/os/log.c @@ -410,6 +410,10 @@ vpnprintf(char *string, int size_in, const char *f, va_list args) f_idx++; + /* silently ignore reverse justification */ + if (f[f_idx] == '-') + f_idx++; + /* silently swallow minimum field width */ if (f[f_idx] == '*') { f_idx++; From 56650ba8734ef30e3f5dbf37195823c6c0201433 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 2 Jul 2025 14:24:10 +0200 Subject: [PATCH 38/42] dix: add screen hook for post-close In contrast to the already existing ScreenClose hook, this one is called *after* the driver's CloseScreen() proc. That's required for some extensions (eg. damage) where drivers still need to call in inside of their CloseScreen procs. Signed-off-by: Enrico Weigelt, metux IT consult --- dix/screen.c | 1 + dix/screen_hooks.c | 3 +++ dix/screen_hooks_priv.h | 31 +++++++++++++++++++++++++++++++ include/scrnintstr.h | 4 ++++ 4 files changed, 39 insertions(+) diff --git a/dix/screen.c b/dix/screen.c index 3c3b715a7..fe39a275c 100644 --- a/dix/screen.c +++ b/dix/screen.c @@ -23,6 +23,7 @@ void dixFreeScreen(ScreenPtr pScreen) DeleteCallbackList(&pScreen->hookWindowDestroy); DeleteCallbackList(&pScreen->hookWindowPosition); DeleteCallbackList(&pScreen->hookClose); + DeleteCallbackList(&pScreen->hookPostClose); DeleteCallbackList(&pScreen->hookPixmapDestroy); free(pScreen); } diff --git a/dix/screen_hooks.c b/dix/screen_hooks.c index 1c96fa211..d3c0ab435 100644 --- a/dix/screen_hooks.c +++ b/dix/screen_hooks.c @@ -28,6 +28,7 @@ DECLARE_HOOK_PROC(WindowDestroy, hookWindowDestroy, XorgScreenWindowDestroyProcPtr); DECLARE_HOOK_PROC(WindowPosition, hookWindowPosition, XorgScreenWindowPositionProcPtr); DECLARE_HOOK_PROC(Close, hookClose, XorgScreenCloseProcPtr); +DECLARE_HOOK_PROC(PostClose, hookPostClose, XorgScreenCloseProcPtr); DECLARE_HOOK_PROC(PixmapDestroy, hookPixmapDestroy, XorgScreenPixmapDestroyProcPtr); DECLARE_HOOK_PROC(PostCreateResources, hookPostCreateResources, XorgScreenPostCreateResourcesProcPtr); @@ -71,6 +72,8 @@ void dixScreenRaiseClose(ScreenPtr pScreen) { if (pScreen->CloseScreen) pScreen->CloseScreen(pScreen); + + CallCallbacks(&pScreen->hookPostClose, NULL); } void dixScreenRaisePixmapDestroy(PixmapPtr pPixmap) diff --git a/dix/screen_hooks_priv.h b/dix/screen_hooks_priv.h index 01e4d8d9b..3ab6bfdda 100644 --- a/dix/screen_hooks_priv.h +++ b/dix/screen_hooks_priv.h @@ -147,6 +147,37 @@ _X_EXPORT void dixScreenUnhookClose(ScreenPtr pScreen, XorgScreenCloseProcPtr func); +/** + * @brief register a screen post close notify hook on the given screen + * + * @param pScreen pointer to the screen to register the notify hook into + * @param func pointer to the hook function + * + * In contrast to Close hook, it's called *after* the driver's CloseScreen() + * proc had been called. + * + * When registration fails, the server aborts. + **/ +void dixScreenHookPostClose(ScreenPtr pScreen, + XorgScreenCloseProcPtr func); + +/** + * @brief unregister a screen close notify hook on the given screen + * + * @param pScreen pointer to the screen to unregister the hook from + * @param func pointer to the hook function + * @param arg opaque pointer passed to the destructor + * + * @see dixScreenHookPostClose + * + * Unregister a screen close notify hook registered via @ref dixScreenHookPostClose + * + * In contrast to Close hook, it's called *after* the driver's CloseScreen() + * proc had been called. + **/ +void dixScreenUnhookPostClose(ScreenPtr pScreen, + XorgScreenCloseProcPtr func); + /* prototype of pixmap destroy notification handler */ typedef void (*XorgScreenPixmapDestroyProcPtr)(CallbackListPtr *pcbl, ScreenPtr pScreen, diff --git a/include/scrnintstr.h b/include/scrnintstr.h index d1f99840f..71ef762ea 100644 --- a/include/scrnintstr.h +++ b/include/scrnintstr.h @@ -696,6 +696,10 @@ typedef struct _Screen { CallbackListPtr hookPostCreateResources; SetWindowVRRModeProcPtr SetWindowVRRMode; + + /* additional screen post-close notify hooks (replaces wrapping CloseScreen) + should NOT be touched outside of DIX core */ + CallbackListPtr hookPostClose; } ScreenRec; static inline RegionPtr From 96be335fd351f55b16a0148d8d63178dce65dedb Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 2 Jul 2025 14:35:01 +0200 Subject: [PATCH 39/42] miext: damage: use dixScreenHookPostClose() instead of dixScreenHookClose() Some drivers need to call into damage from within their CloseScreen proc, so damage teardown needs to be done after that, instead of before. Signed-off-by: Enrico Weigelt, metux IT consult --- miext/damage/damage.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/miext/damage/damage.c b/miext/damage/damage.c index 56f24d756..4d146efaf 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -1569,7 +1569,7 @@ damageWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pWindow) static void damageCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { - dixScreenUnhookClose(pScreen, damageCloseScreen); + dixScreenUnhookPostClose(pScreen, damageCloseScreen); dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy); dixScreenUnhookPixmapDestroy(pScreen, damagePixmapDestroy); @@ -1667,7 +1667,7 @@ DamageSetup(ScreenPtr pScreen) pScrPriv->internalLevel = 0; pScrPriv->pScreenDamage = 0; - dixScreenHookClose(pScreen, damageCloseScreen); + dixScreenHookPostClose(pScreen, damageCloseScreen); dixScreenHookWindowDestroy(pScreen, damageWindowDestroy); dixScreenHookPixmapDestroy(pScreen, damagePixmapDestroy); From 6851e178161b72dcc19438fc2bfa2ab58eb591f1 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Tue, 1 Jul 2025 20:44:27 +0300 Subject: [PATCH 40/42] meson.build: meson_options.txt: add build option to disable building tests These tests take a long time to build and link, especially with lto. Signed-off-by: stefan11111 --- meson.build | 3 ++- meson_options.txt | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 433bfaf8a..84a631f39 100644 --- a/meson.build +++ b/meson.build @@ -777,7 +777,8 @@ endif subdir('hw') -if host_machine.system() != 'windows' +build_tests = get_option('tests') and host_machine.system() != 'windows' +if build_tests subdir('test') endif diff --git a/meson_options.txt b/meson_options.txt index ef49ffff8..4b30777ff 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -110,6 +110,8 @@ option('sha1', type: 'combo', choices: ['libc', 'CommonCrypto', 'CryptoAPI', 'li description: 'SHA1 implementation') option('xf86-input-inputtest', type: 'boolean', value: true, description: 'Test input driver support on Xorg') +option('tests', type: 'boolean', value: true, + description: 'Build tests for the X server on platforms that support it') option('dri1', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto', description: 'Build DRI1 extension (default: auto)') option('dri2', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto', description: 'Build DRI2 extension (default: auto)') From 7f334d506447098cadac981232bb5a13c54d233e Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Mon, 30 Jun 2025 13:50:11 +0300 Subject: [PATCH 41/42] kdrive: add KdOsInit Kdrive X servers used to do the OS-speciffic init part using KdOsInit. This was changed in modern Xorg because Xephyr is the only kdrive X server there, so there was no need to keep this generic. Since we want to eventually add Xfbdev, we need to add this back. Signed-off-by: stefan11111 --- hw/kdrive/src/kdrive.c | 21 +++++++++++++++++++++ hw/kdrive/src/kdrive.h | 15 +++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 36bda4153..4637bb6be 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -91,6 +91,14 @@ const char *kdGlobalXkbLayout = NULL; const char *kdGlobalXkbVariant = NULL; const char *kdGlobalXkbOptions = NULL; + +/* + * Carry arguments from InitOutput through driver initialization + * to KdScreenInit + */ + +KdOsFuncs *kdOsFuncs = NULL; + void KdDisableScreen(ScreenPtr pScreen) { @@ -517,6 +525,19 @@ KdProcessArgument(int argc, char **argv, int i) return 0; } +void +KdOsInit(KdOsFuncs * pOsFuncs) +{ + kdOsFuncs = pOsFuncs; + if (pOsFuncs) { + if (serverGeneration == 1) { + KdDoSwitchCmd("start"); + if (pOsFuncs->Init) + (*pOsFuncs->Init) (); + } + } +} + static Bool KdAllocatePrivates(ScreenPtr pScreen) { diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h index a4b7576d0..7ce181f42 100644 --- a/hw/kdrive/src/kdrive.h +++ b/hw/kdrive/src/kdrive.h @@ -278,6 +278,16 @@ int KdAddConfigKeyboard(char *pointer); int KdAddKeyboard(KdKeyboardInfo * ki); void KdRemoveKeyboard(KdKeyboardInfo * ki); +typedef struct _KdOsFuncs { + int (*Init) (void); /* Only called when the X server is started, when serverGeneration == 1 */ + void (*Enable) (void); + Bool (*SpecialKey) (KeySym); + void (*Disable) (void); + void (*Fini) (void); + void (*pollEvents) (void); + void (*Bell) (int, int, int); +} KdOsFuncs; + typedef struct _KdPointerMatrix { int matrix[2][3]; } KdPointerMatrix; @@ -289,6 +299,8 @@ extern DevPrivateKeyRec kdScreenPrivateKeyRec; extern Bool kdEmulateMiddleButton; extern Bool kdDisableZaphod; +extern KdOsFuncs *kdOsFuncs; + #define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \ dixLookupPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey)) #define KdSetScreenPriv(pScreen,v) \ @@ -345,6 +357,9 @@ void int KdProcessArgument(int argc, char **argv, int i); +void + KdOsInit(KdOsFuncs * pOsFuncs); + void KdOsAddInputDrivers(void); From c623ec22662899fe75d445272e2c6f725f5a8ac6 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Mon, 30 Jun 2025 14:16:23 +0300 Subject: [PATCH 42/42] kdrive: ephyr: initialize OS specific callback vectors These will be used by subsequent commits for generic Kdrive functions calling back into the OS specific parts Signed-off-by: stefan11111 --- hw/kdrive/ephyr/ephyrinit.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c index fd5e73f82..f65cef052 100644 --- a/hw/kdrive/ephyr/ephyrinit.c +++ b/hw/kdrive/ephyr/ephyrinit.c @@ -370,6 +370,23 @@ ddxProcessArgument(int argc, char **argv, int i) return KdProcessArgument(argc, argv, i); } +static int +EphyrInit(void) +{ + /* + * make sure at least one screen + * has been added to the system. + */ + if (!KdCardInfoLast()) { + processScreenArg("640x480", NULL); + } + return hostx_init(); +} + +KdOsFuncs EphyrOsFuncs = { + .Init = EphyrInit, +}; + void OsVendorInit(void) { @@ -381,12 +398,7 @@ OsVendorInit(void) if (hostx_want_host_cursor()) ephyrFuncs.initCursor = &ephyrCursorInit; - if (serverGeneration == 1) { - if (!KdCardInfoLast()) { - processScreenArg("640x480", NULL); - } - hostx_init(); - } + KdOsInit(&EphyrOsFuncs); } KdCardFuncs ephyrFuncs = {