Skip to content

Commit feed478

Browse files
kchodorowphilwo
authored andcommitted
Use fully qualified paths for C++ includes
This fixes #66. -- MOS_MIGRATED_REVID=91083724
1 parent cf71f8b commit feed478

File tree

2 files changed

+60
-4
lines changed

2 files changed

+60
-4
lines changed

src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -526,14 +526,14 @@ List<PathFragment> getLooseIncludeDirs() {
526526
List<PathFragment> result = new ArrayList<>();
527527
// The package directory of the rule contributes includes. Note that this also covers all
528528
// non-subpackage sub-directories.
529-
PathFragment rulePackage = ruleContext.getLabel().getPackageFragment();
529+
PathFragment rulePackage = ruleContext.getLabel().getPackageIdentifier().getPathFragment();
530530
result.add(rulePackage);
531531

532532
// Gather up all the dirs from the rule's srcs as well as any of the srcs outputs.
533533
if (hasAttribute("srcs", Type.LABEL_LIST)) {
534534
for (FileProvider src :
535535
ruleContext.getPrerequisites("srcs", Mode.TARGET, FileProvider.class)) {
536-
PathFragment packageDir = src.getLabel().getPackageFragment();
536+
PathFragment packageDir = src.getLabel().getPackageIdentifier().getPathFragment();
537537
for (Artifact a : src.getFilesToBuild()) {
538538
result.add(packageDir);
539539
// Attempt to gather subdirectories that might contain include files.
@@ -544,7 +544,8 @@ List<PathFragment> getLooseIncludeDirs() {
544544

545545
// Add in any 'includes' attribute values as relative path fragments
546546
if (ruleContext.getRule().isAttributeValueExplicitlySpecified("includes")) {
547-
PathFragment packageFragment = ruleContext.getLabel().getPackageFragment();
547+
PathFragment packageFragment = ruleContext.getLabel().getPackageIdentifier()
548+
.getPathFragment();
548549
// For now, anything with an 'includes' needs a blanket declaration
549550
result.add(packageFragment.getRelative("**"));
550551
}
@@ -570,7 +571,7 @@ List<PathFragment> getIncludeDirs() {
570571

571572
private List<PathFragment> getIncludeDirsFromIncludesAttribute() {
572573
List<PathFragment> result = new ArrayList<>();
573-
PathFragment packageFragment = ruleContext.getLabel().getPackageFragment();
574+
PathFragment packageFragment = ruleContext.getLabel().getPackageIdentifier().getPathFragment();
574575
for (String includesAttr : ruleContext.attributes().get("includes", Type.STRING_LIST)) {
575576
includesAttr = ruleContext.expandMakeVariables("includes", includesAttr);
576577
if (includesAttr.startsWith("/")) {

src/test/shell/bazel/local_repository_test.sh

+55
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,59 @@ function test_default_ws() {
232232
bazel build //external:java >& $TEST_log || fail "Failed to build java"
233233
}
234234

235+
function test_external_hdrs() {
236+
local external_ws=$TEST_TMPDIR/path/to/my/lib
237+
mkdir -p $external_ws
238+
touch $external_ws/WORKSPACE
239+
cat > $external_ws/greet_lib.h <<EOF
240+
void greet();
241+
EOF
242+
cat > $external_ws/greet_lib.cc <<EOF
243+
#include <stdio.h>
244+
void greet() {
245+
printf("Hello");
246+
}
247+
EOF
248+
cat > $external_ws/BUILD <<EOF
249+
cc_library(
250+
name = "greet_lib",
251+
srcs = ["greet_lib.cc"],
252+
hdrs = ["greet_lib.h"],
253+
includes = [
254+
".",
255+
],
256+
visibility = ["//visibility:public"],
257+
)
258+
EOF
259+
260+
cat > greeter.cc <<EOF
261+
#include "greet_lib.h"
262+
263+
int main() {
264+
greet();
265+
return 0;
266+
}
267+
EOF
268+
cat > BUILD <<EOF
269+
cc_binary(
270+
name = "greeter",
271+
srcs = ["greeter.cc"],
272+
deps = ["//external:greet-lib"],
273+
)
274+
EOF
275+
cat > WORKSPACE <<EOF
276+
local_repository(
277+
name = "greet-ws",
278+
path = "$external_ws",
279+
)
280+
bind(
281+
name = "greet-lib",
282+
actual = "@greet-ws//:greet_lib"
283+
)
284+
EOF
285+
286+
bazel run //:greeter >& $TEST_log || fail "Failed to run greeter"
287+
expect_log "Hello"
288+
}
289+
235290
run_suite "local repository tests"

0 commit comments

Comments
 (0)