aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar allevato <allevato@google.com>2018-02-27 09:13:35 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-27 09:15:31 -0800
commitd85aaea5d606c659807fff7cfef75781a59860bc (patch)
tree7ac4ebb22c6de0e6b81e600f2d90815e4c23c6a3 /src/main/java/com
parent48794a6edac0944ad2ecffc495b765ed10a2a3c9 (diff)
Add --incompatible_strict_objc_module_maps.
This flag changes the behavior of objc_library module map propagation so that module maps are only propagated to direct dependents, not transitive dependents. swift_library targets that import Objective-C code must then list those dependencies directly in its deps instead of depending on them being transitively present. PiperOrigin-RevId: 187184692
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java11
3 files changed, 31 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
index 64637c39d8..c836e345fe 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
@@ -304,13 +304,26 @@ public class ObjcCommandLineOptions extends FragmentOptions {
defaultValue = "null",
converter = LabelConverter.class,
documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
- effectTags = {OptionEffectTag.CHANGES_INPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
+ effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
help =
"Location of target that will provide the appropriate Apple SDK for the current build "
+ "configuration."
)
public Label appleSdk;
+ @Option(
+ name = "incompatible_strict_objc_module_maps",
+ category = "incompatible changes",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
+ metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+ effectTags = {OptionEffectTag.CHANGES_INPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
+ help =
+ "Propagates Objective-C module maps only to direct dependencies in the 'objc' provider, "
+ + "not to all transitive dependencies."
+ )
+ public boolean strictObjcModuleMaps;
+
@Override
public FragmentOptions getHost() {
ObjcCommandLineOptions host = (ObjcCommandLineOptions) super.getHost();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
index 3019d7a1a3..fbfa23e121 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
@@ -545,8 +545,13 @@ public final class ObjcCommon {
if (umbrellaHeader.isPresent()) {
objcProvider.add(UMBRELLA_HEADER, umbrellaHeader.get());
}
- objcProvider.add(MODULE_MAP, moduleMap.getArtifact());
- objcProvider.add(TOP_LEVEL_MODULE_MAP, moduleMap);
+ if (context.getFragment(ObjcConfiguration.class).useStrictObjcModuleMaps()) {
+ objcProvider.addForDirectDependents(MODULE_MAP, moduleMap.getArtifact());
+ objcProvider.addForDirectDependents(TOP_LEVEL_MODULE_MAP, moduleMap);
+ } else {
+ objcProvider.add(MODULE_MAP, moduleMap.getArtifact());
+ objcProvider.add(TOP_LEVEL_MODULE_MAP, moduleMap);
+ }
}
objcProvider
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
index 6139c2a541..d95e40ca7c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
@@ -80,6 +80,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
private final int objcHeaderThinningPartitionSize;
private final Label objcHeaderScannerTool;
private final Label appleSdk;
+ private final boolean strictObjcModuleMaps;
ObjcConfiguration(ObjcCommandLineOptions objcOptions, BuildConfiguration.Options options) {
this.iosSimulatorDevice =
@@ -115,6 +116,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
this.objcHeaderThinningPartitionSize = objcOptions.objcHeaderThinningPartitionSize;
this.objcHeaderScannerTool = objcOptions.objcHeaderScannerTool;
this.appleSdk = objcOptions.appleSdk;
+ this.strictObjcModuleMaps = objcOptions.strictObjcModuleMaps;
}
@AutoCodec.Instantiator
@@ -142,7 +144,8 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
boolean experimentalHeaderThinning,
int objcHeaderThinningPartitionSize,
Label objcHeaderScannerTool,
- Label appleSdk) {
+ Label appleSdk,
+ boolean strictObjcModuleMaps) {
this.iosSimulatorVersion = iosSimulatorVersion;
this.iosSimulatorDevice = iosSimulatorDevice;
this.watchosSimulatorVersion = watchosSimulatorVersion;
@@ -167,6 +170,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
this.objcHeaderThinningPartitionSize = objcHeaderThinningPartitionSize;
this.objcHeaderScannerTool = objcHeaderScannerTool;
this.appleSdk = appleSdk;
+ this.strictObjcModuleMaps = strictObjcModuleMaps;
}
/**
@@ -375,4 +379,9 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
public Label getAppleSdk() {
return appleSdk;
}
+
+ /** Returns true if Objective-C module maps should only be propagated to direct dependencies. */
+ public boolean useStrictObjcModuleMaps() {
+ return strictObjcModuleMaps;
+ }
}