Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "SundancePathUtils.hpp"
00043 #include "SundanceDefaultPath.hpp"
00044 #include <unistd.h>
00045 #ifndef _MSC_VER
00046 #include <sys/unistd.h>
00047 #endif
00048
00049 using Teuchos::Array;
00050
00051 using std::ifstream;
00052
00053 namespace Sundance
00054 {
00055 string searchForFile(const std::string& name)
00056 {
00057 std::string pathSep = "/";
00058 Array<string> path = parsePathStr();
00059
00060 if (name.length() && name[0]=='/') return name;
00061 for (int i=0; i<path.size(); i++)
00062 {
00063 ifstream fileToTry((path[i] + pathSep + name).c_str());
00064 if (!fileToTry) continue;
00065 return path[i] + pathSep + name;
00066 }
00067
00068 TEUCHOS_TEST_FOR_EXCEPTION(true, std::runtime_error, "could not find file "
00069 << name << " in path " << path);
00070 }
00071
00072 string getPathStr()
00073 {
00074 char* pathEnvStr = getenv("SUNDANCE_PATH");
00075 char* pyPathEnvStr = getenv("PYTHONPATH");
00076 std::string path;
00077
00078 if (pathEnvStr == NULL)
00079 {
00080 path = defaultSundancePath();
00081 }
00082 else
00083 {
00084 path = pathEnvStr;
00085 }
00086 if (pyPathEnvStr!=NULL)
00087 {
00088 path = std::string(pyPathEnvStr) + ":" + path;
00089 }
00090 return path;
00091 }
00092
00093 Array<string> parsePathStr()
00094 {
00095 std::string pathStr = getPathStr();
00096
00097 Array<string> rtn;
00098
00099 unsigned int begin;
00100 unsigned int end;
00101
00102 begin = pathStr.find_first_not_of(":");
00103
00104 while (begin < pathStr.length())
00105 {
00106 end = pathStr.find_first_of(":", begin);
00107
00108 rtn.append(pathStr.substr(begin, end-begin));
00109 begin = pathStr.find_first_not_of(":", end);
00110 }
00111
00112 return rtn;
00113 }
00114 }