Commit 79dc3441 authored by Rob Pike's avatar Rob Pike

cmd/go: first piece of tool rearrangement

1) create go-tool dir in make.bash
2) clean up stale binaries in make.bash
3) add 'tool' command to go
4) convert goyacc->yacc as a first test tool
Since goyacc stands alone, it's a safe trial.

R=rsc
CC=golang-dev
https://golang.org/cl/5576061
parent 3d400db5
# Copyright 2009 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.
ifeq ($(GOOS),windows)
TARG:=$(TARG).exe
endif
# Tools always go into $GOROOT/bin/go-tool
TOOLDIR=$(QUOTED_GOROOT)/bin/go-tool
all: $(TARG)
include $(QUOTED_GOROOT)/src/Make.common
PREREQ+=$(patsubst %,%.make,$(DEPS))
$(TARG): _go_.$O
$(LD) $(LDIMPORTS) -o $@ _go_.$O
_go_.$O: $(GOFILES) $(PREREQ)
$(GC) $(GCFLAGS) $(GCIMPORTS) -o $@ $(GOFILES)
install: $(TOOLDIR)/$(TARG)
$(TOOLDIR)/$(TARG): $(TARG)
mkdir -p $(TOOLDIR) && cp -f $(TARG) $(TOOLDIR)
CLEANFILES+=$(TARG) _test _testmain.go test.out build.out
nuke: clean
rm -f $(TOOLDIR)/$(TARG)
# for gotest
testpackage: _test/main.a
testpackage-clean:
rm -f _test/main.a _gotest_.$O
_test/main.a: _gotest_.$O
@mkdir -p _test
rm -f $@
gopack grc $@ _gotest_.$O
_gotest_.$O: $(GOFILES) $(GOTESTFILES)
$(GC) $(GCFLAGS) $(GCIMPORTS) -o $@ $(GOFILES) $(GOTESTFILES)
importpath:
echo main
...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/darwin_386/text/template.a ...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/darwin_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/darwin_amd64/text/template.a ...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/darwin_amd64/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6
6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/freebsd_386/text/template.a ...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/freebsd_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/freebsd_amd64/text/template.a ...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/freebsd_amd64/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6
6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/linux_386/text/template.a ...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/linux_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/linux_amd64/text/template.a ...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/linux_amd64/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6
6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -494,7 +494,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/linux_arm/text/template.a ...@@ -494,7 +494,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/linux_arm/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
5g -o "$WORK"/cmd/go/_obj/_go_.5 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 5g -o "$WORK"/cmd/go/_obj/_go_.5 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.5 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.5
5l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 5l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/netbsd_386/text/template.a ...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/netbsd_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/netbsd_amd64/text/template.a ...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/netbsd_amd64/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6
6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/openbsd_386/text/template.a ...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/openbsd_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/openbsd_amd64/text/template.a ...@@ -490,7 +490,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/openbsd_amd64/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6
6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 6l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/plan9_386/text/template.a ...@@ -491,7 +491,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/plan9_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a 8l -o "$WORK"/cmd/go/_obj/a.out -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -493,7 +493,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/windows_386/text/template.a ...@@ -493,7 +493,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/windows_386/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 8g -o "$WORK"/cmd/go/_obj/_go_.8 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.8
8l -o "$WORK"/cmd/go/_obj/a.out.exe -L "$WORK" "$WORK"/cmd/go.a 8l -o "$WORK"/cmd/go/_obj/a.out.exe -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -492,7 +492,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/windows_amd64/text/template.a ...@@ -492,7 +492,7 @@ cp "$WORK"/text/template.a "$GOROOT"/pkg/windows_amd64/text/template.a
mkdir -p "$WORK"/cmd/go/_obj/ mkdir -p "$WORK"/cmd/go/_obj/
cd "$GOROOT"/src/cmd/go cd "$GOROOT"/src/cmd/go
6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./vcs.go ./version.go ./vet.go 6g -o "$WORK"/cmd/go/_obj/_go_.6 -p cmd/go -I "$WORK" ./bootstrap.go ./build.go ./fix.go ./fmt.go ./get.go ./help.go ./list.go ./main.go ./pkg.go ./run.go ./test.go ./testflag.go ./tool.go ./vcs.go ./version.go ./vet.go
gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6 gopack grc "$WORK"/cmd/go.a "$WORK"/cmd/go/_obj/_go_.6
6l -o "$WORK"/cmd/go/_obj/a.out.exe -L "$WORK" "$WORK"/cmd/go.a 6l -o "$WORK"/cmd/go/_obj/a.out.exe -L "$WORK" "$WORK"/cmd/go.a
mkdir -p "$GOBIN"/ mkdir -p "$GOBIN"/
......
...@@ -42,7 +42,7 @@ CLEANDIRS=\ ...@@ -42,7 +42,7 @@ CLEANDIRS=\
gofmt\ gofmt\
goinstall\ goinstall\
gotest\ gotest\
goyacc\ yacc\
install: $(patsubst %,%.install,$(DIRS)) install: $(patsubst %,%.install,$(DIRS))
clean: $(patsubst %,%.clean,$(CLEANDIRS)) clean: $(patsubst %,%.clean,$(CLEANDIRS))
......
...@@ -18,6 +18,7 @@ GOFILES=\ ...@@ -18,6 +18,7 @@ GOFILES=\
run.go\ run.go\
test.go\ test.go\
testflag.go\ testflag.go\
tool.go\
version.go\ version.go\
vet.go\ vet.go\
vcs.go\ vcs.go\
......
...@@ -75,6 +75,7 @@ var commands = []*Command{ ...@@ -75,6 +75,7 @@ var commands = []*Command{
cmdList, cmdList,
cmdRun, cmdRun,
cmdTest, cmdTest,
cmdTool,
cmdVersion, cmdVersion,
cmdVet, cmdVet,
......
// Copyright 2011 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.
package main
import (
"fmt"
"go/build"
"os"
"os/exec"
"sort"
"strings"
)
var cmdTool = &Command{
Run: runTool,
UsageLine: "tool command [args...]",
Short: "run specified go tool",
Long: `
Tool runs the go tool command identified by the arguments.
With no arguments it prints the list of known tools.
For more about each tool command, see 'go tool command -h'.
`,
}
var (
toolGoos = build.DefaultContext.GOOS
toolIsWindows = toolGoos == "windows"
toolBinToolDir = build.Path[0].BinDir() + "/go-tool"
)
const toolWindowsExtension = ".exe"
func runTool(cmd *Command, args []string) {
if len(args) == 0 {
listTools()
return
}
tool := args[0]
// The tool name must be lower-case letters and numbers.
for _, c := range tool {
switch {
case 'a' <= c && c <= 'z', '0' <= c && c <= '9':
default:
fmt.Fprintf(os.Stderr, "go tool: bad tool name %q\n", tool)
exitStatus = 2
return
}
}
toolPath := toolBinToolDir + "/" + tool
if toolIsWindows {
toolPath += toolWindowsExtension
}
// Give a nice message if there is no tool with that name.
if _, err := os.Stat(toolPath); err != nil {
fmt.Fprintf(os.Stderr, "go tool: no such tool %q\n", tool)
exitStatus = 3
return
}
toolCmd := &exec.Cmd{
Path: toolPath,
Args: args,
Stdout: os.Stdout,
Stderr: os.Stderr,
}
err := toolCmd.Run()
if err != nil {
fmt.Fprintf(os.Stderr, "go tool %s failed: %s\n", tool, err)
exitStatus = 1
return
}
}
// listTools prints a list of the available tools in the go-tools directory.
func listTools() {
toolDir, err := os.Open(toolBinToolDir)
if err != nil {
fmt.Fprintf(os.Stderr, "go tool: no tool directory: %s\n", err)
exitStatus = 2
return
}
names, err := toolDir.Readdirnames(-1)
if err != nil {
fmt.Fprintf(os.Stderr, "go tool: can't read directory: %s\n", err)
exitStatus = 2
return
}
sort.StringSlice(names).Sort()
for _, name := range names {
// Unify presentation by going to lower case.
name = strings.ToLower(name)
// If it's windows, don't show the .exe suffix.
if toolIsWindows && strings.HasSuffix(name, toolWindowsExtension) {
name = name[:len(name)-len(toolWindowsExtension)]
}
fmt.Println(name)
}
}
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
include ../../Make.inc include ../../Make.inc
TARG=goyacc TARG=yacc
GOFILES=\ GOFILES=\
goyacc.go\ yacc.go\
include ../../Make.cmd include ../../Make.tool
units: goyacc units.y units: yacc units.y
./goyacc -p units_ units.y ./yacc -p units_ units.y
$(GC) $(GCFLAGS) $(GCIMPORTS) y.go $(GC) $(GCFLAGS) $(GCIMPORTS) y.go
$(LD) -o units y.$O $(LD) -o units y.$O
......
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
/* /*
Goyacc is a version of yacc for Go. Yacc is a version of yacc for Go. It is run with the command
go tool yacc args...
It is written in Go and generates parsers written in Go. It is written in Go and generates parsers written in Go.
It is largely transliterated from the Inferno version written in Limbo It is largely transliterated from the Inferno version written in Limbo
...@@ -13,7 +14,8 @@ written in C and documented at ...@@ -13,7 +14,8 @@ written in C and documented at
http://plan9.bell-labs.com/magic/man2html/1/yacc http://plan9.bell-labs.com/magic/man2html/1/yacc
Yacc adepts will have no trouble adapting to this form of the tool. Adepts of the original yacc will have no trouble adapting to this
form of the tool.
The file units.y in this directory is a yacc grammar for a version of The file units.y in this directory is a yacc grammar for a version of
the Unix tool units, also written in Go and largely transliterated the Unix tool units, also written in Go and largely transliterated
...@@ -37,9 +39,9 @@ which holds the yyLexer passed to Parse. ...@@ -37,9 +39,9 @@ which holds the yyLexer passed to Parse.
Multiple grammars compiled into a single program should be placed in Multiple grammars compiled into a single program should be placed in
distinct packages. If that is impossible, the "-p prefix" flag to distinct packages. If that is impossible, the "-p prefix" flag to
goyacc sets the prefix, by default yy, that begins the names of yacc sets the prefix, by default yy, that begins the names of
symbols, including types, the parser, and the lexer, generated and symbols, including types, the parser, and the lexer, generated and
referenced by goyacc's generated code. Setting it to distinct values referenced by yacc's generated code. Setting it to distinct values
allows multiple grammars to be placed in a single package. allows multiple grammars to be placed in a single package.
*/ */
......
...@@ -7,17 +7,17 @@ ...@@ -7,17 +7,17 @@
// See http://plan9.bell-labs.com/plan9/license.html // See http://plan9.bell-labs.com/plan9/license.html
// Generate parser with prefix "units_": // Generate parser with prefix "units_":
// goyacc -p "units_" // go tool yacc -p "units_"
%{ %{
// units.y // units.y
// example of a goyacc program // example of a Go yacc program
// usage is // usage is
// goyacc -p "units_" units.y (produces y.go) // go tool yacc -p "units_" units.y (produces y.go)
// 6g y.go // 6g y.go
// 6l y.6 // 6l y.6
// ./6.out $GOROOT/src/cmd/goyacc/units // ./6.out $GOROOT/src/cmd/yacc/units
// you have: c // you have: c
// you want: furlongs/fortnight // you want: furlongs/fortnight
// * 1.8026178e+12 // * 1.8026178e+12
...@@ -288,7 +288,7 @@ func main() { ...@@ -288,7 +288,7 @@ func main() {
flag.Parse() flag.Parse()
file = os.Getenv("GOROOT") + "/src/cmd/goyacc/units.txt" file = os.Getenv("GOROOT") + "/src/cmd/yacc/units.txt"
if flag.NArg() > 0 { if flag.NArg() > 0 {
file = flag.Arg(0) file = flag.Arg(0)
} }
......
...@@ -2933,7 +2933,7 @@ func chcopy(q string) string { ...@@ -2933,7 +2933,7 @@ func chcopy(q string) string {
} }
func usage() { func usage() {
fmt.Fprintf(stderr, "usage: goyacc [-o output] [-v parsetable] input\n") fmt.Fprintf(stderr, "usage: yacc [-o output] [-v parsetable] input\n")
exit(1) exit(1)
} }
......
...@@ -22,11 +22,21 @@ if ld --version 2>&1 | grep 'gold.* 2\.20' >/dev/null; then ...@@ -22,11 +22,21 @@ if ld --version 2>&1 | grep 'gold.* 2\.20' >/dev/null; then
fi fi
# Create target directories # Create target directories
if [ "$GOBIN" = "$GOROOT/bin" ]; then mkdir -p "$GOROOT/bin/go-tool"
mkdir -p "$GOROOT/bin"
fi
mkdir -p "$GOROOT/pkg" mkdir -p "$GOROOT/pkg"
# Remove old, pre-go-tool binaries.
rm -f "$GOROOT"/bin/[568][acgl]
rm -f "$GOROOT"/bin/{6cov,6nm,cgo,ebnflint,goapi,gofix,goinstall,gomake,gopack,gopprof,gotest,gotype,govet,goyacc,hgpatch,quietgcc}
# If GOBIN is set and it has a Go compiler, it must also be cleaned.
if [ -n "GOBIN" ]; then
if [ -x "$GOBIN"/5g -o -x "$GOBIN"/6g -o -x "$GOBIN"/8g ]; then
rm -f "$GOBIN"/[568][acgl]
rm -f "$GOBIN"/{6cov,6nm,cgo,ebnflint,goapi,gofix,goinstall,gomake,gopack,gopprof,gotest,gotype,govet,goyacc,hgpatch,quietgcc}
fi
fi
GOROOT_FINAL=${GOROOT_FINAL:-$GOROOT} GOROOT_FINAL=${GOROOT_FINAL:-$GOROOT}
MAKEFLAGS=${MAKEFLAGS:-"-j4"} MAKEFLAGS=${MAKEFLAGS:-"-j4"}
......
...@@ -161,7 +161,7 @@ DIRS=\ ...@@ -161,7 +161,7 @@ DIRS=\
../cmd/goinstall\ ../cmd/goinstall\
../cmd/gotest\ ../cmd/gotest\
../cmd/govet\ ../cmd/govet\
../cmd/goyacc\ ../cmd/yacc\
ifeq ($(GOOS),linux) ifeq ($(GOOS),linux)
DIRS+=\ DIRS+=\
...@@ -194,7 +194,7 @@ NOTEST+=\ ...@@ -194,7 +194,7 @@ NOTEST+=\
../cmd/cgo\ ../cmd/cgo\
../cmd/godoc\ ../cmd/godoc\
../cmd/gotest\ ../cmd/gotest\
../cmd/goyacc\ ../cmd/yacc\
NOBENCH+=\ NOBENCH+=\
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment