mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-04 11:26:09 +00:00
64c748af66
We need to use the new Settings() API, instead of the deprecated FlagsForFile. Though in practice we can just delegate to it and it works out of the box. Differential Revision: https://phabricator.services.mozilla.com/D72152
63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from __future__ import absolute_import, print_function
|
|
import json
|
|
import os
|
|
import shlex
|
|
import subprocess
|
|
import sys
|
|
|
|
old_bytecode = sys.dont_write_bytecode
|
|
sys.dont_write_bytecode = True
|
|
|
|
path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'mach'))
|
|
|
|
# If mach is not here, we're on the objdir go to the srcdir.
|
|
if not os.path.exists(path):
|
|
with open(os.path.join(os.path.dirname(__file__), 'mozinfo.json')) as info:
|
|
config = json.loads(info.read())
|
|
path = os.path.join(config['topsrcdir'], 'mach')
|
|
|
|
sys.dont_write_bytecode = old_bytecode
|
|
|
|
def _is_likely_cpp_header(filename):
|
|
if not filename.endswith('.h'):
|
|
return False
|
|
|
|
if filename.endswith('Inlines.h') or filename.endswith('-inl.h'):
|
|
return True
|
|
|
|
cpp_file = filename[:-1] + 'cpp'
|
|
return os.path.exists(cpp_file)
|
|
|
|
|
|
def Settings(**kwargs):
|
|
if kwargs[ 'language' ] == 'cfamily':
|
|
return FlagsForFile(kwargs['filename'])
|
|
return {}
|
|
|
|
|
|
def FlagsForFile(filename):
|
|
output = subprocess.check_output([path, 'compileflags', filename])
|
|
output = output.decode('utf-8')
|
|
|
|
flag_list = shlex.split(output)
|
|
|
|
# This flag is added by Fennec for android build and causes ycmd to fail to parse the file.
|
|
# Removing this flag is a workaround until ycmd starts to handle this flag properly.
|
|
# https://github.com/Valloric/YouCompleteMe/issues/1490
|
|
final_flags = [x for x in flag_list if not x.startswith('-march=armv')]
|
|
|
|
if _is_likely_cpp_header(filename):
|
|
final_flags += ["-x", "c++"]
|
|
|
|
return {
|
|
'flags': final_flags,
|
|
'do_cache': True
|
|
}
|
|
|
|
if __name__ == '__main__':
|
|
print(FlagsForFile(sys.argv[1]))
|