#
# byggfil for building Letarette
#

all: letarette lrcli lrload lrmon tinysrv

REV = dev

{{if (exec "git" "status" "--porcelain") | eq "" }}
    repoState = Clean repo, tagging with git rev
    REV = {{slice (exec "git" "rev-parse" "HEAD") 0 7 }}
{{else}}
    repoState = Dirty repo, tagging as dev build
{{end}}

{{$tag := (exec "git" "tag" "--contains")}}
{{if eq $tag ""}}
    {{$tag = date "2006-01-02"}}
{{end}}

TAG = {{$tag}}
DEBUG = {{if .env.DEBUG}}-gcflags=all="-N -l"{{else}}""{{end}}

PACKAGE = github.com/erkkah/letarette
STAMP = -X '$PACKAGE.Revision=$REV' -X '$PACKAGE.Tag=$TAG'

{{$go_sqlite := (exec "go" "list" "-f" "{{.Dir}}" "github.com/mattn/go-sqlite3")}}
GO_SQLITE = {{$go_sqlite}}

env.CGO_CFLAGS = {{exec "go" "env" "CGO_CFLAGS"}}
env.CGO_CFLAGS += -I${GO_SQLITE}
env.CGO_CFLAGS += -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_OMIT_SHARED_CACHE
env.CGO_CFLAGS += -DSQLITE_USE_ALLOCA -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_DEPRECATED

{{with .env.OS}}{{if eq . "Windows_NT"}}
EXE = .exe
LIBSQLITE = libsqlite
{{end}}{{end}}

LDFLAGS = ${env.LDFLAGS}{{if .env.STATIC}}-linkmode external -extldflags=-static{{end}}
SQLITE_TAGS = fts5,sqlite_omit_load_extension,json1

letarette: generate snowball $LIBSQLITE
letarette <- << $repoState
letarette <- go build $DEBUG -ldflags="$STAMP $LDFLAGS" -mod=readonly -v -tags $SQLITE_TAGS -o letarette${EXE} ./cmd/worker

lrcli: snowball $LIBSQLITE
lrcli <- go build $DEBUG -ldflags="$STAMP $LDFLAGS" -mod=readonly -v -tags $SQLITE_TAGS,dbstats ./cmd/lrcli

tinysrv:!
tinysrv <- go build -ldflags="$LDFLAGS" -mod=readonly -v ./cmd/tinysrv

lrload:!
lrload <- go build -ldflags="$LDFLAGS" -mod=readonly -v ./cmd/lrload

lrmon:!
lrmon <- go generate -tags "prod" ./cmd/lrmon
lrmon <- go build -ldflags="$STAMP $LDFLAGS" -v -tags "prod" ./cmd/lrmon

libsqlite: $GO_SQLITE/sqlite3-binding.c
libsqlite <- gcc -I$GO_SQLITE -c $GO_SQLITE/sqlite3-binding.c -o internal/sqlite.o
libsqlite <- ar -cr internal/libsqlite.a internal/sqlite.o

SNOWBALL = internal/snowball/ext/libstemmer_c
snowball: $SNOWBALL/libstemmer.o
$SNOWBALL/libstemmer.o <- bygg -C internal/snowball

test: generate
test <- go test -tags $SQLITE_TAGS ./internal/letarette

generate <-	go generate internal/letarette/db.go

clean <- go clean github.com/erkkah/letarette/...
clean <- rm -rf internal/snowball/ext

tidy <- go mod tidy

gocache <- << GOCACHE={{exec "go" "env" "GOCACHE"}}
