Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add: implementation #22

Closed
wants to merge 12 commits into from
33 changes: 32 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,34 @@
## Homebrew MetaCall script
# Homebrew MetaCall script

This is MetaCall's formula for Homebrew.

## Implementation

This brew formulae compiles MetaCall core for ARM64 and AMD64. The installation process has been optimized to install the dependencies in a dynamic way.

- Enhanced Python setup process
- Support for detecting Python version and location dynamically.
- Improved handling of Python paths for both macOS and Linux systems.

- Refined NodeJS installation
- Installs node executable and other shared libraries separately instead of a brew dependency
- Bash completion for NPM

- Enhanced Metacall launcher:
- Added more robust path detection for metacallcli based on the dsitributable type

The final distributable is generated using a Homebrew extension [`brew-pkg`](https://github.com/metacall/brew-pkg). It generates a installable `.pkg` and a portable `.tgz` file. The fork includes some extra features which have been described below.

1. **Recursive library patching**: The function recursively processes linked libraries.

2. **Dynamic linking**: Uses `@executable_path` to create relative paths for dynamic linking.

3. **ELF file validation**: Checks if the target binary is a valid ELF (Executable and Linkable Format) file.

4. **Library dependency analysis**: Uses `otool -L` to identify linked libraries for the given binary.

5. **Path filtering**: Filters library paths to only process those within the specified prefix path.

6. **Relative path calculation**: Computes relative paths between the binary and its linked libraries.

7. **Library path updating**: Uses `install_name_tool` to update library paths in the binary.
Loading