From f23760ffac85f4cee6206c654265df9b3a46bf90 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 8 Oct 2018 23:59:44 +0200 Subject: string(TIMESTAMP): Fix unset TZ The logic added by commit v3.6.0-rc1~338^2 (CMake: Extend TIMESTAMP sub-commands with new unix time format specifier, 2016-02-16) to restore the `TZ` environment variable does not properly handle the case in which the variable was originally not set. Unset the variable in this case. Fixes: #18431 --- Source/cmTimestamp.cxx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Source/cmTimestamp.cxx b/Source/cmTimestamp.cxx index 14cf6e9..da5d21e 100644 --- a/Source/cmTimestamp.cxx +++ b/Source/cmTimestamp.cxx @@ -96,7 +96,7 @@ time_t cmTimestamp::CreateUtcTimeTFromTm(struct tm& tm) const // From Linux timegm() manpage. std::string tz_old; - cmSystemTools::GetEnv("TZ", tz_old); + bool const tz_was_set = cmSystemTools::GetEnv("TZ", tz_old); tz_old = "TZ=" + tz_old; // The standard says that "TZ=" or "TZ=[UNRECOGNIZED_TZ]" means UTC. @@ -109,7 +109,17 @@ time_t cmTimestamp::CreateUtcTimeTFromTm(struct tm& tm) const time_t result = mktime(&tm); +# ifdef CMAKE_BUILD_WITH_CMAKE + if (tz_was_set) { + cmSystemTools::PutEnv(tz_old); + } else { + cmSystemTools::UnsetEnv("TZ"); + } +# else + // No UnsetEnv during bootstrap. This is good enough for CMake itself. cmSystemTools::PutEnv(tz_old); + static_cast(tz_was_set); +# endif tzset(); -- cgit v0.12