Skip to content

Commit 62b4c0f

Browse files
snizovtsevSarcasm
authored andcommitted
headerdb: parse some special include search opts
1 parent 6879a78 commit 62b4c0f

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

compdb/complementer/headerdb.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,18 @@ def extract_include_dirs(compile_command):
9090
i = 0
9191
arguments = sanitize_compile_options(compile_command)
9292
while i < len(arguments):
93-
# -I <dir> and -I<dir>
94-
if arguments[i].startswith("-I"):
95-
if arguments[i] == "-I":
96-
i += 1
97-
header_search_path.append(arguments[i])
98-
else:
99-
header_search_path.append(arguments[i][2:])
93+
# -I <dir> and -I<dir> and similar
94+
for opt in ["-I", "-isystem", "-iquote", "-B"]:
95+
if arguments[i].startswith(opt):
96+
include_dir = None
97+
if arguments[i] == opt:
98+
i += 1
99+
include_dir = arguments[i]
100+
else:
101+
include_dir = arguments[i][len(opt):]
102+
if opt == "-B":
103+
include_dir = os.path.join(include_dir, "include")
104+
header_search_path.append(include_dir)
100105
i += 1
101106
return [
102107
os.path.join(compile_command.directory, p) for p in header_search_path

tests/unit/test_headerdb.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,21 @@ def test_02(self):
7878
result = self.complement([
7979
CompileCommand(
8080
directory=test_srcdir,
81-
arguments=['clang++', '-Iinclude', '-DA=1'],
81+
arguments=['clang++', '-iquote', 'include', '-DA=1'],
8282
file='src/a.cpp'),
8383
CompileCommand(
8484
directory=test_srcdir,
85-
arguments=['clang++', '-Iinclude', '-DB=1'],
85+
arguments=['clang++', '-iquoteinclude', '-DB=1'],
8686
file='src/b.cpp'),
8787
])
8888
self.assertEqual(2, len(result))
8989
self.assertEqual('include/a/a.hpp', result[0].file)
9090
self.assertEqual(
91-
['clang++', '-Iinclude', '-DA=1', '-c', 'include/a/a.hpp'],
91+
['clang++', '-iquote', 'include', '-DA=1', '-c', 'include/a/a.hpp'],
9292
result[0].arguments)
9393
self.assertEqual('include/b/b.hpp', result[1].file)
9494
self.assertEqual(
95-
['clang++', '-Iinclude', '-DB=1', '-c', 'include/b/b.hpp'],
95+
['clang++', '-iquoteinclude', '-DB=1', '-c', 'include/b/b.hpp'],
9696
result[1].arguments)
9797

9898
def test_03(self):

0 commit comments

Comments
 (0)