939232e72e
Added: Project Overview TUI Build Cache / Dirty Detection Post-Build Hooks gbuild status
177 lines
5.6 KiB
Makefile
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"
|