A little bit fast and modern Ruby version manager written in Rust

Overview

frum

A little bit fast and modern Ruby version manager written in Rust

github workflow status crates brew aur

usage

Features

  • Pure Rust implementation not using ruby-build
  • Cross-platform support (macOS, Linux)
  • Works with .ruby-version files
  • Auto-Completion

Goals

  • Blazing-Fast Ruby Installation - built with speed in mind
  • Cross-Platform - works on macOS, Linux and (Windows)

Benchmark

eval "$(frum init)" runs about 6 times faster than eval "$(rbenv init -)".

Command Mean [ms] Min [ms] Max [ms] Relative
eval "$(rbenv init -)" 49.5 ± 2.1 46.2 57.2 6.14 ± 0.50
eval "$(frum init)" 8.1 ± 0.7 7.0 11.8 1.00 ± 0.11
eval "$(frum init)" (pre-release) 8.1 ± 0.6 7.2 11.7 1.00
Command Mean [ms] Min [ms] Max [ms] Relative
rbenv 239628.1 ± 2030.2 237681.6 245162.6 1.04 ± 0.01
frum 232944.6 ± 1224.0 230565.4 234863.5 1.01 ± 0.01
frum (pre-release) 230366.5 ± 882.7 228454.2 232340.5 1.00

For more information, please see #16.

Installation

Homebrew (Linux/macOS)

If you’re using Homebrew or Linuxbrew, install the frum formula. For more information, please see Install Ruby with Frum written by Daniel Kehoe.

$ brew install frum

Arch Linux

If you’re using Arch Linux, install the frum-bin package using your favorite AUR helper.

$ yay -S frum-bin

Cargo (Linux/macOS)

If you already have a Rust environment set up, you can use the cargo install command:

$ cargo install frum

Using a release binary (Linux/macOS)

  • Download the latest release binary for your system
  • Set the PATH environment variable
  • Configure your shell profile

Usage

Shell Setup

You need to run some shell commands before using frum. All you have to do is evaluate the output of frum init. Check out the following guides for the shell you use:

Bash

add the following to your .bashrc:

eval "$(frum init)"

Zsh

add the following to your .zshrc:

eval "$(frum init)"

Fish shell

create ~/.config/fish/conf.d/frum.fish add this line to it:

frum init | source

