* Added install and uninstall make targets.
authorUrban Wallasch <urban.wallasch@freenet.de>
Thu, 11 Apr 2019 19:26:18 +0000 (21:26 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Thu, 11 Apr 2019 19:26:18 +0000 (21:26 +0200)
* Redesigned most of the Makefile logic.

Makefile
gogopherd.cfg.example

index f4c8757db7a7b0c3e8069eb12127a7b76e673cfe..e30be3fc1194ac83912b3c8f6366d0ccc6cbdc1f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,32 +4,63 @@
 
 PROJECT := gogopherd
 
-BIN     := $(PROJECT)
-SRC     := $(wildcard *.go)
-SELF    := $(lastword $(MAKEFILE_LIST))
+PREFIX   ?= /usr/local
+INST_BIN ?= $(PREFIX)/bin
+INST_ETC ?= $(PREFIX)/etc
+INST_DOC ?= $(PREFIX)/share/doc/$(PROJECT)
 
-VERSION := $(strip $(shell git describe 2> /dev/null))
+CFGFILE := $(PROJECT).cfg
+CFGSRC  := $(CFGFILE).example
+DOC     := README.md $(CFGSRC)
+
+BIN     := $(PROJECT)
 VERFILE := version.go
+SRC     := $(filter-out $(VERFILE),$(wildcard *.go))
+VERSION := $(strip $(shell git describe 2> /dev/null))
+SELF    := $(lastword $(MAKEFILE_LIST))
 
 GOBLD   := go build
+RM      := rm -fv
+CP      := cp -afv
+MKDIR   := mkdir -pv
+RMDIR   := rmdir -v
+TAIL    := tail
+
+.PHONY: all version config install uninstall clean distclean
 
-.PHONY: all version clean distclean
+all: $(BIN) $(CFGFILE) $(SELF)
 
-all: version $(BIN)
+$(BIN): $(SRC) $(VERFILE)
+       $(GOBLD) -o $(BIN) $(SRC) $(VERFILE)
 
-$(BIN): $(SRC) $(SELF)
-       $(GOBLD) $(SRVSRC)
+$(CFGFILE): $(CFGSRC)
+       $(TAIL) -n +2 $(CFGSRC) > $(CFGFILE)
 
-version:
-       @echo "generate version.go"
+$(VERFILE): $(SRC)
+       @echo "generate $(VERFILE)"
        @echo "package main" > $(VERFILE)
        @echo "" >> $(VERFILE)
        @echo "const version = \"$(VERSION)\"" >> $(VERFILE)
 
+install: all
+       @echo "installing to $(PREFIX)"
+       @$(MKDIR) $(INST_BIN) $(INST_ETC) $(INST_DOC)
+       @$(CP) $(BIN) $(INST_BIN)
+       @$(CP) $(CFGFILE) $(INST_ETC)
+       @$(CP) $(DOC) $(INST_DOC)
+
+uninstall:
+       @echo "uninstalling from $(PREFIX)"
+       @-$(RM) $(INST_BIN)/$(BIN)
+       @-$(RM) $(INST_ETC)/$(CFGFILE)
+       @-$(foreach D,$(DOC),$(RM) $(INST_DOC)/$(D) ;)
+       @-$(RMDIR) $(INST_DOC) |:
+
 clean:
-       $(RM) $(BIN) $(VERFILE)
+       @$(RM) $(BIN)
 
 distclean: clean
+       @$(RM) $(VERFILE) $(CFGFILE)
 
 ###########
 ##  EOF  ##
index 14809aa0fc6c053eb70c5c4e2c8b29b101a26ed1..5d9451812468d6d4bbc2713ea813a16fdf3e9e5b 100644 (file)
@@ -1,5 +1,6 @@
-# Example configuration file for gogopherd.
-# Command line options will override the respective values set here.
+!!! DO NOT EDIT THIS FILE, INSTEAD MAKE A COPY AND REMOVE THIS LINE.
+# Configuration file for gogopherd.
+# Command line options will override any corresponding values set here.
 
 # Network interface to bind to, empty means any.
 iface = "localhost"