std::string Environment::system_prefix() { if(!system_prefix_.empty()) return system_prefix_; // 1. Check if our configure prefix is overridden by the environment. const char* path = getenv("RBX_PREFIX_PATH"); if(path && verify_paths(path)) { system_prefix_ = path; return path; } // 2. Check if our configure prefix is valid. path = RBX_PREFIX_PATH; if(verify_paths(path)) { system_prefix_ = path; return path; } // 3. Check if we can derive paths from the executable name. // TODO: For Windows, substitute '/' for '\\' std::string name = executable_name(); size_t exe = name.rfind('/'); if(exe != std::string::npos) { std::string prefix = name.substr(0, exe - strlen(RBX_BIN_PATH)); if(verify_paths(prefix)) { system_prefix_ = prefix; return prefix; } } throw MissingRuntime("FATAL ERROR: unable to find Rubinius runtime directories."); }
std::string Environment::system_prefix() { if(!system_prefix_.empty()) return system_prefix_; std::string failure_reason; // 1. Check if our configure prefix is overridden by the environment. const char* path = getenv("RBX_PREFIX_PATH"); if(path && verify_paths(path, failure_reason)) { system_prefix_ = path; return path; } // 2. Check if our configure prefix is valid. path = RBX_PREFIX_PATH; if(verify_paths(path, failure_reason)) { system_prefix_ = path; return path; } // 3. Check if we can derive paths from the executable name. // TODO: For Windows, substitute '/' for '\\' std::string name = executable_name(); size_t exe = name.rfind('/'); if(exe != std::string::npos) { std::string prefix = name.substr(0, exe - strlen(RBX_BIN_PATH)); if(verify_paths(prefix, failure_reason)) { system_prefix_ = prefix; return prefix; } } std::string error("Unable to find Rubinius runtime directories: "); error.append(failure_reason); missing_core(error.c_str()); }