diff options
author | 2016-05-23 18:49:19 +0000 | |
---|---|---|
committer | 2016-05-24 11:57:08 +0000 | |
commit | a385d760f27e38140181ec787e19fed9747617a0 (patch) | |
tree | 8653b89f6312a3627ec4b510fb92c78e4fae9b22 /src/main/java/com/google/devtools | |
parent | e9e9779c0418178cb6906d0c3054caecfe340ca2 (diff) |
Frameworks are propagated through host apps to search paths in tests, but are not actually linked into test bundles.
--
MOS_MIGRATED_REVID=123021058
Diffstat (limited to 'src/main/java/com/google/devtools')
3 files changed, 22 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index d5a3d570ae..882faebbce 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -20,6 +20,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DEFINE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DYNAMIC_FRAMEWORK_FILE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FORCE_LOAD_LIBRARY; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FRAMEWORK_DIR; +import static com.google.devtools.build.lib.rules.objc.ObjcProvider.FRAMEWORK_SEARCH_PATH_ONLY; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag.USES_CPP; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag.USES_SWIFT; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.HEADER; @@ -1509,6 +1510,11 @@ public final class CompilationSupport { // Add custom (non-SDK) framework search paths. For each framework foo/bar.framework, // include "foo" as a search path. .addAll(PathFragment.safePathStrings(uniqueParentDirectories(provider.get(FRAMEWORK_DIR)))) + .addAll( + Interspersing.beforeEach( + "-F", + PathFragment.safePathStrings( + uniqueParentDirectories(provider.get(FRAMEWORK_SEARCH_PATH_ONLY))))) .build(); } 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 4bd7667e13..a0fbdc308e 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 @@ -225,8 +225,17 @@ public final class ObjcProvider extends SkylarkClassObject implements Transitive new Key<>(LINK_ORDER, "framework_dir", PathFragment.class); /** - * Files in {@code .framework} directories belonging to a statically linked framework. They should - * be included as inputs when compiling and linking. + * Exec paths of {@code .framework} directories corresponding to frameworks to include in search + * paths, but not to link. These cause -F arguments (framework search paths) to be added to + * each compile action, but do not cause -framework (link framework) arguments to be added to + * link actions. + */ + public static final Key<PathFragment> FRAMEWORK_SEARCH_PATH_ONLY = + new Key<>(LINK_ORDER, "framework_search_paths", PathFragment.class); + + /** + * Files in {@code .framework} directories that should be included as inputs when compiling and + * linking. */ public static final Key<Artifact> STATIC_FRAMEWORK_FILE = new Key<>(STABLE_ORDER, "static_framework_file", Artifact.class); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java index e3572eb85e..c3ddf00003 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java @@ -687,6 +687,8 @@ public final class ReleaseBundlingSupport { // We want access to #import-able things from our test rig's dependency graph, but we don't // want to link anything since that stuff is shared automatically by way of the // -bundle_loader linker flag. + // TODO(bazel-team): Handle the FRAMEWORK_DIR key properly. We probably want to add it to + // framework search paths, but not actually link it with the -framework flag. ObjcProvider partialObjcProvider = new ObjcProvider.Builder() .addTransitiveAndPropagate(ObjcProvider.HEADER, objcProvider) @@ -696,12 +698,12 @@ public final class ReleaseBundlingSupport { .addTransitiveAndPropagate(ObjcProvider.SDK_FRAMEWORK, objcProvider) .addTransitiveAndPropagate(ObjcProvider.SOURCE, objcProvider) .addTransitiveAndPropagate(ObjcProvider.WEAK_SDK_FRAMEWORK, objcProvider) - .addTransitiveAndPropagate(ObjcProvider.FRAMEWORK_DIR, objcProvider) .addTransitiveAndPropagate(ObjcProvider.STATIC_FRAMEWORK_FILE, objcProvider) .addTransitiveAndPropagate(ObjcProvider.DYNAMIC_FRAMEWORK_FILE, objcProvider) + .addTransitiveAndPropagate( + ObjcProvider.FRAMEWORK_SEARCH_PATH_ONLY, + objcProvider.get(ObjcProvider.FRAMEWORK_DIR)) .build(); - // TODO(bazel-team): Handle the FRAMEWORK_DIR key properly. We probably want to add it to - // framework search paths, but not actually link it with the -framework flag. return new XcTestAppProvider( intermediateArtifacts.combinedArchitectureBinary(), releaseBundling.getIpaArtifact(), |