Add a "gn_version" variable.
See "gn_version variable" on gn-dev.
Bug: none
Change-Id: Id2c28c0fc577119cbe40c322e557019d1b3d03ff
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/7420
Commit-Queue: Brett Wilson <brettw@chromium.org>
Commit-Queue: Nico Weber <thakis@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
diff --git a/build/gen.py b/build/gen.py
index 534cf5d..989eb5a 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -138,10 +138,11 @@
#ifndef OUT_LAST_COMMIT_POSITION_H_
#define OUT_LAST_COMMIT_POSITION_H_
+#define LAST_COMMIT_POSITION_NUM %s
#define LAST_COMMIT_POSITION "%s (%s)"
#endif // OUT_LAST_COMMIT_POSITION_H_
-''' % (mo.group(1), mo.group(2))
+''' % (mo.group(1), mo.group(1), mo.group(2))
# Only write/touch this file if the commit position has changed.
old_contents = ''
diff --git a/src/gn/scope_per_file_provider.cc b/src/gn/scope_per_file_provider.cc
index e30162e..3110a8f 100644
--- a/src/gn/scope_per_file_provider.cc
+++ b/src/gn/scope_per_file_provider.cc
@@ -12,6 +12,8 @@
#include "gn/value.h"
#include "gn/variables.h"
+#include "last_commit_position.h"
+
ScopePerFileProvider::ScopePerFileProvider(Scope* scope, bool allow_target_vars)
: ProgrammaticProvider(scope), allow_target_vars_(allow_target_vars) {}
@@ -23,6 +25,8 @@
return GetCurrentToolchain();
if (ident == variables::kDefaultToolchain)
return GetDefaultToolchain();
+ if (ident == variables::kGnVersion)
+ return GetGnVersion();
if (ident == variables::kPythonPath)
return GetPythonPath();
@@ -61,6 +65,14 @@
return default_toolchain_.get();
}
+const Value* ScopePerFileProvider::GetGnVersion() {
+ if (!gn_version_) {
+ gn_version_ = std::make_unique<Value>(
+ nullptr, static_cast<int64_t>(LAST_COMMIT_POSITION_NUM));
+ }
+ return gn_version_.get();
+}
+
const Value* ScopePerFileProvider::GetPythonPath() {
if (!python_path_) {
python_path_ = std::make_unique<Value>(
diff --git a/src/gn/scope_per_file_provider.h b/src/gn/scope_per_file_provider.h
index 16496e5..228bac3 100644
--- a/src/gn/scope_per_file_provider.h
+++ b/src/gn/scope_per_file_provider.h
@@ -26,6 +26,7 @@
private:
const Value* GetCurrentToolchain();
const Value* GetDefaultToolchain();
+ const Value* GetGnVersion();
const Value* GetPythonPath();
const Value* GetRootBuildDir();
const Value* GetRootGenDir();
@@ -38,6 +39,7 @@
// All values are lazily created.
std::unique_ptr<Value> current_toolchain_;
std::unique_ptr<Value> default_toolchain_;
+ std::unique_ptr<Value> gn_version_;
std::unique_ptr<Value> python_path_;
std::unique_ptr<Value> root_build_dir_;
std::unique_ptr<Value> root_gen_dir_;
diff --git a/src/gn/scope_per_file_provider_unittest.cc b/src/gn/scope_per_file_provider_unittest.cc
index 8c22666..8e38903 100644
--- a/src/gn/scope_per_file_provider_unittest.cc
+++ b/src/gn/scope_per_file_provider_unittest.cc
@@ -31,6 +31,9 @@
EXPECT_EQ("//out/Debug", GPV(variables::kRootOutDir));
EXPECT_EQ("//out/Debug/gen/source", GPV(variables::kTargetGenDir));
EXPECT_EQ("//out/Debug/obj/source", GPV(variables::kTargetOutDir));
+
+ EXPECT_GE(provider.GetProgrammaticValue(variables::kGnVersion)->int_value(),
+ 0);
}
// Test some with an alternate toolchain.
diff --git a/src/gn/variables.cc b/src/gn/variables.cc
index b6293b4..0d56301 100644
--- a/src/gn/variables.cc
+++ b/src/gn/variables.cc
@@ -10,6 +10,19 @@
// Built-in variables ----------------------------------------------------------
+const char kGnVersion[] = "gn_version";
+const char kGnVersion_HelpShort[] =
+ "gn_version: [number] The version of gn.";
+const char kGnVersion_Help[] =
+ R"(gn_version: [number] The version of gn.
+
+ Corresponds to the number printed by `gn --version`.
+
+Example
+
+ assert(gn_version >= 1700, "need GN version 1700 for the frobulate feature")
+)";
+
const char kHostCpu[] = "host_cpu";
const char kHostCpu_HelpShort[] =
"host_cpu: [string] The processor architecture that GN is running on.";
@@ -2188,6 +2201,7 @@
INSERT_VARIABLE(CurrentOs)
INSERT_VARIABLE(CurrentToolchain)
INSERT_VARIABLE(DefaultToolchain)
+ INSERT_VARIABLE(GnVersion)
INSERT_VARIABLE(HostCpu)
INSERT_VARIABLE(HostOs)
INSERT_VARIABLE(Invoker)
@@ -2196,9 +2210,9 @@
INSERT_VARIABLE(RootGenDir)
INSERT_VARIABLE(RootOutDir)
INSERT_VARIABLE(TargetCpu)
- INSERT_VARIABLE(TargetOs)
INSERT_VARIABLE(TargetGenDir)
INSERT_VARIABLE(TargetName)
+ INSERT_VARIABLE(TargetOs)
INSERT_VARIABLE(TargetOutDir)
}
return info_map;
diff --git a/src/gn/variables.h b/src/gn/variables.h
index c684caf..df30632 100644
--- a/src/gn/variables.h
+++ b/src/gn/variables.h
@@ -36,6 +36,10 @@
extern const char kDefaultToolchain_HelpShort[];
extern const char kDefaultToolchain_Help[];
+extern const char kGnVersion[];
+extern const char kGnVersion_HelpShort[];
+extern const char kGnVersion_Help[];
+
extern const char kInvoker[];
extern const char kInvoker_HelpShort[];
extern const char kInvoker_Help[];