Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: tools/gn/value_extractors.cc

Issue 630223002: gn: Support build directories outside the source tree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/gn/value_extractors.cc
diff --git a/tools/gn/value_extractors.cc b/tools/gn/value_extractors.cc
index 9e6a37edc95c6c27478b0434ddc7f49d6ad9d645..37ee767aeca8ab03755e4f1799fd23da02f75bbb 100644
--- a/tools/gn/value_extractors.cc
+++ b/tools/gn/value_extractors.cc
@@ -58,8 +58,6 @@ bool ListValueUniqueExtractor(const Value& value,
return true;
}
-// This extractor rejects files with system-absolute file paths. If we need
-// that in the future, we'll have to add some flag to control this.
struct RelativeFileConverter {
RelativeFileConverter(const BuildSettings* build_settings_in,
const SourceDir& current_dir_in)
@@ -70,14 +68,7 @@ struct RelativeFileConverter {
if (!v.VerifyTypeIs(Value::STRING, err))
return false;
*out = current_dir.ResolveRelativeFile(v.string_value(),
- build_settings->root_path_utf8());
- if (out->is_system_absolute()) {
- *err = Err(v, "System-absolute file path.",
- "You can't list a system-absolute file path here. Please include "
- "only files in\nthe source tree. Maybe you meant to begin with two "
- "slashes to indicate an\nabsolute path in the source tree?");
- return false;
- }
+ build_settings->root_path());
return true;
}
const BuildSettings* build_settings;
@@ -94,7 +85,7 @@ struct RelativeDirConverter {
if (!v.VerifyTypeIs(Value::STRING, err))
return false;
*out = current_dir.ResolveRelativeDir(v.string_value(),
- build_settings->root_path_utf8());
+ build_settings->root_path());
return true;
}
const BuildSettings* build_settings;
@@ -104,34 +95,41 @@ struct RelativeDirConverter {
// Fills in a label.
template<typename T> struct LabelResolver {
LabelResolver(const SourceDir& current_dir_in,
- const Label& current_toolchain_in)
+ const Label& current_toolchain_in,
+ const base::FilePath& source_root_in)
: current_dir(current_dir_in),
- current_toolchain(current_toolchain_in) {}
+ current_toolchain(current_toolchain_in),
+ source_root(source_root_in) {}
bool operator()(const Value& v, Label* out, Err* err) const {
if (!v.VerifyTypeIs(Value::STRING, err))
return false;
- *out = Label::Resolve(current_dir, current_toolchain, v, err);
+ *out = Label::Resolve(current_dir, current_toolchain, v, source_root, err);
return !err->has_error();
}
const SourceDir& current_dir;
const Label& current_toolchain;
+ const base::FilePath& source_root;
};
// Fills the label part of a LabelPtrPair, leaving the pointer null.
template<typename T> struct LabelPtrResolver {
LabelPtrResolver(const SourceDir& current_dir_in,
- const Label& current_toolchain_in)
+ const Label& current_toolchain_in,
+ const base::FilePath& source_root_in)
: current_dir(current_dir_in),
- current_toolchain(current_toolchain_in) {}
+ current_toolchain(current_toolchain_in),
+ source_root(source_root_in) {}
bool operator()(const Value& v, LabelPtrPair<T>* out, Err* err) const {
if (!v.VerifyTypeIs(Value::STRING, err))
return false;
- out->label = Label::Resolve(current_dir, current_toolchain, v, err);
+ out->label = Label::Resolve(current_dir, current_toolchain, v, source_root,
+ err);
out->origin = v.origin();
return !err->has_error();
}
const SourceDir& current_dir;
const Label& current_toolchain;
+ const base::FilePath& source_root;
};
} // namespace
@@ -169,44 +167,52 @@ bool ExtractListOfRelativeDirs(const BuildSettings* build_settings,
RelativeDirConverter(build_settings, current_dir));
}
-bool ExtractListOfLabels(const Value& value,
+bool ExtractListOfLabels(const BuildSettings* build_settings,
+ const Value& value,
const SourceDir& current_dir,
const Label& current_toolchain,
LabelTargetVector* dest,
Err* err) {
return ListValueExtractor(value, dest, err,
- LabelPtrResolver<Target>(current_dir,
- current_toolchain));
+ LabelPtrResolver<Target>(
+ current_dir, current_toolchain,
+ build_settings->root_path()));
}
-bool ExtractListOfUniqueLabels(const Value& value,
+bool ExtractListOfUniqueLabels(const BuildSettings* build_settings,
+ const Value& value,
const SourceDir& current_dir,
const Label& current_toolchain,
UniqueVector<Label>* dest,
Err* err) {
return ListValueUniqueExtractor(value, dest, err,
- LabelResolver<Config>(current_dir,
- current_toolchain));
+ LabelResolver<Config>(
+ current_dir, current_toolchain,
+ build_settings->root_path()));
}
-bool ExtractListOfUniqueLabels(const Value& value,
+bool ExtractListOfUniqueLabels(const BuildSettings* build_settings,
+ const Value& value,
const SourceDir& current_dir,
const Label& current_toolchain,
UniqueVector<LabelConfigPair>* dest,
Err* err) {
return ListValueUniqueExtractor(value, dest, err,
- LabelPtrResolver<Config>(current_dir,
- current_toolchain));
+ LabelPtrResolver<Config>(
+ current_dir, current_toolchain,
+ build_settings->root_path()));
}
-bool ExtractListOfUniqueLabels(const Value& value,
+bool ExtractListOfUniqueLabels(const BuildSettings* build_settings,
+ const Value& value,
const SourceDir& current_dir,
const Label& current_toolchain,
UniqueVector<LabelTargetPair>* dest,
Err* err) {
return ListValueUniqueExtractor(value, dest, err,
- LabelPtrResolver<Target>(current_dir,
- current_toolchain));
+ LabelPtrResolver<Target>(
+ current_dir, current_toolchain,
+ build_settings->root_path()));
}
bool ExtractRelativeFile(const BuildSettings* build_settings,

Powered by Google App Engine
This is Rietveld 408576698