diff options
-rw-r--r-- | bootstrap.go | 12 | ||||
-rw-r--r-- | main.cc | 31 | ||||
-rw-r--r-- | testcase/builtin_vars.mk | 1 | ||||
-rw-r--r-- | testcase/flavor.mk | 1 |
4 files changed, 23 insertions, 22 deletions
diff --git a/bootstrap.go b/bootstrap.go index 91cac40..cdacd8c 100644 --- a/bootstrap.go +++ b/bootstrap.go @@ -24,13 +24,13 @@ const bootstrapMakefileName = "*bootstrap*" func bootstrapMakefile(targets []string) (makefile, error) { bootstrap := ` -CC:=cc -CXX:=g++ -AR:=ar -MAKE:=kati +CC?=cc +CXX?=g++ +AR?=ar +MAKE?=kati # Pretend to be GNU make 3.81, for compatibility. -MAKE_VERSION:=3.81 -SHELL:=/bin/sh +MAKE_VERSION?=3.81 +SHELL=/bin/sh # TODO: Add more builtin vars. # http://www.gnu.org/software/make/manual/make.html#Catalogue-of-Rules @@ -179,17 +179,18 @@ static void Quit() { static void ReadBootstrapMakefile(const vector<Symbol>& targets, vector<AST*>* asts) { string bootstrap = ( - "CC:=cc\n" + "CC?=cc\n" #if defined(__APPLE__) - "CXX:=c++\n" + "CXX?=c++\n" #else - "CXX:=g++\n" + "CXX?=g++\n" #endif - "AR:=ar\n" - "MAKE:=kati\n" + "AR?=ar\n" + "MAKE?=kati\n" // Pretend to be GNU make 3.81, for compatibility. - "MAKE_VERSION:=3.81\n" - "SHELL:=/bin/sh\n" + "MAKE_VERSION?=3.81\n" + // Overwrite $SHELL environment variable. + "SHELL=/bin/sh\n" // TODO: Add more builtin vars. // http://www.gnu.org/software/make/manual/make.html#Catalogue-of-Rules @@ -223,14 +224,6 @@ static void SetVar(StringPiece l, VarOrigin origin, Vars* vars) { } extern "C" char** environ; -static void FillDefaultVars(const vector<StringPiece>& cl_vars, Vars* vars) { - for (char** p = environ; *p; p++) { - SetVar(*p, VarOrigin::ENVIRONMENT, vars); - } - for (StringPiece l : cl_vars) { - SetVar(l, VarOrigin::COMMAND_LINE, vars); - } -} static int Run(const vector<Symbol>& targets, const vector<StringPiece>& cl_vars, @@ -256,7 +249,9 @@ static int Run(const vector<Symbol>& targets, MakefileCacheManager* cache_mgr = NewMakefileCacheManager(); Vars* vars = new Vars(); - FillDefaultVars(cl_vars, vars); + for (char** p = environ; *p; p++) { + SetVar(*p, VarOrigin::ENVIRONMENT, vars); + } Evaluator* ev = new Evaluator(vars); vector<AST*> bootstrap_asts; @@ -268,6 +263,10 @@ static int Run(const vector<Symbol>& targets, } ev->set_is_bootstrap(false); + for (StringPiece l : cl_vars) { + SetVar(l, VarOrigin::COMMAND_LINE, ev->mutable_vars()); + } + vars->Assign(Intern("MAKEFILE_LIST"), new SimpleVar(StringPrintf(" %s", g_makefile), VarOrigin::FILE)); diff --git a/testcase/builtin_vars.mk b/testcase/builtin_vars.mk index 455001b..1625c85 100644 --- a/testcase/builtin_vars.mk +++ b/testcase/builtin_vars.mk @@ -1,5 +1,6 @@ test: echo $(CC) echo $(CXX) + echo $(SHELL) # TODO: Add more builtin vars. diff --git a/testcase/flavor.mk b/testcase/flavor.mk index 86a84d5..ee82a30 100644 --- a/testcase/flavor.mk +++ b/testcase/flavor.mk @@ -11,6 +11,7 @@ all: echo $(flavor PATH) echo $(flavor MAKEFILE_LIST) echo $(flavor $(AREF)) + echo $(flavor CC) # For some reason, $(flavor MAKECMDGOALS) should be "undefined" # echo $(flavor MAKECMDGOALS) |