aboutsummaryrefslogtreecommitdiffstats
path: root/main/ruby/APKBUILD
blob: 23aa5d7b677544b10eb71b23d6ecd9bed67042b5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
# Contributor: Carlo Landmeter <clandmeter@alpinelinux.org>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
#
# secfixes:
#   2.7.2-r0:
#     - CVE-2020-25613
#   2.6.6-r0:
#     - CVE-2020-10663
#     - CVE-2020-10933
#   2.6.5-r0:
#     - CVE-2019-16255
#     - CVE-2019-16254
#     - CVE-2019-15845
#     - CVE-2019-16201
#   2.5.2-r0:
#     - CVE-2018-16395
#     - CVE-2018-16396
#   2.5.1-r0:
#     - CVE-2017-17742
#     - CVE-2018-6914
#     - CVE-2018-8777
#     - CVE-2018-8778
#     - CVE-2018-8779
#     - CVE-2018-8780
#   2.4.2-r0:
#     - CVE-2017-0898
#     - CVE-2017-10784
#     - CVE-2017-14033
#     - CVE-2017-14064
#     - CVE-2017-0899
#     - CVE-2017-0900
#     - CVE-2017-0901
#     - CVE-2017-0902
#   2.4.3-r0:
#     - CVE-2017-17405
#
pkgname=ruby
pkgver=2.7.2
_abiver="${pkgver%.*}.0"
pkgrel=4
pkgdesc="An object-oriented language for quick and easy programming"
url="https://www.ruby-lang.org/"
arch="all"
license="Ruby AND BSD-2-Clause AND MIT"
depends="ca-certificates"
depends_dev="$pkgname=$pkgver-r$pkgrel gmp-dev libucontext-dev"
makedepends="$depends_dev zlib-dev openssl-dev gdbm-dev readline-dev
	libffi-dev coreutils yaml-dev linux-headers autoconf"
install="$pkgname.post-upgrade"
subpackages="$pkgname-dbg $pkgname-doc $pkgname-dev
	$pkgname-bigdecimal
	$pkgname-etc
	$pkgname-fiddle
	$pkgname-gdbm
	$pkgname-io-console:io_console
	$pkgname-irb::noarch
	$pkgname-json
	$pkgname-minitest::noarch
	$pkgname-net-telnet:net_telnet:noarch
	$pkgname-power_assert::noarch
	$pkgname-rake::noarch
	$pkgname-rdoc::noarch
	$pkgname-sdbm
	$pkgname-test-unit:test_unit:noarch
	$pkgname-webrick::noarch
	$pkgname-xmlrpc::noarch
	$pkgname-libs
	$pkgname-full::noarch
	"
source="https://cache.ruby-lang.org/pub/ruby/${pkgver%.*}/ruby-$pkgver.tar.gz
	rubygems-avoid-platform-specific-gems.patch
	test_insns-lower-recursion-depth.patch
	fix-get_main_stack.patch
	"
replaces="ruby-gems"

_gemdir="/usr/lib/ruby/gems/$_abiver"
_rubydir="/usr/lib/ruby/$_abiver"
_chost="${CHOST/-alpine-/-}"

case "$CARCH" in
	x86) _arch="i386";;
	*) _arch="$CARCH";;
esac

_bundled_gems=
for _i in $subpackages; do
	case "$_i" in
		*-dev | *-doc | *-libs | *-full:*) continue;;
		*) _bundled_gems="$_bundled_gems ${_i%%:*}";;
	esac
done

prepare() {
	default_prepare
	autoconf

	# v2.7.1 - Of all the bootstraptest only test_fiber fails on s390x:
	# test_fiber.rb bootstraptest.tmp.rb:8: [BUG] vm_call_cfunc: cfp consistency error (0x000003ffb63fefb0, 0x000003ffb42f5f58)
	case "$CARCH" in
		s390x)
			rm bootstraptest/test_fiber.rb ;;
	esac
}

build() {
	# -fomit-frame-pointer makes ruby segfault, see gentoo bug #150413
	# In many places aliasing rules are broken; play it safe
	# as it's risky with newer compilers to leave it as it is.
	export CFLAGS="$CFLAGS -fno-omit-frame-pointer -fno-strict-aliasing"
	export CPPFLAGS="$CPPFLAGS -fno-omit-frame-pointer -fno-strict-aliasing"

	# Needed for coroutine stuff
	export LIBS="-lucontext"

	# ruby saves path to install. we want use $PATH
	export INSTALL=install

	# the configure script does not detect isnan/isinf as macros
	export ac_cv_func_isnan=yes
	export ac_cv_func_isinf=yes

	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=/etc \
		--mandir=/usr/share/man \
		--infodir=/usr/share/info \
		--with-sitedir=/usr/local/lib/site_ruby \
		--with-search-path="/usr/lib/site_ruby/\$(ruby_ver)/$_arch-linux" \
		--enable-pthread \
		--disable-rpath \
		--enable-shared \
		--with-mantype=man
	make
}

check() {
	make test
}

