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 ##
-# 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"