in newt/builder/buildpackage.go [134:237]
func (bpkg *BuildPackage) CompilerInfo(
b *Builder) (*toolchain.CompilerInfo, error) {
// If this package's compiler info has already been generated, return the
// cached copy.
if bpkg.ci != nil {
return bpkg.ci, nil
}
ci := toolchain.NewCompilerInfo()
settings := b.cfg.AllSettingsForLpkg(bpkg.rpkg.Lpkg)
var err error
// Read each set of flags and expand repo designators ("@<repo-name>") into
// paths.
ci.Cflags, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice("pkg.cflags", settings)
util.OneTimeWarningError(err)
expandFlags(ci.Cflags)
ci.CXXflags, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice("pkg.cxxflags", settings)
util.OneTimeWarningError(err)
expandFlags(ci.CXXflags)
ci.Lflags, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice("pkg.lflags", settings)
util.OneTimeWarningError(err)
expandFlags(ci.Lflags)
ci.Aflags, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice("pkg.aflags", settings)
util.OneTimeWarningError(err)
expandFlags(ci.Aflags)
// Package-specific injected settings get specified as C flags on the
// command line.
for _, k := range bpkg.rpkg.Lpkg.InjectedSettings().Names() {
ci.Cflags = append(ci.Cflags, syscfg.FeatureToCflag(k))
}
ci.IgnoreFiles = []*regexp.Regexp{}
ignPats, err := bpkg.rpkg.Lpkg.PkgY.GetValStringSlice(
"pkg.ignore_files", settings)
util.OneTimeWarningError(err)
if len(ignPats) == 0 {
ignPats, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice(
"pkg.ign_files", settings)
util.OneTimeWarningError(err)
}
for _, str := range ignPats {
re, err := regexp.Compile(str)
if err != nil {
return nil, util.NewNewtError(
"Ignore files, unable to compile re: " + err.Error())
}
ci.IgnoreFiles = append(ci.IgnoreFiles, re)
}
ci.IgnoreDirs = []*regexp.Regexp{}
ignPats, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice(
"pkg.ignore_dirs", settings)
util.OneTimeWarningError(err)
if len(ignPats) == 0 {
ignPats, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice(
"pkg.ign_dirs", settings)
util.OneTimeWarningError(err)
}
for _, str := range ignPats {
re, err := regexp.Compile(str)
if err != nil {
return nil, util.NewNewtError(
"Ignore dirs, unable to compile re: " + err.Error())
}
ci.IgnoreDirs = append(ci.IgnoreDirs, re)
}
bpkg.SourceDirectories, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice(
"pkg.source_dirs", settings)
util.OneTimeWarningError(err)
if len(bpkg.SourceDirectories) == 0 {
bpkg.SourceDirectories, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice(
"pkg.src_dirs", settings)
util.OneTimeWarningError(err)
}
bpkg.SourceFiles, err = bpkg.rpkg.Lpkg.PkgY.GetValStringSlice(
"pkg.source_files", settings)
util.OneTimeWarningError(err)
includePaths, err := bpkg.recursiveIncludePaths(b)
if err != nil {
return nil, err
}
ci.Includes = append(bpkg.privateIncludeDirs(b), includePaths...)
bpkg.ci = ci
return bpkg.ci, nil
}