aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar ajmichael <ajmichael@google.com>2017-05-07 11:34:16 -0400
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-05-08 09:49:13 -0400
commitfefced3743b6fb4f66580687f4cfd656d8bf62b4 (patch)
treedd6c7c2ff8f6f82f42e08a53910d9ba8b1cbc1a3 /src/main/java/com/google/devtools/build/lib
parent33876789f80853baa8d4210628aa8eabf6c2513a (diff)
Make default value of exports_manifest depend on a flag.
RELNOTES: None PiperOrigin-RevId: 155321388
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java11
6 files changed, 68 insertions, 35 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java
index a47e806687..45146a5e2b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java
@@ -15,13 +15,14 @@
package com.google.devtools.build.lib.bazel.rules.android;
import static com.google.devtools.build.lib.packages.Attribute.attr;
-import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses;
+import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
+import com.google.devtools.build.lib.packages.TriState;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration;
import com.google.devtools.build.lib.rules.android.AndroidLibraryBaseRule;
import com.google.devtools.build.lib.rules.android.AndroidRuleClasses;
@@ -35,8 +36,7 @@ public class BazelAndroidLibraryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
return builder
- .requiresConfigurationFragments(
- JavaConfiguration.class, AndroidConfiguration.class)
+ .requiresConfigurationFragments(JavaConfiguration.class, AndroidConfiguration.class)
/* <!-- #BLAZE_RULE(android_library).IMPLICIT_OUTPUTS -->
<ul>
<li><code>lib<var>name</var>.jar</code>: A Java archive.</li>
@@ -47,7 +47,7 @@ public class BazelAndroidLibraryRule implements RuleDefinition {
</ul>
<!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS --> */
.setImplicitOutputsFunction(AndroidRuleClasses.ANDROID_LIBRARY_IMPLICIT_OUTPUTS)
- .override(attr("exports_manifest", BOOLEAN).value(true))
+ .override(attr("exports_manifest", BuildType.TRISTATE).value(TriState.YES))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index f8aebaefd4..c99c9fa704 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -41,6 +41,7 @@ import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
+import com.google.devtools.build.lib.packages.TriState;
import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
@@ -390,6 +391,24 @@ public class AndroidCommon {
return transitiveAarNativeLibs;
}
+ static boolean getExportsManifest(RuleContext ruleContext) {
+ // AndroidLibraryBaseRule has exports_manifest but AndroidBinaryBaseRule does not.
+ // ResourceContainers are built for both, so we must check if exports_manifest is present.
+ if (!ruleContext.attributes().has("exports_manifest", BuildType.TRISTATE)) {
+ return false;
+ }
+ TriState attributeValue = ruleContext.attributes().get("exports_manifest", BuildType.TRISTATE);
+
+ // If the rule does not have the Android configuration fragment, we default to false.
+ boolean exportsManifestDefault =
+ ruleContext.isLegalFragment(AndroidConfiguration.class)
+ && ruleContext
+ .getFragment(AndroidConfiguration.class)
+ .getExportsManifestDefault(ruleContext);
+ return attributeValue == TriState.YES
+ || (attributeValue == TriState.AUTO && exportsManifestDefault);
+ }
+
private void compileResources(
JavaSemantics javaSemantics,
ResourceApk resourceApk,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 96b018b8a8..fd0ea7752f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
+import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.EmptyToNullLabelConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment;
@@ -516,13 +517,24 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
)
public boolean includeLibraryResourceJars;
- @Option(name = "experimental_android_use_nocompress_extensions_on_apk",
- defaultValue = "false",
- optionUsageRestrictions = OptionUsageRestrictions.UNDOCUMENTED,
- help = "Use the value of nocompress_extensions attribute with the SingleJar "
- + "--nocompress_suffixes flag when building the APK.")
+ @Option(
+ name = "experimental_android_use_nocompress_extensions_on_apk",
+ defaultValue = "false",
+ optionUsageRestrictions = OptionUsageRestrictions.UNDOCUMENTED,
+ help =
+ "Use the value of nocompress_extensions attribute with the SingleJar "
+ + "--nocompress_suffixes flag when building the APK."
+ )
public boolean useNocompressExtensionsOnApk;
+ @Option(
+ name = "experimental_android_library_exports_manifest_default",
+ defaultValue = "false",
+ optionUsageRestrictions = OptionUsageRestrictions.DOCUMENTED,
+ help = "The default value of the exports_manifest attribute on android_library."
+ )
+ public boolean exportsManifestDefault;
+
@Override
public void addAllLabels(Multimap<String, Label> labelMap) {
if (androidCrosstoolTop != null) {
@@ -607,6 +619,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final boolean compressJavaResources;
private final boolean includeLibraryResourceJars;
private final boolean useNocompressExtensionsOnApk;
+ private final boolean exportsManifestDefault;
AndroidConfiguration(Options options, Label androidSdk) throws InvalidConfigurationException {
this.sdk = androidSdk;
@@ -638,6 +651,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.compressJavaResources = options.compressJavaResources;
this.includeLibraryResourceJars = options.includeLibraryResourceJars;
this.useNocompressExtensionsOnApk = options.useNocompressExtensionsOnApk;
+ this.exportsManifestDefault = options.exportsManifestDefault;
if (!dexoptsSupportedInIncrementalDexing.contains("--no-locals")) {
// TODO(bazel-team): Still needed? See DexArchiveAspect
@@ -750,6 +764,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
return useNocompressExtensionsOnApk;
}
+ boolean getExportsManifestDefault(RuleContext ruleContext) {
+ return exportsManifestDefault;
+ }
+
@Override
public void addGlobalMakeVariables(ImmutableMap.Builder<String, String> globalMakeEnvBuilder) {
globalMakeEnvBuilder.put("ANDROID_CPU", cpu);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index 0648e10f40..eae1f2dfb4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -36,7 +36,6 @@ import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
import com.google.devtools.build.lib.rules.java.JavaTargetAttributes;
import com.google.devtools.build.lib.rules.java.ProguardLibrary;
import com.google.devtools.build.lib.rules.java.ProguardSpecProvider;
-import com.google.devtools.build.lib.syntax.Type;
/**
* An implementation for the "android_library" rule.
@@ -163,15 +162,16 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
String javaPackage = AndroidCommon.getJavaPackage(ruleContext);
- ResourceContainer resourceContainer = ResourceContainer.builder()
- .setLabel(ruleContext.getLabel())
- .setJavaPackageFromString(javaPackage)
- .setManifest(applicationManifest.getManifest())
- .setJavaSourceJar(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR))
- .setManifestExported(ruleContext.attributes().get("exports_manifest", Type.BOOLEAN))
- .setRTxt(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT))
- .build();
+ ResourceContainer resourceContainer =
+ ResourceContainer.builder()
+ .setLabel(ruleContext.getLabel())
+ .setJavaPackageFromString(javaPackage)
+ .setManifest(applicationManifest.getManifest())
+ .setJavaSourceJar(
+ ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR))
+ .setManifestExported(AndroidCommon.getExportsManifest(ruleContext))
+ .setRTxt(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT))
+ .build();
primaryResources = new AndroidResourcesProcessorBuilder(ruleContext)
.setLibrary(true)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
index a8a589bc6c..1badc11f0d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
@@ -17,6 +17,7 @@ import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTran
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LABEL;
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
+import static com.google.devtools.build.lib.packages.BuildType.TRISTATE;
import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
import static com.google.devtools.build.lib.syntax.Type.STRING;
@@ -24,6 +25,7 @@ import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
+import com.google.devtools.build.lib.packages.TriState;
import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidAaptBaseRule;
import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidBaseRule;
import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidResourceSupportRule;
@@ -78,9 +80,9 @@ public final class AndroidLibraryBaseRule implements RuleDefinition {
for the Android target platform.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.override(builder.copy("deps")
- .allowedRuleClasses(AndroidRuleClasses.ALLOWED_DEPENDENCIES)
- .allowedFileTypes()
- .aspect(androidNeverlinkAspect))
+ .allowedRuleClasses(AndroidRuleClasses.ALLOWED_DEPENDENCIES)
+ .allowedFileTypes()
+ .aspect(androidNeverlinkAspect))
/* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(exports) -->
The closure of all rules reached via <code>exports</code> attributes
are considered direct dependencies of any rule that directly depends on the
@@ -89,13 +91,13 @@ public final class AndroidLibraryBaseRule implements RuleDefinition {
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(attr("exports", LABEL_LIST)
.allowedRuleClasses(AndroidRuleClasses.ALLOWED_DEPENDENCIES)
- .allowedFileTypes(/*May not have files in exports!*/)
+ .allowedFileTypes(/*May not have files in exports!*/ )
.aspect(androidNeverlinkAspect))
/* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(exports_manifest) -->
Whether to export manifest entries to <code>android_binary</code> targets
that depend on this target. <code>uses-permissions</code> attributes are never exported.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(attr("exports_manifest", BOOLEAN).value(false))
+ .add(attr("exports_manifest", TRISTATE).value(TriState.AUTO))
/* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(exported_plugins) -->
The list of <code><a href="#${link java_plugin}">java_plugin</a></code>s (e.g. annotation
processors) to export to libraries that directly depend on this library.
@@ -106,7 +108,7 @@ public final class AndroidLibraryBaseRule implements RuleDefinition {
</p>
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(attr("exported_plugins", LABEL_LIST).cfg(HOST).allowedRuleClasses("java_plugin")
- .allowedFileTypes(FileTypeSet.NO_FILE))
+ .allowedFileTypes(FileTypeSet.NO_FILE))
.add(attr("alwayslink", BOOLEAN).undocumented("purely informational for now"))
/* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(neverlink) -->
Only use this library for compilation and not at runtime.
@@ -156,7 +158,8 @@ public final class AndroidLibraryBaseRule implements RuleDefinition {
See <a href="${link android_library.idl_import_root}">the description of idl_import_root</a>
for information about what this means.</p>
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(attr("idl_parcelables", LABEL_LIST).direct_compile_time_input()
+ .add(attr("idl_parcelables", LABEL_LIST)
+ .direct_compile_time_input()
.allowedFileTypes(AndroidRuleClasses.ANDROID_IDL))
.add(attr("$android_manifest_merge_tool", LABEL).cfg(HOST).exec().value(
env.getToolsLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java
index a24d77d333..d66961b48d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java
@@ -124,7 +124,7 @@ public abstract class ResourceContainer {
/** Converts this container back into a builder to create a modified copy. */
public abstract Builder toBuilder();
-
+
/**
* Returns a copy of this container with filtered resources. The original container is unchanged.
*/
@@ -181,7 +181,7 @@ public abstract class ResourceContainer {
.setJavaSourceJar(
ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR))
.setJavaPackageFrom(JavaPackageSource.SOURCE_JAR_PATH)
- .setManifestExported(getExportsManifest(ruleContext));
+ .setManifestExported(AndroidCommon.getExportsManifest(ruleContext));
}
/**
@@ -311,13 +311,6 @@ public abstract class ResourceContainer {
return ruleContext.attributes().isAttributeValueExplicitlySpecified("custom_package");
}
- private static boolean getExportsManifest(RuleContext ruleContext) {
- // AndroidLibraryBaseRule has exports_manifest but AndroidBinaryBaseRule does not.
- // ResourceContainers are built for both, so we must check if exports_manifest is present.
- return ruleContext.attributes().has("exports_manifest", Type.BOOLEAN)
- && ruleContext.attributes().get("exports_manifest", Type.BOOLEAN);
- }
-
@Nullable
private static String getRenameManifestPackage(RuleContext ruleContext) {
return ruleContext.attributes().isAttributeValueExplicitlySpecified("rename_manifest_package")