[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