blob: 0c9d60e0498fad54c66c69da46899903e6c17985 [file] [log] [blame]
# This file should be written to the wheel package as
# `executorch/data/bin/__init__.py`.
#
# Setuptools will expect to be able to say something like `from
# executorch.data.bin import mybin; mybin()` for each entry listed in the
# [project.scripts] section of pyproject.toml. This file makes the `mybin()`
# function execute the binary at `executorch/data/bin/mybin` and exit with that
# binary's exit status.
import subprocess
import os
import sys
import types
# This file should live in the target `bin` directory.
_bin_dir = os.path.join(os.path.dirname(__file__))
def _find_executable_files_under(dir):
"""Lists all executable files in the given directory."""
bin_names = []
for filename in os.listdir(dir):
filepath = os.path.join(dir, filename)
if os.path.isfile(filepath) and os.access(filepath, os.X_OK):
# Remove .exe suffix on windows.
filename_without_ext = os.path.splitext(filename)[0]
bin_names.append(filename_without_ext)
return bin_names
# The list of binaries to create wrapper functions for.
_bin_names = _find_executable_files_under(_bin_dir)
# We'll define functions named after each binary. Make them importable.
__all__ = _bin_names
def _run(name):
"""Runs the named binary, which should live under _bin_dir.
Exits the current process with the return code of the subprocess.
"""
raise SystemExit(subprocess.call([os.path.join(_bin_dir, name)] + sys.argv[1:], close_fds=False))
# Define a function named after each of the binaries.
for bin_name in _bin_names:
exec(f"def {bin_name}(): _run('{bin_name}')")