2013-02-25 21:25:25 -08:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2013-03-02 00:34:31 -08:00
|
|
|
"flag"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
"os"
|
2013-02-25 21:25:25 -08:00
|
|
|
)
|
|
|
|
|
|
2013-03-02 00:34:31 -08:00
|
|
|
|
|
|
|
|
// The maximum number of times an rule may be applied.
|
|
|
|
|
const max_rule_cnt = 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func mk(rs *ruleSet, target string, dryrun bool) {
|
|
|
|
|
|
|
|
|
|
// Build a graph
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 1. Introduce special variables into the ruleSet
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func mkError(msg string) {
|
|
|
|
|
fmt.Fprintf(os.Stderr, "mk: %s\n", msg)
|
|
|
|
|
os.Exit(1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-02-25 21:25:25 -08:00
|
|
|
func main() {
|
2013-03-02 00:34:31 -08:00
|
|
|
var mkfilepath string
|
|
|
|
|
var dryrun bool
|
|
|
|
|
flag.StringVar(&mkfilepath, "f", "mkfile", "use the given file as mkfile")
|
|
|
|
|
flag.BoolVar(&dryrun, "n", false, "print commands without actually executing")
|
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
|
|
mkfile, err := os.Open(mkfilepath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
mkError("no mkfile found")
|
|
|
|
|
}
|
|
|
|
|
input, _ := ioutil.ReadAll(mkfile)
|
|
|
|
|
mkfile.Close()
|
|
|
|
|
|
|
|
|
|
rs := parse(string(input), mkfilepath)
|
|
|
|
|
targets := flag.Args()
|
|
|
|
|
|
|
|
|
|
// build the first non-meta rule in the makefile, if none are given explicitly
|
|
|
|
|
for i := range rs.rules {
|
|
|
|
|
if !rs.rules[i].ismeta {
|
|
|
|
|
for j := range rs.rules[i].targets {
|
|
|
|
|
targets = append(targets, rs.rules[i].targets[j].spat)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-02-26 22:41:25 -08:00
|
|
|
|
2013-03-02 00:34:31 -08:00
|
|
|
if len(targets) == 0 {
|
|
|
|
|
fmt.Println("mk: nothing to mk")
|
|
|
|
|
return
|
|
|
|
|
}
|
2013-02-26 22:41:25 -08:00
|
|
|
|
2013-03-02 00:34:31 -08:00
|
|
|
for _, target := range targets {
|
|
|
|
|
//fmt.Printf("building: %q\n", target)
|
|
|
|
|
g := buildgraph(rs, target)
|
|
|
|
|
g.visualize(os.Stdout)
|
|
|
|
|
//mk(rs, target, dryrun)
|
|
|
|
|
}
|
2013-02-26 22:41:25 -08:00
|
|
|
|
2013-02-25 21:25:25 -08:00
|
|
|
}
|