mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ruby.c (ruby_init_loadpath_safe): mark initial load paths.
* gem_prelude.rb (push_all_highest_version_gems_on_load_path): search insertion position by initial load path mark. * lib/rubygems.rb (Gem.load_path_insert_index): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
614619031b
commit
04e68d0107
5 changed files with 17 additions and 21 deletions
|
@ -1,3 +1,12 @@
|
|||
Sat Mar 13 00:11:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* ruby.c (ruby_init_loadpath_safe): mark initial load paths.
|
||||
|
||||
* gem_prelude.rb (push_all_highest_version_gems_on_load_path):
|
||||
search insertion position by initial load path mark.
|
||||
|
||||
* lib/rubygems.rb (Gem.load_path_insert_index): ditto.
|
||||
|
||||
Fri Mar 12 21:34:00 2010 Kenta Murata <mrkn@mrkn.jp>
|
||||
|
||||
* NEWS: emoji encodings.
|
||||
|
|
|
@ -267,7 +267,7 @@ if defined?(Gem) then
|
|||
require_paths.first.instance_variable_set(:@gem_prelude_index, true)
|
||||
end
|
||||
# gem directories must come after -I and ENV['RUBYLIB']
|
||||
$:[$:.index(ConfigMap[:sitelibdir]),0] = require_paths
|
||||
$:[$:.index{|e|e.instance_variable_defined?(:@gem_prelude_index)}||-1,0] = require_paths
|
||||
end
|
||||
|
||||
def const_missing(constant)
|
||||
|
|
|
@ -254,8 +254,6 @@ module Gem
|
|||
File.join spec.full_gem_path, path
|
||||
end
|
||||
|
||||
sitelibdir = ConfigMap[:sitelibdir]
|
||||
|
||||
# gem directories must come after -I and ENV['RUBYLIB']
|
||||
insert_index = load_path_insert_index
|
||||
|
||||
|
@ -570,23 +568,9 @@ module Gem
|
|||
|
||||
##
|
||||
# The index to insert activated gem paths into the $LOAD_PATH.
|
||||
#
|
||||
# Defaults to the site lib directory unless gem_prelude.rb has loaded paths,
|
||||
# then it inserts the activated gem's paths before the gem_prelude.rb paths
|
||||
# so you can override the gem_prelude.rb default $LOAD_PATH paths.
|
||||
|
||||
def self.load_path_insert_index
|
||||
index = $LOAD_PATH.index ConfigMap[:sitelibdir]
|
||||
|
||||
$LOAD_PATH.each_with_index do |path, i|
|
||||
if path.instance_variables.include?(:@gem_prelude_index) or
|
||||
path.instance_variables.include?('@gem_prelude_index') then
|
||||
index = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
index
|
||||
$LOAD_PATH.index {|path| path.instance_variable_defined?(:@gem_prelude_index)}
|
||||
end
|
||||
|
||||
##
|
||||
|
|
7
ruby.c
7
ruby.c
|
@ -339,6 +339,7 @@ void
|
|||
ruby_init_loadpath_safe(int safe_level)
|
||||
{
|
||||
VALUE load_path;
|
||||
ID id_initial_load_path_mark;
|
||||
extern const char ruby_initial_load_paths[];
|
||||
const char *paths = ruby_initial_load_paths;
|
||||
#if defined LOAD_RELATIVE
|
||||
|
@ -432,16 +433,18 @@ ruby_init_loadpath_safe(int safe_level)
|
|||
#define RUBY_RELATIVE(path, len) rubylib_mangled_path(path, len)
|
||||
#define PREFIX_PATH() rubylib_mangled_path(RUBY_LIB_PREFIX, sizeof(RUBY_LIB_PREFIX)-1)
|
||||
#endif
|
||||
#define incpush(path) rb_ary_push(load_path, (path))
|
||||
load_path = GET_VM()->load_path;
|
||||
|
||||
if (safe_level == 0) {
|
||||
ruby_push_include(getenv("RUBYLIB"), identical_path);
|
||||
}
|
||||
|
||||
id_initial_load_path_mark = rb_intern_const("@gem_prelude_index");
|
||||
while (*paths) {
|
||||
size_t len = strlen(paths);
|
||||
incpush(RUBY_RELATIVE(paths, len));
|
||||
VALUE path = RUBY_RELATIVE(paths, len);
|
||||
rb_ivar_set(path, id_initial_load_path_mark, path);
|
||||
rb_ary_push(load_path, path);
|
||||
paths += len + 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ class Prelude
|
|||
key = $1
|
||||
unless @mkconf
|
||||
require './rbconfig'
|
||||
@mkconf = RbConfig::MAKEFILE_CONFIG.merge('rubylibprefix'=>'#{TMP_RUBY_PREFIX}')
|
||||
@mkconf = RbConfig::MAKEFILE_CONFIG.merge('prefix'=>'#{TMP_RUBY_PREFIX}')
|
||||
end
|
||||
if RbConfig::MAKEFILE_CONFIG.has_key? key
|
||||
val = RbConfig.expand("$(#{key})", @mkconf)
|
||||
|
|
Loading…
Reference in a new issue