# 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 jsh/free jsh/ls jsh/cat jsh/df # 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 $(COVER_DIR)/$*/c.out $(FMT_TEST): %_fmt: [ -d ./$* ] && $(GOFMT) ./$* || $(GOFMT) .