diff options
Diffstat (limited to 'libc/kernel/tools')
-rwxr-xr-x | libc/kernel/tools/clean_header.py | 1 | ||||
-rw-r--r-- | libc/kernel/tools/cpp.py | 21 | ||||
-rw-r--r-- | libc/kernel/tools/defaults.py | 11 |
3 files changed, 33 insertions, 0 deletions
diff --git a/libc/kernel/tools/clean_header.py b/libc/kernel/tools/clean_header.py index bed992662..de4bf8560 100755 --- a/libc/kernel/tools/clean_header.py +++ b/libc/kernel/tools/clean_header.py @@ -69,6 +69,7 @@ def cleanupFile( path ): list.removeVarsAndFuncs( statics ) list.removeComments() list.removeEmptyLines() + list.removeMacroDefines( kernel_ignored_macros ) list.insertDisclaimer( kernel.kernel_disclaimer ) out = StringOutput() diff --git a/libc/kernel/tools/cpp.py b/libc/kernel/tools/cpp.py index 54ebaf4c2..4b4bd3826 100644 --- a/libc/kernel/tools/cpp.py +++ b/libc/kernel/tools/cpp.py @@ -1571,6 +1571,13 @@ class Block: """returns True iff this is a conditional directive block""" return self.directive in ["if","ifdef","ifndef","else","elif","endif"] + def isDefine(self): + """returns the macro name in a #define directive, or None otherwise""" + if self.directive != "define": + return None + + return self.tokens[0].value + def isIf(self): """returns True iff this is an #if-like directive block""" return self.directive in ["if","ifdef","ifndef","elif"] @@ -1678,6 +1685,10 @@ class BlockList: if b.isIf(): b.expr.optimize(macros) + def removeMacroDefines(self,macros): + """remove known macro definitions from a BlockList""" + self.blocks = remove_macro_defines(self.blocks,macros) + def removePrefixed(self,prefix,names): for b in self.blocks: if b.isIf(): @@ -1994,6 +2005,16 @@ def test_BlockParser(): ##################################################################################### ##################################################################################### +def remove_macro_defines( blocks, excludedMacros=set() ): + """remove macro definitions like #define <macroName> ....""" + result = [] + for b in blocks: + macroName = b.isDefine() + if macroName == None or not macroName in excludedMacros: + result.append(b) + + return result + def find_matching_endif( blocks, i ): n = len(blocks) depth = 1 diff --git a/libc/kernel/tools/defaults.py b/libc/kernel/tools/defaults.py index da78b875a..aad009217 100644 --- a/libc/kernel/tools/defaults.py +++ b/libc/kernel/tools/defaults.py @@ -73,6 +73,17 @@ kernel_known_statics = { "x86" : kernel_known_x86_statics } +# this is a list of macros which we want to specifically exclude from +# the generated files. +# +kernel_ignored_macros = set( + [ "MAXHOSTNAMELEN", # for some reason, Linux defines it to 64 + # while most of the BSD code expects this to be 256 + # so ignore the kernel-provided definition and + # define it in the Bionic headers instead + ] + ) + # this is the standard disclaimer # kernel_disclaimer = """\ |