Internals: Use common wrapper for setenv

This commit is contained in:
Wilson Snyder 2009-03-28 09:15:13 -04:00
parent 45e8ed6b49
commit 202a8bc3bb
2 changed files with 23 additions and 15 deletions

View File

@ -303,19 +303,28 @@ void V3Options::unlinkRegexp(const string& dir, const string& regexp) {
//###################################################################### //######################################################################
// Environment // Environment
string V3Options::getenvStr(const char* envvar, const char* defaultValue) { string V3Options::getenvStr(const string& envvar, const string& defaultValue) {
if (const char* envvalue = getenv(envvar)) { if (const char* envvalue = getenv(envvar.c_str())) {
return envvalue; return envvalue;
} else { } else {
return defaultValue; return defaultValue;
} }
} }
void V3Options::setenvStr(const string& envvar, const string& value, const string& why) {
if (why != "") {
UINFO(1,"export "<<envvar<<"="<<value<<" # "<<why<<endl);
} else {
UINFO(1,"export "<<envvar<<"="<<value<<endl);
}
setenv(envvar.c_str(),value.c_str(),true);
}
string V3Options::getenvSYSTEMC() { string V3Options::getenvSYSTEMC() {
string var = getenvStr("SYSTEMC",""); string var = getenvStr("SYSTEMC","");
if (var == "" && string(DEFENV_SYSTEMC) != "") { if (var == "" && string(DEFENV_SYSTEMC) != "") {
var = DEFENV_SYSTEMC; var = DEFENV_SYSTEMC;
UINFO(1,"export SYSTEMC="<<var<<" # Hardcoded at build time"<<endl); setenvStr("SYSTEMC", var, "Hardcoded at build time");
setenv("SYSTEMC", var.c_str(), false);
} }
// Only correct or check it if we really need the value // Only correct or check it if we really need the value
if ((v3Global.opt.systemPerl() || v3Global.opt.systemC()) if ((v3Global.opt.systemPerl() || v3Global.opt.systemC())
@ -327,12 +336,12 @@ string V3Options::getenvSYSTEMC() {
} }
return var; return var;
} }
string V3Options::getenvSYSTEMC_ARCH() { string V3Options::getenvSYSTEMC_ARCH() {
string var = getenvStr("SYSTEMC_ARCH",""); string var = getenvStr("SYSTEMC_ARCH","");
if (var == "" && string(DEFENV_SYSTEMC_ARCH) != "") { if (var == "" && string(DEFENV_SYSTEMC_ARCH) != "") {
var = DEFENV_SYSTEMC_ARCH; var = DEFENV_SYSTEMC_ARCH;
UINFO(1,"export SYSTEMC_ARCH="<<var<<" # Hardcoded at build time"<<endl); setenvStr("SYSTEMC_ARCH", var, "Hardcoded at build time");
setenv("SYSTEMC_ARCH", var.c_str(), false);
} }
if (var == "") { if (var == "") {
struct utsname uts; struct utsname uts;
@ -341,17 +350,16 @@ string V3Options::getenvSYSTEMC_ARCH() {
if (wildmatch(sysname.c_str(), "*solaris*")) { var = "gccsparcOS5"; } if (wildmatch(sysname.c_str(), "*solaris*")) { var = "gccsparcOS5"; }
else if (wildmatch(sysname.c_str(), "*cygwin*")) { var ="cygwin"; } else if (wildmatch(sysname.c_str(), "*cygwin*")) { var ="cygwin"; }
else { var = "linux"; } else { var = "linux"; }
UINFO(1,"export SYSTEMC_ARCH="<<var<<" # From sysname '"<<sysname<<"'"<<endl); setenvStr("SYSTEMC_ARCH", var,"From sysname '"+sysname+"'");
setenv("SYSTEMC_ARCH", var.c_str(), false);
} }
return var; return var;
} }
string V3Options::getenvSYSTEMPERL() { string V3Options::getenvSYSTEMPERL() {
string var = getenvStr("SYSTEMPERL",""); string var = getenvStr("SYSTEMPERL","");
if (var == "" && string(DEFENV_SYSTEMPERL) != "") { if (var == "" && string(DEFENV_SYSTEMPERL) != "") {
var = DEFENV_SYSTEMPERL; var = DEFENV_SYSTEMPERL;
UINFO(1,"export SYSTEMPERL="<<var<<" # Hardcoded at build time"<<endl); setenvStr("SYSTEMC_PERL", var, "Hardcoded at build time");
setenv("SYSTEMC_PERL", var.c_str(), false);
} }
// Only correct or check it if we really need the value // Only correct or check it if we really need the value
if ((v3Global.opt.systemPerl() || v3Global.opt.trace()) && !v3Global.opt.lintOnly()) { if ((v3Global.opt.systemPerl() || v3Global.opt.trace()) && !v3Global.opt.lintOnly()) {
@ -359,8 +367,7 @@ string V3Options::getenvSYSTEMPERL() {
string testdir = V3Options::getenvW() + "/hw/utils/perltools/SystemC"; // Hack for internal testing string testdir = V3Options::getenvW() + "/hw/utils/perltools/SystemC"; // Hack for internal testing
if (V3Options::fileStatDir(testdir)) { if (V3Options::fileStatDir(testdir)) {
var = testdir; var = testdir;
UINFO(1,"export SYSTEMPERL="<<var<<endl); setenvStr ("SYSTEMPERL", var, "From W");
setenv ("SYSTEMPERL", var.c_str(), false);
} }
} }
if (var == "") { if (var == "") {
@ -374,12 +381,12 @@ string V3Options::getenvSYSTEMPERL() {
} }
return var; return var;
} }
string V3Options::getenvVERILATOR_ROOT() { string V3Options::getenvVERILATOR_ROOT() {
string var = getenvStr("VERILATOR_ROOT",""); string var = getenvStr("VERILATOR_ROOT","");
if (var == "" && string(DEFENV_VERILATOR_ROOT) != "") { if (var == "" && string(DEFENV_VERILATOR_ROOT) != "") {
var = DEFENV_VERILATOR_ROOT; var = DEFENV_VERILATOR_ROOT;
UINFO(1,"export VERILATOR_ROOT="<<var<<" # Hardcoded at build time"<<endl); setenvStr("VERILATOR_ROOT", var.c_str(), "Hardcoded at build time");
setenv("VERILATOR_ROOT", var.c_str(), false);
} }
if (var == "") { if (var == "") {
v3fatal("$VERILATOR_ROOT needs to be in environment\n"); v3fatal("$VERILATOR_ROOT needs to be in environment\n");

View File

@ -168,7 +168,8 @@ class V3Options {
void coverage(bool flag) { m_coverageLine = m_coverageToggle = m_coverageUser = flag; } void coverage(bool flag) { m_coverageLine = m_coverageToggle = m_coverageUser = flag; }
bool onoff(const char* sw, const char* arg, bool& flag); bool onoff(const char* sw, const char* arg, bool& flag);
static bool wildmatchi(const char* s, const char* p); static bool wildmatchi(const char* s, const char* p);
static string getenvStr(const char* envvar, const char* defaultValue); static string getenvStr(const string& envvar, const string& defaultValue);
static void setenvStr(const string& envvar, const string& value, const string& why);
public: public:
// CREATORS // CREATORS