| /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying | 
 |    file Copyright.txt or https://cmake.org/licensing for details.  */ | 
 | #include "cmCLocaleEnvironmentScope.h" | 
 |  | 
 | #include <sstream> | 
 | #include <utility> | 
 |  | 
 | #include "cmSystemTools.h" | 
 |  | 
 | cmCLocaleEnvironmentScope::cmCLocaleEnvironmentScope() | 
 | { | 
 |   this->SetEnv("LANGUAGE", ""); | 
 |   this->SetEnv("LC_MESSAGES", "C"); | 
 |  | 
 |   std::string lcAll = this->GetEnv("LC_ALL"); | 
 |  | 
 |   if (!lcAll.empty()) { | 
 |     this->SetEnv("LC_ALL", ""); | 
 |     this->SetEnv("LC_CTYPE", lcAll); | 
 |   } | 
 | } | 
 |  | 
 | std::string cmCLocaleEnvironmentScope::GetEnv(std::string const& key) | 
 | { | 
 |   std::string value; | 
 |   cmSystemTools::GetEnv(key, value); | 
 |   return value; | 
 | } | 
 |  | 
 | void cmCLocaleEnvironmentScope::SetEnv(std::string const& key, | 
 |                                        std::string const& value) | 
 | { | 
 |   std::string oldValue = this->GetEnv(key); | 
 |  | 
 |   this->EnvironmentBackup.insert(std::make_pair(key, oldValue)); | 
 |  | 
 |   if (value.empty()) { | 
 |     cmSystemTools::UnsetEnv(key.c_str()); | 
 |   } else { | 
 |     std::ostringstream tmp; | 
 |     tmp << key << "=" << value; | 
 |     cmSystemTools::PutEnv(tmp.str()); | 
 |   } | 
 | } | 
 |  | 
 | cmCLocaleEnvironmentScope::~cmCLocaleEnvironmentScope() | 
 | { | 
 |   for (auto const& envb : this->EnvironmentBackup) { | 
 |     std::ostringstream tmp; | 
 |     tmp << envb.first << "=" << envb.second; | 
 |     cmSystemTools::PutEnv(tmp.str()); | 
 |   } | 
 | } |