This is an MPBT workspace for building XLibre Xserver and ~54 drivers across three release lines.
Warning: it's still an early work-in-progress.
- Go — to install
mpbt-builder - GitHub CLI (
gh) — for the PR workflow - Meson, autotools, pkg-config, and usual Xorg build dependencies
./install-mpbt # install mpbt-builder
./run-fetch.xserver-master # clone/fetch all sources for master
./run-build.xserver-master # build everything under master
| Script | Purpose |
|---|---|
install-mpbt |
go installs the mpbt-builder binary |
run-fetch.xserver-<release> |
Clone or fetch all sources for a release line |
run-build.xserver-<release> |
Build all packages (in solution order), then delete the install prefix |
scripts/xx-make-pr.sh |
Cherry-pick commits from incubator, push, create a PR, and rewrite commit messages with PR markers |
scripts/show-pr-conflict |
List all open PRs with merge conflicts (uses gh) |
Since we have multiple release lines (25.0.x, 25.1.x, ...), this workspace
keeps them fully separate. Each release line has its own solution, git clone
set, and install prefix under _WORK_/<release>/.
| Solution | Xserver branch | Drivers built |
|---|---|---|
xserver-master |
master |
All ~54 drivers + xts + piglit |
xserver-25.1 |
release/25.1 |
Only xserver (drivers commented out) |
xserver-25.0 |
release/25.0 |
Only xserver (drivers commented out) |
.
├── install-mpbt installs mpbt-builder
├── run-fetch.xserver-* fetch sources per release line
├── run-build.xserver-* build per release line
├── cf/ configuration (the "brain")
│ ├── _common/ shared source of truth
│ │ └── packages/xlibre/ package YAML defs + driver template
│ ├── xserver-master/
│ │ ├── config.sh env vars for this release
│ │ ├── packages/ symlinks + per-release overrides
│ │ └── solutions/devuan.yaml build order, flags, env
│ ├── xserver-25.0/ same structure (all packages symlinked)
│ └── xserver-25.1/ same structure (all packages symlinked)
├── scripts/
│ ├── xx-make-pr.sh PR submission workflow
│ └── show-pr-conflict list conflicting PRs
└── _WORK_/ build artifacts (gitignored)
└── <release>/ clones, build dirs, install prefix
Three categories under cf/<release>/packages/:
os-installed/— system packages (already on host),type: system3rdparty/— bundled dependencies MPBT builds (libdrm, piglit, etc.)xlibre/— the X server, drivers, and XTS; the main build targets
Most drivers are autotools-based and share an identical build pattern. Rather than repeating the same YAML 50+ times, there is a single template:
cf/_common/packages/xlibre/generic-driver-autotools.tmpl.yaml
Each per-release driver .yaml is a symlink to this template.
Two drivers (elographics, wacom) are "common" drivers with their
own dedicated YAML in _common/, also symlinked per-release.
The symlinks are managed by cf/xserver-master/packages/xlibre/update-generic.sh.
After adding a new driver to that script, re-run it to create fresh symlinks.
Per-release overrides (like xserver.yaml and xts.yaml) are
real files, not symlinks — they live directly in each release's
packages/xlibre/ directory.
Each release has a solution file at cf/<release>/solutions/devuan.yaml
that controls:
build:— build order (list of packages to build)package-config:— per-package meson flags and refspackage-defaults:— shared vars (git URL, branch name per release)env:—PKG_CONFIG_PATH,ACLOCAL_PATH(pointing into install prefix)package-mapping:— resolvesprovides:names to actual packages
| master | 25.1 | 25.0 | |
|---|---|---|---|
| xserver branch | master |
release/25.1 |
release/25.0 |
| Drivers built | all ~54 | none (commented out) | none (commented out) |
| xts/piglit | yes | no | no |
-Dxfbdev=true |
yes | yes | no |
-Dxorg-sdk=true |
yes | no | no |
update-generic.sh |
has its own copy | N/A (all symlinked) | N/A (all symlinked) |
# git config entries (set automatically by run-fetch.*):
[make-pr]
upstream-remote = origin
upstream-branch = master
reviewers = X11Libre/dev
# Create a PR from commits on the incubator (wip1) branch:
scripts/xx-make-pr.sh <commit> [<commit> ...]
scripts/xx-make-pr.sh --rebase <commit> [<commit> ...]
scripts/xx-make-pr.sh --branch my-pr-branch <commit> [<commit> ...]
The script:
- Creates a temporary branch from the upstream ref
- Cherry-picks the given commits
- Pushes and creates a PR via
gh - Rewrites commit messages with
[PR #NNNN]prefix andPR:trailer - Rebases the incubator branch onto the submission branch
- Install prefix is ephemeral.
run-build.*removes_WORK_/<release>/installafter building. pkg-config and aclocal paths point into this prefix. - Tags are namespaced per remote. Each repo is configured with
tagopt: --no-tags, and tags are fetched into separate namespaces (refs/tags/origin/*,refs/tags/xorg/*). - No CI, tests, lint, or formatter. The X Test Suite (xts) is a build target, not a test runner.
- git branches. Two branches on the remote:
masterandwip1(incubator). _WORK_/is gitignored. Only the.gitignoreat the root is used.