[llvm-commits] CVS: llvm/tools/llvmc/Configuration.cpp
Reid Spencer
reid at x10sys.com
Fri Aug 20 02:24:17 PDT 2004
Changes in directory llvm/tools/llvmc:
Configuration.cpp updated: 1.6 -> 1.7
---
Log message:
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
---
Diffs of the changes: (+42 -16)
Index: llvm/tools/llvmc/Configuration.cpp
diff -u llvm/tools/llvmc/Configuration.cpp:1.6 llvm/tools/llvmc/Configuration.cpp:1.7
--- llvm/tools/llvmc/Configuration.cpp:1.6 Thu Aug 19 16:52:49 2004
+++ llvm/tools/llvmc/Configuration.cpp Fri Aug 20 04:24:07 2004
@@ -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 @@
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();
- }
- else {
- result = new CompilerDriver::ConfigData();
- ParseConfigData(fip,*result);
+ // 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 {
- FileInputProvider fip( configDir + "/" + ftype );
- if (!fip.okay()) {
- fip.error("Configuration for '" + ftype + "' is not available.");
- fip.checkErrors();
- }
- else {
- result = new CompilerDriver::ConfigData();
- ParseConfigData(fip,*result);
+ 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.";
+ }
+ result = new CompilerDriver::ConfigData();
+ ParseConfigData(fip,*result);
return result;
}
More information about the llvm-commits
mailing list