Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index 46dabb98c4d0cbf2b0e8164520303bc42a62931a..2d4f43fa1050d9c2454d494003ab95e9c3606159 100644 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -1283,6 +1283,7 @@ def _CommonChecks(input_api, output_api): |
results.extend(_CheckHardcodedGoogleHostsInLowerLayers(input_api, output_api)) |
results.extend(_CheckNoAbbreviationInPngFileName(input_api, output_api)) |
results.extend(_CheckForInvalidOSMacros(input_api, output_api)) |
+ results.extend(_CheckForInvalidIfDefinedMacros(input_api, output_api)) |
results.extend(_CheckAddedDepsHaveTargetApprovals(input_api, output_api)) |
results.extend( |
input_api.canned_checks.CheckChangeHasNoTabs( |
@@ -1393,6 +1394,43 @@ def _CheckForInvalidOSMacros(input_api, output_api): |
'Possibly invalid OS macro[s] found. Please fix your code\n' |
'or add your macro to src/PRESUBMIT.py.', bad_macros)] |
+ |
+def _CheckForInvalidIfDefinedMacrosInFile(input_api, f): |
+ """Check all affected files for invalid "if defined" macros.""" |
+ ALWAYS_DEFINED_MACROS = ( |
+ "TARGET_IPHONE_SIMULATOR", |
stuartmorgan
2014/09/25 23:42:32
From TargetConditionals.h, I'd suggest we also add
lliabraa
2014/09/26 18:22:43
Done. I added all the CPU and OS defines
|
+ ) |
+ preprocessor_statement = input_api.re.compile(r'^\s*#') |
+ ifdef_macro = input_api.re.compile(r'(ifdef\s|defined\()([^\s\)]+)') |
stuartmorgan
2014/09/25 23:42:32
Why separate regexes, vs ^\s*#.*(ifdef|defined\()
lliabraa
2014/09/26 18:22:43
I copied that bit from _CheckForInvalidOSMacrosInF
|
+ results = [] |
+ for lnum, line in f.ChangedContents(): |
+ if preprocessor_statement.search(line): |
+ for match in ifdef_macro.finditer(line): |
+ if match.group(2) in ALWAYS_DEFINED_MACROS: |
+ always_defined = ' %s is always defined. ' % match.group(2) |
+ did_you_mean = 'Did you mean \'#if %s\'?' % match.group(2) |
+ results.append(' %s:%d %s\n\t%s' % (f.LocalPath(), |
+ lnum, |
+ always_defined, |
+ did_you_mean)) |
+ return results |
+ |
+ |
+def _CheckForInvalidIfDefinedMacros(input_api, output_api): |
+ """Check all affected files for invalid "if defined" macros.""" |
+ bad_macros = [] |
+ for f in input_api.AffectedFiles(): |
+ if f.LocalPath().endswith(('.h', '.c', '.cc', '.m', '.mm')): |
+ bad_macros.extend(_CheckForInvalidIfDefinedMacrosInFile(input_api, f)) |
+ |
+ if not bad_macros: |
+ return [] |
+ |
+ return [output_api.PresubmitError( |
+ 'Possibly invalid if defined macro[s] found. Please fix your code\n' |
+ 'or add your macro to src/PRESUBMIT.py.', bad_macros)] |
stuartmorgan
2014/09/25 23:42:32
Where would they add it to fix the error?
lliabraa
2014/09/26 18:22:43
Done. I've changed this text a bit. If the ifdef i
|
+ |
+ |
def _CheckForIPCRules(input_api, output_api): |
"""Check for same IPC rules described in |
http://www.chromium.org/Home/chromium-security/education/security-tips-for-ipc |