Chromium Code Reviews| Index: tools/gn/target.cc |
| diff --git a/tools/gn/target.cc b/tools/gn/target.cc |
| index 905ee4f3c65cc81eea8460543493a7b5011f605e..f684265e6fadeeeb0830fadcf720247cba845592 100644 |
| --- a/tools/gn/target.cc |
| +++ b/tools/gn/target.cc |
| @@ -163,6 +163,8 @@ const char* Target::GetStringForOutputType(OutputType type) { |
| return "Source set"; |
| case COPY_FILES: |
| return "Copy"; |
| + case COPY_BUNDLE_DATA: |
| + return "Copy bundle data"; |
| case ACTION: |
| return "Action"; |
| case ACTION_FOREACH: |
| @@ -220,6 +222,7 @@ bool Target::OnResolved(Err* err) { |
| all_libs_.append(cur.libs().begin(), cur.libs().end()); |
| } |
| + PullRecursiveBundleData(); |
| PullDependentTargetLibs(); |
| PullRecursiveHardDeps(); |
| if (!ResolvePrecompiledHeaders(err)) |
| @@ -259,6 +262,7 @@ bool Target::IsFinal() const { |
| output_type_ == ACTION || |
| output_type_ == ACTION_FOREACH || |
| output_type_ == COPY_FILES || |
| + output_type_ == COPY_BUNDLE_DATA || |
| (output_type_ == STATIC_LIBRARY && complete_static_lib_); |
| } |
| @@ -417,6 +421,27 @@ void Target::PullRecursiveHardDeps() { |
| } |
| } |
| +void Target::PullRecursiveBundleData() { |
|
brettw
2016/01/26 23:51:41
We should have a test in target_unittest.cc that t
sdefresne
2016/01/27 13:13:45
Done.
|
| + for (const auto& pair : GetDeps(DEPS_LINKED)) { |
| + if (pair.ptr->output_type() == EXECUTABLE || |
| + pair.ptr->output_type() == SHARED_LIBRARY || |
| + pair.ptr->output_type() == LOADABLE_MODULE || |
| + pair.ptr->output_type() == COPY_BUNDLE_DATA) |
| + continue; |
| + |
| + bundle_data_.insert(pair.ptr->bundle_data().begin(), |
| + pair.ptr->bundle_data().end()); |
| + } |
| + |
| + if (output_type_ != COPY_BUNDLE_DATA) |
| + return; |
| + |
| + // TODO(sdefresne): .xcasset needs to have a specific treatment. This will |
| + // requires a second target using the "bundle_data" information, and for a |
| + // way to filter out .xcasset from "copy_bundle_data". |
| + sources_.insert(sources_.end(), bundle_data_.begin(), bundle_data_.end()); |
| +} |
| + |
| void Target::FillOutputFiles() { |
| const Tool* tool = toolchain_->GetToolForTargetFinalOutput(this); |
| bool check_tool_outputs = false; |
| @@ -424,6 +449,7 @@ void Target::FillOutputFiles() { |
| case GROUP: |
| case SOURCE_SET: |
| case COPY_FILES: |
| + case COPY_BUNDLE_DATA: |
| case ACTION: |
| case ACTION_FOREACH: { |
| // These don't get linked to and use stamps which should be the first |