From e0bc28d74c69ee9dde1c27b080495bfcb6ebbcfa Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sat, 11 Nov 2023 17:53:49 +0000 Subject: [PATCH 1/2] BUG: Enforce modulename from pyf file [f2py] Closes gh-22819 --- numpy/f2py/f2py2e.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/numpy/f2py/f2py2e.py b/numpy/f2py/f2py2e.py index 1cfe8cddd68c..6b9095506665 100755 --- a/numpy/f2py/f2py2e.py +++ b/numpy/f2py/f2py2e.py @@ -644,19 +644,28 @@ def run_compile(): del sys.argv[i + 1], sys.argv[i] sources = sys.argv[1:] - pyf_files = [] + m_flag_modulename = None if '-m' in sys.argv: i = sys.argv.index('-m') - modulename = sys.argv[i + 1] + m_flag_modulename = sys.argv[i + 1] del sys.argv[i + 1], sys.argv[i] sources = sys.argv[1:] - else: - pyf_files, _sources = filter_files('', '[.]pyf([.]src|)', sources) - sources = pyf_files + _sources - for f in pyf_files: - modulename = auxfuncs.get_f2py_modulename(f) - if modulename: - break + + pyf_files, _sources = filter_files('', '[.]pyf([.]src|)', sources) + sources = pyf_files + _sources + + for f in pyf_files: + pyf_modulename = auxfuncs.get_f2py_modulename(f) + if pyf_modulename: + modulename = pyf_modulename + if m_flag_modulename: + outmess(f"INFO: {m_flag_modulename} from -m ignored, " + f"using {modulename} from .pyf file\n") + break + + if not pyf_files or not modulename: + if m_flag_modulename: + modulename = m_flag_modulename extra_objects, sources = filter_files('', '[.](o|a|so|dylib)', sources) include_dirs, sources = filter_files('-I', '', sources, remove_prefix=1) From cc735516e2131b508dc95f9ab5634e09134e353d Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sat, 11 Nov 2023 17:56:23 +0000 Subject: [PATCH 2/2] MAINT: Strengthen enforcement of pyf in -c [f2py] --- numpy/f2py/f2py2e.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/numpy/f2py/f2py2e.py b/numpy/f2py/f2py2e.py index 6b9095506665..b3162b51342b 100755 --- a/numpy/f2py/f2py2e.py +++ b/numpy/f2py/f2py2e.py @@ -654,6 +654,9 @@ def run_compile(): pyf_files, _sources = filter_files('', '[.]pyf([.]src|)', sources) sources = pyf_files + _sources + if len(pyf_files) > 1: + raise RuntimeError("Only one .pyf file is allowed per compilation.") + for f in pyf_files: pyf_modulename = auxfuncs.get_f2py_modulename(f) if pyf_modulename: