X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=tools%2Fllvmc%2FConfiguration.cpp;h=6b5d33975f2c0a4f2a57c0e5317bf772f5661dc5;hb=064782209bd5b20d8b0b255f8198f482165e4657;hp=4770875833c76d6109f78ec9dc7ac2cbac29c2d8;hpb=f384db3a9094619c1c3ad5721dbbe007bc153fcf;p=oota-llvm.git diff --git a/tools/llvmc/Configuration.cpp b/tools/llvmc/Configuration.cpp index 4770875833c..6b5d33975f2 100644 --- a/tools/llvmc/Configuration.cpp +++ b/tools/llvmc/Configuration.cpp @@ -15,9 +15,9 @@ #include "Configuration.h" #include "ConfigLexer.h" #include "CompilerDriver.h" -#include "Config/config.h" -#include "Support/CommandLine.h" -#include "Support/StringExtras.h" +#include "llvm/Config/config.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/ADT/StringExtras.h" #include #include @@ -90,19 +90,19 @@ namespace { InputProvider* provider; CompilerDriver::ConfigData* confDat; - int next() { + inline int next() { token = Configlex(); if (DumpTokens) std::cerr << token << "\n"; return token; } - bool next_is_real() { + inline bool next_is_real() { next(); return (token != EOLTOK) && (token != ERRORTOK) && (token != 0); } - void eatLineRemnant() { + inline void eatLineRemnant() { while (next_is_real()) ; } @@ -156,12 +156,17 @@ namespace { bool parseSubstitution(CompilerDriver::StringVector& optList) { switch (token) { case ARGS_SUBST: optList.push_back("%args%"); break; + case DEFS_SUBST: optList.push_back("%defs%"); break; + case FORCE_SUBST: optList.push_back("%force%"); break; case IN_SUBST: optList.push_back("%in%"); break; - case OUT_SUBST: optList.push_back("%out%"); break; - case TIME_SUBST: optList.push_back("%time%"); break; - case STATS_SUBST: optList.push_back("%stats%"); break; + case INCLS_SUBST: optList.push_back("%incls%"); break; + case LIBS_SUBST: optList.push_back("%libs%"); break; case OPT_SUBST: optList.push_back("%opt%"); break; + case OUT_SUBST: optList.push_back("%out%"); break; case TARGET_SUBST: optList.push_back("%target%"); break; + case STATS_SUBST: optList.push_back("%stats%"); break; + case TIME_SUBST: optList.push_back("%time%"); break; + case VERBOSE_SUBST: optList.push_back("%verbose%"); break; default: return false; } @@ -229,7 +234,7 @@ namespace { action.args.clear(); } else { if (token == STRING || token == OPTION) { - action.program = ConfigLexerState.StringVal; + action.program.set_file(ConfigLexerState.StringVal); } else { error("Expecting a program name"); } @@ -415,57 +420,58 @@ namespace { CompilerDriver::ConfigData* LLVMC_ConfigDataProvider::ReadConfigData(const std::string& ftype) { CompilerDriver::ConfigData* result = 0; - std::string dir_name; - if (configDir.empty()) { + sys::Path confFile; + if (configDir.is_empty()) { // Try the environment variable const char* conf = getenv("LLVM_CONFIG_DIR"); if (conf) { - dir_name = conf; - dir_name += "/"; - if (!::sys::FileIsReadable(dir_name + ftype)) - throw "Configuration file for '" + ftype + "' is not available."; + confFile.set_directory(conf); + confFile.append_file(ftype); + if (!confFile.readable()) + throw std::string("Configuration file for '") + ftype + + "' is not available."; } else { // Try the user's home directory - const char* home = getenv("HOME"); - if (home) { - dir_name = home; - dir_name += "/.llvm/etc/"; - if (!::sys::FileIsReadable(dir_name + ftype)) { - // Okay, try the LLVM installation directory - dir_name = LLVM_ETCDIR; - dir_name += "/"; - if (!::sys::FileIsReadable(dir_name + ftype)) { - // Okay, try the "standard" place - dir_name = "/etc/llvm/"; - if (!::sys::FileIsReadable(dir_name + ftype)) { - throw "Configuration file for '" + ftype + "' is not available."; - } + confFile = sys::Path::GetUserHomeDirectory(); + if (!confFile.is_empty()) { + confFile.append_directory(".llvm"); + confFile.append_directory("etc"); + confFile.append_file(ftype); + if (!confFile.readable()) + confFile.clear(); + } + if (!confFile.is_empty()) { + // Okay, try the LLVM installation directory + confFile = sys::Path::GetLLVMConfigDir(); + confFile.append_file(ftype); + if (!confFile.readable()) { + // Okay, try the "standard" place + confFile = sys::Path::GetLLVMDefaultConfigDir(); + confFile.append_file(ftype); + if (!confFile.readable()) { + throw std::string("Configuration file for '") + ftype + + "' is not available."; } } } } } else { - dir_name = configDir + "/"; - if (!::sys::FileIsReadable(dir_name + ftype)) { - throw "Configuration file for '" + ftype + "' is not available."; - } + confFile = configDir; + confFile.append_file(ftype); + if (!confFile.readable()) + throw std::string("Configuration file for '") + ftype + + "' is not available."; } - FileInputProvider fip( dir_name + ftype ); + FileInputProvider fip( confFile.get() ); if (!fip.okay()) { - throw "Configuration file for '" + ftype + "' is not available."; + throw std::string("Configuration file for '") + ftype + + "' is not available."; } result = new CompilerDriver::ConfigData(); ParseConfigData(fip,*result); return result; } -LLVMC_ConfigDataProvider::LLVMC_ConfigDataProvider() - : Configurations() - , configDir() -{ - Configurations.clear(); -} - LLVMC_ConfigDataProvider::~LLVMC_ConfigDataProvider() { ConfigDataMap::iterator cIt = Configurations.begin(); @@ -491,7 +497,7 @@ LLVMC_ConfigDataProvider::ProvideConfigData(const std::string& filetype) { // The configuration data doesn't exist, we have to go read it. result = ReadConfigData(filetype); // If we got one, cache it - if ( result != 0 ) + if (result != 0) Configurations.insert(std::make_pair(filetype,result)); } return result; // Might return 0