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 <jun6...@gmail.com> (大前 潤)