int runExecutable() { assert(!gExePath.isEmpty()); assert(gExePath.isValid()); // build arguments std::vector<const char*> args; // args[0] should be the name of the executable args.push_back(gExePath.c_str()); // Skip first argument to -run; it's a D source file. for (size_t i = 1, length = opts::runargs.size(); i < length; i++) { args.push_back(opts::runargs[i].c_str()); } // terminate args list args.push_back(NULL); // try to call linker!!! std::string errstr; int status = llvm::sys::Program::ExecuteAndWait(gExePath, &args[0], NULL, NULL, 0,0, &errstr); if (status < 0) { error("program received signal %d (%s)", -status, strsignal(-status)); return -status; } if (!errstr.empty()) { error("failed to execute program"); if (!errstr.empty()) error("error message: %s", errstr.c_str()); fatal(); } return status; }
void deleteExecutable() { if (!gExePath.isEmpty()) { assert(gExePath.isValid()); assert(!gExePath.isDirectory()); gExePath.eraseFromDisk(false); } }
void deleteExecutable() { if (!gExePath.isEmpty()) { assert(gExePath.isValid()); bool is_directory; assert(!(!llvm::sys::fs::is_directory(gExePath.str(), is_directory) && is_directory)); gExePath.eraseFromDisk(false); } }
int runExecutable() { assert(!gExePath.isEmpty()); assert(gExePath.isValid()); // Run executable int status = ExecuteToolAndWait(gExePath, opts::runargs, !quiet || global.params.verbose); if (status < 0) { #if defined(_MSC_VER) error("program received signal %d", -status); #else error("program received signal %d (%s)", -status, strsignal(-status)); #endif return -status; } return status; }
bool ConfigFile::locate(sys::Path& p, const char* argv0, void* mainAddr, const char* filename) { // temporary configuration // try the current working dir p = sys::Path::GetCurrentDirectory(); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; // try next to the executable p = sys::Path::GetMainExecutable(argv0, mainAddr); p.eraseComponent(); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; // user configuration // try ~/.ldc p = sys::Path::GetUserHomeDirectory(); p.appendComponent(".ldc"); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; #if _WIN32 // try home dir p = sys::Path::GetUserHomeDirectory(); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; #endif // system configuration // try in etc relative to the executable: exe\..\etc // do not use .. in path because of security risks p = sys::Path::GetMainExecutable(argv0, mainAddr); p.eraseComponent(); p.eraseComponent(); if (!p.isEmpty()) { p.appendComponent("etc"); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; } #if _WIN32 // try the install-prefix p = sys::Path(LDC_INSTALL_PREFIX); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; #else // try the install-prefix/etc p = sys::Path(LDC_INSTALL_PREFIX); p.appendComponent("etc"); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; // try the install-prefix/etc/ldc p = sys::Path(LDC_INSTALL_PREFIX); p.appendComponent("etc"); p.appendComponent("ldc"); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; // try /etc (absolute path) p = sys::Path("/etc"); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; // try /etc/ldc (absolute path) p = sys::Path("/etc/ldc"); p.appendComponent(filename); if (sys::fs::exists(p.str())) return true; #endif return false; }
void MetaSema::actOnICommand(llvm::sys::Path path) const { if (path.isEmpty()) m_Interpreter.DumpIncludePath(); else m_Interpreter.AddIncludePath(path.str()); }