From f18cc034bb64f51c74f96c3b87c8f3bfb8300a5b Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Thu, 24 Feb 2022 07:26:55 +0100 Subject: [PATCH] add an option alias -O for the old obi format --- Makefile | 131 +++++++++-------------------- go.mod | 1 + go.sum | 3 + pkg/obitools/obiconvert/options.go | 1 + pkg/obitools/obipairing/options.go | 1 - 5 files changed, 44 insertions(+), 93 deletions(-) diff --git a/Makefile b/Makefile index 25381c2..4b9b873 100644 --- a/Makefile +++ b/Makefile @@ -1,106 +1,53 @@ -MODULE = $(shell env GO111MODULE=on $(GO) list -m) -DATE ?= $(shell date +%FT%T%z) -VERSION ?= $(shell git describe --tags --always --dirty --match=v* 2> /dev/null || \ - cat $(CURDIR)/.version 2> /dev/null || echo v0) -PKGS = $(or $(PKG),$(shell env GO111MODULE=on $(GO) list ./...)) -TESTPKGS = $(shell env GO111MODULE=on $(GO) list -f \ - '{{ if or .TestGoFiles .XTestGoFiles }}{{ .ImportPath }}{{ end }}' \ - $(PKGS)) -BIN = $(CURDIR)/bin +GOCMD=go +GOBUILD=$(GOCMD) build +GOCLEAN=$(GOCMD) clean +GOTEST=$(GOCMD) test +GOGET=$(GOCMD) get -GO = go -TIMEOUT = 15 -V = 0 -Q = $(if $(filter 1,$V),,@) -M = $(shell printf "\033[34;1m▶\033[0m") +BUILD_DIR=build +OBITOOLS_PREFIX:=g -export GO111MODULE=on +PACKAGES_SRC:= $(wildcard pkg/*/*.go pkg/*/*/*.go) +PACKAGE_DIRS:=$(sort $(patsubst %/,%,$(dir $(PACKAGES_SRC)))) +PACKAGES:=$(notdir $(PACKAGE_DIRS)) + +OBITOOLS_SRC:= $(wildcard cmd/obitools/*/*.go) +OBITOOLS_DIRS:=$(sort $(patsubst %/,%,$(dir $(OBITOOLS_SRC)))) +OBITOOLS:=$(notdir $(OBITOOLS_DIRS)) .PHONY: all -all: fmt lint | $(BIN) ; $(info $(M) building executable…) @ ## Build program binary - $Q $(GO) build \ - -tags release \ - -ldflags '-X $(MODULE)/cmd.Version=$(VERSION) -X $(MODULE)/cmd.BuildDate=$(DATE)' \ - -o $(BIN)/$(basename $(MODULE)) main.go -# Tools +define MAKE_PKG_RULE +pkg-$(notdir $(1)): $(1) + @echo -n - Building package $(notdir $(1))... + @$(GOBUILD) ./$(1) \ + 2> pkg-$(notdir $(1)).log \ + || cat pkg-$(notdir $(1)).log + @rm -f pkg-$(notdir $(1)).log + @echo Done. +endef -$(BIN): - @mkdir -p $@ -$(BIN)/%: | $(BIN) ; $(info $(M) building $(PACKAGE)…) - $Q tmp=$$(mktemp -d); \ - env GO111MODULE=off GOPATH=$$tmp GOBIN=$(BIN) $(GO) get $(PACKAGE) \ - || ret=$$?; \ - rm -rf $$tmp ; exit $$ret +define MAKE_OBITOOLS_RULE +$(OBITOOLS_PREFIX)$(notdir $(1)): $(BUILD_DIR) $(1) + @echo -n - Building obitool $(notdir $(1))... + @$(GOBUILD) -o $(BUILD_DIR)/$(OBITOOLS_PREFIX)$(notdir $(1)) ./$(1) \ + 2> $(OBITOOLS_PREFIX)$(notdir $(1)).log \ + || cat $(OBITOOLS_PREFIX)$(notdir $(1)).log + @rm -f $(OBITOOLS_PREFIX)$(notdir $(1)).log + @echo Done. +endef -GOLINT = $(BIN)/golint -$(BIN)/golint: PACKAGE=golang.org/x/lint/golint -GOCOV = $(BIN)/gocov -$(BIN)/gocov: PACKAGE=github.com/axw/gocov/... +all: obitools -GOCOVXML = $(BIN)/gocov-xml -$(BIN)/gocov-xml: PACKAGE=github.com/AlekSi/gocov-xml +packages: $(patsubst %,pkg-%,$(PACKAGES)) +obitools: $(patsubst %,$(OBITOOLS_PREFIX)%,$(OBITOOLS)) -GO2XUNIT = $(BIN)/go2xunit -$(BIN)/go2xunit: PACKAGE=github.com/tebeka/go2xunit +$(BUILD_DIR): + mkdir -p $@ -# Tests -TEST_TARGETS := test-default test-bench test-short test-verbose test-race -.PHONY: $(TEST_TARGETS) test-xml check test tests -test-bench: ARGS=-run=__absolutelynothing__ -bench=. ## Run benchmarks -test-short: ARGS=-short ## Run only short tests -test-verbose: ARGS=-v ## Run tests in verbose mode with coverage reporting -test-race: ARGS=-race ## Run tests with race detector -$(TEST_TARGETS): NAME=$(MAKECMDGOALS:test-%=%) -$(TEST_TARGETS): test -check test tests: fmt lint ; $(info $(M) running $(NAME:%=% )tests…) @ ## Run tests - $Q $(GO) test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS) +$(foreach P,$(PACKAGE_DIRS),$(eval $(call MAKE_PKG_RULE,$(P)))) -test-xml: fmt lint | $(GO2XUNIT) ; $(info $(M) running xUnit tests…) @ ## Run tests with xUnit output - $Q mkdir -p test - $Q 2>&1 $(GO) test -timeout $(TIMEOUT)s -v $(TESTPKGS) | tee test/tests.output - $(GO2XUNIT) -fail -input test/tests.output -output test/tests.xml +$(foreach P,$(OBITOOLS_DIRS),$(eval $(call MAKE_OBITOOLS_RULE,$(P)))) -COVERAGE_MODE = atomic -COVERAGE_PROFILE = $(COVERAGE_DIR)/profile.out -COVERAGE_XML = $(COVERAGE_DIR)/coverage.xml -COVERAGE_HTML = $(COVERAGE_DIR)/index.html -.PHONY: test-coverage test-coverage-tools -test-coverage-tools: | $(GOCOV) $(GOCOVXML) -test-coverage: COVERAGE_DIR := $(CURDIR)/test/coverage.$(shell date -u +"%Y-%m-%dT%H:%M:%SZ") -test-coverage: fmt lint test-coverage-tools ; $(info $(M) running coverage tests…) @ ## Run coverage tests - $Q mkdir -p $(COVERAGE_DIR) - $Q $(GO) test \ - -coverpkg=$$($(GO) list -f '{{ join .Deps "\n" }}' $(TESTPKGS) | \ - grep '^$(MODULE)/' | \ - tr '\n' ',' | sed 's/,$$//') \ - -covermode=$(COVERAGE_MODE) \ - -coverprofile="$(COVERAGE_PROFILE)" $(TESTPKGS) - $Q $(GO) tool cover -html=$(COVERAGE_PROFILE) -o $(COVERAGE_HTML) - $Q $(GOCOV) convert $(COVERAGE_PROFILE) | $(GOCOVXML) > $(COVERAGE_XML) - -.PHONY: lint -lint: | $(GOLINT) ; $(info $(M) running golint…) @ ## Run golint - $Q $(GOLINT) -set_exit_status $(PKGS) - -.PHONY: fmt -fmt: ; $(info $(M) running gofmt…) @ ## Run gofmt on all source files - $Q $(GO) fmt $(PKGS) - -# Misc - -.PHONY: clean -clean: ; $(info $(M) cleaning…) @ ## Cleanup everything - @rm -rf $(BIN) - @rm -rf test/tests.* test/coverage.* - -.PHONY: help -help: - @grep -hE '^[ a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ - awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-17s\033[0m %s\n", $$1, $$2}' - -.PHONY: version -version: - @echo $(VERSION) \ No newline at end of file diff --git a/go.mod b/go.mod index a833265..7eabca0 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.17 require ( github.com/DavidGamba/go-getoptions v0.25.3 + github.com/PaesslerAG/gval v1.1.2 github.com/goccy/go-json v0.9.4 github.com/schollz/progressbar/v3 v3.8.6 github.com/tevino/abool/v2 v2.0.1 diff --git a/go.sum b/go.sum index af63a02..ca69f4e 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,8 @@ github.com/DavidGamba/go-getoptions v0.25.3 h1:lSPcMkwWvVZU05C+Uz4DKnKN5wz4bcD1QvJ/QHCRexo= github.com/DavidGamba/go-getoptions v0.25.3/go.mod h1:qLaLSYeQ8sUVOfKuu5JT5qKKS3OCwyhkYSJnoG+ggmo= +github.com/PaesslerAG/gval v1.1.2 h1:EROKxV4/fAKWb0Qoj7NOxmHZA7gcpjOV9XgiRZMRCUU= +github.com/PaesslerAG/gval v1.1.2/go.mod h1:Fa8gfkCmUsELXgayr8sfL/sw+VzCVoa03dcOcR/if2w= +github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/pkg/obitools/obiconvert/options.go b/pkg/obitools/obiconvert/options.go index f0fd7bb..bf15a25 100644 --- a/pkg/obitools/obiconvert/options.go +++ b/pkg/obitools/obiconvert/options.go @@ -54,6 +54,7 @@ func OutputOptionSet(options *getoptions.GetOpt) { options.BoolVar(&__output_fastjson_format__, "output-json-header", false, options.Description("output FASTA/FASTQ title line annotations follow json format.")) options.BoolVar(&__output_fastobi_format__, "output-OBI-header", false, + options.Alias("O"), options.Description("output FASTA/FASTQ title line annotations follow OBI format.")) options.BoolVar(&__output_solexa_quality__, "solexa-output", false, diff --git a/pkg/obitools/obipairing/options.go b/pkg/obitools/obipairing/options.go index 7a874ed..414733a 100644 --- a/pkg/obitools/obipairing/options.go +++ b/pkg/obitools/obipairing/options.go @@ -29,7 +29,6 @@ func PairingOptionSet(options *getoptions.GetOpt) { options.Alias("D"), options.Description("Length added to the fast detected overlap for the precise alignement")) options.IntVar(&_MinOverlap, "min-overlap", _MinOverlap, - options.Alias("O"), options.Description("Minimum ovelap between both the reads to consider the aligment")) options.Float64Var(&_MinIdentity, "min-identity", _MinIdentity, options.Alias("X"),