blob: 113cbfde8d06fb853eb348dfeb4c0212250faf1c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package builder
import (
"bytes"
"sort"
"strings"
log "github.com/Sirupsen/logrus"
"mynewt.apache.org/newt/newt/parse"
"mynewt.apache.org/newt/newt/resolve"
)
func TestTargetName(testPkgName string) string {
return strings.Replace(testPkgName, "/", "_", -1)
}
func (b *Builder) FeatureString() string {
var buffer bytes.Buffer
settingMap := b.cfg.SettingValues()
featureSlice := make([]string, 0, len(settingMap))
for k, v := range settingMap {
if parse.ValueIsTrue(v) {
featureSlice = append(featureSlice, k)
}
}
sort.Strings(featureSlice)
for i, feature := range featureSlice {
if i != 0 {
buffer.WriteString(" ")
}
buffer.WriteString(feature)
}
return buffer.String()
}
type bpkgSorter struct {
bpkgs []*BuildPackage
}
func (b bpkgSorter) Len() int {
return len(b.bpkgs)
}
func (b bpkgSorter) Swap(i, j int) {
b.bpkgs[i], b.bpkgs[j] = b.bpkgs[j], b.bpkgs[i]
}
func (b bpkgSorter) Less(i, j int) bool {
return b.bpkgs[i].rpkg.Lpkg.Name() < b.bpkgs[j].rpkg.Lpkg.Name()
}
func (b *Builder) sortedBuildPackages() []*BuildPackage {
sorter := bpkgSorter{
bpkgs: make([]*BuildPackage, 0, len(b.PkgMap)),
}
for _, bpkg := range b.PkgMap {
sorter.bpkgs = append(sorter.bpkgs, bpkg)
}
sort.Sort(sorter)
return sorter.bpkgs
}
func (b *Builder) sortedRpkgs() []*resolve.ResolvePackage {
bpkgs := b.sortedBuildPackages()
rpkgs := make([]*resolve.ResolvePackage, len(bpkgs), len(bpkgs))
for i, bpkg := range bpkgs {
rpkgs[i] = bpkg.rpkg
}
return rpkgs
}
func logDepInfo(res *resolve.Resolution) {
// Log API set.
apis := []string{}
for api, _ := range res.ApiMap {
apis = append(apis, api)
}
sort.Strings(apis)
log.Debugf("API set:")
for _, api := range apis {
rpkg := res.ApiMap[api]
log.Debugf(" * " + api + " (" + rpkg.Lpkg.FullName() + ")")
}
// Log dependency graph.
dg, err := depGraph(res.MasterSet)
if err != nil {
log.Debugf("Error while constructing dependency graph: %s\n",
err.Error())
} else {
log.Debugf("%s", DepGraphText(dg))
}
// Log reverse dependency graph.
rdg, err := revdepGraph(res.MasterSet)
if err != nil {
log.Debugf("Error while constructing reverse dependency graph: %s\n",
err.Error())
} else {
log.Debugf("%s", RevdepGraphText(rdg))
}
}