diff --git a/pyproject.toml b/pyproject.toml index 79fe21f..3db7955 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,13 @@ [build-system] requires = [ - "setuptools>=42", + "setuptools>=42,<65", "wheel", - "f90wrap>=0.2.6", + "numpy<1.26", + "f90wrap<0.3", "setuptools_scm[toml]>=3.4" ] build-backend = "setuptools.build_meta" [tool.setuptools_scm] -write_to = "f90wrap_pyhmcode/pyhmcode/version.py" \ No newline at end of file +write_to = "f90wrap_pyhmcode/pyhmcode/version.py" diff --git a/setup.py b/setup.py index b02a73c..d3baf43 100644 --- a/setup.py +++ b/setup.py @@ -20,10 +20,32 @@ long_description = f.read() def compile_library(env): + env = dict(env) subprocess.check_call(["make", "f90wrap"], env=env, cwd=HERE) - LIB = glob.glob("f90wrap_pyhmcode/_pyhmcode*.so") - shutil.copy(LIB[0], "f90wrap_pyhmcode/pyhmcode/",) + lib = glob.glob(os.path.join(HERE, "f90wrap_pyhmcode", "_pyhmcode*.so"))[0] + + if sys.platform == "darwin": + try: + out = subprocess.check_output(["otool", "-l", lib], text=True) + lines = out.splitlines() + rpaths = [] + for i, line in enumerate(lines): + if line.strip() == "cmd LC_RPATH" and i + 2 < len(lines): + path_line = lines[i + 2].strip() + if path_line.startswith("path "): + rpaths.append(path_line.split("path ", 1)[1].rsplit(" (offset", 1)[0]) + + seen = set() + for rp in rpaths: + if rp in seen: + subprocess.check_call(["install_name_tool", "-delete_rpath", rp, lib]) + else: + seen.add(rp) + except Exception as e: + print(f"Warning: failed to deduplicate rpaths for {lib}: {e}") + + shutil.copy(lib, "f90wrap_pyhmcode/pyhmcode/") def copy_utils(): # There's probably some setuptools magic that could do this cleaner @@ -99,10 +121,11 @@ def run(self): "Operating System :: OS Independent",], package_dir= {"": "f90wrap_pyhmcode/"}, packages= ["pyhmcode"], - package_data= {"pyhmcode": ["_pyhmcode*.so"]}, + package_data= {"pyhmcode": ["_pyhmcode*.so", "version.py"]}, + include_package_data=True, # ext_modules = [Extension('pyhmcode._pyhmcode', [])], install_requires= ["numpy", - "f90wrap"], + "f90wrap<0.3"], cmdclass= {"install": install, "develop": develop, "build_py": build,