diff --git a/.github/ISSUE_TEMPLATE/01-bug-report.yml b/.github/ISSUE_TEMPLATE/01-bug-report.yml new file mode 100644 index 000000000..2f9159f78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-bug-report.yml @@ -0,0 +1,65 @@ +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.X + - 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. 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 diff --git a/.github/scripts/conf.sh b/.github/scripts/conf.sh index fd6fb5320..7cdab25d2 100644 --- a/.github/scripts/conf.sh +++ b/.github/scripts/conf.sh @@ -1,6 +1,13 @@ -export X11_PREFIX=/home/runner/x11 +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}" + +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" -export FDO_CI_CONCURRENT=`nproc` -export X11_BUILD_DIR=/home/runner/build-deps -export DRV_BUILD_DIR=/home/runner/build-drivers 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..cd74de195 100644 --- a/.github/scripts/util.sh +++ b/.github/scripts/util.sh @@ -82,8 +82,28 @@ 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 + # 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 + 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 d1d8d2bc1..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 @@ -20,7 +23,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 @@ -41,11 +45,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 @@ -78,7 +82,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 @@ -99,11 +104,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: | @@ -117,3 +122,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 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@\|\ 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. 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/meson.build b/Xext/meson.build index 9902bf4be..2294902e6 100644 --- a/Xext/meson.build +++ b/Xext/meson.build @@ -58,13 +58,13 @@ if build_xv hdrs_xext += ['xvdix.h', 'xvmcext.h'] endif -libxserver_xext = static_library('libxserver_xext', +libxserver_xext = static_library('xserver_xext', srcs_xext, include_directories: inc, dependencies: common_dep, ) -libxserver_xext_vidmode = static_library('libxserver_xext_vidmode', +libxserver_xext_vidmode = static_library('xserver_xext_vidmode', 'vidmode.c', include_directories: inc, dependencies: common_dep, diff --git a/Xext/namespace/hook-windowproperty.c b/Xext/namespace/hook-windowproperty.c index f427c634f..afd478369 100644 --- a/Xext/namespace/hook-windowproperty.c +++ b/Xext/namespace/hook-windowproperty.c @@ -11,14 +11,6 @@ #include "namespace.h" #include "hooks.h" -static inline Bool winIsRoot(WindowPtr pWin) { - if (!pWin) - return FALSE; - if (pWin->drawable.pScreen->root == pWin) - return TRUE; - return FALSE; -} - void hookWindowProperty(CallbackListPtr *pcbl, void *unused, void *calldata) { XNS_HOOK_HEAD(PropertyFilterParam); diff --git a/Xext/namespace/meson.build b/Xext/namespace/meson.build index ad9fb029c..708fd74a2 100644 --- a/Xext/namespace/meson.build +++ b/Xext/namespace/meson.build @@ -1,5 +1,5 @@ libxserver_namespace = static_library( - 'libxserver_namespace', + 'xserver_namespace', [ 'config.c', 'hook-client.c', 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/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); 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); 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); } 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 diff --git a/Xi/meson.build b/Xi/meson.build index 717bb28e1..ec48e3d3b 100644 --- a/Xi/meson.build +++ b/Xi/meson.build @@ -53,14 +53,14 @@ srcs_xi = [ 'xiwarppointer.c', ] -libxserver_xi = static_library('libxserver_xi', +libxserver_xi = static_library('xserver_xi', srcs_xi, include_directories: inc, dependencies: common_dep, ) srcs_xi_stubs = ['stubs.c'] -libxserver_xi_stubs = static_library('libxserver_xi_stubs', +libxserver_xi_stubs = static_library('xserver_xi_stubs', srcs_xi_stubs, include_directories: inc, dependencies: common_dep, diff --git a/composite/meson.build b/composite/meson.build index 4f3303e20..af059714b 100644 --- a/composite/meson.build +++ b/composite/meson.build @@ -10,7 +10,7 @@ hdrs_composite = [ 'compositeext.h', ] -libxserver_composite = static_library('libxserver_composite', +libxserver_composite = static_library('xserver_composite', srcs_composite, include_directories: inc, dependencies: common_dep, 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 */ diff --git a/config/meson.build b/config/meson.build index db7c49346..15f21a053 100644 --- a/config/meson.build +++ b/config/meson.build @@ -28,7 +28,7 @@ if build_xorg install_dir: join_paths(get_option('datadir'), 'X11/xorg.conf.d')) endif -libxserver_config = static_library('libxserver_config', +libxserver_config = static_library('xserver_config', srcs_config, include_directories: inc, dependencies: config_dep, diff --git a/damageext/meson.build b/damageext/meson.build index 688771d58..b13e0cee7 100644 --- a/damageext/meson.build +++ b/damageext/meson.build @@ -2,7 +2,7 @@ srcs_damageext = [ 'damageext.c', ] -libxserver_damageext = static_library('libxserver_damageext', +libxserver_damageext = static_library('xserver_damageext', srcs_damageext, include_directories: inc, dependencies: common_dep, diff --git a/dbe/meson.build b/dbe/meson.build index e10bde199..80bd4e252 100644 --- a/dbe/meson.build +++ b/dbe/meson.build @@ -3,7 +3,7 @@ srcs_dbe = [ 'midbe.c', ] -libxserver_dbe = static_library('libxserver_dbe', +libxserver_dbe = static_library('xserver_dbe', srcs_dbe, include_directories: inc, dependencies: common_dep, diff --git a/dix/generate-atoms b/dix/generate-atoms index 48152d148..f1c2a79ba 100755 --- a/dix/generate-atoms +++ b/dix/generate-atoms @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # SPDX-License-Identifier: MIT OR X11 # # Copyright © 2024 Enrico Weigelt, metux IT consult @@ -7,10 +7,10 @@ INPUT="$1" OUTPUT="$2" do_line() { - local name="$1" + name="$1" [ "$2" != "@" ] && return 0 echo " if (MakeAtom(\"$name\", ${#name}, 1) != XA_$name)" - echo " FatalError(\"adding builtin atom\");" + echo " FatalError(\"Adding builtin atom\");" } cat > "$OUTPUT" << __END__ @@ -35,6 +35,6 @@ MakePredeclaredAtoms(void) { __END__ -( grep '@' < "$INPUT" ) | ( while read l ; do do_line $l ; done ) >> "$OUTPUT" +( grep '@' < "$INPUT" ) | ( while IFS= read -r l ; do do_line $l ; done ) >> "$OUTPUT" echo "}" >> "$OUTPUT" diff --git a/dix/meson.build b/dix/meson.build index 7d02841a7..6281ed956 100644 --- a/dix/meson.build +++ b/dix/meson.build @@ -57,13 +57,13 @@ endif dtrace_dep = declare_dependency(sources: [dtrace_src, dtrace_hdr]) -libxserver_dix = static_library('libxserver_dix', +libxserver_dix = static_library('xserver_dix', [ srcs_dix, builtinatoms_src ], include_directories: inc, dependencies: [ dtrace_dep, common_dep, ] ) -libxserver_main = static_library('libxserver_main', +libxserver_main = static_library('xserver_main', 'stubmain.c', include_directories: inc, dependencies: common_dep, 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/dri3/meson.build b/dri3/meson.build index 91bd68d87..6b959f49f 100644 --- a/dri3/meson.build +++ b/dri3/meson.build @@ -10,7 +10,7 @@ hdrs_dri3 = [ libxserver_dri3 = [] if build_dri3 - libxserver_dri3 = static_library('libxserver_dri3', + libxserver_dri3 = static_library('xserver_dri3', srcs_dri3, include_directories: inc, dependencies: [ common_dep, libdrm_dep ], diff --git a/exa/meson.build b/exa/meson.build index 832363d27..784ecae8d 100644 --- a/exa/meson.build +++ b/exa/meson.build @@ -12,7 +12,7 @@ srcs_exa = [ 'exa_unaccel.c', ] -libxserver_exa = static_library('libxserver_exa', +libxserver_exa = static_library('xserver_exa', srcs_exa, include_directories: inc, dependencies: common_dep, diff --git a/fb/meson.build b/fb/meson.build index e4e311ff4..b31275a24 100644 --- a/fb/meson.build +++ b/fb/meson.build @@ -37,7 +37,7 @@ hdrs_fb = [ 'wfbrename.h' ] -libxserver_fb = static_library('libxserver_fb', +libxserver_fb = static_library('xserver_fb', srcs_fb, include_directories: inc, dependencies: common_dep, @@ -46,7 +46,7 @@ libxserver_fb = static_library('libxserver_fb', wfb_args = '-DFB_ACCESS_WRAPPER' -libxserver_wfb = static_library('libxserver_wfb', +libxserver_wfb = static_library('xserver_wfb', srcs_fb, c_args: wfb_args, include_directories: inc, 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 */ diff --git a/glamor/glamor_composite_glyphs.c b/glamor/glamor_composite_glyphs.c index faf8409c3..8e15a349e 100644 --- a/glamor/glamor_composite_glyphs.c +++ b/glamor/glamor_composite_glyphs.c @@ -185,6 +185,24 @@ glamor_glyph_add(struct glamor_glyph_atlas *atlas, DrawablePtr glyph_draw) return TRUE; } +static const glamor_facet glamor_facet_composite_glyphs_es300 = { + .name = "composite_glyphs", + .version = 130, + .fs_extensions = ("#extension GL_EXT_blend_func_extended : enable\n"), + .vs_vars = ("in vec4 primitive;\n" + "in vec2 source;\n" + "out vec2 glyph_pos;\n"), + .vs_exec = (" vec2 pos = primitive.zw * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n" + GLAMOR_POS(gl_Position, (primitive.xy + pos)) + " glyph_pos = (source + pos) * ATLAS_DIM_INV;\n"), + .fs_vars = ("in vec2 glyph_pos;\n" + "out vec4 color0;\n" + "out vec4 color1;\n"), + .fs_exec = (" vec4 mask = texture(atlas, glyph_pos);\n"), + .source_name = "source", + .locations = glamor_program_location_atlas, +}; + static const glamor_facet glamor_facet_composite_glyphs_130 = { .name = "composite_glyphs", .version = 130, @@ -464,7 +482,9 @@ glamor_composite_glyphs(CARD8 op, if (glamor_glsl_has_ints(glamor_priv)) prog = glamor_setup_program_render(op, src, glyph_pict, dst, glyphs_program, - &glamor_facet_composite_glyphs_130, + glamor_priv->is_gles ? + &glamor_facet_composite_glyphs_es300 : + &glamor_facet_composite_glyphs_130, glamor_priv->glyph_defines); else prog = glamor_setup_program_render(op, src, glyph_pict, dst, 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; } diff --git a/glx/indirect_util.c b/glx/indirect_util.c index 83579c529..140b3b21f 100644 --- a/glx/indirect_util.c +++ b/glx/indirect_util.c @@ -128,13 +128,10 @@ __glXSendReply(ClientPtr client, const void *data, size_t elements, .retval = retval, }; - /* It is faster on almost always every architecture to just copy the 8 - * bytes, even when not necessary, than check to see of the value of - * elements requires it. Copying the data when not needed will do no - * harm. - */ - - (void) memcpy(&reply.pad3, data, 8); + /* Single element goes in reply padding; don't leak uninitialized data. */ + if (elements == 1) { + (void) memcpy(&reply.pad3, data, element_size); + } WriteToClient(client, sizeof(xGLXSingleReply), &reply); if (reply_ints != 0) { @@ -176,13 +173,10 @@ __glXSendReplySwap(ClientPtr client, const void *data, size_t elements, .retval = bswap_32(retval), }; - /* It is faster on almost always every architecture to just copy the 8 - * bytes, even when not necessary, than check to see of the value of - * elements requires it. Copying the data when not needed will do no - * harm. - */ - - (void) memcpy(&reply.pad3, data, 8); + /* Single element goes in reply padding; don't leak uninitialized data. */ + if (elements == 1) { + (void) memcpy(&reply.pad3, data, element_size); + } WriteToClient(client, sizeof(xGLXSingleReply), &reply); if (reply_ints != 0) { diff --git a/glx/meson.build b/glx/meson.build index 2ec00ce22..3a14bd27c 100644 --- a/glx/meson.build +++ b/glx/meson.build @@ -32,7 +32,7 @@ srcs_glx = [ libxserver_glx = [] if build_glx - libxserver_glx = static_library('libxserver_glx', + libxserver_glx = static_library('xserver_glx', srcs_glx, include_directories: inc, dependencies: [ @@ -68,7 +68,7 @@ hdrs_vnd = [ libglxvnd = [] if build_glx - libglxvnd = static_library('libglxvnd', + libglxvnd = static_library('glxvnd', srcs_vnd, include_directories: inc, dependencies: [ diff --git a/glx/rensize.c b/glx/rensize.c index 821c6b3fb..f48182210 100644 --- a/glx/rensize.c +++ b/glx/rensize.c @@ -347,7 +347,7 @@ __glXTypeSize(GLenum enm) case GL_INT: return sizeof(GLint); case GL_UNSIGNED_INT: - return sizeof(GLint); + return sizeof(GLuint); case GL_FLOAT: return sizeof(GLfloat); case GL_DOUBLE: diff --git a/glx/singlesize.c b/glx/singlesize.c index 344ffef7f..d2db6945a 100644 --- a/glx/singlesize.c +++ b/glx/singlesize.c @@ -105,7 +105,7 @@ __glGetMap_size(GLenum target, GLenum query) } break; } - return -1; + return 0; } GLint @@ -164,7 +164,7 @@ __glGetPixelMap_size(GLenum map) query = GL_PIXEL_MAP_A_TO_A_SIZE; break; default: - return -1; + return 0; } glGetIntegerv(query, &size); return size; 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/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index d66538841..40c0f241a 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -103,7 +103,7 @@ static Bool kdCaughtSignal = FALSE; * to KdScreenInit */ -KdOsFuncs *kdOsFuncs; +KdOsFuncs *kdOsFuncs = NULL; void KdDisableScreen(ScreenPtr pScreen) @@ -632,11 +632,6 @@ KdProcessArgument(int argc, char **argv, int i) return 0; } -/* - * These are getting tossed in here until I can think of where - * they really belong - */ - void KdOsInit(KdOsFuncs * pOsFuncs) { diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h index bae74814c..ca0734ced 100644 --- a/hw/kdrive/src/kdrive.h +++ b/hw/kdrive/src/kdrive.h @@ -295,7 +295,7 @@ int KdAddKeyboard(KdKeyboardInfo * ki); void KdRemoveKeyboard(KdKeyboardInfo * ki); typedef struct _KdOsFuncs { - int (*Init) (void); + int (*Init) (void); /* Only called when the X server is started, when serverGeneration == 1 */ void (*Enable) (void); Bool (*SpecialKey) (KeySym); void (*Disable) (void); @@ -348,6 +348,8 @@ extern int kdVirtualTerminal; extern char *kdSwitchCmd; extern KdOsFuncs *kdOsFuncs; +extern KdOsFuncs *kdOsFuncs; + #define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \ dixLookupPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey)) #define KdSetScreenPriv(pScreen,v) \ diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c index cd3b2e0a8..6a7ca7c55 100644 --- a/hw/vfb/InitOutput.c +++ b/hw/vfb/InitOutput.c @@ -259,13 +259,6 @@ ddxGiveUp(enum ExitCode error) } } -#ifdef __APPLE__ -void -DarwinHandleGUI(int argc, char *argv[]) -{ -} -#endif - void OsVendorInit(void) { 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/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..061821efd 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,12 @@ _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"); + static char reportxf86MsgVerb = 1; + + if (reportxf86MsgVerb) { + xf86NVidiaBugInternalFunc("xf86MsgVerb()"); + reportxf86MsgVerb = 0; + } 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/ones.c b/hw/xfree86/compat/ones.c index 7e2dce864..37f724a2f 100644 --- a/hw/xfree86/compat/ones.c +++ b/hw/xfree86/compat/ones.c @@ -27,7 +27,6 @@ Ones(unsigned long mask) y = (mask >> 1) & 033333333333; y = mask - y - ((y >> 1) & 033333333333); - /* x & 077 == x % 077 */ - return (((y + (y >> 3)) & 030707070707) & 077); + return (((y + (y >> 3)) & 030707070707) % 077); #endif } 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 */ 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.c b/hw/xfree86/drivers/modesetting/driver.c index 43783c4b1..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"); @@ -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); 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/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 diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man index 440a65d3b..f526d300f 100644 --- a/hw/xfree86/man/Xorg.man +++ b/hw/xfree86/man/Xorg.man @@ -656,11 +656,7 @@ Orest Zborowski \fIorestz@eskimo.com\fP .fi .RE .PP -Xorg source is available from the FTP server -\fI\fP, and from the X.Org -server \fI\fP. Documentation and other -information can be found from the X.Org web site -\fI\fP. +Xlibre source is available via git \fI\fP. .SH LEGAL .B Xorg 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/xnest/Init.c b/hw/xnest/Init.c index 8f88c1edd..1eb49b645 100644 --- a/hw/xnest/Init.c +++ b/hw/xnest/Init.c @@ -154,13 +154,6 @@ ddxGiveUp(enum ExitCode error) xnestCloseDisplay(); } -#ifdef __APPLE__ -void -DarwinHandleGUI(int argc, char *argv[]) -{ -} -#endif - void OsVendorInit(void) { 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; 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/applewm.c b/hw/xquartz/applewm.c index 41ae6f280..096f7fc7b 100644 --- a/hw/xquartz/applewm.c +++ b/hw/xquartz/applewm.c @@ -690,7 +690,6 @@ SNotifyEvent(xAppleWMNotifyEvent *from, xAppleWMNotifyEvent *to) static int SProcAppleWMQueryVersion(register ClientPtr client) { - REQUEST(xAppleWMQueryVersionReq); return ProcAppleWMQueryVersion(client); } 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" diff --git a/hw/xquartz/mach-startup/bundle_trampoline.c b/hw/xquartz/mach-startup/bundle_trampoline.c index f8611269b..9c58f3ee8 100644 --- a/hw/xquartz/mach-startup/bundle_trampoline.c +++ b/hw/xquartz/mach-startup/bundle_trampoline.c @@ -50,7 +50,7 @@ * needs and simply execs the startup script which then execs the main binary. */ -static char *executable_path() { +static char *executable_path(void) { uint32_t bufsize = PATH_MAX; char *buf = calloc(1, bufsize); 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'], 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], ) 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" diff --git a/hw/xquartz/xpr/appledri.c b/hw/xquartz/xpr/appledri.c index c01ee9bf7..7810df86a 100644 --- a/hw/xquartz/xpr/appledri.c +++ b/hw/xquartz/xpr/appledri.c @@ -394,7 +394,6 @@ SNotifyEvent(xAppleDRINotifyEvent *from, static int SProcAppleDRIQueryVersion(register ClientPtr client) { - REQUEST(xAppleDRIQueryVersionReq); return ProcAppleDRIQueryVersion(client); } 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 */ 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/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 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 */ diff --git a/meson.build b/meson.build index 8d778fd67..b05898317 100644 --- a/meson.build +++ b/meson.build @@ -3,10 +3,10 @@ project('xserver', 'c', 'buildtype=debugoptimized', 'c_std=gnu99', ], - version: '25.0.0.0', + version: '25.0.0.4', meson_version: '>= 0.58.0', ) -release_date = '2021-07-05' +release_date = '2025-07-04' add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc']) cc = meson.get_compiler('c') @@ -812,7 +812,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 6c989abbf..7babafd94 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -25,7 +25,7 @@ option('kdrive_tslib', type: 'boolean', value: false, description: 'Build kdrive tslib touchscreen support') -option('builder_addr', type: 'string', description: 'Builder address', value: 'xorg@lists.freedesktop.org') +option('builder_addr', type: 'string', description: 'Builder address', value: 'xlibre@freelists.org') option('builder_string', type: 'string', description: 'Additional builder string') option('log_dir', type: 'string') @@ -121,6 +121,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)') diff --git a/mi/meson.build b/mi/meson.build index cccdb06eb..cde465a9b 100644 --- a/mi/meson.build +++ b/mi/meson.build @@ -40,7 +40,7 @@ hdrs_mi = [ 'mizerarc.h', ] -libxserver_mi = static_library('libxserver_mi', +libxserver_mi = static_library('xserver_mi', srcs_mi, include_directories: inc, dependencies: [ 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/mipointer.c b/mi/mipointer.c index 7d51f8659..ff0db9f6b 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -141,7 +141,7 @@ miPointerInitialize(ScreenPtr pScreen, pScreenPriv->screenFuncs = screenFuncs; pScreenPriv->waitForUpdate = waitForUpdate; pScreenPriv->showTransparent = FALSE; - dixScreenHookClose(pScreen, miPointerCloseScreen); + dixScreenHookPostClose(pScreen, miPointerCloseScreen); dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, pScreenPriv); /* * set up screen cursor method table @@ -169,7 +169,7 @@ static void miPointerCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void { SetupScreen(pScreen); - dixScreenUnhookClose(pScreen, miPointerCloseScreen); + dixScreenUnhookPostClose(pScreen, miPointerCloseScreen); free((void *) pScreenPriv); dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, NULL); FreeEventList(mipointermove_events, GetMaximumEventsNum()); 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 */ 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); diff --git a/miext/damage/meson.build b/miext/damage/meson.build index c7ec10938..7daebb675 100644 --- a/miext/damage/meson.build +++ b/miext/damage/meson.build @@ -7,7 +7,7 @@ hdrs_miext_damage = [ 'damagestr.h', ] -libxserver_miext_damage = static_library('libxserver_miext_damage', +libxserver_miext_damage = static_library('xserver_miext_damage', srcs_miext_damage, include_directories: inc, dependencies: common_dep, diff --git a/miext/rootless/meson.build b/miext/rootless/meson.build index 66b9f06cf..f37aa1320 100644 --- a/miext/rootless/meson.build +++ b/miext/rootless/meson.build @@ -6,7 +6,7 @@ srcs_miext_rootless = [ 'rootlessWindow.c', ] -libxserver_miext_rootless = static_library('libxserver_miext_rootless', +libxserver_miext_rootless = static_library('xserver_miext_rootless', srcs_miext_rootless, include_directories: inc, dependencies: common_dep, 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); 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 */ diff --git a/miext/shadow/meson.build b/miext/shadow/meson.build index f91accd69..8e2f0a9c1 100644 --- a/miext/shadow/meson.build +++ b/miext/shadow/meson.build @@ -29,7 +29,7 @@ hdrs_miext_shadow = [ 'shadow.h', ] -libxserver_miext_shadow = static_library('libxserver_miext_shadow', +libxserver_miext_shadow = static_library('xserver_miext_shadow', srcs_miext_shadow, include_directories: inc, dependencies: common_dep, diff --git a/miext/sync/meson.build b/miext/sync/meson.build index 78716e441..1c959d60b 100644 --- a/miext/sync/meson.build +++ b/miext/sync/meson.build @@ -14,7 +14,7 @@ if build_dri3 srcs_miext_sync += 'misyncshm.c' endif -libxserver_miext_sync = static_library('libxserver_miext_sync', +libxserver_miext_sync = static_library('xserver_miext_sync', srcs_miext_sync, include_directories: inc, dependencies: [ 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++; diff --git a/os/meson.build b/os/meson.build index 9c8412d76..20a411c2b 100644 --- a/os/meson.build +++ b/os/meson.build @@ -79,7 +79,7 @@ endif libxlibc = [] if srcs_libc.length() > 0 - libxlibc = static_library('libxlibc', + libxlibc = static_library('xlibc', srcs_libc, include_directories: inc, dependencies: [ @@ -92,7 +92,7 @@ if enable_input_thread os_dep += cc.find_library('pthread') endif -libxserver_os = static_library('libxserver_os', +libxserver_os = static_library('xserver_os', srcs_os, include_directories: inc, dependencies: [ diff --git a/present/meson.build b/present/meson.build index df8d40b02..3422ef77a 100644 --- a/present/meson.build +++ b/present/meson.build @@ -15,7 +15,7 @@ hdrs_present = [ 'present.h', ] -libxserver_present = static_library('libxserver_present', +libxserver_present = static_library('xserver_present', srcs_present, include_directories: inc, dependencies: [ diff --git a/pseudoramiX/meson.build b/pseudoramiX/meson.build index c3d932529..e131dc213 100644 --- a/pseudoramiX/meson.build +++ b/pseudoramiX/meson.build @@ -1,4 +1,4 @@ -libxserver_pseudoramix = static_library('libxserver_pseudoramiX', +libxserver_pseudoramix = static_library('xserver_pseudoramiX', 'pseudoramiX.c', include_directories: inc, dependencies: common_dep, 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 */ diff --git a/randr/meson.build b/randr/meson.build index 9bd751bf2..385a7295a 100644 --- a/randr/meson.build +++ b/randr/meson.build @@ -25,7 +25,7 @@ if build_xinerama srcs_randr += 'rrxinerama.c' endif -libxserver_randr = static_library('libxserver_randr', +libxserver_randr = static_library('xserver_randr', srcs_randr, include_directories: inc, dependencies: common_dep, diff --git a/randr/rrproviderproperty.c b/randr/rrproviderproperty.c index 82174fc3a..dfaf95667 100644 --- a/randr/rrproviderproperty.c +++ b/randr/rrproviderproperty.c @@ -119,6 +119,12 @@ RRDeleteProviderProperty(RRProviderPtr provider, Atom property) } } +/* shortcut for cleaning up property when failed to add */ +static inline void cleanupProperty(RRPropertyPtr prop, Bool added) { + if ((prop != NULL) && added) + RRDestroyProviderProperty(prop); +} + int RRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type, int format, int mode, unsigned long len, @@ -166,13 +172,14 @@ RRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type, if (mode == PropModeReplace || len > 0) { void *new_data = NULL, *old_data = NULL; - if (total_len > MAXINT / size_in_bytes) + if (total_len > MAXINT / size_in_bytes) { + cleanupProperty(prop, add); return BadValue; + } total_size = total_len * size_in_bytes; new_value.data = calloc(1, total_size); if (!new_value.data && total_size) { - if (add) - RRDestroyProviderProperty(prop); + cleanupProperty(prop, add); return BadAlloc; } new_value.size = len; @@ -204,8 +211,7 @@ RRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type, if (pending && pScrPriv->rrProviderSetProperty && !pScrPriv->rrProviderSetProperty(provider->pScreen, provider, prop->propertyName, &new_value)) { - if (add) - RRDestroyProviderProperty(prop); + cleanupProperty(prop, add); free(new_value.data); return BadValue; } @@ -292,8 +298,7 @@ RRConfigureProviderProperty(RRProviderPtr provider, Atom property, * ranges must have even number of values */ if (range && (num_values & 1)) { - if (add) - RRDestroyProviderProperty(prop); + cleanupProperty(prop, add); return BadMatch; } @@ -301,8 +306,7 @@ RRConfigureProviderProperty(RRProviderPtr provider, Atom property, if (num_values) { new_values = calloc(num_values, sizeof(INT32)); if (!new_values) { - if (add) - RRDestroyProviderProperty(prop); + cleanupProperty(prop, add); return BadAlloc; } memcpy(new_values, values, num_values * sizeof(INT32)); diff --git a/record/meson.build b/record/meson.build index 1c0b5d2ca..06ca2b5ee 100644 --- a/record/meson.build +++ b/record/meson.build @@ -3,7 +3,7 @@ srcs_record = [ 'set.c', ] -libxserver_record = static_library('libxserver_record', +libxserver_record = static_library('xserver_record', srcs_record, include_directories: inc, dependencies: common_dep, 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 */ diff --git a/render/meson.build b/render/meson.build index b95b082b3..b091d30c6 100644 --- a/render/meson.build +++ b/render/meson.build @@ -19,7 +19,7 @@ hdrs_render = [ 'picturestr.h', ] -libxserver_render = static_library('libxserver_render', +libxserver_render = static_library('xserver_render', srcs_render, include_directories: inc, dependencies: common_dep, diff --git a/xfixes/meson.build b/xfixes/meson.build index 0e97d477b..26a7af0b0 100644 --- a/xfixes/meson.build +++ b/xfixes/meson.build @@ -7,7 +7,7 @@ srcs_xfixes = [ 'xfixes.c', ] -libxserver_xfixes = static_library('libxserver_xfixes', +libxserver_xfixes = static_library('xserver_xfixes', srcs_xfixes, include_directories: inc, dependencies: common_dep, diff --git a/xkb/meson.build b/xkb/meson.build index c21868c2b..918a1be28 100644 --- a/xkb/meson.build +++ b/xkb/meson.build @@ -23,7 +23,7 @@ srcs_xkb = [ 'XKBMAlloc.c', ] -libxserver_xkb = static_library('libxserver_xkb', +libxserver_xkb = static_library('xserver_xkb', srcs_xkb, include_directories: inc, dependencies: common_dep, @@ -35,7 +35,7 @@ srcs_xkb_stubs = [ 'ddxVT.c', ] -libxserver_xkb_stubs = static_library('libxserver_xkb_stubs', +libxserver_xkb_stubs = static_library('xserver_xkb_stubs', srcs_xkb_stubs, include_directories: inc, dependencies: common_dep, diff --git a/xorg-server.pc.in b/xorg-server.pc.in index ffa639e3d..6fc6d1a95 100644 --- a/xorg-server.pc.in +++ b/xorg-server.pc.in @@ -13,8 +13,8 @@ abi_xinput=@abi_xinput@ abi_extension=@abi_extension@ Name: xorg-server -Description: Modular X.Org X Server -URL: https://gitlab.freedesktop.org/xorg/xserver/ +Description: Modular XLibre X Server +URL: https://github.com/X11Libre/xserver/ Version: @PACKAGE_VERSION@ Requires.private: @SDK_REQUIRED_MODULES@ Cflags: -I${sdkdir} @symbol_visibility@