# Contributor: Carlo Landmeter <clandmeter@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
#
# secfixes:
#   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
#
setvar pkgname = 'ruby'
setvar pkgver = '2.4.2'
setvar _abiver = ""${pkgver%.*}.0""
setvar pkgrel = '0'
setvar pkgdesc = ""An object-oriented language for quick and easy programming""
setvar url = ""http://www.ruby-lang.org/en/""
setvar arch = ""all""
setvar license = ""Ruby""
setvar depends = ""ca-certificates""
setvar depends_dev = ""gmp-dev""
setvar makedepends = ""$depends_dev zlib-dev libressl-dev gdbm-dev db-dev readline-dev
	libffi-dev coreutils yaml-dev linux-headers autoconf""
setvar subpackages = ""$pkgname-doc $pkgname-dev
	$pkgname-bigdecimal::noarch
	$pkgname-did_you_mean::noarch
	$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-test-unit:test_unit:noarch
	$pkgname-xmlrpc::noarch
	$pkgname-libs
	""
setvar source = ""ftp://ftp.ruby-lang.org/pub/ruby/${pkgver%.*}/$pkgname-$pkgver.tar.bz2
	rubygems-avoid-platform-specific-gems.patch""
setvar options = ""!fhs""
setvar replaces = ""ruby-gems""
setvar builddir = ""$srcdir/$pkgname-$pkgver""

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

case (CARCH) {
	x86 { setvar _arch = ""i386""}
	* { setvar _arch = "$CARCH"}
}

proc prepare {
	default_prepare

	cd $builddir
	autoconf
}

proc build {
	cd $builddir

	# -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"

	# 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
}

proc check {
	cd $builddir
	make test
}

proc package {
	cd $builddir

	make DESTDIR="$pkgdir" install

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

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

	# Remove bundled CA certificates.
	rm -R "$pkgdir"$_rubydir/rubygems/ssl_certs/*.pem || true

	if test -d "$pkgdir"/usr/local {
		local f=$(cd "$pkgdir" ; find usr/local -type f)
		if test -n $f {
			error "Found files in /usr/local:"
			echo $f
			return 1
		}
	}
}

proc bigdecimal {
	setvar pkgdesc = ""Ruby arbitrary-precision floating point decimal arithmetic""
	setvar depends = "$pkgname"

	_mvgem bigdecimal
}

proc did_you_mean {
	setvar pkgdesc = ""Did you mean? experience in Ruby""
	setvar depends = "$pkgname"

	_mvgem did_you_mean
}

proc io_console {
	setvar pkgdesc = ""Ruby simple console IO library""
	setvar depends = "$pkgname"

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

proc irb {
	setvar pkgdesc = ""The Interactive Ruby""
	setvar replaces = "$pkgname"
	setvar depends = "$pkgname"

	cd $pkgdir
	_mv usr/bin/irb \
		usr/lib/ruby/$_abiver/irb*
}

proc json {
	setvar pkgdesc = ""JSON implementation as a Ruby extension in C""
	setvar depends = "$pkgname"

	_mvgem json
}

proc minitest {
	setvar pkgdesc = ""Ruby suite of testing facilities""
	setvar depends = "$pkgname"

	_mvgem minitest
}

proc net_telnet {
	setvar pkgdesc = ""Telnet client functionality for Ruby""
	setvar depends = "$pkgname"

	_mvgem net-telnet
}

proc power_assert {
	setvar pkgdesc = ""Power Assert for Ruby""
	setvar depends = "$pkgname"

	_mvgem power_assert
}

proc rake {
	setvar pkgdesc = ""Ruby based make-like utility""
	setvar depends = "$pkgname"

	_mvgem rake || return 1
	_mv usr/bin/rake
}

proc rdoc {
	setvar pkgdesc = ""Ruby documentation tool""
	setvar depends = ""$pkgname $pkgname-json $pkgname-io-console""

	_mvgem rdoc || return 1
	_mv usr/bin/ri \
		usr/bin/rdoc
}

proc test_unit {
	setvar pkgdesc = ""An xUnit family unit testing framework for Ruby""
	setvar depends = ""$pkgname $pkgname-power_assert""

	_mvgem test-unit
}

proc xmlrpc {
	setvar pkgdesc = ""XMLRPC library for Ruby""
	setvar depends = "$pkgname"

	_mvgem xmlrpc
}

proc libs {
	setvar pkgdesc = ""Libraries necessary to run Ruby""
	setvar depends = """"

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

proc _mv {
	local i; for i in "$@" {
		mkdir -p "$subpkgdir"/${i%/*}
		mv "$pkgdir"/${i} "$subpkgdir"/${i%/*}/ || return 1
	}
}

proc _mvgem {
	cd $pkgdir
	local path; for path in ./$_rubydir/${1}.rb \
			./$_rubydir/${1} \
			./$_rubydir/$_chost/${1} \
			./$_gemdir/gems/${1}-* \
			./$_gemdir/specifications/${1}-* \
			./$_gemdir/specifications/default/${1}-*  {
		test ! -e "$pkgdir/$path" || _mv $path
	}
}

setvar sha512sums = ""1a5302d2558089a6b91b815fff9b75a29e690f10861de5fdd48211f3f45025a70dad7495f216e6af9c62d72e69ed316f1a52fada704bdc7e6d8c094d141ea77c  ruby-2.4.2.tar.bz2
cfdc5ea3b2e2ea69c51f38e8e2180cb1dc27008ca55cc6301f142ebafdbab31c3379b3b6bba9ff543153876dd98ed2ad194df3255b7ea77a62e931c935f80538  rubygems-avoid-platform-specific-gems.patch""