Project is published.
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
# ============================================================
|
||||
# gbuild — C rewrite build system
|
||||
# ============================================================
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -Wextra -O2 -Iinclude
|
||||
LDLIBS_GBUILD = -lncurses
|
||||
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/git_ops.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"
|
||||
Reference in New Issue
Block a user