diff options
author | 2015-03-20 17:40:36 +0000 | |
---|---|---|
committer | 2015-03-23 11:55:39 +0000 | |
commit | 84ec4bfb479abea111acd2343c2602a44c09b3e5 (patch) | |
tree | bfe86b293a0bd6b803128ec147ee8a5d8933cd08 /src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java | |
parent | 4aa1364794b7eef692f694aba7988169cfc3a946 (diff) |
Pass pre-processed label to Xcodegen so it can be used as an Xcode target name without any extra work in Xcodegen. Use this label to determ
ine the *correct* built library.
--
MOS_MIGRATED_REVID=89135635
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java index 1ef52104cb..5597eefe83 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java @@ -28,10 +28,13 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.XCDATAMODEL; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; +import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -399,12 +402,25 @@ public final class XcodeProvider implements TransitiveInfoProvider { XcodeProductType.APPLICATION, XcodeProductType.BUNDLE, XcodeProductType.UNIT_TEST, XcodeProductType.EXTENSION); + /** + * Returns the name of the Xcode target that corresponds to a build target with the given name. + * This changes the label to make it a legal Xcode target name (which means removing slashes and + * the colon). It also makes the label more readable in the Xcode UI by putting the target name + * first and the package elements in reverse. This means the "important" part is visible even if + * the project navigator is too narrow to show the entire name. + */ + static String xcodeTargetName(Label label) { + String pathFromWorkspaceRoot = label.toString().replace("//", "").replace(':', '/'); + List<String> components = Splitter.on('/').splitToList(pathFromWorkspaceRoot); + return Joiner.on('_').join(Lists.reverse(components)); + } + private TargetControl targetControl() { String buildFilePath = label.getPackageFragment().getSafePathString() + "/BUILD"; // TODO(bazel-team): Add provisioning profile information when Xcodegen supports it. TargetControl.Builder targetControl = TargetControl.newBuilder() .setName(label.getName()) - .setLabel(label.toString()) + .setLabel(xcodeTargetName(label)) .setProductType(productType.getIdentifier()) .addAllImportedLibrary(Artifact.toExecPaths(objcProvider.get(IMPORTED_LIBRARY))) .addAllUserHeaderSearchPath(userHeaderSearchPaths) @@ -447,20 +463,20 @@ public final class XcodeProvider implements TransitiveInfoProvider { && dependency.compilationArtifacts.get().getArchive().isPresent(); if (hasSources || (dependency.productType == XcodeProductType.BUNDLE)) { targetControl.addDependency(DependencyControl.newBuilder() - .setTargetLabel(dependency.label.toString()) + .setTargetLabel(xcodeTargetName(dependency.label)) .build()); } } } for (XcodeProvider justTestHost : testHost.asSet()) { targetControl.addDependency(DependencyControl.newBuilder() - .setTargetLabel(justTestHost.label.toString()) + .setTargetLabel(xcodeTargetName(justTestHost.label)) .setTestHost(true) .build()); } for (XcodeProvider extension : extensions) { targetControl.addDependency(DependencyControl.newBuilder() - .setTargetLabel(extension.label.toString()) + .setTargetLabel(xcodeTargetName(extension.label)) .build()); } |