From ca7f4946c232123940cb968fbcbdd5ec565e1763 Mon Sep 17 00:00:00 2001 From: Girish Kalele Date: Sat, 14 Mar 2026 21:25:36 +0000 Subject: [PATCH 1/4] Migrate to Python 3.12 compatibility - Update setup.py to require Python 3.12 - Remove pinned version of more-itertools in install_requires - Fix invalid escape sequence Warning/Error in regex strings --- make_profiler/parser.py | 2 +- setup.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/make_profiler/parser.py b/make_profiler/parser.py index e99cd1b..04f66bc 100644 --- a/make_profiler/parser.py +++ b/make_profiler/parser.py @@ -48,7 +48,7 @@ def parse(fd): def parse_target(token): line = token[1] target, deps, order_deps, docstring = re.match( - '(.+): \s? ([^|#]+)? \s? [|]? \s? ([^##]+)? \s? \s? ([#][#].+)?', + r'(.+): \s? ([^|#]+)? \s? [|]? \s? ([^##]+)? \s? \s? ([#][#].+)?', line, re.X ).groups() diff --git a/setup.py b/setup.py index 516cc5c..fd411ea 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import re from setuptools import setup -MIN_PYTHON = (2, 7) +MIN_PYTHON = (3, 12) if sys.version_info < MIN_PYTHON: sys.stderr.write("Python {}.{} or later is required\n".format(*MIN_PYTHON)) sys.exit(1) @@ -36,7 +36,7 @@ def read(fname): packages=['make_profiler'], test_suite='test', install_requires=( - 'more-itertools==2.4.1', + 'more-itertools', ), entry_points={ 'console_scripts': [ @@ -48,7 +48,7 @@ def read(fname): classifiers=[ 'Development Status :: 5 - Production/Stable', 'Topic :: Utilities', - 'Programming Language :: Python', + 'Programming Language :: Python :: 3.12', 'License :: OSI Approved :: BSD License', ], ) From eb0fdbd57ac815e6522b2b7f53ab1fc9da45f503 Mon Sep 17 00:00:00 2001 From: Girish Kalele Date: Sat, 14 Mar 2026 21:36:00 +0000 Subject: [PATCH 2/4] Modernize packaging for Python 3.12 - Add pyproject.toml as the primary build configuration - Update setup.py to be compatible with Python 3.12 - Resolve dependencies that caused setuptools crashes on Python 3.12 --- pyproject.toml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8359138 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,32 @@ +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "make-profiler" +version = "1.0.0" +authors = [ + { name="Darafei Praliaskouski", email="komzpa@gojuno.com" }, +] +maintainers = [ + { name="Alexander Verbitsky", email="averbitsky@gojuno.com" }, +] +description = "Profiler for Makefiles" +readme = "README.md" +requires-python = ">=3.12" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Topic :: Utilities", + "Programming Language :: Python :: 3.12", + "License :: OSI Approved :: BSD License", +] +dependencies = [ + "more-itertools>=6.0.0", +] + +[project.scripts] +profile_make_clean = "make_profiler.cmd_clean:main" +profile_make = "make_profiler.__main__:main" + +[project.urls] +Homepage = "https://github.com/gojuno/make-profiler" From d066c5ab85d23535ae7724bbe4d4203826c142ca Mon Sep 17 00:00:00 2001 From: Girish Kalele Date: Sat, 14 Mar 2026 21:36:51 +0000 Subject: [PATCH 3/4] Update .gitignore for common python/build artifacts --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index c9e4796..7f9d314 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,11 @@ logs dist +build/ *.egg-info *.pyc +__pycache__/ *.db config.inc.sh make_profile.db +test/make.svg +test/target11 From 95c8d09db4894d80463cf5b0220b27c8038315b1 Mon Sep 17 00:00:00 2001 From: Girish Kalele Date: Sat, 14 Mar 2026 21:43:24 +0000 Subject: [PATCH 4/4] Fix KeyError 'late_start' in critical_path for disconnected graphs --- make_profiler/dot_export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make_profiler/dot_export.py b/make_profiler/dot_export.py index 85daa62..8356c2f 100755 --- a/make_profiler/dot_export.py +++ b/make_profiler/dot_export.py @@ -56,7 +56,7 @@ def critical_path(influences, dependencies, inputs, timing): cp = set() timing_tags = {} for t, z in targets.items(): - if z["early_start"] == z["late_start"]: + if z["early_start"] == z.get("late_start"): cp.add(t) if z["pin_timing_tag"]: if z["timing_tag"] not in timing_tags: