]> Cypherpunks repositories - gostls13.git/commitdiff
go/build: add Package.IgnoredOtherFiles
authorRuss Cox <rsc@golang.org>
Mon, 29 Jun 2020 14:31:03 +0000 (10:31 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 12 Oct 2020 18:31:01 +0000 (18:31 +0000)
Just like it is useful to report ignored .go files,
it is also useful to report ignored non-.go files.

Also, remove _* and .* files from IgnoredGoFiles.
The fact that they were there at all was a mistake.
This list is for files being ignored due to build constraints.

Change-Id: Ie08252dde9f56bda08647e7ebeab7906e9271c54
Reviewed-on: https://go-review.googlesource.com/c/go/+/240551
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/go/build/build.go

index 5c3d8761305974fe04290fdb9253843c0bd6424d..13b5e202d1a762acd4ccb357424efb4f61b367ba 100644 (file)
@@ -409,19 +409,20 @@ type Package struct {
        BinaryOnly    bool     // cannot be rebuilt from source (has //go:binary-only-package comment)
 
        // Source files
-       GoFiles        []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
-       CgoFiles       []string // .go source files that import "C"
-       IgnoredGoFiles []string // .go source files ignored for this build
-       InvalidGoFiles []string // .go source files with detected problems (parse error, wrong package name, and so on)
-       CFiles         []string // .c source files
-       CXXFiles       []string // .cc, .cpp and .cxx source files
-       MFiles         []string // .m (Objective-C) source files
-       HFiles         []string // .h, .hh, .hpp and .hxx source files
-       FFiles         []string // .f, .F, .for and .f90 Fortran source files
-       SFiles         []string // .s source files
-       SwigFiles      []string // .swig files
-       SwigCXXFiles   []string // .swigcxx files
-       SysoFiles      []string // .syso system object files to add to archive
+       GoFiles           []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
+       CgoFiles          []string // .go source files that import "C"
+       IgnoredGoFiles    []string // .go source files ignored for this build (including ignored _test.go files)
+       InvalidGoFiles    []string // .go source files with detected problems (parse error, wrong package name, and so on)
+       IgnoredOtherFiles []string // non-.go source files ignored for this build
+       CFiles            []string // .c source files
+       CXXFiles          []string // .cc, .cpp and .cxx source files
+       MFiles            []string // .m (Objective-C) source files
+       HFiles            []string // .h, .hh, .hpp and .hxx source files
+       FFiles            []string // .f, .F, .for and .f90 Fortran source files
+       SFiles            []string // .s source files
+       SwigFiles         []string // .swig files
+       SwigCXXFiles      []string // .swigcxx files
+       SysoFiles         []string // .syso system object files to add to archive
 
        // Cgo directives
        CgoCFLAGS    []string // Cgo CFLAGS directives
@@ -816,46 +817,28 @@ Found:
                        continue
                }
                if !match {
-                       if ext == ".go" {
+                       if strings.HasPrefix(name, "_") || strings.HasPrefix(name, ".") {
+                               // not due to build constraints - don't report
+                       } else if ext == ".go" {
                                p.IgnoredGoFiles = append(p.IgnoredGoFiles, name)
+                       } else if fileListForExt(p, ext) != nil {
+                               p.IgnoredOtherFiles = append(p.IgnoredOtherFiles, name)
                        }
                        continue
                }
 
                // Going to save the file. For non-Go files, can stop here.
                switch ext {
-               case ".c":
-                       p.CFiles = append(p.CFiles, name)
-                       continue
-               case ".cc", ".cpp", ".cxx":
-                       p.CXXFiles = append(p.CXXFiles, name)
-                       continue
-               case ".m":
-                       p.MFiles = append(p.MFiles, name)
-                       continue
-               case ".h", ".hh", ".hpp", ".hxx":
-                       p.HFiles = append(p.HFiles, name)
-                       continue
-               case ".f", ".F", ".for", ".f90":
-                       p.FFiles = append(p.FFiles, name)
-                       continue
-               case ".s":
-                       p.SFiles = append(p.SFiles, name)
-                       continue
+               case ".go":
+                       // keep going
                case ".S", ".sx":
+                       // special case for cgo, handled at end
                        Sfiles = append(Sfiles, name)
                        continue
-               case ".swig":
-                       p.SwigFiles = append(p.SwigFiles, name)
-                       continue
-               case ".swigcxx":
-                       p.SwigCXXFiles = append(p.SwigCXXFiles, name)
-                       continue
-               case ".syso":
-                       // binary objects to add to package archive
-                       // Likely of the form foo_windows.syso, but
-                       // the name was vetted above with goodOSArchFile.
-                       p.SysoFiles = append(p.SysoFiles, name)
+               default:
+                       if list := fileListForExt(p, ext); list != nil {
+                               *list = append(*list, name)
+                       }
                        continue
                }
 
@@ -996,6 +979,9 @@ Found:
        if len(p.CgoFiles) > 0 {
                p.SFiles = append(p.SFiles, Sfiles...)
                sort.Strings(p.SFiles)
+       } else {
+               p.IgnoredOtherFiles = append(p.IgnoredOtherFiles, Sfiles...)
+               sort.Strings(p.IgnoredOtherFiles)
        }
 
        if badGoError != nil {
@@ -1007,6 +993,30 @@ Found:
        return p, pkgerr
 }
 
+func fileListForExt(p *Package, ext string) *[]string {
+       switch ext {
+       case ".c":
+               return &p.CFiles
+       case ".cc", ".cpp", ".cxx":
+               return &p.CXXFiles
+       case ".m":
+               return &p.MFiles
+       case ".h", ".hh", ".hpp", ".hxx":
+               return &p.HFiles
+       case ".f", ".F", ".for", ".f90":
+               return &p.FFiles
+       case ".s", ".S", ".sx":
+               return &p.SFiles
+       case ".swig":
+               return &p.SwigFiles
+       case ".swigcxx":
+               return &p.SwigCXXFiles
+       case ".syso":
+               return &p.SysoFiles
+       }
+       return nil
+}
+
 var errNoModules = errors.New("not using modules")
 
 // importGo checks whether it can use the go command to find the directory for path.
@@ -1302,6 +1312,8 @@ func (ctxt *Context) MatchFile(dir, name string) (match bool, err error) {
        return
 }
 
+var dummyPkg Package
+
 // matchFile determines whether the file with the given name in the given directory
 // should be included in the package being constructed.
 // It returns the data read from the file.
@@ -1326,16 +1338,15 @@ func (ctxt *Context) matchFile(dir, name string, allTags map[string]bool, binary
                return
        }
 
-       switch ext {
-       case ".go", ".c", ".cc", ".cxx", ".cpp", ".m", ".s", ".h", ".hh", ".hpp", ".hxx", ".f", ".F", ".f90", ".S", ".sx", ".swig", ".swigcxx":
-               // tentatively okay - read to make sure
-       case ".syso":
+       if ext != ".go" && fileListForExt(&dummyPkg, ext) == nil {
+               // skip
+               return
+       }
+
+       if ext == ".syso" {
                // binary, no reading
                match = true
                return
-       default:
-               // skip
-               return
        }
 
        filename = ctxt.joinPath(dir, name)