Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add jemalloc as a dependency if --with-jemalloc is given (closes #349
Browse files Browse the repository at this point in the history
…).
postmodern committed Jan 31, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent a9fe668 commit 49d5e3e
Showing 3 changed files with 145 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -136,6 +136,12 @@ Install a Ruby with specific configuration:
$ ruby-install ruby 3.1.2 -- --enable-shared --enable-dtrace CFLAGS="-O3"
```

Install CRuby with jemalloc support:

```shell
$ ruby-install ruby 3.1.2 -- --with-jemalloc
```

Install a Ruby without installing dependencies first:

```shell
20 changes: 20 additions & 0 deletions share/ruby-install/ruby/dependencies.sh
Original file line number Diff line number Diff line change
@@ -112,3 +112,23 @@ case "$package_manager" in
brew) ruby_dependencies+=("openssl@${openssl_version}") ;;
port) ruby_dependencies+=("openssl${openssl_version/./}") ;;
esac

#
# Install libjemalloc and C header files for --with-jemalloc support.
#
if [[ " ${configure_opts[*]} " == *" --with-jemalloc "* ]]; then
case "$package_manager" in
apt)
ruby_dependencies+=(libjemalloc-dev)
;;
dnf|yum|port|xbps)
ruby_dependencies+=(jemalloc-devel)
;;
zypper)
ruby_dependencies+=(libjemalloc2)
;;
*)
ruby_dependencies+=(jemalloc)
;;
esac
fi
119 changes: 119 additions & 0 deletions test/ruby-tests/dependencies_tests.sh
Original file line number Diff line number Diff line change
@@ -284,6 +284,125 @@ function test_package_manager_is_port_and_ruby_version_is_greater_equal_to_3_1_0
package_manager="$original_package_manager"
}

function test_ruby_dependencies_when_with_jemalloc_is_given_and_package_manager_is_apt()
{
local original_package_manager="$package_manager"
local original_configure_opts=("${configure_opts[@]}")

package_manager="apt"
configure_opts=(--with-jemalloc)

source "$ruby_install_dir/$ruby/dependencies.sh"

assertTrue "did not contain libjemalloc-dev" \
'[[ " ${ruby_dependencies[*]} " == *" libjemalloc-dev "* ]]'

package_manager="$original_package_manager"
configure_opts=("${original_configure_opts[@]}")
}

function test_ruby_dependencies_when_with_jemalloc_is_given_and_package_manager_is_dnf()
{
local original_package_manager="$package_manager"
local original_configure_opts=("${configure_opts[@]}")

package_manager="dnf"
configure_opts=(--with-jemalloc)

source "$ruby_install_dir/$ruby/dependencies.sh"

assertTrue "did not contain jemalloc-devel" \
'[[ " ${ruby_dependencies[*]} " == *" jemalloc-devel "* ]]'

package_manager="$original_package_manager"
configure_opts=("${original_configure_opts[@]}")
}

function test_ruby_dependencies_when_with_jemalloc_is_given_and_package_manager_is_yum()
{
local original_package_manager="$package_manager"
local original_configure_opts=("${configure_opts[@]}")

package_manager="yum"
configure_opts=(--with-jemalloc)

source "$ruby_install_dir/$ruby/dependencies.sh"

assertTrue "did not contain jemalloc-devel" \
'[[ " ${ruby_dependencies[*]} " == *" jemalloc-devel "* ]]'

package_manager="$original_package_manager"
configure_opts=("${original_configure_opts[@]}")
}

function test_ruby_dependencies_when_with_jemalloc_is_given_and_package_manager_is_port()
{
local original_package_manager="$package_manager"
local original_configure_opts=("${configure_opts[@]}")

package_manager="port"
configure_opts=(--with-jemalloc)

source "$ruby_install_dir/$ruby/dependencies.sh"

assertTrue "did not contain jemalloc-devel" \
'[[ " ${ruby_dependencies[*]} " == *" jemalloc-devel "* ]]'

package_manager="$original_package_manager"
configure_opts=("${original_configure_opts[@]}")
}

function test_ruby_dependencies_when_with_jemalloc_is_given_and_package_manager_is_xbps()
{
local original_package_manager="$package_manager"
local original_configure_opts=("${configure_opts[@]}")

package_manager="xbps"
configure_opts=(--with-jemalloc)

source "$ruby_install_dir/$ruby/dependencies.sh"

assertTrue "did not contain jemalloc-devel" \
'[[ " ${ruby_dependencies[*]} " == *" jemalloc-devel "* ]]'

package_manager="$original_package_manager"
configure_opts=("${original_configure_opts[@]}")
}

function test_ruby_dependencies_when_with_jemalloc_is_given_and_package_manager_is_zypper()
{
local original_package_manager="$package_manager"
local original_configure_opts=("${configure_opts[@]}")

package_manager="zypper"
configure_opts=(--with-jemalloc)

source "$ruby_install_dir/$ruby/dependencies.sh"

assertTrue "did not contain libjemalloc2" \
'[[ " ${ruby_dependencies[*]} " == *" libjemalloc2"* ]]'

package_manager="$original_package_manager"
configure_opts=("${original_configure_opts[@]}")
}

function test_ruby_dependencies_when_with_jemalloc_is_given()
{
local original_package_manager="$package_manager"
local original_configure_opts=("${configure_opts[@]}")

package_manager="pkg"
configure_opts=(--with-jemalloc)

source "$ruby_install_dir/$ruby/dependencies.sh"

assertTrue "did not contain jemalloc" \
'[[ " ${ruby_dependencies[*]} " == *" jemalloc"* ]]'

package_manager="$original_package_manager"
configure_opts=("${original_configure_opts[@]}")
}

function tearDown()
{
unset ruby ruby_version ruby_dependencies openssl_version

0 comments on commit 49d5e3e

Please sign in to comment.