aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
diff options
context:
space:
mode:
authorGravatar Matthew DeVore <matvore@google.com>2015-03-20 17:40:36 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-03-23 11:55:39 +0000
commit84ec4bfb479abea111acd2343c2602a44c09b3e5 (patch)
treebfe86b293a0bd6b803128ec147ee8a5d8933cd08 /src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
parent4aa1364794b7eef692f694aba7988169cfc3a946 (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.java24
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());
}