}
_, 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, " "))
}