diff --git a/src/cmd/go/clean.go b/src/cmd/go/clean.go index 8345c9af15e9c..bfae967a76b66 100644 --- a/src/cmd/go/clean.go +++ b/src/cmd/go/clean.go @@ -137,22 +137,38 @@ func clean(p *Package) { } _, elem := filepath.Split(p.Dir) - allRemove := []string{ - elem, - elem + ".exe", - elem + ".test", - elem + ".test.exe", + var allRemove []string + + // Remove dir-named executable only if this is package main. + if p.Name == "main" { + allRemove = append(allRemove, + elem, + elem+".exe", + ) } + + // Remove package test executables. + allRemove = append(allRemove, + elem+".test", + elem+".test.exe", + ) + + // Remove a potental executable for each .go file in the directory that + // is not part of the directory's package. for _, dir := range dirs { name := dir.Name() if packageFile[name] { continue } if !dir.IsDir() && strings.HasSuffix(name, ".go") { + // TODO(adg,rsc): check that this .go file is actually + // in "package main", and therefore capable of building + // to an executable file. base := name[:len(name)-len(".go")] allRemove = append(allRemove, base, base+".exe") } } + if cleanN || cleanX { b.showcmd(p.Dir, "rm -f %s", strings.Join(allRemove, " ")) }