]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: add GOROOT and Version
authorRuss Cox <rsc@golang.org>
Wed, 17 Mar 2010 06:10:33 +0000 (23:10 -0700)
committerRuss Cox <rsc@golang.org>
Wed, 17 Mar 2010 06:10:33 +0000 (23:10 -0700)
R=r
CC=golang-dev
https://golang.org/cl/608041

.hgignore
src/pkg/runtime/Makefile
src/pkg/runtime/extern.go
src/pkg/runtime/mkversion.c [new file with mode: 0644]
src/pkg/runtime/runtime.c

index 323c81e81deb5be95ed68ca40dd57df3043cf300..0ac82faaa8e69d58994d52c5816161aedcf8ef26 100644 (file)
--- a/.hgignore
+++ b/.hgignore
@@ -26,9 +26,13 @@ src/cmd/gc/yerr.h
 src/pkg/Make.deps
 src/pkg/exp/ogle/ogle
 src/pkg/os/signal/unix.go
-src/pkg/runtime/cgo2c
 src/pkg/runtime/*/asm.h
+src/pkg/runtime/cgo2c
+src/pkg/runtime/mkversion
 src/pkg/runtime/runtime.acid.*
+src/pkg/runtime/version.go
+src/pkg/github.com/
+src/pkg/*.googlecode.com/
 test/pass.out
 test/run.out
 test/times.out
index bc8a2d8bfa2ad4aa70d3d2e082268769521bd22b..f44de25d41aaae26486ded3c25e87554a0d02a14 100644 (file)
@@ -23,6 +23,7 @@ CFLAGS=-I$(GOOS) -I$(GOOS)/$(GOARCH) -wF $(CFLAGS_$(SIZE)) $(CFLAGS_$(GOARCH)) $
 GOFILES=\
        extern.go\
        type.go\
+       version.go\
 
 GOFILES_pchw=\
        pchw/io.go\
@@ -111,7 +112,7 @@ $(pkgdir)/%.h: %.h
 clean: clean-local
 
 clean-local:
-       rm -f cgo2c */asm.h runtime.acid.*
+       rm -f cgo2c mkversion version.go */asm.h runtime.acid.*
 
 $(GOARCH)/asm.h: mkasmh.sh runtime.acid.$(GOARCH)
        ./mkasmh.sh >$@.x
@@ -120,6 +121,12 @@ $(GOARCH)/asm.h: mkasmh.sh runtime.acid.$(GOARCH)
 cgo2c: cgo2c.c
        $(QUOTED_GOBIN)/quietgcc -o $@ $<
 
+mkversion: mkversion.c
+       $(QUOTED_GOBIN)/quietgcc -o $@ -I "$(GOROOT)/include" $< "$(GOROOT)/lib/lib9.a"
+
+version.go: mkversion
+       mkversion >version.go
+
 %.c:   %.cgo cgo2c
        ./cgo2c $< > $@.tmp
        mv -f $@.tmp $@
index f34bb2256cd6a124ba319264efcaa3372a364cdc..b4d903c30c92b4b5ddf045c1bed26dbd5f950ee7 100644 (file)
@@ -150,3 +150,23 @@ func GC()
 // TODO(rsc): allow f to have (ignored) return values
 //
 func SetFinalizer(x, f interface{})
+
+func getgoroot() string
+
+// GOROOT returns the root of the Go tree.
+// It uses the GOROOT environment variable, if set,
+// or else the root used during the Go build.
+func GOROOT() string {
+       s := getgoroot()
+       if s != "" {
+               return s
+       }
+       return defaultGoroot
+}
+
+// Version returns the Go tree's version string.
+// It is either a sequence number or, when possible,
+// a release tag like "release.2010-03-04".
+// A trailing + indicates that the tree had local modifications
+// at the time of the build.
+func Version() string { return defaultVersion }
diff --git a/src/pkg/runtime/mkversion.c b/src/pkg/runtime/mkversion.c
new file mode 100644 (file)
index 0000000..bf33c0f
--- /dev/null
@@ -0,0 +1,15 @@
+#include <u.h>
+#include <libc.h>
+
+char *template =
+       "// generated by mkversion.c; do not edit.\n"
+       "package runtime\n"
+       "const defaultGoroot = \"%s\"\n"
+       "const defaultVersion = \"%s\"\n";
+
+void
+main(void)
+{
+       print(template, getgoroot(), getgoversion());
+       exits(0);
+}
index 3a94c8bce26f3214cf37a6cc927ec00c383e5197..ed1bdcab8a55a9fc11f99c1b485c6f2a124c5cb8 100644 (file)
@@ -206,6 +206,15 @@ getenv(int8 *s)
        return nil;
 }
 
+void
+·getgoroot(String out)
+{
+       byte *p;
+       
+       p = getenv("GOROOT");
+       out = gostring(p);
+       FLUSH(&out);
+}
 
 int32
 atoi(byte *p)