Add DistForGoal to MakeVarsContext
Add methods to MakeVarsContext to allow Singletons to dist artifacts without manually adding $(dist-for-goals) in Make. Test: m checkbuild Change-Id: Ia5ddb31afe29329f2df0ae1297ed963c8c28e590
This commit is contained in:
@@ -88,6 +88,24 @@ type MakeVarsContext interface {
|
|||||||
// dependencies to be added to it. Phony can be called on the same name multiple
|
// dependencies to be added to it. Phony can be called on the same name multiple
|
||||||
// times to add additional dependencies.
|
// times to add additional dependencies.
|
||||||
Phony(names string, deps ...Path)
|
Phony(names string, deps ...Path)
|
||||||
|
|
||||||
|
// DistForGoal creates a rule to copy one or more Paths to the artifacts
|
||||||
|
// directory on the build server when the specified goal is built.
|
||||||
|
DistForGoal(goal string, paths ...Path)
|
||||||
|
|
||||||
|
// DistForGoalWithFilename creates a rule to copy a Path to the artifacts
|
||||||
|
// directory on the build server with the given filename when the specified
|
||||||
|
// goal is built.
|
||||||
|
DistForGoalWithFilename(goal string, path Path, filename string)
|
||||||
|
|
||||||
|
// DistForGoals creates a rule to copy one or more Paths to the artifacts
|
||||||
|
// directory on the build server when any of the specified goals are built.
|
||||||
|
DistForGoals(goals []string, paths ...Path)
|
||||||
|
|
||||||
|
// DistForGoalsWithFilename creates a rule to copy a Path to the artifacts
|
||||||
|
// directory on the build server with the given filename when any of the
|
||||||
|
// specified goals are built.
|
||||||
|
DistForGoalsWithFilename(goals []string, path Path, filename string)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ PathContext = MakeVarsContext(nil)
|
var _ PathContext = MakeVarsContext(nil)
|
||||||
@@ -138,6 +156,7 @@ type makeVarsContext struct {
|
|||||||
pctx PackageContext
|
pctx PackageContext
|
||||||
vars []makeVarsVariable
|
vars []makeVarsVariable
|
||||||
phonies []phony
|
phonies []phony
|
||||||
|
dists []dist
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ MakeVarsContext = &makeVarsContext{}
|
var _ MakeVarsContext = &makeVarsContext{}
|
||||||
@@ -154,6 +173,11 @@ type phony struct {
|
|||||||
deps []string
|
deps []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type dist struct {
|
||||||
|
goals []string
|
||||||
|
paths []string
|
||||||
|
}
|
||||||
|
|
||||||
func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
|
func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
|
||||||
if !ctx.Config().EmbeddedInMake() {
|
if !ctx.Config().EmbeddedInMake() {
|
||||||
return
|
return
|
||||||
@@ -169,7 +193,8 @@ func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
vars := []makeVarsVariable{}
|
var vars []makeVarsVariable
|
||||||
|
var dists []dist
|
||||||
var phonies []phony
|
var phonies []phony
|
||||||
for _, provider := range makeVarsProviders {
|
for _, provider := range makeVarsProviders {
|
||||||
mctx := &makeVarsContext{
|
mctx := &makeVarsContext{
|
||||||
@@ -181,6 +206,7 @@ func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
|
|||||||
|
|
||||||
vars = append(vars, mctx.vars...)
|
vars = append(vars, mctx.vars...)
|
||||||
phonies = append(phonies, mctx.phonies...)
|
phonies = append(phonies, mctx.phonies...)
|
||||||
|
dists = append(dists, mctx.dists...)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Failed() {
|
if ctx.Failed() {
|
||||||
@@ -193,7 +219,7 @@ func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
|
|||||||
ctx.Errorf(err.Error())
|
ctx.Errorf(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
lateOutBytes := s.writeLate(phonies)
|
lateOutBytes := s.writeLate(phonies, dists)
|
||||||
|
|
||||||
if err := pathtools.WriteFileIfChanged(lateOutFile, lateOutBytes, 0666); err != nil {
|
if err := pathtools.WriteFileIfChanged(lateOutFile, lateOutBytes, 0666); err != nil {
|
||||||
ctx.Errorf(err.Error())
|
ctx.Errorf(err.Error())
|
||||||
@@ -282,7 +308,7 @@ my_check_failed :=
|
|||||||
return buf.Bytes()
|
return buf.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *makeVarsSingleton) writeLate(phonies []phony) []byte {
|
func (s *makeVarsSingleton) writeLate(phonies []phony, dists []dist) []byte {
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
|
|
||||||
fmt.Fprint(buf, `# Autogenerated file
|
fmt.Fprint(buf, `# Autogenerated file
|
||||||
@@ -297,6 +323,13 @@ func (s *makeVarsSingleton) writeLate(phonies []phony) []byte {
|
|||||||
fmt.Fprintf(buf, "%s: %s\n", phony.name, strings.Join(phony.deps, "\\\n "))
|
fmt.Fprintf(buf, "%s: %s\n", phony.name, strings.Join(phony.deps, "\\\n "))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Fprintln(buf)
|
||||||
|
|
||||||
|
for _, dist := range dists {
|
||||||
|
fmt.Fprintf(buf, "$(call dist-for-goals,%s,%s)\n",
|
||||||
|
strings.Join(dist.goals, " "), strings.Join(dist.paths, " "))
|
||||||
|
}
|
||||||
|
|
||||||
return buf.Bytes()
|
return buf.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,6 +370,13 @@ func (c *makeVarsContext) addPhony(name string, deps []string) {
|
|||||||
c.phonies = append(c.phonies, phony{name, deps})
|
c.phonies = append(c.phonies, phony{name, deps})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *makeVarsContext) addDist(goals []string, paths []string) {
|
||||||
|
c.dists = append(c.dists, dist{
|
||||||
|
goals: goals,
|
||||||
|
paths: paths,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func (c *makeVarsContext) Strict(name, ninjaStr string) {
|
func (c *makeVarsContext) Strict(name, ninjaStr string) {
|
||||||
c.addVariable(name, ninjaStr, true, false)
|
c.addVariable(name, ninjaStr, true, false)
|
||||||
}
|
}
|
||||||
@@ -360,3 +400,19 @@ func (c *makeVarsContext) CheckRaw(name, value string) {
|
|||||||
func (c *makeVarsContext) Phony(name string, deps ...Path) {
|
func (c *makeVarsContext) Phony(name string, deps ...Path) {
|
||||||
c.addPhony(name, Paths(deps).Strings())
|
c.addPhony(name, Paths(deps).Strings())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *makeVarsContext) DistForGoal(goal string, paths ...Path) {
|
||||||
|
c.DistForGoals([]string{goal}, paths...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *makeVarsContext) DistForGoalWithFilename(goal string, path Path, filename string) {
|
||||||
|
c.DistForGoalsWithFilename([]string{goal}, path, filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *makeVarsContext) DistForGoals(goals []string, paths ...Path) {
|
||||||
|
c.addDist(goals, Paths(paths).Strings())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *makeVarsContext) DistForGoalsWithFilename(goals []string, path Path, filename string) {
|
||||||
|
c.addDist(goals, []string{path.String() + ":" + filename})
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user