From b5067688f80e557f573238af40672f68bfb0ddef Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Sat, 1 Mar 2014 19:01:35 +0000 Subject: [PATCH] extra/ruby to 2.1.0-2.1, fixes #705 --- ...g-gem-from-file-without-dependencies.patch | 84 ++++++++++++++++++ ...e-only-unsigned-long-for-rb_serial_t.patch | 24 +++++ extra/ruby/PKGBUILD | 88 +++++++++++++++++++ extra/ruby/changeset_r45225.diff | 13 +++ extra/ruby/gemrc | 5 ++ extra/ruby/ruby.install | 22 +++++ 6 files changed, 236 insertions(+) create mode 100644 extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch create mode 100644 extra/ruby/0002-Use-only-unsigned-long-for-rb_serial_t.patch create mode 100644 extra/ruby/PKGBUILD create mode 100644 extra/ruby/changeset_r45225.diff create mode 100644 extra/ruby/gemrc create mode 100644 extra/ruby/ruby.install diff --git a/extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch b/extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch new file mode 100644 index 000000000..8fefb275d --- /dev/null +++ b/extra/ruby/0001-Fix-installing-gem-from-file-without-dependencies.patch @@ -0,0 +1,84 @@ +From f5bbf838c8b13369a61c6756355305388df5824f Mon Sep 17 00:00:00 2001 +From: Tim Moore +Date: Tue, 31 Dec 2013 17:39:45 +1100 +Subject: [PATCH] Fix installing gem from file without dependencies. + +Commit 9437ccc fixed the ability to install remote gems that was accidentally +broken by d97fba1, but in the process accidentally broke installing from local +files. + +This also changes the order to check for local first, to avoid unnecessary +network requests in the case where the gem is local. + +Closes #760. +--- + lib/rubygems/commands/install_command.rb | 20 ++++++++++++-------- + test/rubygems/test_gem_commands_install_command.rb | 14 ++++++++++++++ + 2 files changed, 26 insertions(+), 8 deletions(-) + +diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb +index 4485eb1..8219eef 100644 +--- a/lib/rubygems/commands/install_command.rb ++++ b/lib/rubygems/commands/install_command.rb +@@ -228,7 +228,18 @@ to write the specification by hand. For example: + def install_gem_without_dependencies name, req # :nodoc: + gem = nil + +- if remote? then ++ if local? then ++ if name =~ /\.gem$/ and File.file? name then ++ source = Gem::Source::SpecificFile.new name ++ spec = source.spec ++ else ++ source = Gem::Source::Local.new ++ spec = source.find_gem name, req ++ end ++ gem = source.download spec if spec ++ end ++ ++ if remote? and not gem then + dependency = Gem::Dependency.new name, req + dependency.prerelease = options[:prerelease] + +@@ -236,13 +247,6 @@ to write the specification by hand. For example: + gem = fetcher.download_to_cache dependency + end + +- if local? and not gem then +- source = Gem::Source::Local.new +- spec = source.find_gem name, req +- +- gem = source.download spec +- end +- + inst = Gem::Installer.new gem, options + inst.install + +diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb +index 76ea6b4..a5917c0 100644 +--- a/test/rubygems/test_gem_commands_install_command.rb ++++ b/test/rubygems/test_gem_commands_install_command.rb +@@ -560,6 +560,20 @@ ERROR: Possible alternatives: non_existent_with_hint + assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name } + end + ++ def test_install_gem_ignore_dependencies_specific_file ++ spec = quick_spec 'a', 2 ++ ++ util_build_gem spec ++ ++ FileUtils.mv spec.cache_file, @tempdir ++ ++ @cmd.options[:ignore_dependencies] = true ++ ++ @cmd.install_gem File.join(@tempdir, spec.file_name), nil ++ ++ assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name } ++ end ++ + def test_parses_requirement_from_gemname + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 +-- +1.8.5.2 + diff --git a/extra/ruby/0002-Use-only-unsigned-long-for-rb_serial_t.patch b/extra/ruby/0002-Use-only-unsigned-long-for-rb_serial_t.patch new file mode 100644 index 000000000..1e1dd0781 --- /dev/null +++ b/extra/ruby/0002-Use-only-unsigned-long-for-rb_serial_t.patch @@ -0,0 +1,24 @@ +diff --git a/internal.h b/internal.h +index 40916a5..785be49 100644 +--- a/internal.h ++++ b/internal.h +@@ -250,16 +250,8 @@ struct rb_subclass_entry { + rb_subclass_entry_t *next; + }; + +-#if defined(HAVE_LONG_LONG) +-typedef unsigned LONG_LONG rb_serial_t; +-#define SERIALT2NUM ULL2NUM +-#elif defined(HAVE_UINT64_T) +-typedef uint64_t rb_serial_t; +-#define SERIALT2NUM SIZET2NUM +-#else + typedef unsigned long rb_serial_t; + #define SERIALT2NUM ULONG2NUM +-#endif + + struct rb_classext_struct { + struct st_table *iv_index_tbl; +-- +1.9.0 + diff --git a/extra/ruby/PKGBUILD b/extra/ruby/PKGBUILD new file mode 100644 index 000000000..6266abe97 --- /dev/null +++ b/extra/ruby/PKGBUILD @@ -0,0 +1,88 @@ +# Maintainer: Thomas Dziedzic +# Contributor: Allan McRae +# Contributor: John Proctor +# Contributor: Jeramy Rutley + +# ALARM: Kevin Mihelich +# - patch to fix building against readline 6.3 +# - patch to fix running ruby on v5 (#705) + +pkgname=('ruby' 'ruby-docs') +pkgver=2.1.0 +pkgrel=2.1 +arch=('i686' 'x86_64') +url='http://www.ruby-lang.org/en/' +license=('BSD' 'custom') +# disable ruby tk since 1.9.3 it has caused a segfault on require 'tk' +# https://bugs.ruby-lang.org/issues/8000 +# wait for upstream to start supporting tk 8.6 +makedepends=('gdbm' 'openssl' 'libffi' 'doxygen' 'graphviz' 'libyaml') # 'tk' +options=('!emptydirs' '!makeflags' 'staticlibs') +source=("http://cache.ruby-lang.org/pub/ruby/ruby-${pkgver}.tar.bz2" + 'gemrc' + '0001-Fix-installing-gem-from-file-without-dependencies.patch' + 'changeset_r45225.diff' + '0002-Use-only-unsigned-long-for-rb_serial_t.patch') +md5sums=('1546eeb763ac7754365664be763a1e8f' + '6fb8e7a09955e0f64be3158fb4a27e7a' + '61a1507f260866805fc6451c14733b25' + '64839e135447accd2e0568c563e12d23' + 'f6f9c200c5e9afc4d5b21575da4821a2') + +build() { + cd ruby-${pkgver} + + # fixes https://github.com/rubygems/rubygems/issues/760 + patch -Np1 -i ${srcdir}/0001-Fix-installing-gem-from-file-without-dependencies.patch + + # fixes https://bugs.ruby-lang.org/issues/9578 + patch -Np0 -i ../changeset_r45225.diff + + # fixes https://bugs.ruby-lang.org/issues/9507 + [[ $CARCH == 'arm' ]] && patch -Np1 -i ../0002-Use-only-unsigned-long-for-rb_serial_t.patch + + PKG_CONFIG=/usr/bin/pkg-config ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-shared \ + --disable-rpath \ + --with-dbm-type=gdbm_compat + + make +} + +check() { + cd ruby-${pkgver} + + make test +} + +package_ruby() { + pkgdesc='An object-oriented language for quick and easy programming' + depends=('gdbm' 'openssl' 'libffi' 'libyaml') + optdepends=('ruby-docs: Ruby documentation') # 'tk: for Ruby/TK' + provides=('rubygems' 'rake') + conflicts=('rake') + backup=('etc/gemrc') + install='ruby.install' + + cd ruby-${pkgver} + + make DESTDIR="${pkgdir}" install-nodoc + + install -D -m644 ${srcdir}/gemrc "${pkgdir}/etc/gemrc" + + install -D -m644 COPYING "${pkgdir}/usr/share/licenses/ruby/LICENSE" + install -D -m644 BSDL "${pkgdir}/usr/share/licenses/ruby/BSDL" +} + +package_ruby-docs() { + pkgdesc='Documentation files for ruby' + + cd ruby-${pkgver} + + make DESTDIR="${pkgdir}" install-doc install-capi + + install -D -m644 COPYING "${pkgdir}/usr/share/licenses/ruby-docs/LICENSE" + install -D -m644 BSDL "${pkgdir}/usr/share/licenses/ruby-docs/BSDL" +} diff --git a/extra/ruby/changeset_r45225.diff b/extra/ruby/changeset_r45225.diff new file mode 100644 index 000000000..c42add425 --- /dev/null +++ b/extra/ruby/changeset_r45225.diff @@ -0,0 +1,13 @@ +Index: ext/readline/readline.c +=================================================================== +--- ext/readline/readline.c (revision 45224) ++++ ext/readline/readline.c (revision 45225) +@@ -1974,7 +1974,7 @@ + + rl_attempted_completion_function = readline_attempted_completion_function; + #if defined(HAVE_RL_PRE_INPUT_HOOK) +- rl_pre_input_hook = (Function *)readline_pre_input_hook; ++ rl_pre_input_hook = (rl_hook_func_t *)readline_pre_input_hook; + #endif + #ifdef HAVE_RL_CATCH_SIGNALS + rl_catch_signals = 0; diff --git a/extra/ruby/gemrc b/extra/ruby/gemrc new file mode 100644 index 000000000..3d11de1ec --- /dev/null +++ b/extra/ruby/gemrc @@ -0,0 +1,5 @@ +# Read about the gemrc format at http://docs.rubygems.org/read/chapter/11 + +# --user-install is used to install to $HOME/.gem/ by default since we want to separate +# pacman installed gems and gem installed gems +gem: --user-install diff --git a/extra/ruby/ruby.install b/extra/ruby/ruby.install new file mode 100644 index 000000000..ce78e96ec --- /dev/null +++ b/extra/ruby/ruby.install @@ -0,0 +1,22 @@ +#!/bin/sh + +print_gem_default_target() { + echo 'The default location of gem installs is $HOME/.gem/ruby' + echo 'Add the following line to your PATH if you plan to install using gem' + echo '$(ruby -rubygems -e "puts Gem.user_dir")/bin' + echo 'If you want to install to the system wide location, you must either:' + echo 'edit /etc/gemrc or run gem with the --no-user-install flag.' +} + +# arg 1: the new package version +post_install() { + print_gem_default_target +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + if [ "$(vercmp $2 1.9.3_p125-4)" -lt 0 ]; then + print_gem_default_target + fi +}