| /* 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 "cmSystemTools.h" |
| |
| #include <sstream> |
| #include <utility> |
| |
| 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()); |
| } |
| } |