|
@@ -0,0 +1,90 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+# Copyright 2023 Xiaomi Corp. (authors: Fangjun Kuang)
|
|
|
+
|
|
|
+import argparse
|
|
|
+import glob
|
|
|
+import shutil
|
|
|
+import subprocess
|
|
|
+import sys
|
|
|
+from pathlib import Path
|
|
|
+
|
|
|
+
|
|
|
+def get_args():
|
|
|
+ parser = argparse.ArgumentParser()
|
|
|
+ parser.add_argument(
|
|
|
+ "--in-dir",
|
|
|
+ type=Path,
|
|
|
+ required=True,
|
|
|
+ help="Input directory.",
|
|
|
+ )
|
|
|
+
|
|
|
+ parser.add_argument(
|
|
|
+ "--out-dir",
|
|
|
+ type=Path,
|
|
|
+ required=True,
|
|
|
+ help="Output directory.",
|
|
|
+ )
|
|
|
+ return parser.parse_args()
|
|
|
+
|
|
|
+
|
|
|
+def process(out_dir: Path, whl: Path):
|
|
|
+ tmp_dir = out_dir / "tmp"
|
|
|
+ subprocess.check_call(f"unzip {whl} -d {tmp_dir}", shell=True)
|
|
|
+ if "cp37" in str(whl):
|
|
|
+ py_version = "3.7"
|
|
|
+ elif "cp38" in str(whl):
|
|
|
+ py_version = "3.8"
|
|
|
+ elif "cp39" in str(whl):
|
|
|
+ py_version = "3.9"
|
|
|
+ elif "cp310" in str(whl):
|
|
|
+ py_version = "3.10"
|
|
|
+ elif "cp311" in str(whl):
|
|
|
+ py_version = "3.11"
|
|
|
+ else:
|
|
|
+ py_version = "3.12"
|
|
|
+
|
|
|
+ rpath_list = [
|
|
|
+ f"$ORIGIN/../lib/python{py_version}/site-packages/sherpa_ncnn/lib",
|
|
|
+ f"$ORIGIN/../lib/python{py_version}/dist-packages/sherpa_ncnn/lib",
|
|
|
+ #
|
|
|
+ f"$ORIGIN/../lib/python{py_version}/site-packages/sherpa_ncnn/lib64",
|
|
|
+ f"$ORIGIN/../lib/python{py_version}/dist-packages/sherpa_ncnn/lib64",
|
|
|
+ #
|
|
|
+ f"$ORIGIN/../lib/python{py_version}/site-packages/sherpa_ncnn.libs",
|
|
|
+ ]
|
|
|
+ rpaths = ":".join(rpath_list)
|
|
|
+
|
|
|
+ for filename in glob.glob(
|
|
|
+ f"{tmp_dir}/sherpa_ncnn-*data/data/bin/*", recursive=True
|
|
|
+ ):
|
|
|
+ print(filename)
|
|
|
+ existing_rpath = (
|
|
|
+ subprocess.check_output(["patchelf", "--print-rpath", filename])
|
|
|
+ .decode()
|
|
|
+ .strip()
|
|
|
+ )
|
|
|
+ target_rpaths = rpaths + ":" + existing_rpath
|
|
|
+ subprocess.check_call(
|
|
|
+ f"patchelf --force-rpath --set-rpath '{target_rpaths}' {filename}",
|
|
|
+ shell=True,
|
|
|
+ )
|
|
|
+
|
|
|
+ outwheel = Path(shutil.make_archive(whl, "zip", tmp_dir))
|
|
|
+ Path(outwheel).rename(out_dir / whl.name)
|
|
|
+
|
|
|
+ shutil.rmtree(tmp_dir)
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ args = get_args()
|
|
|
+ print(args)
|
|
|
+ in_dir = args.in_dir
|
|
|
+ out_dir = args.out_dir
|
|
|
+ out_dir.mkdir(exist_ok=True, parents=True)
|
|
|
+
|
|
|
+ for whl in in_dir.glob("*.whl"):
|
|
|
+ process(out_dir, whl)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ main()
|