From ff62ecae0c28d532d54292b19418eb30e05370dc Mon Sep 17 00:00:00 2001
From: "Glenn Y. Rolland" <glenux@glenux.net>
Date: Sun, 4 Apr 2021 14:55:38 +0200
Subject: [PATCH] Factorize makefile

---
 Makefile         | 16 +++++++++-------
 tasks/crystal.mk | 16 ++++++++++++++++
 2 files changed, 25 insertions(+), 7 deletions(-)
 create mode 100644 tasks/crystal.mk

diff --git a/Makefile b/Makefile
index d259fbd..6c40fe4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,15 @@
 
+BINARIES=hodler
+hodler_FILES=$(wildcard src/*.cr src/**/*.cr)
+
 all: build
 
-build: bin/hodler
+build: ## Build binaries
 
-bin/hodler: $(wildcard src/*.cr)
-	shards build hodler
+clean:  ## Clean binaries
 
-completion: bin/hodler
-	$< --completion --development
+.PHONY: clean build all
+
+## Add targets for crystal
+include tasks/crystal.mk
 
-clean:
-	rm bin/hodler
diff --git a/tasks/crystal.mk b/tasks/crystal.mk
new file mode 100644
index 0000000..8f0292d
--- /dev/null
+++ b/tasks/crystal.mk
@@ -0,0 +1,16 @@
+
+define BINARY_template
+ALL_FILES += $($(1)_FILES)
+
+build: build-$(1)
+build-$(1): bin/$(1)
+
+bin/$(1): $($(1)_FILES)
+	shards build $(1)
+
+clean: clean-$(1)
+clean-$(1): 
+	rm -f bin/$(1)
+endef
+
+$(foreach binary,$(BINARIES),$(eval $(call BINARY_template,$(binary))))