Options

  • --log-level: The log level of frum commands [default: info] [possible values: quiet, info, error].
  • --ruby-build-mirror: [default: https://cache.ruby-lang.org/pub/ruby].
  • --frum-dir: The root directory of frum installations [default: $HOME/.frum]. You can set frum-dir as the $FRUM_DIR environment variable. I recommend that you use the environment variable if you want to use your customized frum-dir globally.

Subcommands

  • init: Sets environment variables for initializing frum.
  • install: Installs the specified Ruby version.
    • -l, --list: Lists the Ruby versions available to install.
  • uninstall: Uninstall a specific Ruby version.
  • versions: Lists installed Ruby versions.
  • global: Sets the global Ruby version.
  • local: Sets the current Ruby version.

Ruby configuration options

Options to configure Ruby can be passed to the frum install command.

$ frum install --with-openssl-dir=<ssl_dir> # Specify the OpenSSL directory
$ frum install --with-jemalloc # Use jemalloc as allocator

You can also specify many other options that will be listed when running ./configure -h.

Contribution

Contributions, issues and pull requests are welcome!

Reference

Comments
  • Add `configure_opts`

    Add `configure_opts`

    Closes #50

    This PR adds a configure_opts arg that gets passed through to the ./configure call unmodified.

    This uses a TrailingVarArg to collect options in a multiple arg. It supports the following two forms:

    frum install 3.0.1 --with-jemalloc # only when no flags are specified
    frum install 3.0.1 -- --with-jemalloc # always
    

    I'm opening this as a draft PR for now to get feedback on two questions:

    1. Are you ok with this approach @TaKO8Ki? I originally just added a with-jemalloc arg but this has the potential for becoming unwieldy so It may make more sense to allow for arbitrary arguments to be passed through.
    2. Should we remove the dedicated with-openssl-dir option and handle it through the same mechanism?

    Once we decided on this I'll finish off this PR and fix the tests (they will fail for the completions alone).

    changelog: Add configure_opts to pass through to ./configure.

    opened by citizen428 14
  • Fix use of temporary path to managed binaries

    Fix use of temporary path to managed binaries

    Overview

    When using command -v, I noticed Frum is pointing to temporary paths for all Ruby related binaries. I assume this is a bug?

    Steps to Recreate

    brew install frum
    
    export FRUM_DIR="$HOME/.cache/frum"
    eval "$(frum init)"
    
    frum install 3.0.2
    frum global 3.0.2
    gem install pennyworth
    
    # Notice the following paths all use temporary directories instead of the Frum cache as defined above.
    command -v ruby        # => /var/folders/j1/szrwbp9d1jg351ghw4f7bcym0000gn/T/frum_1956_1627218393720/bin/ruby
    command -v pennyworth  # => /var/folders/j1/szrwbp9d1jg351ghw4f7bcym0000gn/T/frum_1956_1627218393720/bin/pennyworth
    

    Desired Behavior

    I would expect to see the full path to where the Frum cache is located. So something more along these lines, for example:

    $HOME/.cache/frum/versions/3.0.2/lib/ruby/gems/3.0.0/gems/pennyworth-11.1.1/bin
    

    Environment

    • Operating System: macOS 11.5 (20G71)
    • Frum: 0.1.0
    documentation 
    opened by bkuhlmann 6
  • Add automatic version detection/switching

    Add automatic version detection/switching

    Overview

    Would it be possible to support automatic version switching much like chruby's auto-switching?

    Screenshots/Screencasts

    The following captures the problem of having to manually switch Ruby versions when switching between projects:

    https://user-images.githubusercontent.com/50245/126048754-17938534-9ac8-4e32-ae65-54ef068568aa.mp4

    Steps to Recreate

    Run the following:

    frum --frum-dir "$HOME/.cache/frum" install 3.0.0
    frum --frum-dir "$HOME/.cache/frum" install 3.0.2
    printf "%s\n" "3.0.2" > $HOME/.ruby-version
    mkdir zero
    printf "%s\n" "3.0.0" > "zero/.ruby-version"
    cd zero
    cd ..
    cd zero
    

    Notice that Frum never detects the correct version (global versus local).

    Desired Behavior

    As shown in the screencast and steps above, Frum doesn't distinguish between the global, system-wide Ruby version of 3.0.2 versus the local project version of 3.0.0. You have to manually set the Ruby version you desire each time you switch a directory.

    Environment

    • Operating System: macOS 11.4 (20F71)
    • Frum: 0.1.0
    bug 
    opened by bkuhlmann 4
  • Aliases don't seem to work

    Aliases don't seem to work

    Issue description

    I've symlinked Ruby minor versions in $FRUM_DIR/aliases/, e.g. 3.0 → 3.0.2. Unfortunately, when using the aliases in a .ruby-version file, they don't seem to do anything, and frum reverts to the global version.

    My FRUM_DIR is set to ~/.cache/frum/.

    Steps to reproduce the issue

    1. Create new folder, inside create a .ruby-version version file containing an alias version.
    2. Change out of the folder, then back in to that folder.

    What's the expected result?

    When changing into alias-test/, frum resolves the alias 2.7 found in the .ruby-version file to 2.7.4 and sets Ruby 2.7.4.

    What's the actual result?

    When changing into alias-test/, frum doesn't resolve the alias 2.7 and instead falls back to my globally set Ruby 3.0.2.

    Screenshot:

    cleanshot-2021-07-21-124442@2x

    Note the Ruby version in the last prompt.

    enhancement 
    opened by czottmann 3
  • Apply clippy lints

    Apply clippy lints

    Applied Clippy lints with cargo clippy --fix and manually refactored some to make Clippy report 0 warnings :)

    Notes:

    • will every supported shell have completions? if not, changing signature of customize_completions might've been a bad move.
    opened by Br1ght0ne 3
  • Install ruby < 3 Can't find openssl even with the dir option

    Install ruby < 3 Can't find openssl even with the dir option

    Super excited to try out Frum. I'm having trouble installing rubies < 3

    On a fresh install of Montery - Intel chip:

    Installing 3.0.2 works just fine.

    Installing 2.7.3 or 2.7.4 fails with cannot load such file -- openssl. I have tried different versions of openssl. I have tried with and without the --openssl-dir flag. The factory openssl is:

    $ openssl
    OpenSSL> version
    LibreSSL 2.8.3
    

    The error I get is:

    error: Can't build Ruby: make install: 
    Generating RI format into /Users/me/.frum/versions/.downloads/.tmpJiqTtk/ruby-2.7.3/.ext/rdoc...
    /Users/me/.frum/versions/.downloads/.tmpJiqTtk/ruby-2.7.3/lib/rubygems/core_ext/kernel_require.rb:83:in `require': cannot load such file -- openssl (LoadError)
    	from /Users/me/.frum/versions/.downloads/.tmpJiqTtk/ruby-2.7.3/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
    	from /Users/me/.frum/versions/.downloads/.tmpJiqTtk/ruby-2.7.3/lib/rubygems/specification.rb:2430:in `to_ruby'
    	from ./tool/rbinstall.rb:846:in `block (2 levels) in install_default_gem'
    	from ./tool/rbinstall.rb:279:in `open_for_install'
    	from ./tool/rbinstall.rb:845:in `block in install_default_gem'
    	from ./tool/rbinstall.rb:835:in `each'
    	from ./tool/rbinstall.rb:835:in `install_default_gem'
    	from ./tool/rbinstall.rb:799:in `block in <main>'
    	from ./tool/rbinstall.rb:950:in `block in <main>'
    	from ./tool/rbinstall.rb:947:in `each'
    	from ./tool/rbinstall.rb:947:in `<main>'
    make: *** [do-install-all] Error 1
    
    opened by dinshaw-he 2
  • `frum install --list` shows duplicated versions

    `frum install --list` shows duplicated versions

    commit: e4fdb56 should reproduce it.

    $ rbenv install --list | wc -l; rbenv install --list | sort | uniq | wc -l
    483
    483
    
    $ cargo run install --list | wc -l; cargo run install --list | sort | uniq | wc -l
        Finished dev [unoptimized + debuginfo] target(s) in 0.04s
         Running `target/debug/frum install --list`
    792
        Finished dev [unoptimized + debuginfo] target(s) in 0.04s
         Running `target/debug/frum install --list`
    282
    
    $ cargo run install --list
        Finished dev [unoptimized + debuginfo] target(s) in 0.04s
         Running `target/debug/frum install --list`
    1.2.1
    1.2.2
    1.2.3
    1.2.4
    1.2.5
    1.2.6
    1.3.1-990215
    1.3.1-990224
    1.3.1-990225
    (...snip...)
    2.7.4
    2.7.4
    2.7.4
    2.7.4
    3.0.0-preview1
    3.0.0-preview1
    3.0.0-preview1
    3.0.0-preview1
    3.0.0-preview2
    3.0.0-preview2
    3.0.0-preview2
    3.0.0-rc1
    3.0.0-rc1
    3.0.0-rc1
    3.0.0
    3.0.0
    3.0.0
    3.0.1
    3.0.1
    3.0.1
    3.0.2
    3.0.2
    3.0.2
    
    opened by kenoss 2
  • gem error:

    gem error: "OpenSSL is not available." on macOS Big Sur

    Using macOS Big Sur 11.5.2 (2019 MBP) I installed frum via homebrew, ran frum install 3.0.2, and tried installing a ruby gem (colorls) and received an error about OpenSSL not being available.

    $ gem install colorls
    ERROR:  While executing gem ... (Gem::Exception)
        OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
    

    I see that you can specify the OpenSSL directory but I'm not sure exactly how this should be used. If Big Sur has OpenSSL at /usr/bin/openssl should I be using that? Installing 3.0.2 with --with-openssl-dir=/usr/bin/openssl didn't work. I'm not sure what might be going wrong here.

    The gem error says to install OpenSSL and rebuild Ruby. I'm able to install OpenSSL (brew install openssl) but I'm not sure how to rebuild ruby with frum.

    Is something wrong here or is am I just missing some foundational Ruby knowledge here that is preventing me from getting this to work?

    question 
    opened by wfendler 2
  • Add `num_cpus` crate

    Add `num_cpus` crate

    This PR replaces the custom code for finding the number of available CPU cores with the num_cpus crate. This should get us a little closer to Windows support as the current code did not take Windows into account. I plan to eventually also look into other Windows-related problems even though my main development OS is Linux.

    changelog:

    • Add num_cpus crate
    opened by citizen428 2
  • Add `--with-jemalloc` option

    Add `--with-jemalloc` option

    Hi @TaKO8Ki, it would be nice if frum had an option to build with jemalloc, since it is a common optimization flag. Alternatively frum could allow to pass any options when building ruby using the syntax below (used in ruby-install):

    frum install 3.0.1 -- --with-jemalloc
    
    enhancement 
    opened by jonian 2
  • [FEATURE REQUEST] frum --quiet or -q

    [FEATURE REQUEST] frum --quiet or -q

    I love it so far, just needs a quiet option. I'm not a fan of seeing the error message about not finding a ruby-version file every time I cd to a directory.

    Just a FYI, I'm on FreeBSD 13, and it's working great. Thank you for your work.

    opened by ghost 2
  • Struggling to install Ruby 3.2 on M1 mac - cannot load such file -- psych

    Struggling to install Ruby 3.2 on M1 mac - cannot load such file -- psych

    Morning,

    I'm unable to install 3.2 on my M1 mac this morning. I've tried various ruby-build solutions with no luck. I think the project doesn't use ruby-build though.

    Here's my output when making sure libyaml is installed too (https://github.com/rbenv/ruby-build/discussions/2118#discussioncomment-4505182).

    > brew install libyaml
    ...
    > brew --prefix libyaml
    /opt/homebrew/opt/libyaml
    
    > frum install 3.2.0
    ==> Downloading https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0.tar.xz
    ==> Extracting ruby-3.2.0.tar.xz
    ==> Building Ruby 3.2.0
    error: Can't build Ruby: make failed: . ./vm_opts.h
    yaml.h not found
    /Users/duncan/.frum/versions/.downloads/.tmptqJwcH/ruby-3.2.0/lib/yaml.rb:3: warning: It seems your ruby installation is missing psych (for YAML output).
    To eliminate this warning, please install libyaml and reinstall your ruby.
    uh-oh! RDoc had a problem:
    cannot load such file -- psych
    
    run with --debug for full backtrace
    make: *** [rdoc] Error 1
    

    Anyone have any tips? Do I need to use a RUBY_OPTS explicitly to point to libyaml

    opened by whomwah 1
  • Is it possible to install jruby with Frum?

    Is it possible to install jruby with Frum?

    Currently some projects like logstash and many other uses JRuby, but rvm is not that optimized and fast as Frum

    Hope you the best! This is a really nice and usefull project

    If it's poosible I can start supporting that feature if needed.

    opened by david8128 0
  • Ruby 3.1.3 on macOS 12 with jemalloc: thread 'main' panicked...

    Ruby 3.1.3 on macOS 12 with jemalloc: thread 'main' panicked...

    Got a panic when trying to install with jemalloc:

    $ RUST_BACKTRACE=full frum install --with-jemalloc 3.1.3
    thread 'main' panicked at 'internal error: entered unreachable code', src/version.rs:33:13
    stack backtrace:
       0:        0x10249a8d0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h26781f9bfbe134a6
       1:        0x1024b6868 - core::fmt::write::h5aa0c05a9caf85df
       2:        0x1024824cc - std::io::Write::write_fmt::h018da2c8c873b16b
       3:        0x10248cb40 - std::panicking::default_hook::{{closure}}::h0239cbf25cfa6d83
       4:        0x10248c7f4 - std::panicking::default_hook::ha0ef000a358742e2
       5:        0x10248d050 - std::panicking::rust_panic_with_hook::had5e29c8530a78b2
       6:        0x10249aba0 - std::panicking::begin_panic_handler::{{closure}}::h7852e5e8d2675e0d
       7:        0x10249a9e4 - std::sys_common::backtrace::__rust_end_short_backtrace::hf05a8afc922cafbe
       8:        0x10248cc54 - _rust_begin_unwind
       9:        0x1024c68c0 - core::panicking::panic_fmt::h94866529fc2e06b8
      10:        0x1024c67e0 - core::panicking::panic::h3be4af5aed488748
      11:        0x1021c8e94 - frum::version::Version::parse::h430d8859876e4e83
      12:        0x1021cef68 - <frum::input_version::InputVersion as core::str::traits::FromStr>::from_str::he4f304302669ff8e
      13:        0x1021cdf54 - core::option::Option<T>::map::h2d3472df1b074cbd
      14:        0x1021d0108 - frum::main::h466dcf51d48b3621
      15:        0x1021c9674 - std::sys_common::backtrace::__rust_begin_short_backtrace::hc87fb2b5517d46c7
      16:        0x1021d16bc - std::rt::lang_start::{{closure}}::h5ea234273019ee75
      17:        0x102481d2c - std::rt::lang_start_internal::he17012042c5b2b42
      18:        0x1021d0f74 - _main
    
    opened by ylluminate 0
  • gems not working after installing them

    gems not working after installing them

    Hi!

    I have a MacBook Pro M1, and after successfully installing frum I "install" gems, but they are not "available" at some point.

    ❯ frum install 3.0.0 --with-openssl-dir=$(brew --prefix [email protected]) --with-jemalloc-dir=$(brew --prefix jemalloc)
    ==> Downloading https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.xz
    ==> Extracting ruby-3.0.0.tar.xz
    ==> Building Ruby 3.0.0
    
    ❯ ruby -v
    ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [arm64-darwin21]
    
    ❯ which ruby
    /var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_84091_1665070882434/bin/ruby
    ❯ env | grep -i frum
    PATH=/Users/pipe/.krew/bin:/var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_84091_1665070882434/bin:/Users/pipe/.krew/bin:/var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_81519_1665070516139/bin:/Users/pipe/.krew/bin:/var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_80819_1665070454001/bin:/Users/pipe/.krew/bin:/var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_51751_1665068788610/bin:/Users/pipe/.krew/bin:/var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_25928_1665068007304/bin:/Users/pipe/.krew/bin:/Users/pipe/.nvm/versions/node/v16.16.0/bin:/var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_25249_1665067974064/bin
    FRUM_MULTISHELL_PATH=/var/folders/dm/m1wyhkzx4gs_f48b34q8bf3c0000gn/T/frum_84091_1665070882434
    FRUM_DIR=/Users/pipe/.frum
    FRUM_LOGLEVEL=info
    FRUM_RUBY_BUILD_MIRROR=https://cache.ruby-lang.org/pub/ruby
    
    ❯ gem install bumbler
    Successfully installed bumbler-0.9.0
    Parsing documentation for bumbler-0.9.0
    Done installing documentation for bumbler after 0 seconds
    1 gem installed
    ❯ bumbler
    zsh: command not found: bumbler
    

    Something similar happened with rails and other stuff. I may be misunderstanding a concept around frum but I cannot get it from the docs.

    Any ideas?

    opened by pipetus 0
  • frum fails on new Macbook Air M2; tried all solutions

    frum fails on new Macbook Air M2; tried all solutions

    I've googled this issue for hours now and give up. I've tried all the solutions I could find online yet I am unable to use frum to install any Ruby versions. A log is below.

    My setup: Macbook Air M2 frum v0.1.2

    > arch -arm64 frum install 2.7.5
    ==> Downloading https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.5.tar.xz
    ==> Extracting ruby-2.7.5.tar.xz
            ==> Building Ruby 2.7.5
    error: Can't build Ruby: make failed: . ./vm_opts.h
    In file included from cont.c:16:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.
    In file included from eval.c:20:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from gc.c:41:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.
    In file included from iseq.c:30:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from mjit_compile.c:19:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.
    1 warning generated.
    1 warning generated.
    In file included from ruby.c:55:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.
    In file included from thread.c:77:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from vm.c:341:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from vm.c:350:
    ./vm_method.c:291:32: warning: cast to smaller integer type 'enum method_optimized_type' from 'void *' [-Wvoid-pointer-to-enum-cast]
                def->body.optimize_type = (enum method_optimized_type)opts;
                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from vm_trace.c:28:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.
    1 warning generated.
    array.c:290:17: warning: expression result unused [-Wunused-value]
                    RB_OBJ_WRITE(buff_owner_ary, &ptr[i+beg], argv[i]);
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./internal.h:2711:34: note: expanded from macro 'RB_OBJ_WRITE'
    #define RB_OBJ_WRITE(a, slot, b) UNALIGNED_MEMBER_ACCESS(rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__))
                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./internal.h:2703:5: note: expanded from macro 'UNALIGNED_MEMBER_ACCESS'
        unaligned_member_access_result; \
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./include/ruby/ruby.h:1087:5: note: expanded from macro 'RARRAY_PTR_USE_TRANSIENT'
        expr; \
        ^~~~
    In file included from mjit.c:18:
    In file included from ./mjit_worker.c:76:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    array.c:1200:2: warning: expression result unused [-Wunused-value]
            RB_OBJ_WRITE(target_ary, &ptr[idx], item);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./internal.h:2711:34: note: expanded from macro 'RB_OBJ_WRITE'
    #define RB_OBJ_WRITE(a, slot, b) UNALIGNED_MEMBER_ACCESS(rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__))
                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./internal.h:2703:5: note: expanded from macro 'UNALIGNED_MEMBER_ACCESS'
        unaligned_member_access_result; \
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ./include/ruby/ruby.h:1087:5: note: expanded from macro 'RARRAY_PTR_USE_TRANSIENT'
        expr; \
        ^~~~
    1 warning generated.
    In file included from version.c:15:
    ./mjit.h:131:17: warning: cast to smaller integer type 'enum rb_mjit_iseq_func' from 'mjit_func_t' (aka 'unsigned long (*)(struct rb_execution_context_struct *, struct rb_control_frame_struct *)') [-Wpointer-to-enum-cast]
            switch ((enum rb_mjit_iseq_func)func) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.
    2 warnings generated.
    2 warnings generated.
    ln -sf ../../../.ext/include/arm64-darwin21/rb_mjit_min_header-2.7.5.h include/ruby-2.7.0/arm64-darwin21/rb_mjit_min_header-2.7.5.h
    Undefined symbols for architecture arm64:
      "_rb_enc_set_base", referenced from:
          _Init_encdb in encdb.o
      "_rb_enc_set_dummy", referenced from:
          _Init_encdb in encdb.o
      "_rb_encdb_alias", referenced from:
          _Init_encdb in encdb.o
      "_rb_encdb_declare", referenced from:
          _Init_encdb in encdb.o
      "_rb_encdb_dummy", referenced from:
          _Init_encdb in encdb.o
      "_rb_encdb_replicate", referenced from:
          _Init_encdb in encdb.o
      "_rb_encdb_set_unicode", referenced from:
          _Init_encdb in encdb.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [.ext/arm64-darwin21/enc/encdb.bundle] Error 1
    make: *** [enc] Error 2
    make: *** Waiting for unfinished jobs....
    Undefined symbols for architecture arm64:
      "_rb_declare_transcoder", referenced from:
          _Init_transdb in transdb.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [.ext/arm64-darwin21/enc/trans/transdb.bundle] Error 1
    make[1]: *** Waiting for unfinished jobs....
    Undefined symbols for architecture arm64:
      "_rb_register_transcoder", referenced from:
          _Init_big5 in big5.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [.ext/arm64-darwin21/enc/trans/big5.bundle] Error 1
    Undefined symbols for architecture arm64:
      "_rb_register_transcoder", referenced from:
          _Init_cesu_8 in cesu_8.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [.ext/arm64-darwin21/enc/trans/cesu_8.bundle] Error 1
    make: *** [trans] Error 2
    libffi_version: 3.4.0
    
    opened by blakeperdue 5
Releases(v0.1.2)
Owner
Takayuki Maeda
Software Engineer?
Takayuki Maeda
Wally is a modern package manager for Roblox projects inspired by Cargo

Wally is a package manager for Roblox inspired by Cargo (Rust) and npm (JavaScript). It brings the familiar, community-oriented world of sharing code from other communities into the Roblox ecosystem.

Uplift Games 194 Jan 3, 2023
Solidity-Compiler Version Manager

Solidity Compiler Version Manager

Rohit Narurkar 114 Jan 2, 2023
Click-once - A small tiny little binary to fix undesired mouse double clicks in Windows, written in Rust.

click-once A small tiny little binary to fix malfunctioning mouse double clicks in Windows, written in Rust. Minimal executable with little to no over

null 23 Dec 29, 2022
A little command-line script written in Rust to interface with Discord webhooks.

Rust Discord Webhook Agent This is a little "script" I wrote for practice with Rust and asynchronous operations within Rust. Getting started Clone thi

David Chen 2 Sep 7, 2022
A fast package manager for NodeJS written in Rust.

click A fast package manager for NodeJS written in Rust. How fast? Benchmark of bun vs click clean install: Based on benchmarks done with hyperfine, c

Sam 52 Oct 10, 2023
A little tribute to the Dango Daikazoku from Clannad (by Key, KyoAni, et al)

dango A little tribute to the Dango Daikazoku from Clannad (by Key, KyoAni, et al) Try it with your friends at http://ernestwong.nz/dango-tribute/serv

Ernest Wong 19 Nov 21, 2022
little brother of gnu-copypasta-maker To compile, use make.

UWU Maker little brother of gnu-copypasta-maker To compile, use make. To install, use sudo make install or if you are root make install To uninstall,

Ahmet Efe AKYAZI 1 Jan 12, 2022
Novus - A blazingly fast and efficient package manager for windows.

Novus - A blazingly fast and efficient package manager for windows. Why Novus Swift Unlike any other package manager, Novus uses multithreaded downloads

Novus 197 Dec 18, 2022
A shiny new package manager written in rust explicitly for gemlock/linux and it's distributions

Gem A shiny new package manager written in rust explicitly for gemlock/linux and it's distributions. List of content How to setup Systems Ubuntu Arch

Gemlock 1 Feb 22, 2022
A modern and open source twist to classic pastebin sites.

Turbine A modern and open-source twist to classic pastebin sites. What is this? Turbine originally started out as a simple pastebin idea so I could ha

Jay3332 4 Oct 1, 2022
A Modern, Lightweight HTTP Learning Tool in Rust

Toy-HTTP-rs: A Modern, Lightweight HTTP Learning Tool in Rust Welcome to toy-http-rs! This is a hands-on, educational project designed to provide an a

null 12 May 27, 2023
A Rust driver for the Arm Generic Interrupt Controller version 3 or 4 (GICv3 and GICv4).

Arm Generic Interrupt Controller driver This crate provides a Rust driver for the Arm Generic Interrupt Controller version 3 or 4 (GICv3 and GICv4). C

Google 7 Apr 17, 2023
The missing link to modern server controlling for TrackMania Forever.

xrd (XASeCo Replacing Daemon) xrd is a next-gen server controller for TrackMania Forever and Nations ESWC that is designed to be hassle-free and easil

Autumn Leaf 6 Mar 26, 2022
Modern Drop-in Replacement for Nginx AutoIndex / FancyIndex!

MeowIndex A cute, feature-rich file listing module to replace nginx's autoindex / fancyindex. Features List files Show file icons Clickable, length-sa

Hykilpikonna 4 Feb 25, 2023
A rust-version of NVIDIA BlueField DOCA kit.

Rust-DOCA Rust API wrapper for the NVIDIA DOCA SDK. The NVIDIA DOCA SDK enables developers to rapidly create applications and services on top of NVIDI

null 4 Jun 15, 2023
Totally Speedy Transmute (TST) is a library providing a small, performance oriented, safe version of std::mem::transmute

Totally Speedy Transmute An evil spiritual successor to Totally Safe Transmute What is it? Totally Speedy Transmute (TST) is a library providing a sma

John Schmidt 19 Jun 7, 2022
A transpiler/compiler for CrabRave, a version of BrainFuck with sea-life emojis.

CrabRave Programming Language CrabRave is a fun and unique programming language based on Brainfuck, which utilizes crab and sea-life emojis as its syn

null 23 May 3, 2023
Cargo - The Rust package manager

Cargo downloads your Rust project’s dependencies and compiles your project.

The Rust Programming Language 9.5k Jan 4, 2023
💡 Use the right package manager by rust

n ?? Use the right package manager by rust ?? Inspired by ni Why ni is nice , but ni is based on Node. it is difficult to collaborate well with node v

SHEIN 3 Jul 24, 2023