forked from mirrors/gecko-dev
MinGW headers are all lowercase, and because we build FF with MinGW on Linux - capitalization matters. But if you're plugging along, working on Windows, you might forget about that, and wind up inadvertently breaking the MinGW build because you capitalized an include file (as is common in Windows development.) This lint job takes the list of header files from MinGW (generated by cd mingw-w64/mingw-w64-headers && find . -name "*.h" | xargs -I bob -- basename bob | sort | uniq) and will alert if they are in an #include statement but not all-lowercase. MozReview-Commit-ID: 4QFSdHx5Uak --HG-- extra : rebase_source : d76c258191d4cbb7665775bd1b8d79028890727f
36 lines
1.2 KiB
Python
36 lines
1.2 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/.
|
|
|
|
import os
|
|
import re
|
|
|
|
from mozlint.types import LineType
|
|
|
|
here = os.path.abspath(os.path.dirname(__file__))
|
|
HEADERS_FILE = os.path.join(here, 'mingw-headers.txt')
|
|
# generated by cd mingw-w64/mingw-w64-headers &&
|
|
# find . -name "*.h" | xargs -I bob -- basename bob | sort | uniq)
|
|
|
|
|
|
class MinGWCapitalization(LineType):
|
|
def __init__(self, *args, **kwargs):
|
|
super(MinGWCapitalization, self).__init__(*args, **kwargs)
|
|
with open(HEADERS_FILE, 'r') as fh:
|
|
self.headers = fh.read().strip().splitlines()
|
|
self.regex = re.compile("^#include\s*<(" + "|".join(self.headers) + ")>")
|
|
|
|
def condition(self, payload, line):
|
|
if not line.startswith("#include"):
|
|
return False
|
|
if self.regex.search(line, re.I):
|
|
return not self.regex.search(line)
|
|
|
|
|
|
def lint(paths, config, **lintargs):
|
|
results = []
|
|
|
|
m = MinGWCapitalization()
|
|
for path in paths:
|
|
results.extend(m._lint(path, config, **lintargs))
|
|
return results
|