| /* 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; | |
| } |