PKGBUILDs/extra/ruby/PKGBUILD
2024-08-09 18:25:43 +00:00

377 lines
8.6 KiB
Bash

# Maintainer: Anatol Pomozov <anatol.pomozov@gmail.com>
# Maintainer: Andreas 'Segaja' Schleifer <segaja at archlinux dot org>
# Maintainer: Tim Meusel <tim@bastelfreak.de>
# Contributor: Thomas Dziedzic <gostrc@gmail.com>
# Contributor: Allan McRae <allan@archlinux.org>
# Contributor: John Proctor <jproctor@prium.net>
# Contributor: Jeramy Rutley <jrutley@gmail.com>
# Do not re-package default gems (see https://stdgems.org/). Trying to do that will lead to multiple problems
# ALARM: Kevin Mihelich <kevin@archlinuxarm.org>
# - generalize arch-dependent removal of gem remains
pkgname=(
ruby
ruby-docs
ruby-default-gems
ruby-bundled-gems
ruby-stdlib
)
pkgver=3.2.4
pkgrel=1
pkgdesc='An object-oriented language for quick and easy programming'
url='https://www.ruby-lang.org/en/'
arch=(x86_64)
license=(BSD-2-Clause)
makedepends=(
doxygen
gcc-libs
gdbm
glibc
gmp
graphviz
libffi
libxcrypt
libyaml
openssl
readline
rust
tk
zlib
)
checkdepends=(
inetutils
procps-ng
)
options=('!emptydirs')
source=(
"https://cache.ruby-lang.org/pub/ruby/${pkgver:0:3}/ruby-${pkgver}.tar.xz"
ruby-3.2-openssl-3.3-fix.patch::https://github.com/ruby/ruby/commit/dd5e625d7bcb7dc849fdbc2ad8053f9c2724efb4.patch
)
sha512sums=('fb0af37be4b6ad7b98ab9f8a508952238ee68b5828e3926331e4db52e2ebc1e6046f31114069322db0cd3bea7c9b82ace91c8564573ddcfa1f960877b237dbff'
'52351374fc9aa9c3576bfb4b62df1d1d8dbe7327270a4d1c5777d247a33d6e6528b08a537fc4c87d9d0cc54b4b9183848f6c54d54fc727871b3e511b7a73ddb7')
b2sums=('9c2300a958b03528d51f0d74a069c8c538ca4009835d55377509a000bcfb43893a8a80d8fda57011e77c72e6283cb259281d5ba7b37444546e49f2a9ad515cf3'
'1ee662e57f9f29b4ab29b391b38b988a8b5c199e62c815353c3a47e6eceea910344c7d9a00512916e05b6404efddf941313dfdcb0bec027f7f668443309228b9')
_bootstrap=0
_rubyver="${pkgver:0:3}.0"
_bundled_gems=(
debug
matrix
minitest
net-ftp
net-imap
net-pop
net-smtp
power_assert
prime
rake
rbs
rexml
rss
test-unit
typeprof
)
_bundled_gems_bins=(
rake
rbs
rdbg
typeprof
)
_default_gems=(
abbrev
base64
benchmark
bigdecimal
cgi
csv
date
delegate
did_you_mean
digest
drb
english
error_highlight
etc
fcntl
fiddle
fileutils
find
forwardable
getoptlong
io-console
io-nonblock
io-wait
ipaddr
json
logger
mutex_m
net-http
net-protocol
nkf
observer
open-uri
open3
openssl
optparse
ostruct
pathname
pp
prettyprint
pstore
psych
readline
readline-ext
reline
resolv
resolv-replace
rinda
ruby2_keywords
securerandom
set
shellwords
singleton
stringio
strscan
syntax_suggest
syslog
tempfile
time
timeout
tmpdir
tsort
un
uri
weakref
yaml
zlib
)
_default_tool_gems=(
bundler
erb
irb
racc
rdoc
rubygems
)
_default_tool_gems_bins=(
bundle
bundler
erb
gem
irb
racc
rdoc
ri
)
prepare() {
cd "ruby-${pkgver}"
# ignore test_session_reuse_but_expire test for openssl version 3.3
sed -i "s/3.2./3.3./g" test/net/http/test_https.rb
patch -Np1 < ../ruby-3.2-openssl-3.3-fix.patch
}
build() {
cd "ruby-${pkgver}"
# this uses malloc_usable_size, which is incompatible with fortification level 3
export CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
export CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--sharedstatedir=/var/lib \
--libexecdir=/usr/lib/ruby \
--enable-shared \
--disable-rpath \
--with-dbm-type=gdbm_compat
make
}
check() {
cd "ruby-${pkgver}"
# this uses malloc_usable_size, which is incompatible with fortification level 3
export CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
export CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
make check
}
package_ruby() {
depends=(
gcc-libs
gdbm
glibc
gmp
libffi
libxcrypt
libyaml
openssl
readline
zlib
)
optdepends=(
'tk: for Ruby/TK'
'ruby-docs: Documentation for Ruby'
'ruby-default-gems: Default gems which are part of Ruby StdLib'
'ruby-bundled-gems: Bundled gems which are part of Ruby StdLib'
'ruby-stdlib: Full Ruby StdLib including default gems, bundled gems and tools'
)
provides=(
libruby.so
)
replaces=(
ruby-abbrev
ruby-base64
ruby-benchmark
ruby-bigdecimal
ruby-cgi
ruby-csv
ruby-date
ruby-delegate
ruby-did_you_mean
ruby-digest
ruby-drb
ruby-english
ruby-etc
ruby-fcntl
ruby-fiddle
ruby-fileutils
ruby-find
ruby-forwardable
ruby-getoptlong
ruby-io-console
ruby-io-nonblock
ruby-io-wait
ruby-ipaddr
ruby-json
ruby-logger
ruby-mutex_m
ruby-net-http
ruby-open-uri
ruby-psych
ruby-reline
ruby-ruby2_keywords
ruby-set
ruby-stringio
ruby-time
ruby-tmpdir
ruby-uri
)
conflicts=("${replaces[@]}")
provides+=("${_default_gems[@]/#/ruby-}")
cd "ruby-${pkgver}"
make DESTDIR="${pkgdir}" install-nodoc
install --verbose -D --mode=0644 BSDL COPYING --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
install --verbose -D --mode=0644 *.md --target-directory "${pkgdir}/usr/share/doc/${pkgname}"
# remove unrepreducible files
rm --recursive --verbose \
"${pkgdir}/usr/lib/ruby/gems/${_rubyver}/cache"
# bootstrap switch
if (( _bootstrap )); then
# provide everything for a bootstrap build
# use a reference to provides to srcinfo generation isn't confused
declare -n bootstrap_provides=provides
bootstrap_provides+=("${_default_tool_gems[@]/#/ruby-}" rubygems)
bootstrap_provides+=("${_bundled_gems[@]/#/ruby-}")
declare -n bootstrap_conflicts=conflicts
bootstrap_conflicts+=("${_default_tool_gems[@]/#/ruby-}" rubygems)
bootstrap_conflicts+=("${_bundled_gems[@]/#/ruby-}")
else
# remove de-vendored parts
_remove_default_tool_gems
_remove_bundled_gems
# add standard dependencies
depends+=(
rubygems
)
fi
}
# remove bundled gems - they are provided as dedicated packages
_remove_bundled_gems() {
local gem bin
for gem in "${_bundled_gems[@]}"; do
msg2 "removing bundled gem ${gem}"
rm --recursive --verbose \
"${pkgdir}/usr/lib/ruby/gems/${_rubyver}/gems/${gem}"-* \
"${pkgdir}/usr/lib/ruby/gems/${_rubyver}/specifications/${gem}"-*.gemspec
rm --recursive --verbose --force \
"${pkgdir}/usr/lib/ruby/gems/${_rubyver}/extensions"/*-linux*/"${_rubyver}/${gem}"-*
done
for bin in "${_bundled_gems_bins[@]}"; do
rm --recursive --verbose "${pkgdir}/usr/bin/${bin}"
rm --recursive --verbose --force "${pkgdir}/usr/share/man/man1/${bin}.1"
done
}
# remove default tool gems - they are provided as dedicated packages
_remove_default_tool_gems() {
local gem bin
for gem in "${_default_tool_gems[@]}"; do
msg2 "removing default gem ${gem}"
rm --recursive --verbose \
"${pkgdir}/usr/lib/ruby/${_rubyver}/${gem}"*
if [[ ${gem} != rubygems ]]; then
rm --recursive --verbose \
"${pkgdir}/usr/lib/ruby/gems/${_rubyver}/gems/${gem}"-* \
"${pkgdir}/usr/lib/ruby/gems/${_rubyver}/specifications/default/${gem}"-*.gemspec
fi
rm --recursive --verbose --force \
"${pkgdir}/usr/lib/ruby/${_rubyver}"/*-linux*/"${gem}"
done
for bin in "${_default_tool_gems_bins[@]}"; do
rm --recursive --verbose "${pkgdir}/usr/bin/${bin}"
rm --recursive --verbose --force "${pkgdir}/usr/share/man/man1/${bin}.1"
done
}
package_ruby-docs() {
pkgdesc='Documentation files for Ruby'
cd "ruby-${pkgver}"
make DESTDIR="${pkgdir}" install-doc install-capi
install --verbose -D --mode=0644 BSDL COPYING --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
}
package_ruby-bundled-gems() {
pkgdesc='Bundled gems which are part of Ruby StdLib'
replaces=(ruby-bundledgems)
conflicts=(ruby-bundledgems)
depends=("${_bundled_gems[@]/#/ruby-}")
cd "ruby-${pkgver}"
install --verbose -D --mode=0644 BSDL COPYING --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
}
package_ruby-default-gems() {
pkgdesc='Default gems which are part of Ruby StdLib'
depends=("${_default_tool_gems[@]/#/ruby-}")
cd "ruby-${pkgver}"
install --verbose -D --mode=0644 BSDL COPYING --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
}
package_ruby-stdlib() {
pkgdesc='Full Ruby StdLib including default gems, bundled gems and tools'
depends=(ruby-default-gems ruby-bundled-gems)
cd "ruby-${pkgver}"
install --verbose -D --mode=0644 BSDL COPYING --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
}
# vim: tabstop=2 shiftwidth=2 expandtab: