File ruby2.1.spec of Package ruby2.1.2315
#
# spec file for package ruby2.1
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%bcond_with ruby_intree_common
Name: ruby2.1
####
#!!!
#!!! when updating, check versions of embedded rubygems in package stdlib below
#!!!
####
%define patch_level p0
Version: 2.1.2
Release: 0
# make the exported API version explicit
%define api_version 2.1.0
%define rb_binary_suffix .ruby2.1
%define rb_soname ruby2.1
# ruby-macros and ruby-common version
%define rpm_macros_version 3
#
%define pkg_version %{version}
%define libname libruby2_1-2_1
# keep in sync with macro file!
%define rb_ver %{api_version}
%define rb_arch %(echo %{_target_cpu}-linux-gnu | sed -e "s/ppc/powerpc/")
%define rb_arch_short %(echo %{_target_cpu}-linux | sed -e "s/ppc/powerpc/ ; s/i[0-9]86/x86/")
%define rb_libdir %{_libdir}/ruby/%{rb_ver}/
%define rb_archdir %{_libdir}/ruby/%{rb_ver}/%{rb_arch}
%define rb_extdir %{_libdir}/ruby/gems/%{rb_ver}/extensions/
%define rb_extarchdir %{_libdir}/ruby/gems/%{rb_ver}/extensions/%{rb_arch_short}/
%define rb_extversionedarchdir %{_libdir}/ruby/gems/%{rb_ver}/extensions/%{rb_arch_short}/%{rb_ver}
%define rb_extdocdir %{_libdir}/ruby/gems/%{rb_ver}/doc/extensions
%define rb_extarchdocdir %{_libdir}/ruby/gems/%{rb_ver}/doc/extensions/%{rb_arch_short}
# keep in sync with macro file!
#
# from valgrind.spec
%ifarch %ix86 x86_64 ppc ppc64
%define use_valgrind 1
%endif
# see https://bugs.ruby-lang.org/issues/8000 - might come back
%if %suse_version < 1230
%define tk_version_supported 1
%endif
# the tests are unfortunately rather fishy
%define run_tests 1
#
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: awk
BuildRequires: gdbm-devel
BuildRequires: libffi-devel
BuildRequires: libyaml-devel
BuildRequires: ncurses-devel
BuildRequires: openssl-devel
BuildRequires: pkg-config
BuildRequires: readline-devel
BuildRequires: tk-devel
BuildRequires: zlib-devel
# this requires is needed as distros older than 11.3 have a buildignore on freetype2, without this the detection of the tk extension fails
BuildRequires: freetype2-devel
%if 0%{?suse_version} > 1010
BuildRequires: xorg-x11-libX11-devel
%else
BuildRequires: xorg-x11-devel
%endif
%if 0%{?use_valgrind}
%if 0%{?suse_version} > 1021
BuildRequires: valgrind-devel
%else
BuildRequires: valgrind
%endif
%endif
Provides: ruby(abi) = %{rb_ver}
Conflicts: ruby(abi) = %{rb_ver}
%if %{with ruby_intree_common}
Provides: ruby-common = %{rpm_macros_version}
Obsoletes: ruby-common < %{rpm_macros_version}
Provides: ruby-macros = %{rpm_macros_version}
%endif
Provides: ruby21 = %{version}-%{release}
Requires: %{name}-stdlib = %{version}
Provides: rubygem-rake = 10.1.0
PreReq: update-alternatives
BuildRequires: update-alternatives
Requires: ruby-common
#
Url: http://www.ruby-lang.org/
Source: http://cache.ruby-lang.org/pub/ruby/2.1/ruby-%{pkg_version}.tar.bz2
# sources from former ruby-common
Source1: gem_build_cleanup
Source2: ruby.macros
Source3: ruby.rpm-macros
Source4: rubygems.attr
Source5: rubygemsdeps.rb
Source6: gem_install.sh
Source7: generate_buildrequires.sh
Source8: generate_rubygemprovides.awk
#
Source10: ruby2.1.macros
Source11: ruby2.1-default.macros
Source100: %{name}-rpmlintrc
Patch0: rubygems-1.5.0_buildroot.patch
Patch1: ruby-1.9.2p290_tcl_no_stupid_rpaths.patch
Patch2: drop_content_size_check_in_xmlrpc.patch
Patch3: CVE-2014-8080.patch
Patch4: CVE-2014-8090.patch
Patch5: 0001-gc.c-tick-for-POWER-arch.patch
Patch6: 0001-vm_exec.c-improve-performance-in-ppc64-arch.patch
#
Summary: An Interpreted Object-Oriented Scripting Language
License: BSD-2-Clause or Ruby
Group: Development/Languages/Ruby
%description
Ruby is an interpreted scripting language for quick and easy
object-oriented programming. It has many features for processing text
files and performing system management tasks (as in Perl). It is
simple, straight-forward, and extensible.
* Ruby features:
- Simple Syntax
- *Normal* Object-Oriented features (class, method calls, for
example)
- *Advanced* Object-Oriented features(Mix-in, Singleton-method, for
example)
- Operator Overloading
- Exception Handling
- Iterators and Closures
- Garbage Collection
- Dynamic Loading of Object Files (on some architectures)
- Highly Portable (works on many UNIX machines; DOS, Windows, Mac,
BeOS, and more)
%package -n %{libname}
Summary: Dynamic runtime library for Ruby
Group: System/Libraries
%description -n %{libname}
Dynamic runtime library libruby2.1.so.2.0.0 for Ruby
%package doc
Summary: Documentation and samples for Ruby
Group: Development/Languages/Ruby
%description doc
Documentation and samples for Ruby
%package stdlib
Summary: The Ruby standard library
Group: Development/Languages/Ruby
Provides: ruby-stdlib = %{version}-%{release}
################################
# generate provides for embedded rubygems
# must be 'manually' generated since
# - the final .gemspec files are created during %build and %install
# - the usual means to generate provides for rubygems is using ruby
# and ruby is not available while building ruby :-/
%define gen_embedded_provides4() %(awk -f %{S:8} -- %api_version %arch %1 %2 %3 %4)
%define gen_embedded_provides5() %(awk -f %{S:8} -- %api_version %arch %1 %2 %3 %4 %5)
%gen_embedded_provides4 io-console 0 4 2
%gen_embedded_provides4 json 1 8 1
%gen_embedded_provides4 minitest 4 7 5
%gen_embedded_provides4 psych 2 0 3
%gen_embedded_provides4 rake 10 1 0
%gen_embedded_provides4 rdoc 4 1 0
%gen_embedded_provides5 test-unit 2 1 1 0
################################
%description stdlib
The Ruby standard library
%package devel
Summary: Development files to link against Ruby
Group: Development/Languages/Ruby
Requires: %{name} = %{version}
Provides: rubygems = 2.2.2
Provides: rubygems_with_buildroot_patch
%description devel
Development files to link against Ruby.
%package devel-extra
Summary: Special development files of ruby, normally not installed
Group: Development/Languages/Ruby
Requires: %{name}-devel = %{version}
%description devel-extra
Development files to link against Ruby.
%if 0%{?tk_version_supported} > 0
%package tk
Summary: TCL/TK bindings for Ruby
Group: Development/Languages/Ruby
Requires: %{name} = %{version}
%description tk
TCL/TK bindings for Ruby
%endif
%package doc-ri
Summary: Ruby Interactive Documentation
Group: Development/Languages/Ruby
Requires: %{name} = %{version}
%if 0%{?suse_version} >= 1121
BuildArch: noarch
%endif
%description doc-ri
This package contains the RI docs for ruby
%package doc-html
Summary: This package contains the HTML docs for ruby
Group: Development/Languages/Ruby
Requires: %{name} = %{version}
%if 0%{?suse_version} >= 1121
BuildArch: noarch
%endif
%description doc-html
This package contains the HTML docs for ruby
%package examples
Summary: Example scripts for ruby
Group: Development/Languages/Ruby
Requires: %{name} = %{version}
%if 0%{?suse_version} >= 1121
BuildArch: noarch
%endif
%description examples
Example scripts for ruby
%package test-suite
Requires: %{name} = %{version}
Summary: An Interpreted Object-Oriented Scripting Language
Group: Development/Languages/Ruby
%if 0%{?suse_version} >= 1121
BuildArch: noarch
%endif
%description test-suite
Ruby is an interpreted scripting language for quick and easy
object-oriented programming. It has many features for processing text
files and performing system management tasks (as in Perl). It is
simple, straight-forward, and extensible.
* Ruby features:
- Simple Syntax
- *Normal* Object-Oriented features (class, method calls, for
example)
- *Advanced* Object-Oriented features(Mix-in, Singleton-method, for
example)
- Operator Overloading
- Exception Handling
- Iterators and Closures
- Garbage Collection
- Dynamic Loading of Object Files (on some architectures)
- Highly Portable (works on many UNIX machines; DOS, Windows, Mac,
BeOS, and more)
%prep
%setup -q -n ruby-%{pkg_version}
%patch0
%patch1
%patch2
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
find sample -type f -print0 | xargs -r0 chmod a-x
grep -Erl '^#! */' benchmark bootstraptest ext lib sample test \
| xargs -r perl -p -i -e 's|^#!\s*\S+(\s+.*)?$|#!/usr/bin/ruby2.1$1|'
%build
# iseq.c needs -fno-strict-aliasing
export CFLAGS="%{optflags} -fno-strict-aliasing"
%configure \
--program-suffix="%{rb_binary_suffix}" \
--with-soname=%{rb_soname} \
--target=%{_target_platform} \
%if 0%{?use_valgrind}
--with-valgrind \
%endif
--with-mantype=man \
--enable-shared \
--disable-static \
--disable-rpath
%{__make} all V=1
%install
%makeinstall V=1
echo "%defattr(-,root,root,-)" > devel-extra-excludes
echo "%defattr(-,root,root,-)" > devel-extra-list
for i in iseq.h insns.inc insns_info.inc revision.h version.h thread_pthread.h \
ruby_atomic.h method.h internal.h id.h vm_core.h vm_opts.h node.h eval_intern.h vm_debug.h; do
install -m 644 $i %{buildroot}%{_includedir}/ruby-%{rb_ver}/
echo "%exclude %{_includedir}/ruby-%{rb_ver}/$i" >> devel-extra-excludes
echo "%{_includedir}/ruby-%{rb_ver}/$i" >> devel-extra-list
done
# Create gem native extensions dir
# use shell scripting here as we're executing the just installed binary
%define rb_binary %{buildroot}/usr/bin/ruby -I %{buildroot}%{rb_libdir} -I %{buildroot}%{rb_archdir}
export LD_LIBRARY_PATH=%{buildroot}%{_libdir}
%if %{with ruby_intree_common}
# formerly ruby-common
# we need to make sure it overwrites older macro versions and rpm sorts alphabetically
install -D -m 0644 %{S:2} %{buildroot}/etc/rpm/macros.ruby
install -D -m 0644 %{S:3} %{buildroot}/etc/rpm/macros.suse-ruby
install -D -m 0644 %{S:4} %{buildroot}/usr/lib/rpm/fileattrs/rubygems.attr
install -D -m 0755 %{S:5} %{buildroot}/usr/lib/rpm/rubygemsdeps.rb
install -D -m 0755 %{S:6} %{buildroot}/usr/lib/rpm/gem_install.sh
install -D -m 0755 %{S:1} %{buildroot}/usr/lib/rpm/gem_build_cleanup.sh
install -D -m 0755 %{S:7} %{buildroot}/usr/lib/rpm/generate_buildrequires.sh
%endif
install -D -m 0644 %{S:10} %{buildroot}/etc/rpm/macros.suse-ruby2.1
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
%if "%{rb_default_ruby_suffix}" == "%{rb_soname}"
install -D -m 0644 %{S:11} %{buildroot}/etc/rpm/macros.suse-ruby2.1-default
for bin in %{buildroot}%{_bindir}/{erb,gem,irb,ruby,testrb}%{rb_binary_suffix} ; do
# yes really hard links
ln $bin ${bin%%%{rb_binary_suffix}}
done
for man in %{buildroot}%{_mandir}/man1/*%{rb_binary_suffix}.1* ; do
# yes really hard links
# TODO: this is dangerous as we cant anc
ln $man ${man%%%{rb_binary_suffix}.1}.1
done
ln -s lib%{rb_soname}.so %{buildroot}%{_libdir}/libruby.so
%endif
for bin in rake rdoc ri; do
# dummy
mv %{buildroot}%_bindir/${bin}%{rb_binary_suffix} %{buildroot}%_bindir/$bin.ruby%{rb_binary_suffix}
#
ln -s $bin %{buildroot}%{_sysconfdir}/alternatives/$bin
ln -s %{_sysconfdir}/alternatives/$bin %{buildroot}%_bindir/$bin
#
ln -s ${bin}%{rb_binary_suffix} %{buildroot}%{_sysconfdir}/alternatives//$bin%{rb_binary_suffix}
ln -s %{_sysconfdir}/alternatives/$bin%{rb_binary_suffix} %{buildroot}%_bindir/$bin%{rb_binary_suffix}
done
install -dD %{buildroot}%{rb_extdir} %{buildroot}%{rb_extarchdir} %{buildroot}%{rb_extversionedarchdir} %{buildroot}%{rb_extarchdocdir}
%post
for bin in rake rdoc ri; do
/usr/sbin/update-alternatives --install \
%{_bindir}/$bin $bin %{_bindir}/$bin.ruby%{rb_binary_suffix} 2
/usr/sbin/update-alternatives --install \
%{_bindir}/$bin%{rb_binary_suffix} $bin%{rb_binary_suffix} %{_bindir}/$bin.ruby%{rb_binary_suffix} 2
done
%preun
if [ "$1" = 0 ] ; then
for bin in rake rdoc ri; do
/usr/sbin/update-alternatives --remove $bin %{_bindir}/$bin.ruby%{rb_binary_suffix}
/usr/sbin/update-alternatives --remove $bin%{rb_binary_suffix} %{_bindir}/$bin.ruby%{rb_binary_suffix}
done
fi
%if 0%{?run_tests}
%check
export LD_LIBRARY_PATH="$PWD"
# we know some tests will fail when they do not find a /usr/bin/ruby
make check V=1 ||:
%endif
%post -n %{libname}
/sbin/ldconfig
%postun -n %{libname}
/sbin/ldconfig
%files
%defattr(-,root,root,-)
%ghost %{_sysconfdir}/alternatives/rake*
%ghost %{_sysconfdir}/alternatives/rdoc*
%ghost %{_sysconfdir}/alternatives/ri*
%{_bindir}/erb*
%{_bindir}/gem*
%{_bindir}/irb*
%{_bindir}/rake*
%{_bindir}/rdoc*
%{_bindir}/ri*
%{_bindir}/ruby*
%{_bindir}/testrb*
%if 0%{?tk_version_supported} > 0
%exclude %{rb_libdir}/multi-tk.rb
%exclude %{rb_libdir}/remote-tk.rb
%exclude %{rb_libdir}/tcltk.rb
%exclude %{rb_libdir}/tk*.rb
%exclude %{rb_libdir}/tk/
%exclude %{rb_libdir}/tkextlib/
%exclude %{rb_archdir}/tcltklib.so
%exclude %{rb_archdir}/tkutil.so
%endif
%{_mandir}/man1/ri*.1*
%{_mandir}/man1/irb*.1*
%{_mandir}/man1/erb*.1*
%{_mandir}/man1/rake*.1*
%{_mandir}/man1/ruby*.1*
%doc ChangeLog COPYING COPYING.ja GPL KNOWNBUGS.rb LEGAL NEWS README README.EXT README.EXT.ja README.ja
/etc/rpm/macros.suse-ruby2.1*
%if %{with ruby_intree_common}
# former ruby-common files
%config(noreplace) /etc/rpm/macros.ruby
%config /etc/rpm/macros.suse-ruby
%dir /usr/lib/rpm/fileattrs
/usr/lib/rpm/fileattrs/rubygems.attr
/usr/lib/rpm/rubygemsdeps.rb
/usr/lib/rpm/gem_install.sh
/usr/lib/rpm/gem_build_cleanup.sh
/usr/lib/rpm/generate_buildrequires.sh
%endif
%files -n %{libname}
%defattr(-,root,root,-)
%{_libdir}/libruby*.so.*
%files doc
%defattr(-,root,root,-)
%doc doc/* sample/
%files stdlib
%defattr(-,root,root,-)
%{_libdir}/ruby/
%if 0%{?tk_version_supported} > 0
%exclude %{rb_libdir}/multi-tk.rb
%exclude %{rb_libdir}/remote-tk.rb
%exclude %{rb_libdir}/tcltk.rb
%exclude %{rb_libdir}/tk*.rb
%exclude %{rb_libdir}/tk/
%exclude %{rb_libdir}/tkextlib/
%exclude %{rb_archdir}/tcltklib.so
%exclude %{rb_archdir}/tkutil.so
%endif
%dir %rb_extdir
%dir %rb_extarchdir
%dir %rb_extversionedarchdir
%dir %rb_extdocdir
%dir %rb_extarchdocdir
%files devel -f devel-extra-excludes
%defattr(-,root,root,-)
%{_includedir}/ruby-%{rb_ver}
%{_libdir}/libruby*.so
%{_libdir}/libruby*-static.a
%{_libdir}/pkgconfig/ruby-2.1.pc
%files devel-extra -f devel-extra-list
%if 0%{?tk_version_supported} > 0
%files tk
%defattr(-,root,root,-)
%{rb_libdir}/multi-tk.rb
%{rb_libdir}/remote-tk.rb
%{rb_libdir}/tcltk.rb
%{rb_libdir}/tk*.rb
%{rb_libdir}/tk/
%{rb_libdir}/tkextlib/
%{rb_archdir}/tcltklib.so
%{rb_archdir}/tkutil.so
%endif
%files doc-ri
%defattr(-,root,root,-)
%dir %{_datadir}/ri/
%{_datadir}/ri/%{rb_ver}/
%changelog