From 34bb7a0bb27e20e477ee5c910603ed58c49b6173 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 25 Sep 2008 17:07:06 -0700 Subject: [PATCH] gobuild -m: replace value of $GOARCH and $GOOS in Makefile with $(GOARCH) and $(GOOS) R=r DELTA=40 (38 added, 0 deleted, 2 changed) OCL=15905 CL=15908 --- src/cmd/gobuild/gobuild.c | 42 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/src/cmd/gobuild/gobuild.c b/src/cmd/gobuild/gobuild.c index 0fdf68e19b..56c044e966 100644 --- a/src/cmd/gobuild/gobuild.c +++ b/src/cmd/gobuild/gobuild.c @@ -20,6 +20,8 @@ int chatty; int devnull; // fd of /dev/null int makefile; // generate Makefile char *thechar; // object character +char *goos; +char *goarch; // Info about when to compile a particular file. typedef struct Job Job; @@ -133,6 +135,36 @@ goobj(char *file, char *suffix) return smprint("%.*s.%s", utfnlen(file, p-file), file, suffix); } +// Format name using $(GOOS) and $(GOARCH). +int +dollarfmt(Fmt *f) +{ + char *s; + Rune r; + int n; + + s = va_arg(f->args, char*); + if(s == nil){ + fmtstrcpy(f, ""); + return 0; + } + for(; *s; s+=n){ + n = strlen(goarch); + if(strncmp(s, goarch, n) == 0){ + fmtstrcpy(f, "$(GOARCH)"); + continue; + } + n = strlen(goos); + if(strncmp(s, goos, n) == 0){ + fmtstrcpy(f, "$(GOOS)"); + continue; + } + n = chartorune(&r, s); + fmtrune(f, r); + } + return 0; +} + // Makefile preamble template. char preamble[] = "O=%s\n" @@ -166,12 +198,13 @@ void main(int argc, char **argv) { int i, o, p, n, pass, nar, njob, nthis, nnext, oargc; - char **ar, **next, **this, **tmp, *goarch, *goroot, *pkgname, *pkgpath, **oargv; + char **ar, **next, **this, **tmp, *goroot, *pkgname, *pkgpath, **oargv; Job *job; Biobuf bout; oargc = argc; oargv = argv; + fmtinstall('$', dollarfmt); ARGBEGIN{ default: @@ -187,6 +220,9 @@ main(int argc, char **argv) if(argc < 2) usage(); + goos = getenv("GOOS"); + if(goos == nil) + sysfatal("no $GOOS"); goarch = getenv("GOARCH"); if(goarch == nil) sysfatal("no $GOARCH"); @@ -309,7 +345,7 @@ main(int argc, char **argv) p = job[i].pass; Bprint(&bout, "\nO%d=\\\n", p+1); } - Bprint(&bout, "\t%s\\\n", goobj(job[i].name, "$O")); + Bprint(&bout, "\t%$\\\n", goobj(job[i].name, "$O")); } Bprint(&bout, "\n"); @@ -321,9 +357,11 @@ main(int argc, char **argv) // a1: $(O1) // $(AS) grc $(PKG) $(O1) + // rm -f $(O1) for(i=0; i