wayland 1.26.0: four members, and the macros become a module #3
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Build every member on BOTH toolchains, and check what a green compile would | |
| # not: that the generator is ours, that the sonames are canonical, and that the | |
| # two libraries do not overlap. | |
| name: ci | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ['v*'] | |
| pull_request: | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Both, because the module wrapper is where they differ most: GCC and | |
| # Clang disagree about what a `using ::name;` in an export block may | |
| # name, and a 300-entry export list is exactly where that shows up. | |
| toolchain: [gcc, llvm] | |
| name: build (${{ matrix.toolchain }}) | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install xlings + mcpp | |
| run: | | |
| curl -fsSL https://d2learn.org/xlings-install.sh | bash | |
| echo "$HOME/.xlings/subos/default/bin" >> "$GITHUB_PATH" | |
| "$HOME/.xlings/bin/xlings" install mcpp -y | |
| - name: Build the workspace | |
| run: mcpp build --workspace --toolchain ${{ matrix.toolchain }} | |
| - name: The macro mappings actually run | |
| run: mcpp test -p mcpp/util --toolchain ${{ matrix.toolchain }} | |
| - name: wayland-scanner is ours, and is 1.26.0 | |
| run: | | |
| scanner=$(find mcpp/scanner/target -name wayland-scanner -type f | head -1) | |
| test -n "$scanner" || { echo "no wayland-scanner was built"; exit 1; } | |
| "$scanner" --version | |
| "$scanner" --version | grep -qx 'wayland-scanner 1.26.0' | |
| - name: the generated protocol code came from THIS scanner | |
| run: | | |
| scanner=$(find mcpp/scanner/target -name wayland-scanner -type f | head -1) | |
| "$scanner" -s public-code protocol/wayland.xml /tmp/wayland-protocol.c | |
| head -1 /tmp/wayland-protocol.c | |
| grep -q 'Generated by wayland-scanner 1.26.0' /tmp/wayland-protocol.c | |
| - name: both libraries carry the canonical SONAMEs | |
| run: | | |
| for pair in "client:libwayland-client.so.0" "server:libwayland-server.so.0"; do | |
| member=${pair%%:*}; want=${pair#*:} | |
| so=$(find "mcpp/$member/target" -name "${want%.0}" -type f | head -1) | |
| test -n "$so" || { echo "$member: no library built"; exit 1; } | |
| got=$(readelf -d "$so" | sed -n 's/.*SONAME.*\[\(.*\)\]/\1/p') | |
| echo "$member -> $got" | |
| test "$got" = "$want" || { echo "expected $want"; exit 1; } | |
| done | |
| - name: the two libraries do not overlap | |
| run: | | |
| # Mesa's libEGL_mesa has DT_NEEDED on both; if one carried the other's | |
| # API the process would bind to whichever loaded first. | |
| c=$(find mcpp/client/target -name libwayland-client.so -type f | head -1) | |
| s=$(find mcpp/server/target -name libwayland-server.so -type f | head -1) | |
| readelf --dyn-syms -W "$c" | grep -q ' wl_display_connect' || exit 1 | |
| readelf --dyn-syms -W "$c" | grep -q ' wl_display_create' && { echo "client leaked the server API"; exit 1; } | |
| readelf --dyn-syms -W "$s" | grep -q ' wl_display_create' || exit 1 | |
| readelf --dyn-syms -W "$s" | grep -q ' wl_display_connect' && { echo "server leaked the client API"; exit 1; } | |
| echo "client and server APIs are disjoint" | |
| - name: both modules produced a BMI | |
| run: | | |
| for m in client server util; do | |
| find "mcpp/$m/target" -name '*.gcm' -o -name '*.pcm' | head -1 | grep -q . \ | |
| || { echo "$m: no module interface was produced"; exit 1; } | |
| done | |
| echo "wayland.client, wayland.server and wayland.util all have interfaces" | |
| upstream: | |
| # The fork patches no upstream file, so meson must still build this tree. | |
| # If this breaks, something was modified that should not have been. | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| sudo apt-get update -qq | |
| sudo apt-get install -y -qq meson ninja-build libffi-dev libexpat1-dev | |
| meson setup build-meson -Ddocumentation=false -Ddtd_validation=false | |
| ninja -C build-meson |