diff options
-rw-r--r-- | Source/cmSiteNameCommand.cxx | 100 |
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)); + } + } + } + } } } |