aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2018-08-03 01:47:22 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-03 01:48:53 -0700
commit7e41f9bd7000a8e51101d91b0c72ce7e6775068e (patch)
tree5e037fb9512bd09415fd1bec1f0420ab78d90ae2
parent3081fd98eae4bcd27bad71762835d9610d41eef0 (diff)
C++: Change Skylark API whitelisting to be part of flag.
This uses SkylarkSemantics now instead of the C++ configuration. The flag is: --experimental_cc_skylark_api_enabled_packages RELNOTES:none PiperOrigin-RevId: 207235431
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java55
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java21
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java37
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTestHelper.java3
13 files changed, 87 insertions, 84 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
index 3b3d944e74..0195eda845 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
@@ -36,8 +36,8 @@ import com.google.devtools.build.lib.syntax.SkylarkList;
/**
* A module that contains Skylark utilities for C++ support.
*
- * <p>This is a work in progress. The API is guarded behind --experimental_enable_cc_skylark_api.
- * The API is under development and unstable.
+ * <p>This is a work in progress. The API is guarded behind
+ * --experimental_cc_skylark_api_enabled_packages. The API is under development and unstable.
*/
public class BazelCcModule extends CcModule
implements BazelCcModuleApi<
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
index e48c1be9fa..3277c38440 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
@@ -15,12 +15,14 @@
package com.google.devtools.build.lib.packages;
import com.google.devtools.build.lib.syntax.SkylarkSemantics;
+import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDocumentationCategory;
import com.google.devtools.common.options.OptionEffectTag;
import com.google.devtools.common.options.OptionMetadataTag;
import com.google.devtools.common.options.OptionsBase;
import java.io.Serializable;
+import java.util.List;
/**
* Contains options that affect Skylark's semantics.
@@ -41,9 +43,6 @@ import java.io.Serializable;
* should be that name written in snake_case. Add a line to set the new field in {@link
* #toSkylarkSemantics}.
*
- * <li>Add a line to read and write the new field in {@link SkylarkSemanticsCodec#serialize} and
- * {@link SkylarkSemanticsCodec#deserialize}.
- *
* <li>Add a line to set the new field in both {@link
* SkylarkSemanticsConsistencyTest#buildRandomOptions} and {@link
* SkylarkSemanticsConsistencyTest#buildRandomSemantics}.
@@ -69,6 +68,18 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable
public boolean experimentalEnableRepoMapping;
@Option(
+ name = "experimental_cc_skylark_api_enabled_packages",
+ converter = CommaSeparatedOptionListConverter.class,
+ defaultValue = "",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL},
+ help =
+ "Passes list of packages that can use the C++ Skylark API. Don't enable this flag yet, "
+ + "we will be making breaking changes.")
+ public List<String> experimentalCcSkylarkApiEnabledPackages;
+
+ @Option(
name = "incompatible_bzl_disallow_load_after_statement",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
@@ -350,6 +361,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable
public SkylarkSemantics toSkylarkSemantics() {
return SkylarkSemantics.builder()
// <== Add new options here in alphabetic order ==>
+ .experimentalCcSkylarkApiEnabledPackages(experimentalCcSkylarkApiEnabledPackages)
.experimentalEnableRepoMapping(experimentalEnableRepoMapping)
.incompatibleBzlDisallowLoadAfterStatement(incompatibleBzlDisallowLoadAfterStatement)
.incompatibleDepsetIsNotIterable(incompatibleDepsetIsNotIterable)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index b6c55be56c..9fc2f5e029 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -57,6 +57,7 @@ import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.Pair;
@@ -108,10 +109,6 @@ public final class CcCommon {
}
};
- private static final ImmutableList<PathFragment> WHITELISTED_PACKAGES =
- ImmutableList.of(
- PathFragment.create("tools/build_defs"), PathFragment.create("experimental"));
-
public static final ImmutableSet<String> ALL_COMPILE_ACTIONS =
ImmutableSet.of(
CppActionNames.C_COMPILE,
@@ -209,40 +206,44 @@ public final class CcCommon {
throws EvalException {
RuleContext context = skylarkRuleContext.getRuleContext();
Rule rule = context.getRule();
- if (!context.getFragment(CppConfiguration.class).getEnableCcSkylarkApi()) {
- throw new EvalException(
- rule.getLocation(),
- "Pass --experimental_enable_cc_skylark_api in "
- + "order to use the C++ API. Beware that we will be making breaking "
- + "changes to this API without prior warning.");
- }
+
RuleClass ruleClass = rule.getRuleClassObject();
Label label = ruleClass.getRuleDefinitionEnvironmentLabel();
- if (label != null
- && WHITELISTED_PACKAGES
- .stream()
- .noneMatch(path -> label.getPackageFragment().startsWith(path))) {
- throwWhiteListError(rule.getLocation(), label.getPackageFragment().toString());
+ try {
+ if (label != null) {
+ checkLocationWhitelisted(
+ context.getAnalysisEnvironment().getSkylarkSemantics(),
+ rule.getLocation(),
+ label.getPackageFragment().toString());
+ }
+ } catch (InterruptedException e) {
+ throw new EvalException(rule.getLocation(), e);
}
}
- public static void checkLocationWhitelisted(Location location) throws EvalException {
- String bzlPath = location.getPath().toString();
- if (WHITELISTED_PACKAGES.stream().noneMatch(path -> bzlPath.contains(path.toString()))) {
- throwWhiteListError(location, bzlPath);
+ public static void checkLocationWhitelisted(
+ SkylarkSemantics semantics, Location location, String callPath) throws EvalException {
+ List<String> whitelistedPackagesList = semantics.experimentalCcSkylarkApiEnabledPackages();
+ if (whitelistedPackagesList
+ .stream()
+ .noneMatch(
+ path -> callPath.startsWith(path) || callPath.startsWith("/workspace/" + path))) {
+ throwWhiteListError(location, callPath, whitelistedPackagesList);
}
}
- private static void throwWhiteListError(Location location, String bzlPath) throws EvalException {
- String whitelistedPackages =
- WHITELISTED_PACKAGES.stream().map(p -> p.toString()).collect(Collectors.joining(", "));
+ private static void throwWhiteListError(
+ Location location, String callPath, List<String> whitelistedPackagesList)
+ throws EvalException {
+ String whitelistedPackages = whitelistedPackagesList.stream().collect(Collectors.joining(", "));
throw new EvalException(
location,
String.format(
- "the C++ Skylark API is for the time being only allowed for rules in in '//%s/...'; "
- + "but this is defined in '//%s'. Contact blaze-rules@google.com for more "
- + "information.",
- whitelistedPackages, bzlPath));
+ "the C++ Skylark API is for the time being only allowed for rules in '%s'; "
+ + "but this is defined in '%s'. You can try it out by passing "
+ + "--experimental_cc_skylark_api_enabled_packages=<list of packages>. Beware that "
+ + "we will be making breaking changes to this API without prior warning.",
+ whitelistedPackages, callPath));
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
index d6806ad487..ca3a3d0733 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
@@ -78,7 +78,7 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation
@SuppressWarnings("unchecked")
protected CcCompilationInfo createInstanceFromSkylark(
Object[] args, Environment env, Location loc) throws EvalException {
- CcCommon.checkLocationWhitelisted(loc);
+ CcCommon.checkLocationWhitelisted(env.getSemantics(), loc, loc.getPath().toString());
CcCompilationInfo.Builder ccCompilationInfoBuilder = CcCompilationInfo.Builder.create();
CcCompilationContext.Builder ccCompilationContext =
new CcCompilationContext.Builder(/* ruleContext= */ null);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
index a8a27515af..4157930c5c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
@@ -78,7 +78,7 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
@SuppressWarnings("unchecked")
protected CcLinkingInfo createInstanceFromSkylark(
Object[] args, Environment env, Location loc) throws EvalException {
- CcCommon.checkLocationWhitelisted(loc);
+ CcCommon.checkLocationWhitelisted(env.getSemantics(), loc, loc.getPath().toString());
int i = 0;
CcLinkParams staticModeParamsForDynamicLibrary = (CcLinkParams) nullIfNone(args[i++]);
CcLinkParams staticModeParamsForExecutable = (CcLinkParams) nullIfNone(args[i++]);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 300a4c9886..df698edc8f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -982,10 +982,6 @@ public final class CppConfiguration extends BuildConfiguration.Fragment
return cppOptions.useInterfaceSharedObjects;
}
- public boolean getEnableCcSkylarkApi() {
- return cppOptions.enableCcSkylarkApi;
- }
-
/**
* Returns the path to the GNU binutils 'objcopy' binary to use for this build. (Corresponds to
* $(OBJCOPY) in make-dbg.) Relative paths are relative to the execution root.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index 4e4e863b29..e403f3320d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -784,17 +784,6 @@ public class CppOptions extends FragmentOptions {
public boolean enableLegacyToolchainSkylarkApi;
@Option(
- name = "experimental_enable_cc_skylark_api",
- defaultValue = "false",
- documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
- effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
- metadataTags = {OptionMetadataTag.EXPERIMENTAL},
- help =
- "If true, the C++ Skylark API can be used. Don't enable this flag yet, we will be making "
- + "breaking changes.")
- public boolean enableCcSkylarkApi;
-
- @Option(
name = "experimental_disable_legacy_cc_linking_api",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
@@ -875,8 +864,6 @@ public class CppOptions extends FragmentOptions {
public FragmentOptions getHost() {
CppOptions host = (CppOptions) getDefault();
- host.enableCcSkylarkApi = enableCcSkylarkApi;
-
// The crosstool options are partially copied from the target configuration.
if (hostCrosstoolTop == null) {
host.cppCompiler = cppCompiler;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index 814a847081..5893ac49ab 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -15,6 +15,8 @@
package com.google.devtools.build.lib.syntax;
import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
/**
* Options that affect Skylark semantics.
@@ -39,6 +41,8 @@ public abstract class SkylarkSemantics {
AutoValue_SkylarkSemantics.class;
// <== Add new options here in alphabetic order ==>
+ public abstract List<String> experimentalCcSkylarkApiEnabledPackages();
+
public abstract boolean experimentalEnableRepoMapping();
public abstract boolean incompatibleBzlDisallowLoadAfterStatement();
@@ -96,6 +100,7 @@ public abstract class SkylarkSemantics {
public static final SkylarkSemantics DEFAULT_SEMANTICS =
builder()
// <== Add new options here in alphabetic order ==>
+ .experimentalCcSkylarkApiEnabledPackages(ImmutableList.of())
.experimentalEnableRepoMapping(false)
.incompatibleBzlDisallowLoadAfterStatement(false)
.incompatibleDepsetIsNotIterable(false)
@@ -124,6 +129,8 @@ public abstract class SkylarkSemantics {
public abstract static class Builder {
// <== Add new options here in alphabetic order ==>
+ public abstract Builder experimentalCcSkylarkApiEnabledPackages(List<String> value);
+
public abstract Builder experimentalEnableRepoMapping(boolean value);
public abstract Builder incompatibleBzlDisallowLoadAfterStatement(boolean value);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index ed22d1e380..21328c8ff1 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.packages;
import static com.google.common.truth.Truth.assertThat;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext;
import com.google.devtools.build.lib.skyframe.serialization.DynamicCodec;
@@ -36,26 +37,22 @@ import org.junit.runners.JUnit4;
*
* <p>When adding a new option, it is trivial to make a transposition error or a copy/paste error.
* These tests guard against such errors. The following possible bugs are considered:
+ *
* <ul>
* <li>If a new option is added to {@code SkylarkSemantics} but not to {@code
* SkylarkSemanticsOptions}, or vice versa, then the programmer will either be unable to
* implement its behavior, or unable to test it from the command line and add user
* documentation. We hope that the programmer notices this on their own.
- *
- * <li>If {@link SkylarkSemanticsOptions#toSkylarkSemantics} or {@link
- * SkylarkSemanticsCodec#deserialize} is not updated to set all fields of {@code
- * SkylarkSemantics}, then it will fail immediately because all fields of {@link
+ * <li>If {@link SkylarkSemanticsOptions#toSkylarkSemantics} is not updated to set all fields of
+ * {@code SkylarkSemantics}, then it will fail immediately because all fields of {@link
* SkylarkSemantics.Builder} are mandatory.
- *
* <li>To catch a copy/paste error where the wrong field's data is threaded through {@code
* toSkylarkSemantics()} or {@code deserialize(...)}, we repeatedly generate matching random
* instances of the input and expected output objects.
- *
* <li>The {@link #checkDefaultsMatch} test ensures that there is no divergence between the
* default values of the two classes.
- *
- * <li>There is no test coverage for failing to update the non-generated webpage documentation.
- * So don't forget that!
+ * <li>There is no test coverage for failing to update the non-generated webpage documentation. So
+ * don't forget that!
* </ul>
*/
@RunWith(JUnit4.class)
@@ -121,6 +118,10 @@ public class SkylarkSemanticsConsistencyTest {
private static SkylarkSemanticsOptions buildRandomOptions(Random rand) throws Exception {
return parseOptions(
// <== Add new options here in alphabetic order ==>
+ "--experimental_cc_skylark_api_enabled_packages="
+ + rand.nextDouble()
+ + ","
+ + rand.nextDouble(),
"--experimental_enable_repo_mapping=" + rand.nextBoolean(),
"--incompatible_bzl_disallow_load_after_statement=" + rand.nextBoolean(),
"--incompatible_depset_is_not_iterable=" + rand.nextBoolean(),
@@ -151,6 +152,8 @@ public class SkylarkSemanticsConsistencyTest {
private static SkylarkSemantics buildRandomSemantics(Random rand) {
return SkylarkSemantics.builder()
// <== Add new options here in alphabetic order ==>
+ .experimentalCcSkylarkApiEnabledPackages(
+ ImmutableList.of(String.valueOf(rand.nextDouble()), String.valueOf(rand.nextDouble())))
.experimentalEnableRepoMapping(rand.nextBoolean())
.incompatibleBzlDisallowLoadAfterStatement(rand.nextBoolean())
.incompatibleDepsetIsNotIterable(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
index e15d4584cd..71cfffb053 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -96,6 +96,7 @@ java_library(
name = "CcImportBaseConfiguredTargetTest",
srcs = ["CcImportBaseConfiguredTargetTest.java"],
deps = [
+ ":SkylarkCcCommonTestHelper",
"//src/main/java/com/google/devtools/build/lib:build-base",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
index 548bf8e09f..41bdb5679d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
@@ -34,7 +34,9 @@ public abstract class CcImportBaseConfiguredTargetTest extends BuildViewTestCase
protected String skylarkImplementationLoadStatement = "";
@Before
- public void setSkylarkImplementationLoadStatement() {
+ public void setSkylarkImplementationLoadStatement() throws Exception {
+ setSkylarkSemanticsOptions(SkylarkCcCommonTestHelper.CC_SKYLARK_WHITELIST_FLAG);
+ invalidatePackages();
setIsSkylarkImplementation();
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
index 61f2058fdb..6bd4f038b3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
@@ -45,8 +45,9 @@ import org.junit.runners.JUnit4;
public class SkylarkCcCommonTest extends BuildViewTestCase {
@Before
- public void setConfiguration() throws Exception {
- useConfiguration("--experimental_enable_cc_skylark_api");
+ public void setSkylarkSemanticsOptions() throws Exception {
+ setSkylarkSemanticsOptions(SkylarkCcCommonTestHelper.CC_SKYLARK_WHITELIST_FLAG);
+ invalidatePackages();
}
@Test
@@ -134,7 +135,7 @@ public class SkylarkCcCommonTest extends BuildViewTestCase {
AnalysisMock.get()
.ccSupport()
.setupCrosstool(mockToolsConfig, "feature { name: 'foo_feature' }");
- useConfiguration("--features=foo_feature", "--experimental_enable_cc_skylark_api");
+ useConfiguration("--features=foo_feature");
scratch.file(
"a/BUILD",
"load(':rule.bzl', 'crule')",
@@ -733,7 +734,7 @@ public class SkylarkCcCommonTest extends BuildViewTestCase {
@Test
public void testIsLinkingDynamicLibraryLinkVariables() throws Exception {
- useConfiguration("--linkopt=-pie", "--experimental_enable_cc_skylark_api");
+ useConfiguration("--linkopt=-pie");
assertThat(
commandLineForVariables(
CppActionNames.CPP_LINK_EXECUTABLE,
@@ -758,9 +759,7 @@ public class SkylarkCcCommonTest extends BuildViewTestCase {
@Test
public void testIsUsingLinkerLinkVariables() throws Exception {
- useConfiguration(
- "--linkopt=-i_dont_want_to_see_this_on_archiver_command_line",
- "--experimental_enable_cc_skylark_api");
+ useConfiguration("--linkopt=-i_dont_want_to_see_this_on_archiver_command_line");
assertThat(
commandLineForVariables(
CppActionNames.CPP_LINK_EXECUTABLE,
@@ -1064,15 +1063,15 @@ public class SkylarkCcCommonTest extends BuildViewTestCase {
}
@Test
- public void testCcLinkingProviderParamsWithoutFlag() throws Exception {
- useConfiguration("--noexperimental_enable_cc_skylark_api");
- setUpCcLinkingProviderParamsTest();
+ public void testFlagWhitelist() throws Exception {
+ setSkylarkSemanticsOptions("--experimental_cc_skylark_api_enabled_packages=\"\"");
+ SkylarkCcCommonTestHelper.createFiles(scratch, "foo/bar");
reporter.removeHandler(failFastHandler);
- getConfiguredTarget("//a:r");
+ getConfiguredTarget("//foo:bin");
assertContainsEvent(
- "Pass --experimental_enable_cc_skylark_api in order to "
- + "use the C++ API. Beware that we will be making breaking changes to this API "
- + "without prior warning.");
+ "You can try it out by passing "
+ + "--experimental_cc_skylark_api_enabled_packages=<list of packages>. Beware that we "
+ + "will be making breaking changes to this API without prior warning.");
}
@Test
@@ -1082,7 +1081,7 @@ public class SkylarkCcCommonTest extends BuildViewTestCase {
.setupCrosstool(
mockToolsConfig,
"supports_interface_shared_objects: false");
- useConfiguration("--experimental_enable_cc_skylark_api");
+ useConfiguration();
setUpCcLinkingProviderParamsTest();
ConfiguredTarget r = getConfiguredTarget("//a:r");
@@ -1251,14 +1250,6 @@ public class SkylarkCcCommonTest extends BuildViewTestCase {
}
@Test
- public void testWhitelist() throws Exception {
- SkylarkCcCommonTestHelper.createFiles(scratch, "foo/bar");
- reporter.removeHandler(failFastHandler);
- getConfiguredTarget("//foo:bin");
- assertContainsEvent("C++ Skylark API is for the time being");
- }
-
- @Test
public void testCopts() throws Exception {
SkylarkCcCommonTestHelper.createFilesForTestingCompilation(
scratch, "tools/build_defs/foo", "copts=depset(['-COMPILATION_OPTION'])");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTestHelper.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTestHelper.java
index 1aafab17b2..0a4dc6b95e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTestHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTestHelper.java
@@ -19,6 +19,9 @@ import com.google.devtools.build.lib.testutil.Scratch;
/** Methods useful for tests testing the C++ Skylark API. */
public final class SkylarkCcCommonTestHelper {
+ public static final String CC_SKYLARK_WHITELIST_FLAG =
+ "--experimental_cc_skylark_api_enabled_packages=tools/build_defs,experimental";
+
public static void createFilesForTestingCompilation(
Scratch scratch, String bzlFilePath, String compileProviderLines) throws Exception {
createFiles(scratch, bzlFilePath, compileProviderLines, "");