diff --git a/llvm/tools/llvmc/CompilerDriver.cpp b/llvm/tools/llvmc/CompilerDriver.cpp index 82dc547ba393..64232f3d2c1b 100644 --- a/llvm/tools/llvmc/CompilerDriver.cpp +++ b/llvm/tools/llvmc/CompilerDriver.cpp @@ -227,9 +227,54 @@ private: assert(pat != 0 && "Invalid command pattern"); // Copy over some pattern things that don't need to change - action->program = pat->program; action->flags = pat->flags; + // See if program starts with wildcard... + std::string programName=pat->program.toString(); + if (programName[0] == '%' && programName.length() >2) { + switch(programName[1]){ + case 'b': + if (programName.substr(0,8) == "%bindir%") { + std::string tmp(LLVM_BINDIR); + tmp.append(programName.substr(8)); + pat->program.set(tmp); + } + break; + case 'l': + if (programName.substr(0,12) == "%llvmgccdir%"){ + std::string tmp(LLVMGCCDIR); + tmp.append(programName.substr(12)); + pat->program.set(tmp); + }else if (programName.substr(0,13) == "%llvmgccarch%"){ + std::string tmp(LLVMGCCARCH); + tmp.append(programName.substr(13)); + pat->program.set(tmp); + }else if (programName.substr(0,9) == "%llvmgcc%"){ + std::string tmp(LLVMGCC); + tmp.append(programName.substr(9)); + pat->program.set(tmp); + }else if (programName.substr(0,9) == "%llvmgxx%"){ + std::string tmp(LLVMGXX); + tmp.append(programName.substr(9)); + pat->program.set(tmp); + }else if (programName.substr(0,9) == "%llvmcc1%"){ + std::string tmp(LLVMCC1); + tmp.append(programName.substr(9)); + pat->program.set(tmp); + }else if (programName.substr(0,13) == "%llvmcc1plus%"){ + std::string tmp(LLVMCC1PLUS); + tmp.append(programName.substr(13)); + pat->program.set(tmp); + }else if (programName.substr(0,8) == "%libdir%") { + std::string tmp(LLVM_LIBDIR); + tmp.append(programName.substr(8)); + pat->program.set(tmp); + } + break; + } + } + action->program = pat->program; + // Do the substitutions from the pattern to the actual StringVector::iterator PI = pat->args.begin(); StringVector::iterator PE = pat->args.end(); @@ -426,9 +471,9 @@ private: const char** Args = (const char**) alloca(sizeof(const char*)*(action->args.size()+2)); Args[0] = action->program.toString().c_str(); - for (unsigned i = 1; i != action->args.size(); ++i) - Args[i] = action->args[i].c_str(); - Args[action->args.size()] = 0; // null terminate list. + for (unsigned i = 1; i <= action->args.size(); ++i) + Args[i] = action->args[i-1].c_str(); + Args[action->args.size()+1] = 0; // null terminate list. if (isSet(TIME_ACTIONS_FLAG)) { Timer timer(action->program.toString()); timer.startTimer(); diff --git a/llvm/tools/llvmc/Configuration.cpp b/llvm/tools/llvmc/Configuration.cpp index ba3c93c6900e..1364e9b2ebfc 100644 --- a/llvm/tools/llvmc/Configuration.cpp +++ b/llvm/tools/llvmc/Configuration.cpp @@ -116,6 +116,8 @@ namespace { result.clear(); while (next_is_real()) { switch (token ) { + case LLVMGCCDIR_SUBST: + case LLVMGCCARCH_SUBST: case STRING : case OPTION : result += ConfigLexerState.StringVal; @@ -260,6 +262,11 @@ namespace { str.clear(); do { switch (token) { + case BINDIR_SUBST: + case LLVMGCC_SUBST: + case LLVMGXX_SUBST: + case LLVMCC1_SUBST: + case LLVMCC1PLUS_SUBST: case OPTION: case STRING: case ARGS_SUBST: diff --git a/llvm/tools/llvmc/Makefile b/llvm/tools/llvmc/Makefile index 0e63d1325941..2ccf85a55a7e 100644 --- a/llvm/tools/llvmc/Makefile +++ b/llvm/tools/llvmc/Makefile @@ -24,7 +24,7 @@ CPPFLAGS = -DLLVMGCCDIR="\"$(LLVMGCCDIR)\"" \ -DLLVMGCC="\"$(LLVMGCC)\"" \ -DLLVMGXX="\"$(LLVMGXX)\"" \ -DLLVMCC1="\"$(LLVMCC1)\"" \ - -DLLVMCC1PLUS="$(LLVMCC1PLUS)" + -DLLVMCC1PLUS="\"$(LLVMCC1PLUS)\"" include $(LEVEL)/Makefile.common diff --git a/llvm/tools/llvmc/c b/llvm/tools/llvmc/c index cbe6830b93da..1f7d48e3d8a4 100644 --- a/llvm/tools/llvmc/c +++ b/llvm/tools/llvmc/c @@ -9,8 +9,7 @@ lang.opt3=-O3 lang.opt4=-O3 lang.opt5=-O3 - lang.libs=%llvmgccdir%/lib %llvmgccdir%/lib \ - %llvmgccdir%/lib/gcc/%llvmgccarch% + lang.libs=%llvmgccdir%/lib %llvmgccdir%/lib %llvmgccdir%/lib/gcc/%llvmgccarch% ########################################################## # Pre-processor definitions