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/xcode_writer.cc

Issue 2779833002: [iOS] Add application target as dependency of xctest module target. (Closed)
Patch Set: Update comments Created 3 years, 9 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
« no previous file with comments | « tools/gn/xcode_object.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/xcode_writer.cc
diff --git a/tools/gn/xcode_writer.cc b/tools/gn/xcode_writer.cc
index 8b96db49cbbfd25874e7d8e26d53744cdc9c6268..c41e4f11ff3bc1d67121b6ab2687dd72e860daf8 100644
--- a/tools/gn/xcode_writer.cc
+++ b/tools/gn/xcode_writer.cc
@@ -33,6 +33,7 @@ namespace {
using TargetToFileList = std::unordered_map<const Target*, Target::FileList>;
using TargetToTarget = std::unordered_map<const Target*, const Target*>;
+using TargetToPBXTarget = std::unordered_map<const Target*, PBXTarget*>;
const char kEarlGreyFileNameIdentifier[] = "egtest.mm";
const char kXCTestFileNameIdentifier[] = "xctest.mm";
@@ -460,6 +461,8 @@ void XcodeWriter::CreateProductsProject(
DCHECK_EQ(xctest_application_targets.size(),
xctest_files_per_application_target.size());
+ TargetToPBXTarget bundle_target_to_pbxtarget;
+
std::string build_path;
std::unique_ptr<base::Environment> env(base::Environment::Create());
@@ -505,6 +508,8 @@ void XcodeWriter::CreateProductsProject(
target->bundle_data().product_type(),
GetBuildScript(target->label().name(), ninja_extra_args, env.get()),
extra_attributes);
+ bundle_target_to_pbxtarget.insert(
+ std::make_pair(target, native_target));
if (!IsXCTestModuleTarget(target))
continue;
@@ -535,6 +540,31 @@ void XcodeWriter::CreateProductsProject(
}
}
+ // Add corresponding application target as dependency of xctest module target
+ // so that application target is re-compiled when compiling xctest module
+ // target.
+ for (const Target* target : targets) {
+ if (target->output_type() != Target::CREATE_BUNDLE)
+ continue;
+ if (!IsXCTestModuleTarget(target))
+ continue;
+
+ const Target* application_target =
+ FindXCTestApplicationTarget(target, targets);
+ PBXTarget* application_pbxtarget =
+ bundle_target_to_pbxtarget[application_target];
+ DCHECK(application_pbxtarget);
+ PBXTarget* xctest_module_pbxtarget = bundle_target_to_pbxtarget[target];
+ DCHECK(xctest_module_pbxtarget);
+
+ std::unique_ptr<PBXContainerItemProxy> container_item_proxy(
+ new PBXContainerItemProxy(main_project.get(), application_pbxtarget));
+ std::unique_ptr<PBXTargetDependency> dependency(new PBXTargetDependency(
+ application_pbxtarget, std::move(container_item_proxy)));
+
+ xctest_module_pbxtarget->AddDependency(std::move(dependency));
+ }
+
projects_.push_back(std::move(main_project));
}
« no previous file with comments | « tools/gn/xcode_object.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698