From 457e6a6e96b5afad403a0bc892508a77beef4d33 Mon Sep 17 00:00:00 2001 From: Neil Schemenauer Date: Mon, 22 Nov 2021 23:51:02 -0800 Subject: [PATCH] bpo-45561: Run smelly.py tool from $(srcdir) (GH-29138) --- Makefile.pre.in | 2 +- .../next/Build/2021-10-21-14-38-30.bpo-45561.PVqhZE.rst | 1 + Tools/scripts/smelly.py | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-21-14-38-30.bpo-45561.PVqhZE.rst diff --git a/Makefile.pre.in b/Makefile.pre.in index d52f7362079..afa0414ce04 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -2420,7 +2420,7 @@ distclean: clobber # Check that all symbols exported by libpython start with "Py" or "_Py" smelly: @DEF_MAKE_RULE@ - $(RUNSHARED) ./$(BUILDPYTHON) Tools/scripts/smelly.py + $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/smelly.py # Find files with funny names funny: diff --git a/Misc/NEWS.d/next/Build/2021-10-21-14-38-30.bpo-45561.PVqhZE.rst b/Misc/NEWS.d/next/Build/2021-10-21-14-38-30.bpo-45561.PVqhZE.rst new file mode 100644 index 00000000000..cf5d8686b98 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-21-14-38-30.bpo-45561.PVqhZE.rst @@ -0,0 +1 @@ +Run smelly.py tool from $(srcdir). diff --git a/Tools/scripts/smelly.py b/Tools/scripts/smelly.py index fb01660dea3..276a5ab2cc8 100755 --- a/Tools/scripts/smelly.py +++ b/Tools/scripts/smelly.py @@ -108,8 +108,11 @@ def check_library(library, dynamic=False): def check_extensions(): print(__file__) - srcdir = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) - filename = os.path.join(srcdir, "pybuilddir.txt") + # This assumes pybuilddir.txt is in same directory as pyconfig.h. + # In the case of out-of-tree builds, we can't assume pybuilddir.txt is + # in the source folder. + config_dir = os.path.dirname(sysconfig.get_config_h_filename()) + filename = os.path.join(config_dir, "pybuilddir.txt") try: with open(filename, encoding="utf-8") as fp: pybuilddir = fp.readline() @@ -118,7 +121,7 @@ def check_extensions(): return True print(f"Check extension modules from {pybuilddir} directory") - builddir = os.path.join(srcdir, pybuilddir) + builddir = os.path.join(config_dir, pybuilddir) nsymbol = 0 for name in os.listdir(builddir): if not name.endswith(".so"):