Chromium Code Reviews| Index: PRESUBMIT.py |
| diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
| index 46dabb98c4d0cbf2b0e8164520303bc42a62931a..be21b45c17a84047eed915aaac1b7e2d1a573cb8 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,55 @@ 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_CPU_PPC", |
| + "TARGET_CPU_PPC64", |
| + "TARGET_CPU_68K", |
| + "TARGET_CPU_X86", |
| + "TARGET_CPU_ARM", |
| + "TARGET_CPU_MIPS", |
| + "TARGET_CPU_SPARC", |
| + "TARGET_CPU_ALPHA", |
| + "TARGET_IPHONE_SIMULATOR", |
| + "TARGET_OS_EMBEDDED", |
| + "TARGET_OS_IPHONE", |
| + "TARGET_OS_MAC", |
| + "TARGET_OS_UNIX", |
| + "TARGET_OS_WIN32", |
| + ) |
| + ifdef_macro = input_api.re.compile(r'^\s*#.*(?:ifdef\s|defined\()([^\s\)]+)') |
| + results = [] |
| + for lnum, line in f.ChangedContents(): |
| + for match in ifdef_macro.finditer(line): |
|
stuartmorgan
2014/09/29 18:51:51
Fix indentation
lliabraa
2014/09/30 11:23:14
Done.
|
| + if match.group(1) in ALWAYS_DEFINED_MACROS: |
| + always_defined = ' %s is always defined. ' % match.group(1) |
| + did_you_mean = 'Did you mean \'#if %s\'?' % match.group(1) |
| + results.append(' %s:%d %s\n\t%s' % (f.LocalPath(), |
| + lnum, |
| + always_defined, |
| + did_you_mean)) |
|
stuartmorgan
2014/09/29 18:51:51
Fix indentation on this block.
lliabraa
2014/09/30 11:23:14
Done.
|
| + 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( |
| + 'Found ifdef check on always-defined macro[s]. Please fix your code\n' |
| + 'or check the list of ALWAYS_DEFINED_MACROS in src/PRESUBMIT.py.', |
| + bad_macros)] |
| + |
| + |
| 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 |