From: Elan Ruusamäe Date: Thu, 25 Apr 2013 22:04:20 +0000 (+0300) Subject: add patch from fedora to build ruby bindings on ruby19 X-Git-Tag: auto/th/subversion-1.7.9-2~2 X-Git-Url: https://git.pld-linux.org/?p=packages%2Fsubversion.git;a=commitdiff_plain;h=96b4c0b04d7604d339e645bb4e5868080c5a3943 add patch from fedora to build ruby bindings on ruby19 --- diff --git a/subversion-1.7.2-ruby19.patch b/subversion-1.7.2-ruby19.patch new file mode 100644 index 0000000..794c663 --- /dev/null +++ b/subversion-1.7.2-ruby19.patch @@ -0,0 +1,365 @@ +Date: Tue, 20 Dec 2011 21:08:00 -0800 +From: Vincent Batts +Subject: Re: [PATCH] enabling ruby in the subversion build +Message-ID: <20111221050800.GA17350@slackware.com> + +--- subversion-1.7.2/configure.ac.ruby19 ++++ subversion-1.7.2/configure.ac +@@ -1130,13 +1130,6 @@ if test "$RUBY" != "none"; then + + AC_SUBST(RUBY_MAJOR) + AC_SUBST(RUBY_MINOR) +- if test ! \( "$RUBY_MAJOR" -eq "1" -a "$RUBY_MINOR" -eq "8" \); then +- # Disallow Ruby 1.9 or later until the binding tests get fixed +- # to run with those versions. +- RUBY="none" +- AC_MSG_WARN([The detected Ruby is too new for Subversion to use]) +- AC_MSG_WARN([Only 1.8.x releases are supported at this time]) +- fi + else + AC_MSG_RESULT([no]) + RUBY="none" +--- subversion-1.7.2/Makefile.in.ruby19 ++++ subversion-1.7.2/Makefile.in +@@ -318,7 +318,7 @@ INSTALL_EXTRA_SWIG_RB=\ + $(INSTALL_DATA) "$$i" $(DESTDIR)$(SWIG_RB_SITE_LIB_DIR)/svn; \ + done + +-APXS = @APXS@ ++APXS = @APXS@ + + PYTHON = @PYTHON@ + PERL = @PERL@ +@@ -818,9 +818,14 @@ swig-rb: autogen-swig-rb + + check-swig-rb: swig-rb svnserve + cd $(SWIG_RB_DIR); \ +- $(RUBY) -I $(SWIG_RB_SRC_DIR) \ +- $(SWIG_RB_SRC_DIR)/test/run-test.rb \ +- --verbose=$(SWIG_RB_TEST_VERBOSE) ++ if [ "$(RUBY_MAJOR)" -eq 1 -a "$(RUBY_MINOR)" -lt 9 ] ; then \ ++ $(RUBY) -I $(SWIG_RB_SRC_DIR) \ ++ $(SWIG_RB_SRC_DIR)/test/run-test.rb \ ++ --verbose=$(SWIG_RB_TEST_VERBOSE); \ ++ else \ ++ $(RUBY) -I $(SWIG_RB_SRC_DIR) \ ++ $(SWIG_RB_SRC_DIR)/test/run-test.rb; \ ++ fi + + EXTRACLEAN_SWIG_RB=rm -f $(SWIG_RB_SRC_DIR)/svn_*.c $(SWIG_RB_SRC_DIR)/core.c + +--- subversion-1.7.2/subversion/bindings/swig/ruby/svn/info.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/svn/info.rb +@@ -229,7 +229,9 @@ module Svn + + def parse_diff_unified(entry) + in_content = false +- entry.body.each do |line| ++ # accomodation for ruby 1.9 and 1.8 ++ each_meth = entry.body.respond_to?(:each_line) ? :each_line : :each ++ entry.body.send(each_meth) do |line| + case line + when /^@@/ + in_content = true +--- subversion-1.7.2/subversion/bindings/swig/ruby/svn/util.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/svn/util.rb +@@ -36,7 +36,7 @@ module Svn + module Util #:nodoc: + module_function + def to_ruby_class_name(name) +- name.split("_").collect do |x| ++ name.to_s.split("_").collect do |x| + "#{x[0,1].upcase}#{x[1..-1].downcase}" + end.join("") + end +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/my-assertions.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/my-assertions.rb +@@ -24,20 +24,33 @@ module Test + module Unit + module Assertions + ++ # make an intermediary assertion block handler ++ def _my_assert_block(&block) ++ if RUBY_VERSION > '1.9' ++ assert_block do ++ yield ++ end ++ else ++ _wrap_assertion do ++ yield ++ end ++ end ++ end ++ + def assert_true(boolean, message=nil) +- _wrap_assertion do ++ _my_assert_block do + assert_equal(true, boolean, message) + end + end + + def assert_false(boolean, message=nil) +- _wrap_assertion do ++ _my_assert_block do + assert_equal(false, boolean, message) + end + end + + def assert_nested_sorted_array(expected, actual, message=nil) +- _wrap_assertion do ++ _my_assert_block do + assert_equal(expected.collect {|elem| elem.sort}, + actual.collect {|elem| elem.sort}, + message) +@@ -45,7 +58,7 @@ module Test + end + + def assert_equal_log_entries(expected, actual, message=nil) +- _wrap_assertion do ++ _my_assert_block do + actual = actual.collect do |entry| + changed_paths = entry.changed_paths + changed_paths.each_key do |path| +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_client.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_client.rb +@@ -2203,7 +2203,11 @@ class SvnClientTest < Test::Unit::TestCa + + make_context(log) do |ctx| + items = nil +- ctx.set_log_msg_func do |items| ++ ctx.set_log_msg_func do |l_items| ++ # ruby 1.8 magically carried the assignment of 'items' back from this Proc block, ++ # but in 1.9, we need to have names that don't conflict, and set the outside 'items'. ++ # This works in 1.8 as well ++ items = l_items + [true, log] + end + +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_core.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_core.rb +@@ -1,3 +1,4 @@ ++# encoding: UTF-8 + # ==================================================================== + # Licensed to the Apache Software Foundation (ASF) under one + # or more contributor license agreements. See the NOTICE file +@@ -52,7 +53,13 @@ class SvnCoreTest < Test::Unit::TestCase + now = Time.now.gmtime + str = now.strftime("%Y-%m-%dT%H:%M:%S.") + "#{now.usec}Z" + +- assert_equal(now, Time.from_svn_format(str)) ++ if RUBY_VERSION > '1.9' ++ # ruby 1.9 Time comparison gets into the nano-seconds, that strftime ++ # shaves off. So we can compare epoch time instead ++ assert_equal(now.to_i, Time.from_svn_format(str).gmtime.to_i) ++ else ++ assert_equal(now, Time.from_svn_format(str).gmtime) ++ end + + apr_time = now.to_i * 1000000 + now.usec + assert_equal(apr_time, now.to_apr_time) +@@ -244,7 +251,11 @@ class SvnCoreTest < Test::Unit::TestCase + config_infos << [section, name, value] + end + assert_equal(infos.sort, config_infos.sort) +- assert_equal(infos.sort, config.collect {|args| args}.sort) ++ if RUBY_VERSION > '1.9' ++ assert_equal(infos.sort, config.collect {|sect,name,val| [sect,name,val]}.sort) ++ else ++ assert_equal(infos.sort, config.collect {|args| args}.sort) ++ end + end + + def test_config_find_group +@@ -532,7 +543,13 @@ EOD + date_str = now.strftime("%Y-%m-%dT%H:%M:%S") + date_str << ".#{now.usec}Z" + info.date = date_str +- assert_equal(now, info.date) ++ if RUBY_VERSION > '1.9' ++ # ruby 1.9 Time comparison gets into the nano-seconds, that strftime ++ # shaves off. So we can compare epoch time instead ++ assert_equal(now.to_i, info.date.gmtime.to_i) ++ else ++ assert_equal(now, info.date.gmtime) ++ end + end + + def test_svn_prop +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_delta.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_delta.rb +@@ -17,9 +17,10 @@ + # under the License. + # ==================================================================== + ++require "my-assertions" + require "util" + require "stringio" +-require 'md5' ++require 'digest/md5' + require 'tempfile' + + require "svn/info" +@@ -46,8 +47,8 @@ class SvnDeltaTest < Test::Unit::TestCas + target = StringIO.new(t) + stream = Svn::Delta::TextDeltaStream.new(source, target) + assert_nil(stream.md5_digest) +- _wrap_assertion do +- stream.each do |window| ++ _my_assert_block do ++ ret = stream.each do |window| + window.ops.each do |op| + op_size = op.offset + op.length + case op.action_code +@@ -62,8 +63,9 @@ class SvnDeltaTest < Test::Unit::TestCas + end + end + end ++ true if RUBY_VERSION > '1.9' # this block returns nil in > ruby '1.9' + end +- assert_equal(MD5.new(t).hexdigest, stream.md5_digest) ++ assert_equal(Digest::MD5.hexdigest(t), stream.md5_digest) + end + + def test_txdelta_window_compose +@@ -81,7 +83,7 @@ class SvnDeltaTest < Test::Unit::TestCas + end + end + +- _wrap_assertion do ++ assert_block do + composed_window.ops.each do |op| + op_size = op.offset + op.length + case op.action_code +@@ -169,6 +171,7 @@ + stream = Svn::Delta::TextDeltaStream.new(source, target) + + output = StringIO.new("") ++ output.set_encoding Encoding::ASCII_8BIT if output.respond_to? :set_encoding + handler = Svn::Delta.svndiff_handler(output) + + Svn::Delta.send(target_text, handler) +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_fs.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_fs.rb +@@ -20,7 +20,7 @@ + require "my-assertions" + require "util" + require "time" +-require "md5" ++require "digest/md5" + + require "svn/core" + require "svn/fs" +@@ -49,14 +49,15 @@ class SvnFsTest < Test::Unit::TestCase + + assert(!File.exist?(path)) + fs = nil +- callback = Proc.new do |fs| ++ callback = Proc.new do |t_fs| + assert(File.exist?(path)) + assert_equal(fs_type, Svn::Fs.type(path)) +- fs.set_warning_func do |err| ++ t_fs.set_warning_func do |err| + p err + abort + end +- assert_equal(path, fs.path) ++ assert_equal(path, t_fs.path) ++ fs = t_fs + end + yield(:create, [path, config], callback) + +@@ -162,7 +163,7 @@ class SvnFsTest < Test::Unit::TestCase + + assert_equal(src, @fs.root.file_contents(path_in_repos){|f| f.read}) + assert_equal(src.length, @fs.root.file_length(path_in_repos)) +- assert_equal(MD5.new(src).hexdigest, ++ assert_equal(Digest::MD5.hexdigest(src), + @fs.root.file_md5_checksum(path_in_repos)) + + assert_equal([path_in_repos], @fs.root.paths_changed.keys) +@@ -364,7 +365,7 @@ class SvnFsTest < Test::Unit::TestCase + + File.open(path, "w") {|f| f.print(modified)} + @fs.transaction do |txn| +- checksum = MD5.new(normalize_line_break(result)).hexdigest ++ checksum = Digest::MD5.hexdigest(normalize_line_break(result)) + stream = txn.root.apply_text(path_in_repos, checksum) + stream.write(normalize_line_break(result)) + stream.close +@@ -392,8 +393,8 @@ class SvnFsTest < Test::Unit::TestCase + + File.open(path, "w") {|f| f.print(modified)} + @fs.transaction do |txn| +- base_checksum = MD5.new(normalize_line_break(src)).hexdigest +- checksum = MD5.new(normalize_line_break(result)).hexdigest ++ base_checksum = Digest::MD5.hexdigest(normalize_line_break(src)) ++ checksum = Digest::MD5.hexdigest(normalize_line_break(result)) + handler = txn.root.apply_textdelta(path_in_repos, + base_checksum, checksum) + assert_raises(Svn::Error::ChecksumMismatch) do +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_repos.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_repos.rb +@@ -98,11 +98,12 @@ class SvnReposTest < Test::Unit::TestCas + fs_type = Svn::Fs::TYPE_FSFS + fs_config = {Svn::Fs::CONFIG_FS_TYPE => fs_type} + repos = nil +- Svn::Repos.create(tmp_repos_path, {}, fs_config) do |repos| ++ Svn::Repos.create(tmp_repos_path, {}, fs_config) do |t_repos| + assert(File.exist?(tmp_repos_path)) +- fs_type_path = File.join(repos.fs.path, Svn::Fs::CONFIG_FS_TYPE) ++ fs_type_path = File.join(t_repos.fs.path, Svn::Fs::CONFIG_FS_TYPE) + assert_equal(fs_type, File.open(fs_type_path) {|f| f.read.chop}) +- repos.fs.set_warning_func(&warning_func) ++ t_repos.fs.set_warning_func(&warning_func) ++ repos = t_repos + end + + assert(repos.closed?) +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb +@@ -179,7 +179,7 @@ module Test + apply_priority + !@tests.empty? + end +- end ++ end if RUBY_VERSION < '1.9.3' + + class AutoRunner + alias_method :original_options, :options +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext.rb +@@ -17,7 +17,7 @@ + # under the License. + # ==================================================================== + +-require "test-unit-ext/always-show-result" ++require "test-unit-ext/always-show-result" if RUBY_VERSION < '1.9.3' + require "test-unit-ext/priority" +-require "test-unit-ext/backtrace-filter" +-require "test-unit-ext/long-display-for-emacs" ++require "test-unit-ext/backtrace-filter" if RUBY_VERSION < '1.9.3' ++require "test-unit-ext/long-display-for-emacs" if RUBY_VERSION < '1.9.3' +--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_wc.rb.ruby19 ++++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_wc.rb +@@ -530,7 +530,7 @@ EOE + ctx.ci(lf_path) + + Svn::Wc::AdmAccess.open(nil, @wc_path, true, 5) do |access| +- _wrap_assertion do ++ _my_assert_block do + File.open(src_path, "wb") {|f| f.print(source)} + args = [method_name, src_path, crlf_path, Svn::Wc::TRANSLATE_FROM_NF] + result = yield(access.send(*args), source) +@@ -1084,7 +1084,11 @@ EOE + assert_not_nil context + assert_kind_of Svn::Wc::Context, context + end +- assert_nil result; ++ if RUBY_VERSION > '1.9' ++ assert_equal(result,true) ++ else ++ assert_nil result ++ end + end + end + diff --git a/subversion.spec b/subversion.spec index 4f26011..cdc10ba 100644 --- a/subversion.spec +++ b/subversion.spec @@ -8,7 +8,7 @@ %bcond_without python # build without Python bindings (broken) %bcond_without csvn # build Python csvn bindings %bcond_without perl # build without Perl bindings -%bcond_with ruby # build with Ruby bindings (only 1.8.x is supported) +%bcond_without ruby # build without Ruby bindings %bcond_without apache # build without Apache support (webdav, etc) %bcond_without javahl # build without javahl support (Java high-level bindings) %bcond_without tests # don't perform "make check" @@ -72,6 +72,7 @@ Patch0: %{name}-home_etc.patch Patch1: %{name}-DESTDIR.patch Patch2: %{name}-ruby-datadir-path.patch Patch3: %{name}-tests.patch +Patch4: subversion-1.7.2-ruby19.patch URL: http://subversion.apache.org/ %{?with_apache:BuildRequires: apache-devel >= 2.2.0-8} BuildRequires: apr-devel >= 1:1.0.0 @@ -117,7 +118,6 @@ BuildRequires: python-devel >= 1:2.4 BuildRequires: swig-python >= 1.3.24 %endif %if %{with ruby} -BuildRequires: ruby-devel < 1:1.9 BuildRequires: ruby-devel >= 1:1.8.2 BuildRequires: ruby-rubygems BuildRequires: swig-ruby >= 1.3.24 @@ -446,6 +446,7 @@ uwierzytelniać się przy użyciu Portfela KDE. %patch1 -p1 %patch2 -p0 %patch3 -p1 +%patch4 -p1 sed -i -e 's#serf_prefix/lib#serf_prefix/%{_lib}#g' build/ac-macros/serf.m4 @@ -586,10 +587,8 @@ install -d $RPM_BUILD_ROOT/etc/{rc.d/init.d,sysconfig,bash_completion.d} \ install-swig-rb install-swig-rb-doc \ # not our package -%{__rm} -r $RPM_BUILD_ROOT%{ruby_ridir}/Kernel %{__rm} -r $RPM_BUILD_ROOT%{ruby_ridir}/OptionParser %{__rm} -r $RPM_BUILD_ROOT%{ruby_ridir}/Time -%{__rm} -r $RPM_BUILD_ROOT%{ruby_ridir}/Uconv %{__rm} $RPM_BUILD_ROOT%{ruby_ridir}/cache.ri %{__rm} $RPM_BUILD_ROOT%{ruby_ridir}/created.rid %endif