| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file LICENSE.rst or https://cmake.org/licensing for details. */ |
| #include "cmSiteNameCommand.h" |
| |
| #include "cmsys/RegularExpression.hxx" |
| |
| #include "cmExecutionStatus.h" |
| #include "cmMakefile.h" |
| #include "cmStateTypes.h" |
| #include "cmSystemTools.h" |
| #include "cmValue.h" |
| |
| // cmSiteNameCommand |
| bool cmSiteNameCommand(std::vector<std::string> const& args, |
| cmExecutionStatus& status) |
| { |
| if (args.size() != 1) { |
| status.SetError("called with incorrect number of arguments"); |
| return false; |
| } |
| std::vector<std::string> paths; |
| paths.emplace_back("/usr/bsd"); |
| paths.emplace_back("/usr/sbin"); |
| paths.emplace_back("/usr/bin"); |
| paths.emplace_back("/bin"); |
| paths.emplace_back("/sbin"); |
| paths.emplace_back("/usr/local/bin"); |
| |
| cmValue cacheValue = status.GetMakefile().GetDefinition(args[0]); |
| if (cacheValue) { |
| return true; |
| } |
| |
| cmValue temp = status.GetMakefile().GetDefinition("HOSTNAME"); |
| std::string hostname_cmd; |
| if (temp) { |
| hostname_cmd = *temp; |
| } else { |
| hostname_cmd = cmSystemTools::FindProgram("hostname", paths); |
| } |
| |
| std::string siteName = "unknown"; |
| #if defined(_WIN32) && !defined(__CYGWIN__) |
| std::string host; |
| if (cmSystemTools::ReadRegistryValue( |
| "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\" |
| "Control\\ComputerName\\ComputerName;ComputerName", |
| host)) { |
| siteName = host; |
| } |
| #else |
| // try to find the hostname for this computer |
| if (!cmIsOff(hostname_cmd)) { |
| std::string host; |
| cmSystemTools::RunSingleCommand(hostname_cmd, &host, nullptr, nullptr, |
| nullptr, cmSystemTools::OUTPUT_NONE); |
| |
| // got the hostname |
| if (!host.empty()) { |
| // remove any white space from the host name |
| std::string hostRegExp = "[ \t\n\r]*([^\t\n\r ]*)[ \t\n\r]*"; |
| cmsys::RegularExpression hostReg(hostRegExp.c_str()); |
| if (hostReg.find(host.c_str())) { |
| // strip whitespace |
| host = hostReg.match(1); |
| } |
| |
| if (!host.empty()) { |
| siteName = host; |
| } |
| } |
| } |
| #endif |
| status.GetMakefile().AddCacheDefinition( |
| args[0], siteName, "Name of the computer/site where compile is being run", |
| cmStateEnums::STRING); |
| |
| return true; |
| } |