aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-11-28 14:07:24 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-28 14:09:31 -0800
commit854b6c58039f8213acc044cb4e24d1d7811ffb05 (patch)
treef91dc96bee27ef62b0c849b2adc88b32b475b798 /src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
parent801109f1e30607bd57ca42dac0cf60b75e8a7831 (diff)
Eliminate STATIC_FRAMEWORK_DIR as a separate field of ObjcProvider.
Infer those values from STATIC_FRAMEWORK_FILE. This correctly dedupes static frameworks between an app and its dylibs. RELNOTES: None. PiperOrigin-RevId: 177214770
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index f2c726e048..1eeb89064b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -37,9 +37,11 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.syntax.EvalUtils;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.HashMap;
import java.util.HashSet;
@@ -234,15 +236,6 @@ public final class ObjcProvider extends NativeInfo {
public static final Key<PathFragment> FRAMEWORK_SEARCH_PATH_ONLY =
new Key<>(LINK_ORDER, "framework_search_paths", PathFragment.class);
- /**
- * Exec paths of {@code .framework} directories corresponding to static frameworks to link. These
- * cause -F arguments (framework search paths) to be added to each compile action, and
- * -framework (link framework) arguments to be added to each link action. These differ from
- * dynamic frameworks in that they are statically linked into the binary.
- */
- // TODO(cparsons): Rename this key to static_framework_dir.
- public static final Key<PathFragment> STATIC_FRAMEWORK_DIR =
- new Key<>(LINK_ORDER, "framework_dir", PathFragment.class);
/**
* Files in {@code .framework} directories that should be included as inputs when compiling and
@@ -409,7 +402,6 @@ public final class ObjcProvider extends NativeInfo {
SDK_DYLIB,
SDK_FRAMEWORK,
SOURCE,
- STATIC_FRAMEWORK_DIR,
STATIC_FRAMEWORK_FILE,
STORYBOARD,
STRINGS,
@@ -701,6 +693,29 @@ public final class ObjcProvider extends NativeInfo {
}
/**
+ * Returns all unique static framework directories (directories ending in '.framework') for all
+ * static framework files in this provider.
+ */
+ public Iterable<PathFragment> getStaticFrameworkDirs() {
+ return ObjcCommon.uniqueContainers(get(STATIC_FRAMEWORK_FILE),
+ ObjcCommon.FRAMEWORK_CONTAINER_TYPE);
+ }
+
+ /**
+ * Returns all unique static framework directories (directories ending in '.framework') for all
+ * static framework files in this provider.
+ */
+ @SkylarkCallable(
+ name = "framework_dir",
+ structField = true,
+ doc = "Returns all unique static framework directories (directories ending in '.framework') "
+ + "for all static framework files in this provider."
+ )
+ public SkylarkNestedSet getStaticFrameworkDirsForSkylark() {
+ return ObjcProviderSkylarkConverters.convertPathFragmentsToSkylark(getStaticFrameworkDirs());
+ }
+
+ /**
* A builder for this context with an API that is optimized for collecting information from
* several transitive dependencies.
*/