package() {
	make DESTDIR="$pkgdir" install

	install -m 644 -D COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING

	# Remove bundled gem bundler; it's provided by a separate aport/package
	# ruby-bundler.
	subpkgdir=".trash" _mvgem bundler && rm -Rf .trash
	rm usr/bin/bundle usr/bin/bundler
	rm usr/share/man/man1/bundle* usr/share/man/man5/gemfile.5*

	# Remove bundled CA certificates; they are provided by ca-certificates.
	rm "$pkgdir"/$_rubydir/rubygems/ssl_certs/*/*.pem
	rmdir "$pkgdir"/$_rubydir/rubygems/ssl_certs/* || true

	rm -Rf "$pkgdir"/$_gemdir/cache/*

	if [ -d "$pkgdir"/usr/local ]; then
		local f=$(cd "$pkgdir" ; find usr/local -type f)
		if [ -n "$f" ]; then
			error "Found files in /usr/local:"
			echo "$f"
			return 1
		fi
		rm -r "$pkgdir"/usr/local
	fi
}

bigdecimal() {
	pkgdesc="Ruby arbitrary-precision floating point decimal arithmetic"
	license="Ruby"
	depends="$pkgname-libs"

	_mvgem bigdecimal
}

etc() {
	pkgdesc="Provides access to information typically stored in UNIX /etc directory"
	license="BSD-2-Clause"
	depends=""

	_mvgem etc
}

fiddle() {
	pkgdesc="A libffi wrapper for Ruby"
	license="BSD-2-Clause"
	depends=""

	_mvgem fiddle
}

gdbm() {
	pkgdesc="Ruby extension for GNU dbm"
	license="BSD-2-Clause"
	depends=""

	_mvgem gdbm
}

io_console() {
	pkgdesc="Ruby simple console IO library"
	license="BSD-2-Clause"
	depends=""

	_mvgem io-console
	_mv $_rubydir/io \
		$_rubydir/$_chost/io/console.so
}

irb() {
	pkgdesc="The Interactive Ruby"
	replaces="$pkgname"
	depends="$pkgname"

	cd "$pkgdir"
	_mvgem irb
	_mv usr/bin/irb
}

json() {
	pkgdesc="JSON implementation as a Ruby extension in C"
	license="Ruby"
	depends=""

	_mvgem json
}

minitest() {
	pkgdesc="Ruby suite of testing facilities"
	license="MIT"
	depends="$pkgname"

	_mvgem minitest
}

net_telnet() {
	pkgdesc="Telnet client functionality for Ruby"
	depends="$pkgname-libs"

	_mvgem net-telnet
}

power_assert() {
	pkgdesc="Power Assert for Ruby"
	depends="$pkgname-libs"

	_mvgem power_assert
}

rake() {
	pkgdesc="Ruby based make-like utility"
	license="MIT"
	depends="$pkgname"

	_mvgem rake
	_mv usr/bin/rake
}

rdoc() {
	pkgdesc="Ruby documentation tool"
	license="Ruby"
	depends="$pkgname $pkgname-json $pkgname-io-console"

	_mvgem rdoc
	_mv usr/bin/ri \
		usr/bin/rdoc
}

sdbm() {
	pkgdesc="A simple file-based key-value store with String keys and values for Ruby"
	license="BSD-2-Clause"
	depends=""

	_mvgem sdbm
}

test_unit() {
	pkgdesc="An xUnit family unit testing framework for Ruby"
	license="Ruby PSFL"
	depends="$pkgname $pkgname-power_assert"

	_mvgem test-unit
}

webrick() {
	pkgdesc="HTTP server toolkit for Ruby"
	license="BSD-2-Clause"
	depends="$pkgname"

	_mvgem webrick
}

xmlrpc() {
	pkgdesc="XMLRPC library for Ruby"
	license="Ruby"
	depends="$pkgname-libs"

	_mvgem xmlrpc
}

libs() {
	pkgdesc="Libraries necessary to run Ruby"
	depends=""

	mkdir -p "$subpkgdir"/usr
	mv "$pkgdir"/usr/lib "$subpkgdir"/usr/
}

full() {
	pkgdesc="Ruby with all bundled gems"
	# bundler is bundled since Ruby 2.6, so include it in ruby-full despite
	# that it's provided by a seprate aport/package.
	depends="ruby $_bundled_gems ruby-bundler"

	mkdir -p "$subpkgdir"
}

_mv() {
	local i; for i in "$@"; do
		mkdir -p "$subpkgdir"/${i%/*}
		mv "$pkgdir"/$i "$subpkgdir"/${i%/*}/
	done
}

_mvgem() {
	cd "$pkgdir"
	local path; for path in ./$_rubydir/$1.rb \
			./$_rubydir/$1 \
			./$_rubydir/$_chost/$1 \
			./$_rubydir/$_chost/$1.so \
			./$_gemdir/gems/$1-* \
			./$_gemdir/specifications/$1-* \
			./$_gemdir/specifications/default/$1-* ; do
		[ ! -e "$pkgdir/$path" ] || _mv "$path"
	done
}


sha512sums="e80dc16b60149d0d6fedf0ba7b556ae460ff328ee63e9d9e41f5021f67addcc98159cb27bddccaebd6e4b1cddf29266f1c01c32d9ec8bb665aed63c0a2295f2f  ruby-2.7.2.tar.gz
a142199140fa711a64717429e9069fd2082319abaf4b129f561db374b3bc16e2a90cc4c849b5d28334505d1c71fed242aef3c44d983da3513d239dcb778673a5  rubygems-avoid-platform-specific-gems.patch
43c1fc80f0dcb4f24d891478889808583da90dc9e0df74c3b1cf41253c13a0d416d2b7ae17e7d53ac1238340a845b088f0fe20324a79905cc6b950b3dcfa4ac6  test_insns-lower-recursion-depth.patch
3ffc034c01110ee5531265333ca5ee8d61d08131843fe3004c5b34c88c9c1b32cb4ed89574f393177c8bd526e9c15da61ab344f93adf07b9148c561ee19e2eb5  fix-get_main_stack.patch"