Commit 75a861f2 authored by Sidney San Martín's avatar Sidney San Martín Committed by Commit Bot

[Vim/YCM] Fix missing system headers when YCM was built with its own libclang.

Bug: 932667
Change-Id: I2eb9965da1eb3f9ad4a5ce103cf6e32d35019e48
Reviewed-on: https://chromium-review.googlesource.com/c/1476105
Auto-Submit: Sidney San Martín <sdy@chromium.org>
Commit-Queue: Sidney San Martín <sdy@chromium.org>
Commit-Queue: Asanka Herath <asanka@chromium.org>
Reviewed-by: default avatarAsanka Herath <asanka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#632846}
parent 603940cd
...@@ -296,6 +296,13 @@ def GetClangOptionsFromNinjaForFilename(chrome_root, filename): ...@@ -296,6 +296,13 @@ def GetClangOptionsFromNinjaForFilename(chrome_root, filename):
# Chromium's includes are relative to that. # Chromium's includes are relative to that.
additional_flags = ['-I' + os.path.join(chrome_root)] additional_flags = ['-I' + os.path.join(chrome_root)]
# Fix missing system headers. For details, see
# <https://github.com/Valloric/YouCompleteMe/issues/303>
clang_root = os.path.join(
chrome_root, 'third_party/llvm-build/Release+Asserts')
additional_flags += ['-isystem', os.path.join(clang_root, 'include')]
additional_flags += ['-isystem', os.path.join(clang_root, 'include/c++/v1')]
# Version of Clang used to compile Chromium can be newer then version of # Version of Clang used to compile Chromium can be newer then version of
# libclang that YCM uses for completion. So it's possible that YCM's libclang # libclang that YCM uses for completion. So it's possible that YCM's libclang
# doesn't know about some used warning options, which causes compilation # doesn't know about some used warning options, which causes compilation
......
...@@ -20,6 +20,12 @@ import sys ...@@ -20,6 +20,12 @@ import sys
import tempfile import tempfile
import unittest import unittest
_common_flags = [
'-I[SRC]',
'-isystem', '[SRC]/third_party/llvm-build/Release+Asserts/include',
'-isystem', '[SRC]/third_party/llvm-build/Release+Asserts/include/c++/v1',
'-Wno-unknown-warning-option'
]
def CreateFile(path, copy_from=None, format_with=None, make_executable=False): def CreateFile(path, copy_from=None, format_with=None, make_executable=False):
"""Creates a file. """Creates a file.
...@@ -163,9 +169,8 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -163,9 +169,8 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.ycm_extra_conf.GetClangOptionsFromNinjaForFilename( self.ycm_extra_conf.GetClangOptionsFromNinjaForFilename(
self.chrome_root, os.path.join(self.chrome_root, 'one.cpp')) self.chrome_root, os.path.join(self.chrome_root, 'one.cpp'))
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(clang_options), [ self.NormalizeStringsInList(clang_options), _common_flags + [
'-I[SRC]', '-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/a', '-I[OUT]/tag-one'
'-I[OUT]/tag-one'
]) ])
def testOutDirNames(self): def testOutDirNames(self):
...@@ -190,8 +195,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -190,8 +195,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/tag-one' ] + _common_flags + [
'-I[OUT]/a', '-I[OUT]/tag-one'
]) ])
def testGetFlagsForFileForUnknownCppFile(self): def testGetFlagsForFileForUnknownCppFile(self):
...@@ -203,8 +209,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -203,8 +209,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/tag-default' ] + _common_flags + [
'-I[OUT]/a', '-I[OUT]/tag-default'
]) ])
def testGetFlagsForFileForUnknownCppNotTestFile(self): def testGetFlagsForFileForUnknownCppNotTestFile(self):
...@@ -216,8 +223,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -216,8 +223,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/tag-default' ] + _common_flags + [
'-I[OUT]/a', '-I[OUT]/tag-default'
]) ])
testGetFlagsForFileForKnownObjcFile = TestLanguage('eight.m', 'objective-c') testGetFlagsForFileForKnownObjcFile = TestLanguage('eight.m', 'objective-c')
...@@ -241,8 +249,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -241,8 +249,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/tag-default' ] + _common_flags + [
'-I[OUT]/a', '-I[OUT]/tag-default'
]) ])
def testGetFlagsForFileForUnknownUnittestFile(self): def testGetFlagsForFileForUnknownUnittestFile(self):
...@@ -254,9 +263,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -254,9 +263,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', ] + _common_flags + [
'-I[OUT]/tag-default-test' '-I[OUT]/a', '-I[OUT]/tag-default-test'
]) ])
def testGetFlagsForFileForUnknownBrowsertestFile2(self): def testGetFlagsForFileForUnknownBrowsertestFile2(self):
...@@ -268,9 +277,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -268,9 +277,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', ] + _common_flags + [
'-I[OUT]/tag-default-test' '-I[OUT]/a', '-I[OUT]/tag-default-test'
]) ])
def testGetFlagsForFileForKnownHeaderFileWithAssociatedCppFile(self): def testGetFlagsForFileForKnownHeaderFileWithAssociatedCppFile(self):
...@@ -282,8 +291,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -282,8 +291,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/tag-three' ] + _common_flags + [
'-I[OUT]/a', '-I[OUT]/tag-three'
]) ])
def testSourceFileWithNonClangOutputs(self): def testSourceFileWithNonClangOutputs(self):
...@@ -309,8 +319,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -309,8 +319,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/tag-four' ] + _common_flags + [
'-I[OUT]/a', '-I[OUT]/tag-four'
]) ])
def testSourceFileWithOnlyNonClangOutputs(self): def testSourceFileWithOnlyNonClangOutputs(self):
...@@ -322,8 +333,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -322,8 +333,9 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
self.assertTrue('flags' in result) self.assertTrue('flags' in result)
self.assertEquals( self.assertEquals(
self.NormalizeStringsInList(result['flags']), [ self.NormalizeStringsInList(result['flags']), [
'-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++', '-I[SRC]', '-DUSE_CLANG_COMPLETER', '-std=c++14', '-x', 'c++'
'-Wno-unknown-warning-option', '-I[OUT]/a', '-I[OUT]/tag-default' ] + _common_flags + [
'-I[OUT]/a', '-I[OUT]/tag-default'
]) ])
def testGetFlagsForSysrootAbsPath(self): def testGetFlagsForSysrootAbsPath(self):
...@@ -339,8 +351,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -339,8 +351,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
'-std=c++14', '-std=c++14',
'-x', '-x',
'c++', 'c++',
'-I[SRC]', ] + _common_flags + [
'-Wno-unknown-warning-option',
'-I[OUT]/a', '-I[OUT]/a',
'--sysroot=/usr/lib/sysroot-image', '--sysroot=/usr/lib/sysroot-image',
'-isysroot', '-isysroot',
...@@ -360,8 +371,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -360,8 +371,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
'-std=c++14', '-std=c++14',
'-x', '-x',
'c++', 'c++',
'-I[SRC]', ] + _common_flags + [
'-Wno-unknown-warning-option',
'-I[OUT]/a', '-I[OUT]/a',
'--sysroot=[SRC]/build/sysroot-image', '--sysroot=[SRC]/build/sysroot-image',
'-isysroot', '-isysroot',
...@@ -379,8 +389,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -379,8 +389,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
'-std=c++14', '-std=c++14',
'-x', '-x',
'c++', 'c++',
'-I[SRC]', ] + _common_flags + [
'-Wno-unknown-warning-option',
'-I[OUT]/b', '-I[OUT]/b',
'-isystem[OUT]/a', '-isystem[OUT]/a',
'-isystem', '[SRC]/build/c', '-isystem', '[SRC]/build/c',
...@@ -398,8 +407,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase): ...@@ -398,8 +407,7 @@ class Chromium_ycmExtraConfTest(unittest.TestCase):
'-std=c++14', '-std=c++14',
'-x', '-x',
'c++', 'c++',
'-I[SRC]', ] + _common_flags + [
'-Wno-unknown-warning-option',
'-I', '[OUT]/a', '-I', '[OUT]/a',
'-I', '[OUT]/tag-eleven' '-I', '[OUT]/tag-eleven'
]) ])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment