diff --git a/.gitignore b/.gitignore index 042eb9f..3a1c17e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -bin/ -pkg/ +cover/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4d57832 --- /dev/null +++ b/Makefile @@ -0,0 +1,57 @@ +# Go parameters +GOCMD=go +GOBUILD=$(GOCMD) build +GOCLEAN=$(GOCMD) clean +GOINSTALL=$(GOCMD) install +GOTEST=$(GOCMD) test +GODEP=$(GOTEST) -i +GOFMT=gofmt -w +GOCOVER=$(GOCMD) tool cover +COVER_DIR=cover + +# Package lists +TOPLEVEL_PKG := jsh +CMD_LIST := jsh/ps + +# List building +ALL_LIST = $(TOPLEVEL_PKG) $(CMD_LIST) + +BUILD_LIST = $(foreach int, $(ALL_LIST), $(int)_build) +CLEAN_LIST = $(foreach int, $(ALL_LIST), $(int)_clean) +INSTALL_LIST = $(foreach int, $(ALL_LIST), $(int)_install) +IREF_LIST = $(foreach int, $(ALL_LIST), $(int)_iref) +TEST_LIST = $(foreach int, $(ALL_LIST), $(int)_test) +COVER_LIST = $(foreach int, $(ALL_LIST), $(int)_cover) +FMT_TEST = $(foreach int, $(ALL_LIST), $(int)_fmt) + +# All are .PHONY for now because dependencyness is hard +.PHONY: $(CLEAN_LIST) $(TEST_LIST) $(FMT_LIST) $(INSTALL_LIST) $(BUILD_LIST) $(IREF_LIST) + +all: install +build: $(BUILD_LIST) +clean: $(CLEAN_LIST) + rm -rf $(COVER_DIR) +install: $(INSTALL_LIST) +test: $(TEST_LIST) +cover: $(COVER_LIST) + echo "Output in directory: $(COVER_DIR)" +iref: $(IREF_LIST) +fmt: $(FMT_TEST) + +$(BUILD_LIST): %_build: %_fmt %_iref + $(GOBUILD) $* +$(CLEAN_LIST): %_clean: + $(GOCLEAN) $* +$(INSTALL_LIST): %_install: %_fmt %_iref + $(GOINSTALL) $* +$(IREF_LIST): %_iref: + $(GODEP) $* +$(TEST_LIST): %_test: + $(GOTEST) $* +$(COVER_LIST): %_cover: + mkdir -p $(COVER_DIR)/$* + $(GOTEST) -coverprofile=$(COVER_DIR)/$*/c.out $* + $(GOCOVER) -html=$(COVER_DIR)/$*/c.out -o $(COVER_DIR)/$*/index.html + rm -f $*_c.out +$(FMT_TEST): %_fmt: + [ -d ./$* ] && $(GOFMT) ./$* || $(GOFMT) .