cmd/go: check for another GCC error message
[official-gcc.git] / libgo / go / cmd / buildid / buildid.go
blob8d810ffdd9900f1ac5a91627ce34a2577bf6fa39
1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package main
7 import (
8 "flag"
9 "fmt"
10 "log"
11 "os"
12 "strings"
14 "cmd/internal/buildid"
17 func usage() {
18 fmt.Fprintf(os.Stderr, "usage: go tool buildid [-w] file\n")
19 flag.PrintDefaults()
20 os.Exit(2)
23 var wflag = flag.Bool("w", false, "write build ID")
25 func main() {
26 log.SetPrefix("buildid: ")
27 log.SetFlags(0)
28 flag.Usage = usage
29 flag.Parse()
30 if flag.NArg() != 1 {
31 usage()
34 file := flag.Arg(0)
35 id, err := buildid.ReadFile(file)
36 if err != nil {
37 log.Fatal(err)
39 if !*wflag {
40 fmt.Printf("%s\n", id)
41 return
44 f, err := os.Open(file)
45 if err != nil {
46 log.Fatal(err)
48 matches, hash, err := buildid.FindAndHash(f, id, 0)
49 if err != nil {
50 log.Fatal(err)
52 f.Close()
54 tail := id
55 if i := strings.LastIndex(id, "."); i >= 0 {
56 tail = tail[i+1:]
58 if len(tail) != len(hash)*2 {
59 log.Fatalf("%s: cannot find %d-byte hash in id %s", file, len(hash), id)
61 newID := id[:len(id)-len(tail)] + fmt.Sprintf("%x", hash)
63 f, err = os.OpenFile(file, os.O_WRONLY, 0)
64 if err != nil {
65 log.Fatal(err)
67 if err := buildid.Rewrite(f, matches, newID); err != nil {
68 log.Fatal(err)
70 if err := f.Close(); err != nil {
71 log.Fatal(err)