From 4367c46950a5fdf2c49e236e310fd29bff73c720 Mon Sep 17 00:00:00 2001
From: namark <namark@disroot.org>
Date: Mon, 20 Sep 2021 20:13:38 +0400
Subject: [PATCH] Single binary make template.

---
 make_templates/binary | 125 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 125 insertions(+)
 create mode 100644 make_templates/binary

diff --git a/make_templates/binary b/make_templates/binary
new file mode 100644
index 0000000..f8fec6e
--- /dev/null
+++ b/make_templates/binary
@@ -0,0 +1,125 @@
+CPPSTD		?= --std=c++1z
+CPPFLAGS	+= $(CPPSTD)
+
+SRCDIR	?= ./source
+SRCEXT	?= .cpp
+
+override CPPFLAGS	+= -MMD -MP
+override CPPFLAGS	+= $(shell cat .cxxflags 2> /dev/null | xargs)
+override CPPFLAGS	+= -I./include -I$(SRCDIR)
+override LDFLAGS	+= $(shell cat .ldflags 2> /dev/null | xargs)
+override LDFLAGS	+= -L./lib
+override LDLIBS		+= $(shell cat .ldlibs 2> /dev/null | xargs)
+
+override LOCALIB	+= $(wildcard lib/*.a)
+
+INSTALL_BIN ?= bin
+INSTALL_SOURCE ?= source
+#LOCAL_TEMP
+#LOCAL_DIST
+
+ifneq ($(shell cat COPYRIGHT 2> /dev/null),)
+COPYRIGHT ?= COPYRIGHT
+COPYRIGHT_DEP = COPYRIGHT
+else
+COPYRIGHT ?= /dev/null
+endif
+
+PREFIX	?= $(DESTDIR)/usr/local
+BINDIR	:= $(PREFIX)/$(INSTALL_BIN)
+INSTALL_SRCDIR	:= $(PREFIX)/$(INSTALL_SOURCE)
+
+
+TEMPDIR	:= temp
+ifneq ($(LOCAL_TEMP),)
+TEMPDIR	:= $(TEMPDIR)/$(LOCAL_TEMP)
+endif
+
+DISTDIR	:= out
+ifneq ($(LOCAL_DIST),)
+DISTDIR	:= $(DISTDIR)/$(LOCAL_DIST)
+endif
+
+
+ifeq ($(origin TARGET), undefined)
+TARGET	:= $(shell pwd | xargs basename)
+endif
+
+OUT		:= $(DISTDIR)/$(TARGET)
+
+ifeq ($(origin HEADERS), undefined)
+HEADERS	:= $(shell find -wholename "$(SRCDIR)/*.hpp" && find -wholename "$(SRCDIR)/*.h")
+endif
+
+ifeq ($(origin SOURCES), undefined)
+SOURCES	:= $(shell find -wholename "$(SRCDIR)/*$(SRCEXT)")
+endif
+
+OBJECTS	:= $(SOURCES:$(SRCDIR)/%$(SRCEXT)=$(TEMPDIR)/%.o)
+OBJDIRS	:= $(shell dirname $(OBJECTS))
+DEPENDS	:= $(OBJECTS:.o=.d)
+
+INSTALL_SOURCES	:= $(SOURCES:$(SRCDIR)/%=$(INSTALL_SRCDIR)/%)
+INSTALL_SOURCES	+= $(HEADERS:$(SRCDIR)/%=$(INSTALL_SRCDIR)/%)
+INSTALL_SRCDIRS	:= $(shell dirname $(INSTALL_SOURCES))
+
+$(OUT): $(OBJECTS) $(LOCALIB) | $(DISTDIR)
+	$(CXX) $(LDFLAGS) $(OBJECTS) $(LOCALIB) $(LDLIBS) -o $@
+
+$(TEMPDIR)/%.o: $(SRCDIR)/%$(SRCEXT) | $(TEMPDIR)
+	@mkdir -p $(@D)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
+
+$(TEMPDIR):
+	@mkdir -p $@
+
+$(DISTDIR):
+	@mkdir -p $@
+
+clean:
+	@rm $(DEPENDS) 2> /dev/null || true
+	@rm $(OBJECTS) 2> /dev/null || true
+	@rmdir -p $(OBJDIRS) 2> /dev/null || true
+	@rmdir -p $(TEMPDIR) 2> /dev/null || true
+	@echo Temporaries cleaned!
+
+distclean: clean
+	@rm $(OUT) 2> /dev/null || true
+	@rmdir -p $(DISTDIR) 2> /dev/null || true
+	@echo All clean!
+
+install_all: install install_source
+
+install: $(BINDIR)/$(TARGET)
+
+$(BINDIR)/$(TARGET): $(OUT) | $(BINDIR)
+	install --strip $< $@
+
+$(BINDIR):
+	@mkdir -p $@
+
+install_source: $(INSTALL_SOURCES)
+
+$(INSTALL_SRCDIR)/%: $(SRCDIR)/% $(COPYRIGHT_DEP)
+	@mkdir -p $(@D)
+	cat $(COPYRIGHT) > $@
+	cat $< >> $@
+
+uninstall:
+	-rm $(BINDIR)/$(TARGET)
+	@rmdir -p $(BINDIR) 2> /dev/null || true
+	@echo Binary uninstalled!
+
+uninstall_source:
+	-rm $(INSTALL_SOURCES)
+	@rmdir -p $(INSTALL_SRCDIRS) 2> /dev/null || true
+	@echo Source code uninstalled!
+
+uninstall_all: uninstall uninstall_source
+	@echo Everything uninstalled!
+
+
+-include $(DEPENDS)
+
+.PRECIOUS : $(OBJECTS)
+.PHONY : clean distclean uninstall uninstall_source uninstall_all
-- 
GitLab