Files
Schmidt Peter 939232e72e Added features
Added: 
Project Overview TUI 
Build Cache / Dirty Detection
Post-Build Hooks
gbuild status
2026-05-23 21:03:54 +02:00

177 lines
5.6 KiB
Makefile

# ============================================================
# gbuild — C rewrite build system
# ============================================================
CC = gcc
CFLAGS = -Wall -Wextra -O2 -Iinclude
LDLIBS_GBUILD = -lncurses -lpthread
LDLIBS_GCONFIG =
# ---- package metadata --------------------------------------
NAME = gbuild
VERSION = 1.0.0
ARCH := $(shell uname -m)
DEB_ARCH := $(shell dpkg --print-architecture 2>/dev/null || \
echo $(ARCH) | sed 's/x86_64/amd64/;s/aarch64/arm64/')
RPM_DATE := $(shell date "+%a %b %d %Y")
PREFIX = /usr/local
# ---- release output dirs -----------------------------------
DIST = dist
DEB_ROOT = $(DIST)/deb
RPM_ROOT = $(DIST)/rpmbuild
# ---- sources -----------------------------------------------
COMMON_SRCS = src/config.c
GBUILD_SRCS = \
src/gbuild.c \
src/cache.c \
src/hooks.c \
src/git_ops.c \
src/index.c \
src/logger.c \
src/make_ops.c \
src/tui.c \
$(COMMON_SRCS)
GCONFIG_SRCS = \
src/gconfig.c \
$(COMMON_SRCS)
HEADERS = $(wildcard include/*.h)
# ============================================================
# Standard targets
# ============================================================
.PHONY: all clean install uninstall \
release release-src release-bin release-deb release-rpm
all: bin/gbuild bin/gconfig
bin/gbuild: $(GBUILD_SRCS) $(HEADERS) | bin
$(CC) $(CFLAGS) -o $@ $(GBUILD_SRCS) $(LDLIBS_GBUILD)
bin/gconfig: $(GCONFIG_SRCS) $(HEADERS) | bin
$(CC) $(CFLAGS) -o $@ $(GCONFIG_SRCS) $(LDLIBS_GCONFIG)
bin:
mkdir -p bin
clean:
rm -rf bin/ dist/
install: all
install -Dm755 bin/gbuild $(DESTDIR)$(PREFIX)/bin/gbuild
install -Dm755 bin/gconfig $(DESTDIR)$(PREFIX)/bin/gconfig
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/gbuild
rm -f $(DESTDIR)$(PREFIX)/bin/gconfig
# ============================================================
# release — build all four artefacts into dist/
# ============================================================
#
# dist/
# ├── gbuild-1.0.0.tar.gz ← source tarball
# ├── gbuild-1.0.0-x86_64-bin.tar.gz ← stripped binaries
# ├── gbuild_1.0.0_amd64.deb ← Debian package
# └── gbuild-1.0.0-1.x86_64.rpm ← RPM package
#
release: release-src release-bin release-deb release-rpm
@echo ""
@echo "Release artefacts:"
@ls -1sh $(DIST)/*.tar.gz $(DIST)/*.deb $(DIST)/*.rpm 2>/dev/null \
| awk '{print " " $$0}'
# ============================================================
# release-src — source tarball
# ============================================================
release-src:
@echo ">>> [1/4] Source tarball ..."
mkdir -p $(DIST)
mkdir -p $(DIST)/$(NAME)-$(VERSION)
cp -r src include pkg Makefile README.md $(DIST)/$(NAME)-$(VERSION)/
tar -C $(DIST) -czf $(DIST)/$(NAME)-$(VERSION).tar.gz \
$(NAME)-$(VERSION)
rm -rf $(DIST)/$(NAME)-$(VERSION)
@echo " OK $(DIST)/$(NAME)-$(VERSION).tar.gz"
# ============================================================
# release-bin — stripped binary tarball
# ============================================================
release-bin: all
@echo ">>> [2/4] Binary tarball ..."
mkdir -p $(DIST)
mkdir -p $(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin/usr/local/bin
cp bin/gbuild $(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin/usr/local/bin/
cp bin/gconfig $(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin/usr/local/bin/
strip $(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin/usr/local/bin/gbuild
strip $(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin/usr/local/bin/gconfig
tar -C $(DIST) -czf \
$(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin.tar.gz \
$(NAME)-$(VERSION)-$(ARCH)-bin
rm -rf $(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin
@echo " OK $(DIST)/$(NAME)-$(VERSION)-$(ARCH)-bin.tar.gz"
# ============================================================
# release-deb — Debian .deb package
# ============================================================
release-deb: all
@echo ">>> [3/4] .deb package ..."
mkdir -p $(DIST)
rm -rf $(DEB_ROOT)
install -Dm755 bin/gbuild $(DEB_ROOT)/usr/local/bin/gbuild
install -Dm755 bin/gconfig $(DEB_ROOT)/usr/local/bin/gconfig
strip $(DEB_ROOT)/usr/local/bin/gbuild
strip $(DEB_ROOT)/usr/local/bin/gconfig
install -dm755 $(DEB_ROOT)/usr/share/doc/$(NAME)
cp README.md $(DEB_ROOT)/usr/share/doc/$(NAME)/
install -dm755 $(DEB_ROOT)/DEBIAN
sed -e 's/@VERSION@/$(VERSION)/g' \
-e 's/@DEB_ARCH@/$(DEB_ARCH)/g' \
pkg/deb/DEBIAN/control.in > $(DEB_ROOT)/DEBIAN/control
sed -e 's/@VERSION@/$(VERSION)/g' \
pkg/deb/DEBIAN/postinst.in > $(DEB_ROOT)/DEBIAN/postinst
chmod 755 $(DEB_ROOT)/DEBIAN/postinst
dpkg-deb --build --root-owner-group $(DEB_ROOT) \
$(DIST)/$(NAME)_$(VERSION)_$(DEB_ARCH).deb
rm -rf $(DEB_ROOT)
@echo " OK $(DIST)/$(NAME)_$(VERSION)_$(DEB_ARCH).deb"
# ============================================================
# release-rpm — RPM package
# ============================================================
release-rpm: release-src
@echo ">>> [4/4] .rpm package ..."
rm -rf $(RPM_ROOT)
mkdir -p $(RPM_ROOT)/BUILD $(RPM_ROOT)/BUILDROOT $(RPM_ROOT)/RPMS $(RPM_ROOT)/SOURCES $(RPM_ROOT)/SPECS $(RPM_ROOT)/SRPMS
cp $(DIST)/$(NAME)-$(VERSION).tar.gz \
$(RPM_ROOT)/SOURCES/
sed -e 's/@VERSION@/$(VERSION)/g' \
-e 's/@RPM_DATE@/$(RPM_DATE)/g' \
pkg/rpm/gbuild.spec.in > $(RPM_ROOT)/SPECS/$(NAME).spec
rpmbuild -bb --nodeps \
--define "_topdir $(CURDIR)/$(RPM_ROOT)" \
$(RPM_ROOT)/SPECS/$(NAME).spec
find $(RPM_ROOT)/RPMS -name "*.rpm" -exec cp {} $(DIST)/ \;
rm -rf $(RPM_ROOT)
@echo " OK $(DIST)/$(NAME)-$(VERSION)-1.$(ARCH).rpm"