On 2024/06/19 2:33, Timofey Zhakov wrote:
> Hello again!
>
> I was working on the CMake patch and didn't update the progress for a long
> time.
>
> Here are some things that I have done: ...
Running "python3 gen-make.py -t cmake" on Windows and get the weird warning:
[[[
C> python.exe gen-make.py -t cmake
WARNING: errno intersects APR error codes; runtime computation of symbolic
error names for the following numeric codes might be wrong: <filter object at
0x0000022379A52BF0>
Wrote: subversion/libsvn_subr/errorcode.inc
Wrote: subversion/libsvn_subr/config_keys.inc
]]]
The root cause of the message is wrong handling filter() function in
build/generator/gen_base.py with Python 3.
[[[
diff --git a/build/generator/gen_base.py b/build/generator/gen_base.py
index f4131866bc..7adf9106ed 100644
--- a/build/generator/gen_base.py
+++ b/build/generator/gen_base.py
@@ -320,9 +320,8 @@ class GeneratorBase:
del aprerr
## sanity check
- intersection = set(errno.errorcode.keys()) & set(aprdict.keys())
- intersection = filter(lambda x: errno.errorcode[x] != aprdict[x],
- intersection)
+ intersection = sorted(x for x in (set(errno.errorcode) & set(aprdict))
+ if errno.errorcode[x] != aprdict[x])
if self.errno_filter(intersection):
print("WARNING: errno intersects APR error codes; "
"runtime computation of symbolic error names for the following
numeric codes might be wrong: "
@@ -332,8 +331,7 @@ class GeneratorBase:
'\n'.join(lines))
def errno_filter(self, codes):
- # list() to force the generator under python3
- return list(codes)
+ return codes
class FileSectionOptionEnum(object):
# These are accessed via getattr() later on
]]]
In build/generator/gen_win.py, the errno_filter() is overridden to ignore 10000
<= errno <= 10100 (probably winsock errors). See also
https://svn.apache.org/r1488803
[[[
def errno_filter(self, codes):
"Callback for gen_base.write_errno_table()."
# Filter out apr_errno.h SOC* codes, which alias the windows API names.
return set(filter(lambda code: not (10000 <= code <= 10100), codes))
]]]
I think build/generator/gen_cmake.py should have the same logic for Windows
like the following (not elegant...):
[[[
diff --git a/build/generator/gen_cmake.py b/build/generator/gen_cmake.py
index 426abe9da6..dcc5a80d38 100644
--- a/build/generator/gen_cmake.py
+++ b/build/generator/gen_cmake.py
@@ -235,3 +235,8 @@ class Generator(gen_base.GeneratorBase):
if isinstance(target, gen_base.TargetExe):
if target.install == "bdb-test":
return True
+
+ if os.name == 'nt':
+ def errno_filter(self, codes):
+ """From errno_filter() in gen_win.py"""
+ return [code for code in codes if not (10000 <= code <= 10100)]
]]]
--
Jun Omae <[email protected]> (大前 潤)