diff options
Diffstat (limited to 'src/cmd/goinstall/make.go')
-rw-r--r-- | src/cmd/goinstall/make.go | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/cmd/goinstall/make.go b/src/cmd/goinstall/make.go index 7f41a913f..1e40d6ea3 100644 --- a/src/cmd/goinstall/make.go +++ b/src/cmd/goinstall/make.go @@ -8,17 +8,17 @@ package main import ( "bytes" + "errors" "go/build" - "os" "path" // use for import paths "strings" - "template" + "text/template" ) // domake builds the package in dir. // domake generates a standard Makefile and passes it // to make on standard input. -func domake(dir, pkg string, tree *build.Tree, isCmd bool) (err os.Error) { +func domake(dir, pkg string, tree *build.Tree, isCmd bool) (err error) { makefile, err := makeMakefile(dir, pkg, tree, isCmd) if err != nil { return err @@ -29,16 +29,21 @@ func domake(dir, pkg string, tree *build.Tree, isCmd bool) (err os.Error) { } else if *clean { cmd = append(cmd, "clean") } - cmd = append(cmd, "install") + if *doInstall { + cmd = append(cmd, "install") + } + if len(cmd) <= 3 { // nothing to do + return nil + } return run(dir, makefile, cmd...) } // makeMakefile computes the standard Makefile for the directory dir // installing as package pkg. It includes all *.go files in the directory // except those in package main and those ending in _test.go. -func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Error) { +func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, error) { if !safeName(pkg) { - return nil, os.NewError("unsafe name: " + pkg) + return nil, errors.New("unsafe name: " + pkg) } targ := pkg targDir := tree.PkgDir() @@ -56,7 +61,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err isCgo := make(map[string]bool, len(cgoFiles)) for _, file := range cgoFiles { if !safeName(file) { - return nil, os.NewError("bad name: " + file) + return nil, errors.New("bad name: " + file) } isCgo[file] = true } @@ -64,7 +69,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err goFiles := make([]string, 0, len(dirInfo.GoFiles)) for _, file := range dirInfo.GoFiles { if !safeName(file) { - return nil, os.NewError("unsafe name: " + file) + return nil, errors.New("unsafe name: " + file) } if !isCgo[file] { goFiles = append(goFiles, file) @@ -75,7 +80,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err cgoOFiles := make([]string, 0, len(dirInfo.CFiles)) for _, file := range dirInfo.CFiles { if !safeName(file) { - return nil, os.NewError("unsafe name: " + file) + return nil, errors.New("unsafe name: " + file) } // When cgo is in use, C files are compiled with gcc, // otherwise they're compiled with gc. @@ -88,7 +93,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err for _, file := range dirInfo.SFiles { if !safeName(file) { - return nil, os.NewError("unsafe name: " + file) + return nil, errors.New("unsafe name: " + file) } oFiles = append(oFiles, file[:len(file)-2]+".$O") } @@ -109,7 +114,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err return buf.Bytes(), nil } -var safeBytes = []byte("+-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz") +var safeBytes = []byte("+-~./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz") func safeName(s string) bool { if s == "" { @@ -118,6 +123,9 @@ func safeName(s string) bool { if strings.Contains(s, "..") { return false } + if s[0] == '~' { + return false + } for i := 0; i < len(s); i++ { if c := s[i]; c < 0x80 && bytes.IndexByte(safeBytes, c) < 0 { return false |