+2024-04-11 Bruno Haible <bruno@clisp.org>
+
+ gnulib-tool.py: Optimize module set lookups.
+ * gnulib-tool.py (profiler_args): New variable.
+ * pygnulib/GLModuleSystem.py (GLModuleTable.transitive_closure): Turn
+ handledmodules into a set.
+ (GLModuleTable.transitive_closure_separately): For the 'in' test, use
+ a set variable main_modules_set.
+
2024-04-11 Collin Funk <collin.funk1@gmail.com>
gnulib-tool.py: Remove redundant backslashes from regexps.
func_fatal_error "python3 not found; try setting GNULIB_TOOL_IMPL=sh"
fi
-exec python3 "$gnulib_dir/.gnulib-tool.py" "$@"
+profiler_args=
+# For profiling, cf. <https://docs.python.org/3/library/profile.html>.
+#profiler_args="-m cProfile -s tottime"
+exec python3 $profiler_args "$gnulib_dir/.gnulib-tool.py" "$@"
# module on the input list has been processed, it is added to the
# "handled list", so we can avoid to process it again.
inc_all_tests = self.inc_all_direct_tests
- handledmodules = []
+ handledmodules = set()
inmodules = modules
outmodules = []
if self.config['conddeps']:
self.addConditional(module, depmodule, True)
else: # if not conditional
self.addUnconditional(depmodule)
- handledmodules = sorted(set(handledmodules + inmodules_this_round))
+ handledmodules = handledmodules.union(inmodules_this_round)
# Remove handledmodules from inmodules.
- inmodules = [module
- for module in inmodules
- if module not in handledmodules]
+ inmodules = [ module
+ for module in inmodules
+ if module not in handledmodules ]
inmodules = sorted(set(inmodules))
inc_all_tests = self.inc_all_indirect_tests
modules = sorted(set(outmodules))
main_modules = self.transitive_closure(basemodules)
self.config.setInclTestCategory(TESTS['tests'], saved_inctests)
# Determine tests-related module list.
+ main_modules_set = set(main_modules)
tests_modules = \
[ m
for m in finalmodules
- if not (m in main_modules and m.getApplicability() == 'main') ]
+ if not (m in main_modules_set and m.getApplicability() == 'main') ]
# Note: Since main_modules is (hopefully) a subset of finalmodules, this
# ought to be the same as
# [ m