C++: Changes to public API usable only from builtins
RELNOTES:none
PiperOrigin-RevId: 404225998
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 578af77..1ff392b 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
@@ -89,6 +89,7 @@
Object textualHeaders,
Object additionalExportedHeaders,
Sequence<?> includes, // <String> expected
+ Object looseIncludes,
Sequence<?> quoteIncludes, // <String> expected
Sequence<?> systemIncludes, // <String> expected
Sequence<?> frameworkIncludes, // <String> expected
@@ -98,6 +99,7 @@
String stripIncludePrefix,
Sequence<?> userCompileFlags, // <String> expected
Sequence<?> ccCompilationContexts, // <CcCompilationContext> expected
+ Object implementationCcCompilationContexts,
String name,
boolean disallowPicOutputs,
boolean disallowNopicOutputs,
@@ -112,6 +114,7 @@
Object language,
Object purpose,
Object grepIncludes,
+ Object coptsFilter,
StarlarkThread thread)
throws EvalException, InterruptedException {
return compile(
@@ -124,6 +127,7 @@
textualHeaders,
additionalExportedHeaders,
includes,
+ looseIncludes,
quoteIncludes,
systemIncludes,
frameworkIncludes,
@@ -133,6 +137,7 @@
stripIncludePrefix,
userCompileFlags,
ccCompilationContexts,
+ implementationCcCompilationContexts,
name,
disallowPicOutputs,
disallowNopicOutputs,
@@ -149,6 +154,7 @@
variablesExtension,
language,
purpose,
+ coptsFilter,
thread);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index a8917e1..5f547b8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -584,7 +584,7 @@
}
/** Sets a pattern that is used to filter copts; set to {@code null} for no filtering. */
- private void setCoptsFilter(CoptsFilter coptsFilter) {
+ public void setCoptsFilter(CoptsFilter coptsFilter) {
this.coptsFilter = Preconditions.checkNotNull(coptsFilter);
}
@@ -637,8 +637,8 @@
* Sets the given directories to by loose include directories that are only allowed to be
* referenced when headers checking is {@link HeadersCheckingMode#LOOSE}.
*/
- private void setLooseIncludeDirs(Set<PathFragment> looseIncludeDirs) {
- this.looseIncludeDirs = looseIncludeDirs;
+ public void setLooseIncludeDirs(Set<PathFragment> looseIncludeDirs) {
+ this.looseIncludeDirs = Preconditions.checkNotNull(looseIncludeDirs);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 9e475a9..42f77c9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -47,6 +47,7 @@
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.rules.cpp.CcBinary.CcLauncherInfo;
+import com.google.devtools.build.lib.rules.cpp.CcCommon.CoptsFilter;
import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo;
import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.SourceCategory;
import com.google.devtools.build.lib.rules.cpp.CcLinkingContext.LinkOptions;
@@ -831,6 +832,24 @@
featureConfig.getFeatureConfiguration());
}
+ @StarlarkMethod(
+ name = "merge_linking_contexts",
+ documented = false,
+ parameters = {
+ @Param(
+ name = "linking_contexts",
+ documented = false,
+ positional = false,
+ named = true,
+ defaultValue = "[]"),
+ })
+ public CcLinkingContext mergeLinkingContexts(
+ Sequence<?> linkingContexts) // <CcLinkingContext> expected
+ throws EvalException {
+ return CcLinkingContext.merge(
+ Sequence.cast(linkingContexts, CcLinkingContext.class, "linking_contexts"));
+ }
+
private static NestedSet<Artifact> toNestedSetOfArtifacts(Object obj, String fieldName)
throws EvalException {
if (obj == Starlark.UNBOUND) {
@@ -919,11 +938,14 @@
// make sense here since LinkerInput takes a list of flags. For storing user_link_flags
// without flattening they would have to be wrapped around a LinkerInput for which we keep
// a depset that isn't flattened till the end.
- LinkOptions options =
- LinkOptions.of(
- Depset.noneableCast(userLinkFlagsObject, String.class, "user_link_flags").toList(),
- BazelStarlarkContext.from(thread).getSymbolGenerator());
- optionsBuilder.add(options);
+ ImmutableList<String> userLinkFlagsFlattened =
+ Depset.noneableCast(userLinkFlagsObject, String.class, "user_link_flags").toList();
+ if (!userLinkFlagsFlattened.isEmpty()) {
+ LinkOptions options =
+ LinkOptions.of(
+ userLinkFlagsFlattened, BazelStarlarkContext.from(thread).getSymbolGenerator());
+ optionsBuilder.add(options);
+ }
} else if (userLinkFlagsObject instanceof Sequence) {
ImmutableList<Object> options =
Sequence.cast(userLinkFlagsObject, Object.class, "user_link_flags[]").getImmutableList();
@@ -1826,8 +1848,18 @@
convertFromNoneable(starlarkFeatureConfiguration, null);
Label label = getCallerLabel(actions, name);
FdoContext fdoContext = ccToolchainProvider.getFdoContext();
- LinkTargetType staticLinkTargetType =
- (language == Language.CPP) ? LinkTargetType.STATIC_LIBRARY : LinkTargetType.OBJC_ARCHIVE;
+ LinkTargetType staticLinkTargetType = null;
+ if (language == Language.CPP) {
+ if (alwayslink
+ && !actions.getRuleContext().getRule().getRuleClass().equals("swift_library")) {
+ // TODO(b/202252560): Fix for swift_library's implicit output.
+ staticLinkTargetType = LinkTargetType.ALWAYS_LINK_STATIC_LIBRARY;
+ } else {
+ staticLinkTargetType = LinkTargetType.STATIC_LIBRARY;
+ }
+ } else {
+ staticLinkTargetType = LinkTargetType.OBJC_ARCHIVE;
+ }
CcLinkingHelper helper =
new CcLinkingHelper(
actions.getActionConstructionContext().getRuleErrorConsumer(),
@@ -1858,6 +1890,7 @@
.isEnabled(CppRuleClasses.TARGETS_WINDOWS))
.setStaticLinkType(staticLinkTargetType)
.setDynamicLinkType(LinkTargetType.NODEPS_DYNAMIC_LIBRARY)
+ .emitInterfaceSharedLibraries(true)
.addLinkopts(Sequence.cast(userLinkFlags, String.class, "user_link_flags"));
if (!asDict(variablesExtension).isEmpty()) {
helper.addVariableExtension(new UserVariablesExtension(asDict(variablesExtension)));
@@ -1983,6 +2016,7 @@
Object textualHeadersStarlarkObject,
Object additionalExportedHeadersObject,
Sequence<?> includes, // <String> expected
+ Object starlarkIncludes,
Sequence<?> quoteIncludes, // <String> expected
Sequence<?> systemIncludes, // <String> expected
Sequence<?> frameworkIncludes, // <String> expected
@@ -1992,6 +2026,7 @@
String stripIncludePrefix,
Sequence<?> userCompileFlags, // <String> expected
Sequence<?> ccCompilationContexts, // <CcCompilationContext> expected
+ Object implementationCcCompilationContextsObject,
String name,
boolean disallowPicOutputs,
boolean disallowNopicOutputs,
@@ -2007,6 +2042,7 @@
Object variablesExtension,
Object languageObject,
Object purposeObject,
+ Object coptsFilterObject,
StarlarkThread thread)
throws EvalException, InterruptedException {
if (checkObjectsBound(
@@ -2017,7 +2053,10 @@
doNotGenerateModuleMapObject,
codeCoverageEnabledObject,
purposeObject,
- hdrsCheckingModeObject)) {
+ hdrsCheckingModeObject,
+ implementationCcCompilationContextsObject,
+ coptsFilterObject,
+ starlarkIncludes)) {
CcModule.checkPrivateStarlarkificationAllowlist(thread);
}
@@ -2025,10 +2064,13 @@
CcToolchainProvider ccToolchainProvider =
convertFromNoneable(starlarkCcToolchainProvider, null);
+ ImmutableList<String> looseIncludes = asClassImmutableList(starlarkIncludes);
CppModuleMap moduleMap = convertFromNoneable(moduleMapNoneable, /* defaultValue= */ null);
ImmutableList<CppModuleMap> additionalModuleMaps =
asClassImmutableList(additionalModuleMapsNoneable);
+ CoptsFilter coptsFilter = convertFromNoneable(coptsFilterObject, /* defaultValue= */ null);
+
Object textualHeadersObject =
asClassImmutableListOrNestedSet(
textualHeadersStarlarkObject, Artifact.class, "textual_headers");
@@ -2057,28 +2099,20 @@
ccToolchainProvider)
.toString());
String purpose = convertFromNoneable(purposeObject, null);
+ ImmutableList<CcCompilationContext> implementationContexts =
+ asClassImmutableList(implementationCcCompilationContextsObject);
- List<Artifact> sources = Sequence.cast(sourcesUnchecked, Artifact.class, "srcs");
- List<Artifact> publicHeaders =
- Sequence.cast(publicHeadersUnchecked, Artifact.class, "public_hdrs");
- List<Artifact> privateHeaders =
- Sequence.cast(privateHeadersUnchecked, Artifact.class, "private_hdrs");
+ boolean tuple =
+ checkAllSourcesContainTuplesOrNoneOfThem(
+ ImmutableList.of(sourcesUnchecked, privateHeadersUnchecked, publicHeadersUnchecked));
+ if (tuple) {
+ CcModule.checkPrivateStarlarkificationAllowlist(thread);
+ }
FeatureConfigurationForStarlark featureConfiguration =
convertFromNoneable(starlarkFeatureConfiguration, null);
Label label = getCallerLabel(actions, name);
FdoContext fdoContext = ccToolchainProvider.getFdoContext();
- validateExtensions(
- "srcs",
- sources,
- CppFileTypes.ALL_C_CLASS_SOURCE.including(
- CppFileTypes.ASSEMBLER_WITH_C_PREPROCESSOR, CppFileTypes.ASSEMBLER),
- FileTypeSet.of(
- CppFileTypes.CPP_SOURCE,
- CppFileTypes.C_SOURCE,
- CppFileTypes.ASSEMBLER_WITH_C_PREPROCESSOR,
- CppFileTypes.ASSEMBLER),
- /* allowAnyTreeArtifacts= */ true);
if (disallowNopicOutputs && disallowPicOutputs) {
throw Starlark.errorf("Either PIC or no PIC actions have to be created.");
@@ -2090,62 +2124,83 @@
BuildConfiguration configuration = actions.getActionConstructionContext().getConfiguration();
CcCompilationHelper helper =
new CcCompilationHelper(
- actions.asActionRegistry(actions),
- actions.getActionConstructionContext(),
- label,
- grepIncludes,
- getSemantics(language),
+ actions.asActionRegistry(actions),
+ actions.getActionConstructionContext(),
+ label,
+ grepIncludes,
+ getSemantics(language),
+ featureConfiguration.getFeatureConfiguration(),
+ sourceCategory,
+ ccToolchainProvider,
+ fdoContext,
+ actions.getActionConstructionContext().getConfiguration(),
+ TargetUtils.getExecutionInfo(
+ actions.getRuleContext().getRule(),
+ actions.getRuleContext().isAllowTagsPropagation()),
+ /* shouldProcessHeaders= */ ccToolchainProvider.shouldProcessHeaders(
featureConfiguration.getFeatureConfiguration(),
- sourceCategory,
- ccToolchainProvider,
- fdoContext,
- actions.getActionConstructionContext().getConfiguration(),
- TargetUtils.getExecutionInfo(
- actions.getRuleContext().getRule(),
- actions.getRuleContext().isAllowTagsPropagation()),
- /* shouldProcessHeaders= */ ccToolchainProvider.shouldProcessHeaders(
- featureConfiguration.getFeatureConfiguration(),
- configuration.getFragment(CppConfiguration.class)))
- .addPublicHeaders(publicHeaders)
- .addPrivateHeaders(privateHeaders)
- .addSources(sources)
- .addCcCompilationContexts(
- Sequence.cast(
- ccCompilationContexts, CcCompilationContext.class, "compilation_contexts"))
- .addIncludeDirs(
- Sequence.cast(includes, String.class, "includes").stream()
- .map(PathFragment::create)
- .collect(ImmutableList.toImmutableList()))
- .addQuoteIncludeDirs(
- Sequence.cast(quoteIncludes, String.class, "quote_includes").stream()
- .map(PathFragment::create)
- .collect(ImmutableList.toImmutableList()))
- .addSystemIncludeDirs(
- Sequence.cast(systemIncludes, String.class, "system_includes").stream()
- .map(PathFragment::create)
- .collect(ImmutableList.toImmutableList()))
- .addFrameworkIncludeDirs(
- Sequence.cast(frameworkIncludes, String.class, "framework_includes").stream()
- .map(PathFragment::create)
- .collect(ImmutableList.toImmutableList()))
- .addDefines(Sequence.cast(defines, String.class, "defines"))
- .addNonTransitiveDefines(Sequence.cast(localDefines, String.class, "local_defines"))
- .setCopts(
- ImmutableList.copyOf(
- Sequence.cast(userCompileFlags, String.class, "user_compile_flags")))
- .addAdditionalCompilationInputs(headersForClifDoNotUseThisParam)
- .addAdditionalCompilationInputs(
- Sequence.cast(additionalInputs, Artifact.class, "additional_inputs"))
- .addAditionalIncludeScanningRoots(headersForClifDoNotUseThisParam)
- .setPurpose(common.getPurpose(getSemantics(language)))
- .addAdditionalExportedHeaders(
- additionalExportedHeaders.stream()
- .map(PathFragment::create)
- .collect(ImmutableList.toImmutableList()))
- .setPropagateModuleMapToCompileAction(propagateModuleMapToCompileAction)
- .setCodeCoverageEnabled(codeCoverageEnabled)
- .setHeadersCheckingMode(
- HeadersCheckingMode.valueOf(Ascii.toUpperCase(hdrsCheckingMode)));
+ configuration.getFragment(CppConfiguration.class)));
+ if (tuple) {
+ ImmutableList<Pair<Artifact, Label>> sources = convertSequenceTupleToPair(sourcesUnchecked);
+ ImmutableList<Pair<Artifact, Label>> publicHeaders =
+ convertSequenceTupleToPair(publicHeadersUnchecked);
+ ImmutableList<Pair<Artifact, Label>> privateHeaders =
+ convertSequenceTupleToPair(privateHeadersUnchecked);
+ helper.addPublicHeaders(publicHeaders).addPrivateHeaders(privateHeaders).addSources(sources);
+ } else {
+ List<Artifact> sources = Sequence.cast(sourcesUnchecked, Artifact.class, "srcs");
+ List<Artifact> publicHeaders =
+ Sequence.cast(publicHeadersUnchecked, Artifact.class, "public_hdrs");
+ List<Artifact> privateHeaders =
+ Sequence.cast(privateHeadersUnchecked, Artifact.class, "private_hdrs");
+ helper.addPublicHeaders(publicHeaders).addPrivateHeaders(privateHeaders).addSources(sources);
+ }
+
+ helper
+ .addCcCompilationContexts(
+ Sequence.cast(
+ ccCompilationContexts, CcCompilationContext.class, "compilation_contexts"))
+ .addImplementationDepsCcCompilationContexts(implementationContexts)
+ .addIncludeDirs(
+ Sequence.cast(includes, String.class, "includes").stream()
+ .map(PathFragment::create)
+ .collect(ImmutableList.toImmutableList()))
+ .addQuoteIncludeDirs(
+ Sequence.cast(quoteIncludes, String.class, "quote_includes").stream()
+ .map(PathFragment::create)
+ .collect(ImmutableList.toImmutableList()))
+ .addSystemIncludeDirs(
+ Sequence.cast(systemIncludes, String.class, "system_includes").stream()
+ .map(PathFragment::create)
+ .collect(ImmutableList.toImmutableList()))
+ .addFrameworkIncludeDirs(
+ Sequence.cast(frameworkIncludes, String.class, "framework_includes").stream()
+ .map(PathFragment::create)
+ .collect(ImmutableList.toImmutableList()))
+ .addDefines(Sequence.cast(defines, String.class, "defines"))
+ .addNonTransitiveDefines(Sequence.cast(localDefines, String.class, "local_defines"))
+ .setCopts(
+ ImmutableList.copyOf(
+ Sequence.cast(userCompileFlags, String.class, "user_compile_flags")))
+ .addAdditionalCompilationInputs(headersForClifDoNotUseThisParam)
+ .addAdditionalCompilationInputs(
+ Sequence.cast(additionalInputs, Artifact.class, "additional_inputs"))
+ .addAditionalIncludeScanningRoots(headersForClifDoNotUseThisParam)
+ .setPurpose(common.getPurpose(getSemantics(language)))
+ .addAdditionalExportedHeaders(
+ additionalExportedHeaders.stream()
+ .map(PathFragment::create)
+ .collect(ImmutableList.toImmutableList()))
+ .setPropagateModuleMapToCompileAction(propagateModuleMapToCompileAction)
+ .setCodeCoverageEnabled(codeCoverageEnabled)
+ .setHeadersCheckingMode(HeadersCheckingMode.valueOf(Ascii.toUpperCase(hdrsCheckingMode)));
+
+ ImmutableList<PathFragment> looseIncludeDirs =
+ looseIncludes.stream().map(PathFragment::create).collect(ImmutableList.toImmutableList());
+ if (!looseIncludeDirs.isEmpty()) {
+ helper.setLooseIncludeDirs(ImmutableSet.copyOf(looseIncludeDirs));
+ }
+
if (textualHeadersObject instanceof NestedSet) {
helper.addPublicTextualHeaders((NestedSet<Artifact>) textualHeadersObject);
} else {
@@ -2157,6 +2212,9 @@
if (moduleMap != null) {
helper.setCppModuleMap(moduleMap);
}
+ if (coptsFilter != null) {
+ helper.setCoptsFilter(coptsFilter);
+ }
for (CppModuleMap additionalModuleMap : additionalModuleMaps) {
helper.registerAdditionalModuleMap(additionalModuleMap);
}
@@ -2189,6 +2247,29 @@
}
}
+ private boolean checkAllSourcesContainTuplesOrNoneOfThem(ImmutableList<Sequence<?>> files)
+ throws EvalException {
+ boolean nonTuple = false;
+ boolean tuple = false;
+ for (Sequence<?> sequence : files) {
+ if (!sequence.isEmpty()) {
+ if (sequence.get(0) instanceof Tuple) {
+ tuple = true;
+ } else if (sequence.get(0) instanceof Artifact) {
+ nonTuple = true;
+ } else {
+ throw new EvalException(
+ "srcs, private_hdrs and public_hdrs must all be Tuples<File, Label> or File");
+ }
+ if (tuple && nonTuple) {
+ throw new EvalException(
+ "srcs, private_hdrs and public_hdrs must all be Tuples<File, Label> or File");
+ }
+ }
+ }
+ return tuple;
+ }
+
protected CcLinkingOutputs link(
StarlarkActionFactory actions,
FeatureConfigurationForStarlark starlarkFeatureConfiguration,
@@ -2456,4 +2537,11 @@
outputReplacement,
getSemantics()));
}
+
+ private ImmutableList<Pair<Artifact, Label>> convertSequenceTupleToPair(Sequence<?> sequenceTuple)
+ throws EvalException {
+ return Sequence.cast(sequenceTuple, Tuple.class, "files").stream()
+ .map(p -> Pair.of((Artifact) p.get(0), (Label) p.get(1)))
+ .collect(ImmutableList.toImmutableList());
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
index 3cee927..81403da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
@@ -143,6 +143,13 @@
named = true,
defaultValue = "[]"),
@Param(
+ name = "loose_includes",
+ documented = false,
+ positional = false,
+ named = true,
+ defaultValue = "unbound",
+ allowedTypes = {@ParamType(type = Sequence.class), @ParamType(type = NoneType.class)}),
+ @Param(
name = "quote_includes",
doc =
"Search paths for header files referenced by quotes, "
@@ -223,6 +230,16 @@
named = true,
defaultValue = "[]"),
@Param(
+ name = "implementation_compilation_contexts",
+ documented = false,
+ positional = false,
+ defaultValue = "unbound",
+ allowedTypes = {
+ @ParamType(type = Sequence.class, generic1 = CcCompilationContextApi.class),
+ @ParamType(type = NoneType.class)
+ },
+ named = true),
+ @Param(
name = "name",
doc =
"This is used for naming the output artifacts of actions created by this "
@@ -321,17 +338,24 @@
@ParamType(type = FileApi.class),
@ParamType(type = NoneType.class),
}),
+ @Param(
+ name = "copts_filter",
+ documented = false,
+ positional = false,
+ named = true,
+ defaultValue = "unbound"),
})
Tuple compile(
StarlarkActionFactoryT starlarkActionFactoryApi,
FeatureConfigurationT starlarkFeatureConfiguration,
CcToolchainProviderT starlarkCcToolchainProvider,
- Sequence<?> sources, // <FileT> expected
- Sequence<?> publicHeaders, // <FileT> expected
- Sequence<?> privateHeaders, // <FileT> expected
+ Sequence<?> sources, // <FileT> or Tuple<FileT,Label> expected
+ Sequence<?> publicHeaders, // <FileT> or Tuple<FileT,Label> expected
+ Sequence<?> privateHeaders, // <FileT> or Tuple<FileT,Label> expected
Object textualHeaders,
Object additionalExportedHeaders,
Sequence<?> includes, // <String> expected
+ Object starlarkLooseIncludes,
Sequence<?> quoteIncludes, // <String> expected
Sequence<?> systemIncludes, // <String> expected
Sequence<?> frameworkIncludes, // <String> expected
@@ -341,6 +365,7 @@
String stripIncludePrefix,
Sequence<?> userCompileFlags, // <String> expected
Sequence<?> ccCompilationContexts, // <CompilationContextT> expected
+ Object implementationCcCompilationContexts,
String name,
boolean disallowPicOutputs,
boolean disallowNopicOutputs,
@@ -355,6 +380,7 @@
Object language,
Object purpose,
Object grepIncludes,
+ Object coptsFilter,
StarlarkThread thread)
throws EvalException, InterruptedException;
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
index deebb85..c293a48 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
@@ -5482,7 +5482,7 @@
createFilesForTestingCompilation(
scratch, "third_party/tools/build_defs/foo", "include_prefix='prefix'");
scratch.file(
- "bar/BUILD",
+ "third_party/bar/BUILD",
"load('//third_party/tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
"cc_starlark_library(",
" name = 'starlark_lib',",
@@ -5490,11 +5490,11 @@
" public_hdrs = ['starlark_lib.h'],",
" private_hdrs = ['private_starlark_lib.h'],",
")");
- ConfiguredTarget target = getConfiguredTarget("//bar:starlark_lib");
+ ConfiguredTarget target = getConfiguredTarget("//third_party/bar:starlark_lib");
assertThat(target).isNotNull();
CcInfo ccInfo = target.get(CcInfo.PROVIDER);
assertThat(artifactsToStrings(ccInfo.getCcCompilationContext().getDirectPublicHdrs()))
- .contains("bin bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
+ .contains("bin third_party/bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
}
@Test
@@ -5502,7 +5502,7 @@
createFilesForTestingCompilation(
scratch, "third_party/tools/build_defs/foo", "strip_include_prefix='v1'");
scratch.file(
- "bar/BUILD",
+ "third_party/bar/BUILD",
"load('//third_party/tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
"cc_starlark_library(",
" name = 'starlark_lib',",
@@ -5510,11 +5510,11 @@
" public_hdrs = ['v1/starlark_lib.h'],",
" private_hdrs = ['v1/private_starlark_lib.h'],",
")");
- ConfiguredTarget target = getConfiguredTarget("//bar:starlark_lib");
+ ConfiguredTarget target = getConfiguredTarget("//third_party/bar:starlark_lib");
assertThat(target).isNotNull();
CcInfo ccInfo = target.get(CcInfo.PROVIDER);
assertThat(artifactsToStrings(ccInfo.getCcCompilationContext().getDirectPublicHdrs()))
- .contains("bin bar/_virtual_includes/starlark_lib/starlark_lib.h");
+ .contains("bin third_party/bar/_virtual_includes/starlark_lib/starlark_lib.h");
}
@Test
@@ -5524,7 +5524,7 @@
"third_party/tools/build_defs/foo",
"strip_include_prefix='v1', include_prefix='prefix'");
scratch.file(
- "bar/BUILD",
+ "third_party/bar/BUILD",
"load('//third_party/tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
"cc_starlark_library(",
" name = 'starlark_lib',",
@@ -5532,11 +5532,11 @@
" public_hdrs = ['v1/starlark_lib.h'],",
" private_hdrs = ['v1/private_starlark_lib.h'],",
")");
- ConfiguredTarget target = getConfiguredTarget("//bar:starlark_lib");
+ ConfiguredTarget target = getConfiguredTarget("//third_party/bar:starlark_lib");
assertThat(target).isNotNull();
CcInfo ccInfo = target.get(CcInfo.PROVIDER);
assertThat(artifactsToStrings(ccInfo.getCcCompilationContext().getDirectPublicHdrs()))
- .contains("bin bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
+ .contains("bin third_party/bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
}
@Test
@@ -5686,27 +5686,6 @@
doTestTreeAtrifactInSrcsAndHdrs("public_hdrs");
}
- @Test
- public void testWrongSrcsExtensionGivesError() throws Exception {
- doTestWrongExtensionOfSrcsAndHdrs("srcs");
- }
-
- @Test
- public void testWrongSrcExtensionGivesError() throws Exception {
- createFiles(scratch, "tools/build_defs/foo");
-
- scratch.file(
- "bar/BUILD",
- "load('//tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
- "cc_starlark_library(",
- " name = 'starlark_lib',",
- " srcs = ['starlark_lib.qweqwe'],",
- ")");
- reporter.removeHandler(failFastHandler);
- getConfiguredTarget("//bar:starlark_lib");
- assertContainsEvent("The list of possible extensions for 'srcs'");
- }
-
private static void createFilesForTestingCompilation(
Scratch scratch, String bzlFilePath, String compileProviderLines) throws Exception {
createFiles(scratch, bzlFilePath, compileProviderLines, "");
@@ -6184,21 +6163,6 @@
")");
}
- private void doTestWrongExtensionOfSrcsAndHdrs(String attrName) throws Exception {
- createFiles(scratch, "tools/build_defs/foo");
- scratch.file(
- "bar/BUILD",
- "load('//tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
- "cc_starlark_library(",
- " name = 'starlark_lib',",
- " " + attrName + " = ['starlark_lib.cannotpossiblybevalid'],",
- ")");
- reporter.removeHandler(failFastHandler);
- getConfiguredTarget("//bar:starlark_lib");
- assertContainsEvent(
- "has wrong extension. The list of possible extensions for '" + attrName + "'");
- }
-
private void doTestPossibleExtensionsOfSrcsAndHdrs(String attrName, List<String> extensions)
throws Exception {
createFiles(scratch, "tools/build_defs/foo");