*l/*c: add -V flag to display version number

R=rsc
CC=golang-dev
https://golang.org/cl/204044
diff --git a/src/cmd/5l/doc.go b/src/cmd/5l/doc.go
index 1324261..b724e701 100644
--- a/src/cmd/5l/doc.go
+++ b/src/cmd/5l/doc.go
@@ -23,6 +23,8 @@
 -L dir1,dir2,..
 	Search for libraries (package files) in the comma-separated list of directories.
 	The default is the single location $GOROOT/pkg/$GOOS_arm.
+-V
+	Print the linker version.
 
 */
 package documentation
diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c
index 5dbd765..374e3df 100644
--- a/src/cmd/5l/obj.c
+++ b/src/cmd/5l/obj.c
@@ -141,6 +141,9 @@
 		if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
 			readundefs(ARGF(), SIMPORT);
 		break;
+	case 'V':
+		print("%cl version %s\n", thechar, getgoversion());
+		errorexit();
 	} ARGEND
 
 	USED(argc);
diff --git a/src/cmd/6l/doc.go b/src/cmd/6l/doc.go
index 6a0a735..fb88df5 100644
--- a/src/cmd/6l/doc.go
+++ b/src/cmd/6l/doc.go
@@ -35,6 +35,8 @@
 -L dir1,dir2,..
 	Search for libraries (package files) in the comma-separated list of directories.
 	The default is the single location $GOROOT/pkg/$GOOS_amd64.
+-V
+	Print the linker version.
 
 
 */
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c
index 537ef9e..d951696 100644
--- a/src/cmd/6l/obj.c
+++ b/src/cmd/6l/obj.c
@@ -136,6 +136,9 @@
 		if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
 			readundefs(ARGF(), SIMPORT);
 		break;
+	case 'V':
+		print("%cl version %s\n", thechar, getgoversion());
+		errorexit();
 	} ARGEND
 
 	if(argc != 1)
diff --git a/src/cmd/8l/doc.go b/src/cmd/8l/doc.go
index 0de4dfc..3a830cb 100644
--- a/src/cmd/8l/doc.go
+++ b/src/cmd/8l/doc.go
@@ -32,6 +32,8 @@
 -L dir1,dir2,..
 	Search for libraries (package files) in the comma-separated list of directories.
 	The default is the single location $GOROOT/pkg/$GOOS_386.
+-V
+	Print the linker version.
 
 
 */
diff --git a/src/cmd/8l/obj.c b/src/cmd/8l/obj.c
index 6ab4862..c3044c2 100644
--- a/src/cmd/8l/obj.c
+++ b/src/cmd/8l/obj.c
@@ -142,6 +142,9 @@
 		if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
 			readundefs(ARGF(), SIMPORT);
 		break;
+	case 'V':
+		print("%cl version %s\n", thechar, getgoversion());
+		errorexit();
 	} ARGEND
 
 	if(argc != 1)
diff --git a/src/cmd/gc/doc.go b/src/cmd/gc/doc.go
index 5250cfc..108a091 100644
--- a/src/cmd/gc/doc.go
+++ b/src/cmd/gc/doc.go
@@ -38,6 +38,8 @@
 		disable optimization
 	-S
 		write assembly language text to standard output
+	-V
+		print the compiler version
 
 There are also a number of debugging flags; run the command with no arguments
 to get a usage message.
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index 175d7a3..9c1cbfc 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -65,6 +65,9 @@
 	case 'I':
 		addidir(ARGF());
 		break;
+	case 'V':
+		print("%cg version %s\n", thechar, getgoversion());
+		errorexit();
 	} ARGEND
 
 	if(argc < 1)
@@ -168,6 +171,7 @@
 	print("  -h panic on an error\n");
 	print("  -o file specify output file\n");
 	print("  -S print the assembly language\n");
+	print("  -V print the compiler version\n");
 	print("  -w print the parse tree after typing\n");
 	print("  -x print lex tokens\n");
 	exit(0);
diff --git a/src/lib9/Makefile b/src/lib9/Makefile
index 592bc3b..3061cfd 100644
--- a/src/lib9/Makefile
+++ b/src/lib9/Makefile
@@ -117,7 +117,7 @@
 	$(CC) -c $(CFLAGS) $<
 
 goos.$O: goos.c
-	$(CC) -c $(CFLAGS) -DGOOS='"$(GOOS)"' -DGOARCH='"$(GOARCH)"' -DGOROOT='"$(GOROOT)"' $<
+	$(CC) -c $(CFLAGS) -DGOOS='"$(GOOS)"' -DGOARCH='"$(GOARCH)"' -DGOROOT='"$(GOROOT)"' -DGOVERSION='"'"$$(../version.bash)"'"' $<
 
 clean:
 	rm -f *.$O *.6 6.out $(LIB)
diff --git a/src/lib9/goos.c b/src/lib9/goos.c
index 668dc19..f3ee111 100644
--- a/src/lib9/goos.c
+++ b/src/lib9/goos.c
@@ -33,3 +33,9 @@
 {
 	return defgetenv("GOROOT", GOROOT);
 }
+
+char*
+getgoversion(void)
+{
+	return GOVERSION;
+}
diff --git a/src/version.bash b/src/version.bash
new file mode 100755
index 0000000..c2a70ac
--- /dev/null
+++ b/src/version.bash
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# Copyright 2010 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+# Check that we can use 'hg'
+if ! hg version > /dev/null 2>&1; then
+	echo 'hg not installed' 1>&2
+	exit 2
+fi
+
+# Get numerical revision
+VERSION="`hg identify -n`"
+
+# Append tag if not 'tip'
+TAG=$(hg identify -t | sed 's!/release!!')
+if [[ "$TAG" != "tip" ]]; then
+	VERSION="$VERSION $TAG"
+fi
+
+echo $VERSION
+