Add automatic packaging, with make test

This commit is contained in:
2026-06-29 02:04:34 -04:00
parent fb9add0778
commit 7721aeb945
2 changed files with 331 additions and 13 deletions
+2 -13
View File
@@ -33,16 +33,5 @@ jobs:
libxcb \ libxcb \
xcb-util-wm xcb-util-wm
- name: Test 'make debug' (Clang + Sanitizers) - name: Test all targets and packaging modes
run: | run: make test
make debug
make clean
- name: Test Default 'make' (Auto-detecting TCC)
run: |
make
make clean
- name: Test 'make release' (Clang + Strict Warnings)
run: |
make release
+329
View File
@@ -1,5 +1,7 @@
.POSIX: .POSIX:
.SUFFIXES: .SUFFIXES:
.ONESHELL:
.SHELLFLAGS = -ec
VERSION = `git describe --tags --dirty 2>/dev/null || echo 0.2` VERSION = `git describe --tags --dirty 2>/dev/null || echo 0.2`
PREFIX = /usr/local PREFIX = /usr/local
@@ -24,6 +26,7 @@ endif
XWAYLAND = -DXWAYLAND XWAYLAND = -DXWAYLAND
XLIBS = xcb xcb-icccm XLIBS = xcb xcb-icccm
DISTRO =
LUA_PKG = lua5.4 LUA_PKG = lua5.4
PKGS = wayland-server xkbcommon libinput $(LUA_PKG) $(XLIBS) PKGS = wayland-server xkbcommon libinput $(LUA_PKG) $(XLIBS)
@@ -47,6 +50,7 @@ all: peachwm smsg/smsg
release: CC = clang release: CC = clang
release: CFLAGS += -Werror -Wpedantic -Wmissing-prototypes -Wstrict-prototypes \ release: CFLAGS += -Werror -Wpedantic -Wmissing-prototypes -Wstrict-prototypes \
-Wold-style-definition -Wmissing-declarations -Wimplicit-fallthrough \ -Wold-style-definition -Wmissing-declarations -Wimplicit-fallthrough \
-Wno-gnu-zero-variadic-macro-arguments \
-march=native -march=native
release: peachwm smsg/smsg release: peachwm smsg/smsg
@@ -157,6 +161,8 @@ clean:
rm -f peachwm smsg/smsg src/*.o parser/*.o smsg/*.o \ rm -f peachwm smsg/smsg src/*.o parser/*.o smsg/*.o \
protocols/*.o protocols/*-protocol.h protocols/*-protocol.c \ protocols/*.o protocols/*-protocol.h protocols/*-protocol.c \
smsg/*-protocol.h smsg/*-protocol.c smsg/*-protocol.h smsg/*-protocol.c
rm -f peachwm-*.tar.gz peachwm-*.pkg.tar.* peachwm_*.deb peachwm-*.rpm
rm -rf _pkg packaging
install: peachwm smsg/smsg install: peachwm smsg/smsg
mkdir -p $(DESTDIR)$(PREFIX)/bin mkdir -p $(DESTDIR)$(PREFIX)/bin
@@ -171,3 +177,326 @@ uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/peachwm rm -f $(DESTDIR)$(PREFIX)/bin/peachwm
rm -f $(DESTDIR)$(PREFIX)/bin/smsg rm -f $(DESTDIR)$(PREFIX)/bin/smsg
rm -rf $(DESTDIR)/etc/peachwm rm -rf $(DESTDIR)/etc/peachwm
# Packaging
# make package - source tarball
# DISTRO=arch make package - Arch Linux PKGBUILD (build with makepkg if available)
# DISTRO=debian make package - Debian/Ubuntu .deb (build with dpkg-deb)
# DISTRO=fedora make package - Fedora .rpm (build with rpmbuild)
# DISTRO=opensuse make package - OpenSUSE .rpm (build with rpmbuild)
# DISTRO=gentoo make package - Gentoo ebuild
# DISTRO=void make package - Void Linux template
_pkg-tarball: peachwm smsg/smsg
rm -rf peachwm-$(VERSION)
mkdir -p peachwm-$(VERSION)
cp -r .gitignore Makefile LICENSE README.md include src parser protocols smsg example peachwm-$(VERSION)/
cp peachwm peachwm-$(VERSION)/
tar -czf peachwm-$(VERSION).tar.gz peachwm-$(VERSION)
rm -rf peachwm-$(VERSION)
_pkg-arch: _pkg-tarball
rm -rf _pkg/arch
mkdir -p _pkg/arch
ver="$(VERSION)"; cat > _pkg/arch/PKGBUILD <<- HEREDOC
# Maintainer: PeachWM Maintainers
pkgname=peachwm
pkgver=$$ver
pkgrel=1
pkgdesc="PeachWM - A lightweight Wayland compositor"
arch=('x86_64')
url="https://github.com/HuntedByTheIRS/peachwm"
license=('GPL3')
depends=(
'libinput'
'wayland'
'wlroots0.20'
'libxkbcommon'
'lua'
'libxcb'
'xcb-util-wm'
)
makedepends=(
'clang'
'pkg-config'
'wayland-protocols'
'git'
)
source=("peachwm-$${ver}.tar.gz")
sha256sums=('SKIP')
build() {
cd "$${srcdir}/peachwm-$${ver}"
make
}
package() {
cd "$${srcdir}/peachwm-$${ver}"
make DESTDIR="$${pkgdir}" PREFIX=/usr install
}
HEREDOC
cp peachwm-$(VERSION).tar.gz _pkg/arch/
if command -v makepkg >/dev/null 2>&1; then \
cd _pkg/arch && makepkg -f && cp *.pkg.tar.* ../.. || \
echo "makepkg failed (try building manually with the PKGBUILD at _pkg/arch/)"; \
else \
echo "PKGBUILD generated at _pkg/arch/PKGBUILD"; \
fi
_pkg-debian: _pkg-tarball
rm -rf _pkg/debian
mkdir -p _pkg/debian/DEBIAN
mkdir -p _pkg/debian/usr/bin
mkdir -p _pkg/debian/usr/share/doc/peachwm
mkdir -p _pkg/debian/etc/peachwm
cp peachwm _pkg/debian/usr/bin/
cp smsg/smsg _pkg/debian/usr/bin/
cp README.md _pkg/debian/usr/share/doc/peachwm/
cp -r example/* _pkg/debian/etc/peachwm/
ver="$(VERSION)"; date="$(shell date -R)"; cat > _pkg/debian/DEBIAN/control <<- HEREDOC
Source: peachwm
Section: x11
Priority: optional
Maintainer: PeachWM Maintainers
Build-Depends: debhelper-compat (= 13), libwayland-dev, libwlroots-dev (>= 0.20), libxkbcommon-dev, libinput-dev, liblua5.4-dev, pkgconf, libxcb-dev, libxcb-icccm4-dev, wayland-protocols, clang
Standards-Version: 4.6.2
Homepage: https://github.com/HuntedByTheIRS/peachwm
Package: peachwm
Architecture: linux-any
Depends: $${shlibs:Depends}, $${misc:Depends}
Description: A lightweight Wayland compositor
PeachWM is a Wayland compositor focused on simplicity and
lightweight design. It features Lua configuration, multiple
layouts (Dwindle, Master, Monocle, Floating), and XWayland
support.
HEREDOC
cat > _pkg/debian/DEBIAN/copyright <<- HEREDOC
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: peachwm
Source: https://github.com/HuntedByTheIRS/peachwm
Files: *
Copyright: 2026 HuntedByTheIRS
License: GPL-3+
HEREDOC
if command -v dpkg-deb >/dev/null 2>&1; then \
dpkg-deb --build _pkg/debian peachwm_$(VERSION)_amd64.deb; \
else \
echo "Debian package structure at _pkg/debian/"; \
fi
_pkg-fedora: _pkg-tarball
rm -rf _pkg/fedora
mkdir -p _pkg/fedora/SOURCES _pkg/fedora/SPECS
cp peachwm-$(VERSION).tar.gz _pkg/fedora/SOURCES/
ver="$(VERSION)"; date="$(shell date +'%a %b %d %Y')"; cat > _pkg/fedora/SPECS/peachwm.spec <<- HEREDOC
Name: peachwm
Version: $$ver
Release: 1%{?dist}
Summary: A lightweight Wayland compositor
License: GPLv3
URL: https://github.com/HuntedByTheIRS/peachwm
Source0: peachwm-$${ver}.tar.gz
BuildRequires: clang
BuildRequires: pkgconfig
BuildRequires: wayland-devel
BuildRequires: wayland-protocols-devel
BuildRequires: wlroots0.20-devel
BuildRequires: libxkbcommon-devel
BuildRequires: libinput-devel
BuildRequires: lua-devel
BuildRequires: libxcb-devel
BuildRequires: xcb-util-wm-devel
BuildRequires: git
Requires: libinput
Requires: wayland
Requires: wlroots0.20
Requires: libxkbcommon
Requires: lua
Requires: libxcb
Requires: xcb-util-wm
%description
PeachWM is a Wayland compositor focused on simplicity and lightweight
design. It features Lua configuration, multiple layouts (Dwindle,
Master, Monocle, Floating), and XWayland support.
%prep
%setup -q
%build
make
%install
make DESTDIR=%{buildroot} PREFIX=/usr install
%files
%license LICENSE
%doc README.md
%{_bindir}/peachwm
%{_bindir}/smsg
%config(noreplace) /etc/peachwm/*
%changelog
* $$date PeachWM Maintainers - $$ver-1
- Package peachwm $$ver.
HEREDOC
if command -v rpmbuild >/dev/null 2>&1; then \
rpmbuild --define "_topdir $(PWD)/_pkg/fedora" \
-ba _pkg/fedora/SPECS/peachwm.spec && \
find _pkg/fedora -name "*.rpm" -exec cp {} . \;; \
else \
echo "RPM spec at _pkg/fedora/SPECS/peachwm.spec"; \
fi
_pkg-opensuse: _pkg-tarball
rm -rf _pkg/opensuse
mkdir -p _pkg/opensuse/SOURCES _pkg/opensuse/SPECS
cp peachwm-$(VERSION).tar.gz _pkg/opensuse/SOURCES/
ver="$(VERSION)"; date="$(shell date +'%a %b %d %Y')"; cat > _pkg/opensuse/SPECS/peachwm.spec <<- HEREDOC
Name: peachwm
Version: $$ver
Release: 1
Summary: A lightweight Wayland compositor
License: GPL-3.0-or-later
URL: https://github.com/HuntedByTheIRS/peachwm
Source0: peachwm-$${ver}.tar.gz
BuildRequires: clang
BuildRequires: pkgconfig
BuildRequires: wayland-devel
BuildRequires: wayland-protocols-devel
BuildRequires: wlroots0.20-devel
BuildRequires: libxkbcommon-devel
BuildRequires: libinput-devel
BuildRequires: lua54-devel
BuildRequires: libxcb-devel
BuildRequires: xcb-util-wm-devel
BuildRequires: git
Requires: libinput
Requires: wayland
Requires: wlroots0.20
Requires: libxkbcommon
Requires: lua54
Requires: libxcb
Requires: xcb-util-wm
%description
PeachWM is a Wayland compositor focused on simplicity and lightweight
design. It features Lua configuration, multiple layouts (Dwindle,
Master, Monocle, Floating), and XWayland support.
%prep
%setup -q
%build
make
%install
make DESTDIR=%{buildroot} PREFIX=/usr install
%files
%license LICENSE
%doc README.md
%{_bindir}/peachwm
%{_bindir}/smsg
%config(noreplace) /etc/peachwm/*
%changelog
* $$date PeachWM Maintainers - $$ver-1
- Package peachwm $$ver.
HEREDOC
if command -v rpmbuild >/dev/null 2>&1; then \
rpmbuild --define "_topdir $(PWD)/_pkg/opensuse" \
-ba _pkg/opensuse/SPECS/peachwm.spec && \
find _pkg/opensuse -name "*.rpm" -exec cp {} . \;; \
else \
echo "RPM spec at _pkg/opensuse/SPECS/peachwm.spec"; \
fi
_pkg-gentoo: _pkg-tarball
rm -rf _pkg/gentoo
mkdir -p _pkg/gentoo
ver="$(VERSION)"; cat > _pkg/gentoo/peachwm-$${ver}.ebuild <<- HEREDOC
# Copyright 2026-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DESCRIPTION="A lightweight Wayland compositor"
HOMEPAGE="https://github.com/HuntedByTheIRS/peachwm"
SRC_URI=""
if [[ $${PV} == 9999 ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/HuntedByTheIRS/peachwm.git"
else
SRC_URI="https://github.com/HuntedByTheIRS/peachwm/archive/v$${PV}.tar.gz -> $${P}.tar.gz"
KEYWORDS="~amd64"
fi
LICENSE="GPL-3"
SLOT="0"
IUSE="+X"
RDEPEND="
dev-libs/libinput:=
dev-libs/wayland
dev-libs/wayland-protocols
gui-libs/wlroots:0.20
x11-libs/libxkbcommon
dev-lang/lua:5.4
X? ( x11-libs/libxcb
x11-libs/xcb-util-wm )
"
DEPEND="$${RDEPEND}
>=dev-libs/wayland-protocols-1.24
"
BDEPEND="
virtual/pkgconfig
sys-devel/clang
"
src_compile() {
make
}
src_install() {
make DESTDIR="$${D}" PREFIX=/usr install
}
HEREDOC
echo "Ebuild generated at _pkg/gentoo/peachwm-$(VERSION).ebuild"
_pkg-void: _pkg-tarball
rm -rf _pkg/void
mkdir -p _pkg/void
ver="$(VERSION)"; cat > _pkg/void/template <<- HEREDOC
# Template file for 'peachwm'
pkgname=peachwm
version=$$ver
revision=1
build_style=gnu-makefile
make_build_args=""
make_install_args="DESTDIR=$${DESTDIR} PREFIX=/usr"
hostmakedepends="clang pkg-config wayland-protocols git"
makedepends="wayland-devel wlroots0.20-devel libxkbcommon-devel libinput-devel lua54-devel libxcb-devel xcb-util-wm-devel"
depends="libinput wayland wlroots0.20 libxkbcommon lua54 libxcb xcb-util-wm"
short_desc="PeachWM - A lightweight Wayland compositor"
maintainer="PeachWM Maintainers"
license="GPL-3.0-or-later"
homepage="https://github.com/HuntedByTheIRS/peachwm"
distfiles="https://github.com/HuntedByTheIRS/peachwm/archive/v$${version}.tar.gz"
checksum=SKIP
HEREDOC
echo "Void template generated at _pkg/void/template"
package: _pkg-tarball
@case "$(DISTRO)" in \
"") \
;; \
arch) \
$(MAKE) _pkg-arch ;; \
debian) \
$(MAKE) _pkg-debian ;; \
fedora) \
$(MAKE) _pkg-fedora ;; \
opensuse) \
$(MAKE) _pkg-opensuse ;; \
gentoo) \
$(MAKE) _pkg-gentoo ;; \
void) \
$(MAKE) _pkg-void ;; \
*) \
echo "Unknown DISTRO '$(DISTRO)'. Supported: arch, debian, fedora, opensuse, gentoo, void"; \
exit 1 ;; \
esac
test:
@for target in all debug release; do \
echo "=== Testing 'make $$target' ==="; \
$(MAKE) $$target && $(MAKE) clean || { echo "FAIL: make $$target"; exit 1; }; \
done
@echo "=== Testing 'make package' ==="
$(MAKE) package && $(MAKE) clean || { echo "FAIL: make package"; exit 1; }
@for distro in arch debian fedora opensuse gentoo void; do \
echo "=== Testing 'DISTRO=$$distro make package' ==="; \
$(MAKE) package DISTRO=$$distro && $(MAKE) clean || { echo "FAIL: DISTRO=$$distro"; exit 1; }; \
done
@echo "=== All tests passed ==="