auto import from //branches/cupcake/...@125939
diff --git a/libc/kernel/tools/clean_header.py b/libc/kernel/tools/clean_header.py
index bed9926..de4bf85 100755
--- a/libc/kernel/tools/clean_header.py
+++ b/libc/kernel/tools/clean_header.py
@@ -69,6 +69,7 @@
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 54ebaf4..4b4bd38 100644
--- a/libc/kernel/tools/cpp.py
+++ b/libc/kernel/tools/cpp.py
@@ -1571,6 +1571,13 @@
"""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 @@
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 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 da78b87..aad0092 100644
--- a/libc/kernel/tools/defaults.py
+++ b/libc/kernel/tools/defaults.py
@@ -73,6 +73,17 @@
"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 = """\