1*635a8641SAndroid Build Coastguard Worker--- a/base/build_time.cc 2*635a8641SAndroid Build Coastguard Worker+++ b/base/build_time.cc 3*635a8641SAndroid Build Coastguard Worker@@ -4,20 +4,31 @@ 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Worker #include "base/build_time.h" 6*635a8641SAndroid Build Coastguard Worker 7*635a8641SAndroid Build Coastguard Worker-// Imports the generated build date, i.e. BUILD_DATE. 8*635a8641SAndroid Build Coastguard Worker-#include "base/generated_build_date.h" 9*635a8641SAndroid Build Coastguard Worker- 10*635a8641SAndroid Build Coastguard Worker #include "base/logging.h" 11*635a8641SAndroid Build Coastguard Worker #include "base/time/time.h" 12*635a8641SAndroid Build Coastguard Worker 13*635a8641SAndroid Build Coastguard Worker+#ifdef __ANDROID__ 14*635a8641SAndroid Build Coastguard Worker+#include <cutils/properties.h> 15*635a8641SAndroid Build Coastguard Worker+#endif 16*635a8641SAndroid Build Coastguard Worker+ 17*635a8641SAndroid Build Coastguard Worker namespace base { 18*635a8641SAndroid Build Coastguard Worker 19*635a8641SAndroid Build Coastguard Worker Time GetBuildTime() { 20*635a8641SAndroid Build Coastguard Worker Time integral_build_time; 21*635a8641SAndroid Build Coastguard Worker- // BUILD_DATE is exactly "Mmm DD YYYY HH:MM:SS". 22*635a8641SAndroid Build Coastguard Worker- // See //build/write_build_date_header.py. "HH:MM:SS" is normally expected to 23*635a8641SAndroid Build Coastguard Worker- // be "05:00:00" but is not enforced here. 24*635a8641SAndroid Build Coastguard Worker- bool result = Time::FromUTCString(BUILD_DATE, &integral_build_time); 25*635a8641SAndroid Build Coastguard Worker+ // The format of __DATE__ and __TIME__ is specified by the ANSI C Standard, 26*635a8641SAndroid Build Coastguard Worker+ // section 6.8.8. 27*635a8641SAndroid Build Coastguard Worker+ // 28*635a8641SAndroid Build Coastguard Worker+ // __DATE__ is exactly "Mmm DD YYYY". 29*635a8641SAndroid Build Coastguard Worker+ // __TIME__ is exactly "hh:mm:ss". 30*635a8641SAndroid Build Coastguard Worker+#if defined(__ANDROID__) 31*635a8641SAndroid Build Coastguard Worker+ char kDateTime[PROPERTY_VALUE_MAX]; 32*635a8641SAndroid Build Coastguard Worker+ property_get("ro.build.date", kDateTime, "Sep 02 2008 08:00:00 PST"); 33*635a8641SAndroid Build Coastguard Worker+#elif defined(DONT_EMBED_BUILD_METADATA) && !defined(OFFICIAL_BUILD) 34*635a8641SAndroid Build Coastguard Worker+ const char kDateTime[] = "Sep 02 2008 08:00:00 PST"; 35*635a8641SAndroid Build Coastguard Worker+#else 36*635a8641SAndroid Build Coastguard Worker+ const char kDateTime[] = __DATE__ " " __TIME__ " PST"; 37*635a8641SAndroid Build Coastguard Worker+#endif 38*635a8641SAndroid Build Coastguard Worker+ bool result = Time::FromString(kDateTime, &integral_build_time); 39*635a8641SAndroid Build Coastguard Worker DCHECK(result); 40*635a8641SAndroid Build Coastguard Worker return integral_build_time; 41*635a8641SAndroid Build Coastguard Worker } 42*635a8641SAndroid Build Coastguard Worker--- a/base/build_time_unittest.cc 43*635a8641SAndroid Build Coastguard Worker+++ b/base/build_time_unittest.cc 44*635a8641SAndroid Build Coastguard Worker@@ -3,13 +3,19 @@ 45*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file. 46*635a8641SAndroid Build Coastguard Worker 47*635a8641SAndroid Build Coastguard Worker #include "base/build_time.h" 48*635a8641SAndroid Build Coastguard Worker+#if !defined(DONT_EMBED_BUILD_METADATA) 49*635a8641SAndroid Build Coastguard Worker #include "base/generated_build_date.h" 50*635a8641SAndroid Build Coastguard Worker+#endif 51*635a8641SAndroid Build Coastguard Worker #include "base/time/time.h" 52*635a8641SAndroid Build Coastguard Worker 53*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h" 54*635a8641SAndroid Build Coastguard Worker 55*635a8641SAndroid Build Coastguard Worker TEST(BuildTime, DateLooksValid) { 56*635a8641SAndroid Build Coastguard Worker+#if !defined(DONT_EMBED_BUILD_METADATA) 57*635a8641SAndroid Build Coastguard Worker char build_date[] = BUILD_DATE; 58*635a8641SAndroid Build Coastguard Worker+#else 59*635a8641SAndroid Build Coastguard Worker+ char build_date[] = "Sep 02 2008 05:00:00"; 60*635a8641SAndroid Build Coastguard Worker+#endif 61*635a8641SAndroid Build Coastguard Worker 62*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(20u, strlen(build_date)); 63*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(' ', build_date[3]); 64*635a8641SAndroid Build Coastguard Worker@@ -30,8 +36,10 @@ TEST(BuildTime, InThePast) { 65*635a8641SAndroid Build Coastguard Worker EXPECT_LT(base::GetBuildTime(), base::Time::NowFromSystemTime()); 66*635a8641SAndroid Build Coastguard Worker } 67*635a8641SAndroid Build Coastguard Worker 68*635a8641SAndroid Build Coastguard Worker+#if !defined(DONT_EMBED_BUILD_METADATA) 69*635a8641SAndroid Build Coastguard Worker TEST(BuildTime, NotTooFar) { 70*635a8641SAndroid Build Coastguard Worker // BuildTime must be less than 45 days old. 71*635a8641SAndroid Build Coastguard Worker base::Time cutoff(base::Time::Now() - base::TimeDelta::FromDays(45)); 72*635a8641SAndroid Build Coastguard Worker EXPECT_GT(base::GetBuildTime(), cutoff); 73*635a8641SAndroid Build Coastguard Worker } 74*635a8641SAndroid Build Coastguard Worker+#endif 75