LDFLAGS += -X "gogs.io/gogs/internal/conf.BuildTime=$(shell date -u '+%Y-%m-%d %I:%M:%S %Z')"
LDFLAGS += -X "gogs.io/gogs/internal/conf.BuildCommit=$(shell git rev-parse HEAD)"

CONF_FILES := $(shell find conf | sed 's/ /\\ /g')
TEMPLATES_FILES := $(shell find templates | sed 's/ /\\ /g')
PUBLIC_FILES := $(shell find public | sed 's/ /\\ /g')
LESS_FILES := $(wildcard public/less/*.less)
ASSETS_GENERATED := internal/assets/conf/conf_gen.go internal/assets/templates/templates_gen.go internal/assets/public/public_gen.go
GENERATED := $(ASSETS_GENERATED) public/css/gogs.min.css

TAGS = ""
BUILD_FLAGS = "-v"

RELEASE_ROOT = "release"
RELEASE_GOGS = "release/gogs"
NOW = $(shell date -u '+%Y%m%d%I%M%S')

.PHONY: check dist build build-no-gen pack release generate less clean test fixme todo legacy

.IGNORE: public/css/gogs.css

all: build

check: test

dist: release

web: build
	./gogs web

build: $(GENERATED)
	go build $(BUILD_FLAGS) -ldflags '$(LDFLAGS)' -tags '$(TAGS)' -trimpath -o gogs

build-no-gen:
	go build $(BUILD_FLAGS) -ldflags '$(LDFLAGS)' -tags '$(TAGS)' -trimpath -o gogs

pack:
	rm -rf $(RELEASE_GOGS)
	mkdir -p $(RELEASE_GOGS)
	cp -r gogs LICENSE README.md README_ZH.md scripts $(RELEASE_GOGS)
	cd $(RELEASE_ROOT) && zip -r gogs.$(NOW).zip "gogs"

release: build pack

generate: clean $(ASSETS_GENERATED)

internal/assets/conf/conf_gen.go: $(CONF_FILES)
	-rm -f $@
	go generate internal/assets/conf/conf.go
	gofmt -s -w $@

internal/assets/templates/templates_gen.go: $(TEMPLATES_FILES)
	-rm -f $@
	go generate internal/assets/templates/templates.go
	gofmt -s -w $@

internal/assets/public/public_gen.go: $(PUBLIC_FILES)
	-rm -f $@
	go generate internal/assets/public/public.go
	gofmt -s -w $@

less: clean public/css/gogs.min.css

public/css/gogs.min.css: $(LESS_FILES)
	@type lessc >/dev/null 2>&1 && lessc --clean-css --source-map "public/less/gogs.less" $@ || echo "lessc command not found or failed"

clean:
	find . -name "*.DS_Store" -type f -delete

test:
	go test -cover -race ./...

fixme:
	grep -rnw "FIXME" internal

todo:
	grep -rnw "TODO" internal

# Legacy code should be removed by the time of release
legacy:
	grep -rnw "\(LEGACY\|Deprecated\)" internal