@@ -5,29 +5,42 @@ import (
55 "fmt"
66 "io"
77 "os"
8+ "runtime/debug"
89 "strconv"
910 "strings"
1011
1112 "github.com/glojurelang/glojure/pkg/lang"
1213)
1314
14- // The current version of Glojure
15- const VERSION = "0.3.0"
15+ var (
16+ // The current version of Glojure
17+ Version = func() string {
18+ info, ok := debug.ReadBuildInfo()
19+ if !ok {
20+ return "0.0.0"
21+ }
22+ if info.Main.Version == "" || info.Main.Version == "(devel)" {
23+ return "0.0.0"
24+ }
25+ // Trim any leading "v" from the version string
26+ return strings.TrimPrefix(info.Main.Version, "v")
27+ }()
28+ )
1629
17- // ParseVersion parses the VERSION string and returns a map with major, minor,
30+ // parseVersion parses the Version string and returns a map with major, minor,
1831// incremental, and qualifier
19- func ParseVersion (version string) lang.IPersistentMap {
32+ func parseVersion (version string) lang.IPersistentMap {
2033 parts := strings.Split(version, ".")
2134
2235 major, _ := strconv.Atoi(parts[0])
2336 minor, _ := strconv.Atoi(parts[1])
2437
2538 incremental := 0
26- qualifier := interface{}(nil)
39+ var qualifier string
2740
2841 if len(parts) > 2 {
2942 // Check if the third part contains a qualifier (e.g., "0-alpha")
30- incrementalPart := parts[2]
43+ incrementalPart := strings.Join( parts[2:], ".")
3144 if strings.Contains(incrementalPart, "-") {
3245 qualifierParts := strings.SplitN(incrementalPart, "-", 2)
3346 incremental, _ = strconv.Atoi(qualifierParts[0])
@@ -129,7 +142,7 @@ func NewEnvironment(opts ...EvalOption) lang.Environment {
129142 core := lang.FindNamespace(lang.NewSymbol("clojure.core"))
130143 versionVar := core.FindInternedVar(lang.NewSymbol("*glojure-version*"))
131144 if versionVar != nil {
132- versionVar.BindRoot(ParseVersion(VERSION ))
145+ versionVar.BindRoot(parseVersion(Version ))
133146 }
134147
135148 lang.InternVar(core, lang.NewSymbol("load-file"), func(filename string) any {
0 commit comments