Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37403320
en ru br
Репозитории ALT
S:3.1.2-alt2.1
5.1: 1.9.1-alt1.r26040.1
4.1: 1.8.7-alt0.M41.5
4.0: 1.8.6-alt2.M40.2
3.0: 1.8.2-alt7
www.altlinux.org/Changes

Группа :: Разработка/Ruby
Пакет: ruby

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: use_system_dirs.patch
Скачать


commit 98b2cea9e41adf4af71e171e0572979aaabefa2f
Author: Pavel Skrylev <majioa@altlinux.org>
Date:   Mon Aug 15 20:57:56 2022 +0300
    feat: configure path to use system folders
diff --git a/configure.ac b/configure.ac
index 5a6b074f8a..2ab04193e7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3367,10 +3367,35 @@ AS_IF([test ${multiarch+set}], [
    MJIT_HEADER_INSTALL_DIR=include/'${RUBY_VERSION_NAME}/${arch}'
 ])
 
-archlibdir='${libdir}/${arch}'
-sitearchlibdir='${libdir}/${sitearch}'
-archincludedir='${includedir}/${arch}'
-sitearchincludedir='${includedir}/${sitearch}'
+AC_ARG_WITH(sitearchlibdir,
+	    AS_HELP_STRING([--with-sitearchlibdir=DIR],
+			   [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]]]),
+            [sitearchlibdir=$withval],
+            [sitearchlibdir=${multiarch+'${rubysitearchprefix}/site_ruby'}${multiarch-'${libdir}/${sitearch}'}])
+
+AC_ARG_WITH(archlibdir,
+	    AS_HELP_STRING([--with-archlibdir=DIR],
+			   [architecture dependent libraries in DIR [[LIBDIR/ARCH]]]),
+            [archlibdir=$withval],
+            [archlibdir='${libdir}/${arch}'])
+
+AC_ARG_WITH(archincludedir,
+	    AS_HELP_STRING([--with-archincludedir=DIR],
+			   [architecture dependent includes in DIR [[INCLUDEDIR/ARCH]]]),
+            [archincludedir=$withval],
+            [archincludedir='${includedir}/${arch}'])
+
+AC_ARG_WITH(sitearchincludedir,
+	    AS_HELP_STRING([--with-sitearchincludedir=DIR],
+			   [site architecture dependent includes in DIR [[INCLUDEDIR/SITEARCH]]]),
+            [sitearchincludedir=$withval],
+            [sitearchincludedir='${includedir}/${sitearch}'])
+
+use_system_dirs=no
+AC_ARG_ENABLE(use-system-dirs,
+            AS_HELP_STRING([--enable-use-system-dirs], [use system folders for doc, ri, cache and vendor data]),
+            [use_system_dirs=$enableval], [use_system_dirs=no])
+AC_SUBST(use_system_dirs)dnl
 
 AC_ARG_WITH(soname,
 	AS_HELP_STRING([--with-soname=SONAME], [base name of shared library]),
@@ -3978,14 +4001,18 @@ AS_CASE(["$target_os"],
     ])
 
 rubylibdir='${rubylibprefix}/${ruby_version}'
-rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'}
 
-rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
+AC_ARG_WITH(rubyarchdir,
+           AS_HELP_STRING([--with-rubyarchdir=DIR],
+                          [folder for architecture dependent ruby libraries [[RUBYLIBDIR/ARCH]]]),
+           [rubyarchdir="$withval"],
+           [rubyarchdir=${multiarch+'${rubyarchprefix}'}${multiarch-'${rubylibdir}/${arch}'}])
+
 AC_ARG_WITH(rubyarchprefix,
 	    AS_HELP_STRING([--with-rubyarchprefix=DIR],
 			   [prefix for architecture dependent ruby libraries [[RUBYLIBPREFIX/ARCH]]]),
-	    [rubyarchprefix="$withval"])
-AC_SUBST(rubyarchprefix)
+           [rubyarchprefix="$withval"],
+           [rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}])
 
 rubysitearchprefix=${multiarch+'${sitearchlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${sitearch}'}
 AC_ARG_WITH(rubysitearchprefix,
@@ -4151,6 +4178,11 @@ AC_ARG_WITH(vendorarchhdrdir,
 	    [vendorarchhdrdir=$withval],
 	    [vendorarchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/vendor_ruby'}${multiarch-'${vendorhdrdir}/${sitearch}'}])
 
+AC_ARG_WITH(cachedir,
+	    AS_HELP_STRING([--with-cachedir=DIR], [specify ruby cache dir]),
+	    [cachedir=$withval])
+AC_SUBST(cachedir)dnl
+
 AC_SUBST(rubyhdrdir)dnl
 AC_SUBST(sitehdrdir)dnl
 AC_SUBST(vendorhdrdir)dnl
@@ -4334,6 +4365,8 @@ config_summary "Installation prefix" "$prefix"
 config_summary "exec prefix"         "$exec_prefix"
 config_summary "arch"                "$arch"
 config_summary "site arch"           "$sitearch"
+config_summary "arch lib dir"        "$archlibdir"
+config_summary "ruby arch prefix"    "$rubyarchprefix"
 config_summary "RUBY_BASE_NAME"      "$RUBY_BASE_NAME"
 config_summary "enable shared"       "$enable_shared"
 config_summary "ruby lib prefix"     "$rubylibprefix"
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
index 39b69ddb1c..d9f7fab1e8 100644
--- a/lib/rubygems/defaults.rb
+++ b/lib/rubygems/defaults.rb
@@ -20,13 +20,17 @@ def self.default_sources
   # specified in the environment
 
   def self.default_spec_cache_dir
-    default_spec_cache_dir = File.join Gem.user_home, '.gem', 'specs'
+    if Gem.configuration.use_system_dirs? && RbConfig::CONFIG['cachedir']
+      File.join(RbConfig::CONFIG['cachedir'], 'gemie')
+    else
+      default_spec_cache_dir = File.join Gem.user_home, '.gem', 'specs'
 
-    unless File.exist?(default_spec_cache_dir)
-      default_spec_cache_dir = File.join Gem.data_home, 'gem', 'specs'
-    end
+      unless File.exist?(default_spec_cache_dir)
+        default_spec_cache_dir = File.join Gem.data_home, 'gem', 'specs'
+      end
 
-    default_spec_cache_dir
+      default_spec_cache_dir
+    end
   end
 
   ##
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
index 0d72cee51d..cb8ee063b4 100644
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -1524,7 +1524,12 @@ def authors
   # a full path.
   def bin_dir
-    @bin_dir ||= File.join gem_dir, bindir
+    @bin_dir ||=
+      if default_gem?
+        Gem.default_bindir
+      else
+        File.join(gem_dir, bindir)
+      end
   end
   ##
@@ -1786,10 +1786,19 @@ def development_dependencies
   #   spec.doc_dir 'ri' # => "/path/to/gem_repo/doc/a-1/ri"
 
   def doc_dir(type = nil)
-    @doc_dir ||= File.join base_dir, 'doc', full_name
+    @doc_dir ||=
+      if Gem.configuration.use_system_dirs? && RbConfig::CONFIG['docdir']
+        File.join RbConfig::CONFIG['docdir'], full_name
+      else
+        File.join base_dir, 'doc', full_name
+      end
 
     if type
-      File.join @doc_dir, type
+      if Gem.configuration.use_system_dirs? && type == 'ri'
+        ri_dir
+      else
+        File.join @doc_dir, type
+      end
     else
       @doc_dir
     end
@@ -2273,7 +2282,12 @@ def respond_to_missing?(m, include_private = false) # :nodoc:
   # Returns the full path to this spec's ri directory.
 
   def ri_dir
-    @ri_dir ||= File.join base_dir, 'ri', full_name
+    @ri_dir ||=
+      if Gem.configuration.use_system_dirs? && RbConfig::CONFIG['ridir']
+        File.join RbConfig::CONFIG['ridir'], full_name
+      else
+        File.join base_dir, 'ri', full_name
+      end
   end
 
   ##
--- a/lib/rubygems/config_file.rb	2022-08-15 20:14:46.821000000 +0000
+++ b/lib/rubygems/config_file.rb	2022-08-15 22:07:04.724000000 +0000
@@ -231,6 +231,13 @@ class Gem::ConfigFile
   end
 
   ##
+  # Has the ruby build single instantiated, defaulting to false/nil
+
+  def use_system_dirs?
+    @use_system_dirs ||= RbConfig::CONFIG["use_system_dirs"] == 'yes'
+  end
+
+  ##
   # Hash of RubyGems.org and alternate API keys
 
   def api_keys
--- a/template/ruby.pc.in	2022-08-15 22:32:35.948000000 +0000
+++ b/template/ruby.pc.in	2022-08-16 10:29:49.008000000 +0000
@@ -23,6 +23,7 @@ sitearchincludedir=@sitearchincludedir@
 ruby=${bindir}/${RUBY_INSTALL_NAME}@EXEEXT@
 rubylibprefix=@rubylibprefix@
 rubyarchprefix=@rubyarchprefix@
+use_system_dirs=@use_system_dirs@
 rubysitearchprefix=@rubysitearchprefix@
 rubylibdir=@rubylibdir@
 vendordir=@vendordir@
--- a/tool/rbinstall.rb
+++ b/tool/rbinstall.rb
@@ -396,7 +396,6 @@ install?(:local, :arch, :lib, :'lib-arch
   end
 
   prepare "arch files", archlibdir
-  install "rbconfig.rb", archlibdir, :mode => $data_mode
   if CONFIG["ARCHFILE"]
     for file in CONFIG["ARCHFILE"].split
       install file, archlibdir, :mode => $data_mode
@@ -436,6 +435,7 @@ install?(:ext, :arch, :hdr, :'arch-hdr',
 end
 install?(:ext, :comm, :'ext-comm') do
   prepare "extension scripts", rubylibdir
+  install "rbconfig.rb", rubylibdir, :mode => $data_mode
   install_recursive("#{$extout}/common", rubylibdir, :mode => $data_mode)
   prepare "extension scripts", sitelibdir
   prepare "extension scripts", vendorlibdir
--- a/lib/rdoc/ri/paths.rb	2022-08-22 18:34:31.811000000 +0000
+++ b/lib/rdoc/ri/paths.rb	2022-08-22 18:35:05.594000000 +0000
@@ -59,7 +59,7 @@ module RDoc::RI::Paths
 
     spec = Gem::Specification.find_by_name name, req
 
-    File.join spec.doc_dir, 'ri'
+    spec.doc_dir('ri')
   end
 
   ##
@@ -73,7 +73,7 @@ module RDoc::RI::Paths
     ri_paths = {}
 
     all = Gem::Specification.map do |spec|
-      [File.join(spec.doc_dir, 'ri'), spec.name, spec.version]
+      [spec.doc_dir('ri'), spec.name, spec.version]
     end
 
     if filter == :all then
--- a/lib/rubygems/installer.rb	2022-04-12 11:11:15.000000000 +0000
+++ b/lib/rubygems/installer.rb	2022-09-22 20:42:18.985000000 +0000
@@ -780,11 +780,18 @@ if str
   end
 end
 
-if Gem.respond_to?(:activate_bin_path)
-load Gem.activate_bin_path('#{spec.name}', '#{bin_file_name}', version)
+path =
+  if Gem.respond_to?(:activate_bin_path)
+    Gem.activate_bin_path('#{spec.name}', '#{bin_file_name}', version)
+  else
+    gem #{spec.name.dump}, version
+    Gem.bin_path(#{spec.name.dump}, #{bin_file_name.dump}, version)
+  end
+
+if __FILE__ == path
+#{IO.read('libexec/' + bin_file_name)}
 else
-gem #{spec.name.dump}, version
-load Gem.bin_path(#{spec.name.dump}, #{bin_file_name.dump}, version)
+  load(path)
 end
 TEXT
   end
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin