diff --git a/doc.go b/doc.go new file mode 100644 index 00000000..13ed311a --- /dev/null +++ b/doc.go @@ -0,0 +1,12 @@ +// Copyright ©2019 The Gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Gonum is a set of packages designed to make writing numerical and +// scientific algorithms productive, performant, and scalable. +// +// Gonum contains libraries for matrices and linear algebra; statistics, +// probability distributions, and sampling; tools for function +// differentiation, integration, and optimization; network creation and +// analysis; and more. +package gonum // import "gonum.org/v1/gonum" diff --git a/version.go b/version.go new file mode 100644 index 00000000..cf07f047 --- /dev/null +++ b/version.go @@ -0,0 +1,48 @@ +// Copyright ©2019 The Gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.12 + +package gonum + +import ( + "fmt" + "runtime/debug" +) + +const root = "gonum.org/v1/gonum" + +// Version returns the version of Gonum and its checksum. The returned +// values are only valid in binaries built with module support. +// +// If a replace directive exists in the Gonum go.mod, the replace will +// be reported in the version in the following format: +// "version=>[replace-path] [replace-version]" +// and the replace sum will be returned in place of the original sum. +// +// The exact version format returned by Version may change in future. +func Version() (version, sum string) { + b, ok := debug.ReadBuildInfo() + if !ok { + return "", "" + } + for _, m := range b.Deps { + if m.Path == root { + if m.Replace != nil { + switch { + case m.Replace.Version != "" && m.Replace.Path != "": + return fmt.Sprintf("%s=>%s %s", m.Version, m.Replace.Path, m.Replace.Version), m.Replace.Sum + case m.Replace.Version != "": + return fmt.Sprintf("%s=>%s", m.Version, m.Replace.Version), m.Replace.Sum + case m.Replace.Path != "": + return fmt.Sprintf("%s=>%s", m.Version, m.Replace.Path), m.Replace.Sum + default: + return m.Version + "*", m.Sum + "*" + } + } + return m.Version, m.Sum + } + } + return "", "" +}