blob: 229dbe21941b39ea8bb2ba55ed09c46c589eff55 [file] [log] [blame]
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package gobuild
import (
"fmt";
"gobuild";
"io";
"path";
"template";
)
var makefileTemplate =
"# DO NOT EDIT. Automatically generated by gobuild.\n"
"{Args|args} >Makefile\n"
"\n"
"D={.section Dir}/{@}{.end}\n"
"\n"
"O_arm=5\n" // TODO(rsc): include something here?
"O_amd64=6\n"
"O_386=8\n"
"OS=568vq\n"
"\n"
"O=$(O_$(GOARCH))\n"
"GC=$(O)g -I{ObjDir}\n"
"CC=$(O)c -FVw\n"
"AS=$(O)a\n"
"AR=6ar\n"
"\n"
"default: packages\n"
"\n"
"clean:\n"
" rm -rf *.[$(OS)] *.a [$(OS)].out {ObjDir}\n"
"\n"
"test: packages\n"
" gotest\n"
"\n"
"coverage: packages\n"
" gotest\n"
" 6cov -g `pwd` | grep -v '_test\\.go:'\n"
"\n"
"%.$O: %.go\n"
" $(GC) $*.go\n"
"\n"
"%.$O: %.c\n"
" $(CC) $*.c\n"
"\n"
"%.$O: %.s\n"
" $(AS) $*.s\n"
"\n"
"{.repeated section Phases}\n"
"O{Phase}=\\\n"
"{.repeated section ArCmds}\n"
"{.repeated section Files}\n"
" {Name|basename}.$O\\\n"
"{.end}\n"
"{.end}\n"
"\n"
"{.end}\n"
"\n"
"phases:{.repeated section Phases} a{Phase}{.end}\n"
"{.repeated section Packages}\n"
"{ObjDir}$D/{Name}.a: phases\n"
"{.end}\n"
"\n"
"{.repeated section Phases}\n"
"a{Phase}: $(O{Phase})\n"
"{.repeated section ArCmds}\n"
" $(AR) grc {ObjDir}$D/{.section Pkg}{Name}.a{.end}{.repeated section Files} {Name|basename}.$O{.end}\n"
"{.end}\n"
" rm -f $(O{Phase})\n"
"\n"
"{.end}\n"
"\n"
"newpkg: clean\n"
" mkdir -p {ObjDir}$D\n"
"{.repeated section Packages}\n"
" $(AR) grc {ObjDir}$D/{Name}.a\n"
"{.end}\n"
"\n"
"$(O1): newpkg\n"
"{.repeated section Phases}\n"
"$(O{Phase|+1}): a{Phase}\n"
"{.end}\n"
"\n"
"nuke: clean\n"
" rm -f{.repeated section Packages} $(GOROOT)/pkg$D/{Name}.a{.end}\n"
"\n"
"packages:{.repeated section Packages} {ObjDir}$D/{Name}.a{.end}\n"
"\n"
"install: packages\n"
" test -d $(GOROOT)/pkg && mkdir -p $(GOROOT)/pkg$D\n"
"{.repeated section Packages}\n"
" cp {ObjDir}$D/{Name}.a $(GOROOT)/pkg$D/{Name}.a\n"
"{.end}\n"
func argsFmt(w io.Write, x interface{}, format string) {
args := x.([]string);
fmt.Fprint(w, "#");
for i, a := range args {
fmt.Fprint(w, " ", ShellString(a));
}
}
func basenameFmt(w io.Write, x interface{}, format string) {
t := fmt.Sprint(x);
t = t[0:len(t)-len(path.Ext(t))];
fmt.Fprint(w, MakeString(t));
}
func plus1Fmt(w io.Write, x interface{}, format string) {
fmt.Fprint(w, x.(int) + 1);
}
func makeFmt(w io.Write, x interface{}, format string) {
fmt.Fprint(w, MakeString(fmt.Sprint(x)));
}
var makefileMap = template.FormatterMap {
"": makeFmt,
"+1": plus1Fmt,
"args": argsFmt,
"basename": basenameFmt,
}