forked from OSchip/llvm-project
Implement the correct search for configuration files. llvmc will now try
the following in this order: 1. -config-dir=/path/to/configs 2. LLVM_CONFIG_DIR=/path/to/configs 3. ~/.llvm/etc 4. $prefix/etc 5. /etc/llvm llvm-svn: 15950
This commit is contained in:
parent
6ad57b2491
commit
a17a413cc1
|
@ -15,6 +15,7 @@
|
|||
#include "Configuration.h"
|
||||
#include "ConfigLexer.h"
|
||||
#include "CompilerDriver.h"
|
||||
#include "Config/config.h"
|
||||
#include "Support/CommandLine.h"
|
||||
#include "Support/StringExtras.h"
|
||||
#include <iostream>
|
||||
|
@ -22,6 +23,11 @@
|
|||
|
||||
using namespace llvm;
|
||||
|
||||
namespace sys {
|
||||
// From CompilerDriver.cpp (for now)
|
||||
extern bool FileReadable(const std::string& fname);
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
ConfigLexerInfo ConfigLexerState;
|
||||
InputProvider* ConfigLexerInput = 0;
|
||||
|
@ -389,27 +395,47 @@ namespace {
|
|||
CompilerDriver::ConfigData*
|
||||
LLVMC_ConfigDataProvider::ReadConfigData(const std::string& ftype) {
|
||||
CompilerDriver::ConfigData* result = 0;
|
||||
std::string dir_name;
|
||||
if (configDir.empty()) {
|
||||
FileInputProvider fip( std::string("/etc/llvm/") + ftype );
|
||||
if (!fip.okay()) {
|
||||
fip.error("Configuration for '" + ftype + "' is not available.");
|
||||
fip.checkErrors();
|
||||
// Try the environment variable
|
||||
const char* conf = getenv("LLVM_CONFIG_DIR");
|
||||
if (conf) {
|
||||
dir_name = conf;
|
||||
dir_name += "/";
|
||||
if (!::sys::FileReadable(dir_name + ftype))
|
||||
throw "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::FileReadable(dir_name + ftype)) {
|
||||
// Okay, try the LLVM installation directory
|
||||
dir_name = LLVM_ETCDIR;
|
||||
dir_name += "/";
|
||||
if (!::sys::FileReadable(dir_name + ftype)) {
|
||||
// Okay, try the "standard" place
|
||||
dir_name = "/etc/llvm/";
|
||||
if (!::sys::FileReadable(dir_name + ftype)) {
|
||||
throw "Configuration file for '" + ftype + "' is not available.";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
result = new CompilerDriver::ConfigData();
|
||||
ParseConfigData(fip,*result);
|
||||
}
|
||||
} else {
|
||||
FileInputProvider fip( configDir + "/" + ftype );
|
||||
if (!fip.okay()) {
|
||||
fip.error("Configuration for '" + ftype + "' is not available.");
|
||||
fip.checkErrors();
|
||||
dir_name = configDir + "/";
|
||||
if (!::sys::FileReadable(dir_name + ftype)) {
|
||||
throw "Configuration file for '" + ftype + "' is not available.";
|
||||
}
|
||||
}
|
||||
FileInputProvider fip( dir_name + ftype );
|
||||
if (!fip.okay()) {
|
||||
throw "Configuration file for '" + ftype + "' is not available.";
|
||||
}
|
||||
else {
|
||||
result = new CompilerDriver::ConfigData();
|
||||
ParseConfigData(fip,*result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue