summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/ppCheck.py72
-rw-r--r--python/mozbuild/mozbuild/mach_commands.py19
2 files changed, 91 insertions, 0 deletions
diff --git a/build/ppCheck.py b/build/ppCheck.py
new file mode 100644
index 000000000..1e27ca171
--- /dev/null
+++ b/build/ppCheck.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+import os, sys
+
+if not len(sys.argv) is 2 or not os.path.exists(sys.argv[1]):
+ print("\nYou did not supply a valid path to check.")
+ exit(1)
+else:
+ print("\nChecking for un-preprocessed files...", end = ' ')
+ DIST_PATH = sys.argv[1]
+
+PP_FILE_TYPES = (
+ '.css',
+ '.dtd',
+ '.html',
+ '.js',
+ '.jsm',
+ '.xhtml',
+ '.xml',
+ '.xul',
+ '.manifest',
+ '.properties',
+ '.rdf'
+)
+
+PP_SPECIAL_TYPES = ('.css')
+
+PP_DIRECTIVES = [
+ 'define',
+ 'if',
+ 'ifdef',
+ 'ifndef',
+ 'elif',
+ 'elifdef',
+ 'endif',
+ 'error',
+ 'expand',
+ 'filter',
+ 'include',
+ 'literal',
+ 'undef',
+ 'unfilter'
+]
+
+PP_FILES = []
+PP_BAD_FILES = []
+
+for root, directories, filenames in os.walk(DIST_PATH):
+ for filename in filenames:
+ if filename.endswith(PP_FILE_TYPES):
+ PP_FILES += [ os.path.join(root, filename).replace(os.sep, '/') ]
+
+for file in PP_FILES:
+ with open(file) as fp:
+ marker = '%' if file.endswith(PP_SPECIAL_TYPES) else '#'
+ directives = tuple(marker + directive for directive in PP_DIRECTIVES)
+ for line in fp:
+ if line.startswith(directives):
+ PP_BAD_FILES += [ file.replace(DIST_PATH + '/', '') ]
+ fp.close()
+
+PP_BAD_FILES = list(dict.fromkeys(PP_BAD_FILES))
+
+print('Done!')
+
+if len(PP_BAD_FILES) > 0:
+ print("\nWARNING: The following {0} file(s) in {1} may require preprocessing:\n".format(len(PP_BAD_FILES), DIST_PATH))
+ for file in PP_BAD_FILES:
+ print(file)
+
+exit(0) \ No newline at end of file
diff --git a/python/mozbuild/mozbuild/mach_commands.py b/python/mozbuild/mozbuild/mach_commands.py
index 6e57ab5ae..bd3fbe921 100644
--- a/python/mozbuild/mozbuild/mach_commands.py
+++ b/python/mozbuild/mozbuild/mach_commands.py
@@ -541,6 +541,25 @@ class Build(MachCommandBase):
# as when doing OSX Universal builds)
pass
+ # Check for un-preprocessed files.. In case something goes wrong it will be noted
+ ppcheck_script = mozpath.join(self.topsrcdir, "build", "ppCheck.py")
+ ppcheck_path = mozpath.join(self.topobjdir, "dist", "bin")
+ if not os.path.exists(ppcheck_script):
+ ppcheck_script = mozpath.join(self.topsrcdir, "mozilla", "build", "ppCheck.py")
+
+ if not os.path.exists(ppcheck_script):
+ ppcheck_script = mozpath.join(self.topsrcdir, "platform", "build", "ppCheck.py")
+ else:
+ ppcheck_script = None
+
+ if ppcheck_script:
+ ppcheck_cmd = [which.which("python2.7"), ppcheck_script, ppcheck_path]
+ ppcheck_result = subprocess.call(ppcheck_cmd, cwd=self.topsrcdir)
+
+ if not ppcheck_script or ppcheck_result:
+ print("\nWARNING: Something has gone wrong with the check for un-preprocessed files. " +
+ "Please manually verify that files are properly preprocessed.")
+
return status
@Command('configure', category='build',