summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmSiteNameCommand.cxx100
1 files changed, 64 insertions, 36 deletions
diff --git a/Source/cmSiteNameCommand.cxx b/Source/cmSiteNameCommand.cxx
index c4c59cd..4ccaf80 100644
--- a/Source/cmSiteNameCommand.cxx
+++ b/Source/cmSiteNameCommand.cxx
@@ -48,6 +48,7 @@ bool cmSiteNameCommand::InitialPass(std::vector<std::string> const& args)
this->SetError("called with incorrect number of arguments");
return false;
}
+
const char* cacheValue
= m_Makefile->GetDefinition(args[0].c_str());
if(cacheValue)
@@ -55,49 +56,76 @@ bool cmSiteNameCommand::InitialPass(std::vector<std::string> const& args)
return true;
}
- const char* hostname = m_Makefile->GetDefinition("HOSTNAME");
- if(!hostname)
+ const char *temp = m_Makefile->GetDefinition("HOSTNAME");
+ std::string hostname_cmd;
+ if(temp)
{
- hostname = "hostname";
+ hostname_cmd = temp;
}
- const char* nslookup = m_Makefile->GetDefinition("NSLOOKUP");
- if(!nslookup)
+ else
{
- nslookup = "nslookup";
+ hostname_cmd = cmSystemTools::FindProgram("hostname");
}
- std::string host;
- cmSystemTools::RunCommand(hostname,
- host);
- if (host.length())
+
+ std::string siteName = "unknown";
+
+ // try to find the hostname for this computer
+ if (hostname_cmd.length())
{
- // remove any white space from the host name
- std::string hostRegExp = "[ \t\n\r]*([^\t\n\r ]*)[ \t\n\r]*";
- cmRegularExpression hostReg (hostRegExp.c_str());
- if (hostReg.find(host.c_str()))
+ std::string host;
+ cmSystemTools::RunCommand(hostname_cmd.c_str(),
+ host);
+
+ // got the hostname
+ if (host.length())
{
- // strip whitespace
- host = hostReg.match(1);
- }
- }
+ // remove any white space from the host name
+ std::string hostRegExp = "[ \t\n\r]*([^\t\n\r ]*)[ \t\n\r]*";
+ cmRegularExpression hostReg (hostRegExp.c_str());
+ if (hostReg.find(host.c_str()))
+ {
+ // strip whitespace
+ host = hostReg.match(1);
+ }
- std::string siteName = host;
- if(host.length())
- {
- // try to find the domain name for this computer
- std::string nsCmd = nslookup;
- nsCmd += " ";
- nsCmd += host;
- std::string nsOutput;
- cmSystemTools::RunCommand(nsCmd.c_str(),
- nsOutput);
-
- std::string RegExp = ".*Name:[ \t\n]*";
- RegExp += host;
- RegExp += "\\.([^ \t\n\r]*)[ \t\n\r]*Address:";
- cmRegularExpression reg( RegExp.c_str() );
- if(reg.find(nsOutput.c_str()))
- {
- siteName += '.' + cmSystemTools::LowerCase(reg.match(1));
+ if(host.length())
+ {
+ siteName = host;
+
+ temp = m_Makefile->GetDefinition("NSLOOKUP");
+ std::string nslookup_cmd;
+ if(temp)
+ {
+ nslookup_cmd = temp;
+ }
+ else
+ {
+ nslookup_cmd = cmSystemTools::FindProgram("nslookup");
+ }
+
+ // try to find the domain name for this computer
+ if (nslookup_cmd.length())
+ {
+ nslookup_cmd += " ";
+ nslookup_cmd += host;
+ std::string nsOutput;
+ cmSystemTools::RunCommand(nslookup_cmd.c_str(),
+ nsOutput);
+
+ // got the domain name
+ if (nsOutput.length())
+ {
+ std::string RegExp = ".*Name:[ \t\n]*";
+ RegExp += host;
+ RegExp += "\\.([^ \t\n\r]*)[ \t\n\r]*Address:";
+ cmRegularExpression reg( RegExp.c_str() );
+ if(reg.find(nsOutput.c_str()))
+ {
+ siteName += '.' + cmSystemTools::LowerCase(reg.match(1));
+ }
+ }
+ }
+ }
}
}