binfo/summary.go
2024-12-15 10:07:31 +00:00

88 lines
1.4 KiB
Go

package binfo
import (
"fmt"
"strings"
)
type SummaryMode uint
const (
ModeModule SummaryMode = 1 << iota
ModeBuild
ModeCGO
ModeVCS
ModeMultiline
)
func (b Binfo) Summarize(name string, version string, mode SummaryMode) string {
wants := func(test SummaryMode) bool {
return mode&test == test
}
var (
brk string
sep string
)
if wants(ModeMultiline) {
brk = "\n"
sep = "\n"
} else {
brk = " "
sep = ", "
}
lines := make([]string, 0, 4)
if wants(ModeModule) {
lines = append(
lines,
fmt.Sprintf("module %s (%s) (sum %s)", b.Module.Path, b.Module.Version, b.Module.Sum),
)
}
if wants(ModeBuild) {
lines = append(
lines,
fmt.Sprintf("built with %s (%s) (mode %s)", b.Build.Compiler, b.Build.GoVersion, b.Build.Mode),
)
}
if wants(ModeCGO) {
if b.CGO.Enabled {
lines = append(
lines,
fmt.Sprintf("with cgo (c %q) (cpp %q) (cxx %q) (ld %q)", b.CGO.Flags.C, b.CGO.Flags.CPP, b.CGO.Flags.CXX, b.CGO.Flags.LD),
)
} else {
lines = append(
lines,
"without cgo",
)
}
}
if wants(ModeVCS) {
var m string
if b.VCS.Modified {
m = " (modified)"
} else {
m = ""
}
lines = append(
lines,
fmt.Sprintf("via %s (rev %s) (at %s)%s", b.VCS.Name, b.VCS.Revision, b.VCS.Time.Format("2006-01-02 15:04:05"), m),
)
}
j := strings.Join(lines, sep)
if name == "" {
return j
} else {
return fmt.Sprintf("%s %s:%s%s", name, version, brk, j)
}
}