https://github.com/johnfairh/cruby
Swift system module for libruby
https://github.com/johnfairh/cruby
linux macos ruby swift swiftpm
Last synced: 8 months ago
JSON representation
Swift system module for libruby
- Host: GitHub
- URL: https://github.com/johnfairh/cruby
- Owner: johnfairh
- License: mit
- Created: 2018-03-10T14:41:27.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2024-04-23T09:55:24.000Z (about 2 years ago)
- Last Synced: 2025-07-17T22:08:42.602Z (11 months ago)
- Topics: linux, macos, ruby, swift, swiftpm
- Language: Perl
- Homepage:
- Size: 30.3 KB
- Stars: 9
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README


# CRuby
Wrap `libruby` for SwiftPM or Xcode. Easily reconfigure for your Ruby
installation.
See [RubyGateway](https://github.com/johnfairh/RubyGateway) for a high-level
Swift-Ruby integration framework.
Tested with environments:
* macOS 14 system Ruby (still 2.6 - beware)
* macOS Homebrew, RBEnv, RVM
* macOS bespoke installation
* Ubuntu Jammy bespoke, RBEnv, RVM
And Ruby versions:
* 2.6 - 3.3
## Usage
`CRuby` comes set up to use the macOS system Ruby, and Xcode to provide C
headers.
If you want to use a different Ruby then use the `cfg-cruby` script to
rewrite the build config files.
For options other than macOS system Ruby, `cfg-cruby` generates a custom
pkg-config file called `CRuby.pc` for `swift build`, and an Xcconfig file
called `CRuby.xcconfig` for Xcode.
### Swift Package Manager
Include this repo as a dependency in your project:
```swift
.package(url: "https://github.com/johnfairh/CRuby/", majorVersion: 2)
```
To use a Ruby other than macOS system default you need to reconfigure. For
example to set up Ruby 3.3.0 managed by `rbenv`:
```shell
swift package edit CRuby
./Packages/CRuby/cfg-cruby --mode rbenv --name 3.3.0
export PKG_CONFIG_PATH=$(pwd)/Packages/CRuby:$PKG_CONFIG_PATH
swift build
```
Either leave the `CRuby` package in edit mode or fork the repo, use that fork
as your remote, and push your customizations back there.
### Xcode
Include this repo in your project. A git submodule works well. So either way
you have a directory called `CRuby`. Then go to *Build Settings* for the Target
where you want to do `import CRuby` and find *Import Paths* under *Swift
Compiler - Search Paths*. Add the path to your `CRuby` directory - you can
use `${SRCROOT}` to substitute for the directory containing the project file.
Check Xcode is happy with an `import CRuby` line. This is using the macOS
system default Ruby, probably a very old 2.6.
If you want to use a different Ruby, run `cfg-cruby`. This creates a file
called `CRuby.xcconfig` that you need to include in the appropriate targets.
Start [here](https://nshipster.com/xcconfig/) for help with using xcconfig
files.
That's it: Xcode should now resolve `CRuby` against your chosen version.
## Supported Ruby Configs
### macOS system
Use the `xcode-select`ed Xcode:
```shell
cfg-cruby --mode xcode
```
This configuration does not require a pkg-config file.
### macOS Homebrew or Linux -dev package
```shell
cfg-cruby --mode pkgconfig --name
```
Use `pkg-config --list-all` to see what you have installed.
The pkg-config setup is not directly consumable by SwiftPM. `cfg-cruby` uses
it to create the `CRuby.pc` that is compatible with SwiftPM.
### RBEnv or RVM
```shell
cfg-cruby --mode rbenv --name
```
or
```shell
cfg-cruby --mode rvm --name
```
### Something else
If you've built Ruby yourself or are using a different version manager that
preserves the regular layout then:
```shell
cfg-cruby --path
```
The path required is one to a directory that is called `ruby-*something*` and
contains subdirectories including `lib`, `include`, and `bin`.
## Contributions
Welcome - github / johnfairh@gmail.com
## License
Distributed under the MIT license.