summaryrefslogtreecommitdiff
path: root/src/cmd/goinstall/make.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/goinstall/make.go')
-rw-r--r--src/cmd/goinstall/make.go30
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