merge revision(s) 27939,29703,29704,30164:

* ruby.c (ruby_init_loadpath_safe): use real path for non-shared
	  build.
	* configure.in (LIBRUBY_RELATIVE): use rpath token expansion.
	* tool/rbinstall.rb (bin-comm): prepend prolog shell script if
	  necessary.
	* ruby.c (ruby_init_loadpath_safe): relatively called non-shared
	  binary cannot be found in PATH, so use given pathname.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@35755 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2012-05-22 02:09:55 +00:00
parent 2c7e082f47
commit ac3be749d5
5 changed files with 55 additions and 10 deletions

View File

@ -1,3 +1,16 @@
Tue May 22 11:09:52 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ruby.c (ruby_init_loadpath_safe): use real path for non-shared
build.
* configure.in (LIBRUBY_RELATIVE): use rpath token expansion.
* tool/rbinstall.rb (bin-comm): prepend prolog shell script if
necessary.
* ruby.c (ruby_init_loadpath_safe): relatively called non-shared
binary cannot be found in PATH, so use given pathname.
Mon May 21 16:27:24 2012 Akinori MUSHA <knu@iDaemons.org>
* ext/syslog/syslog.c (mSyslog_inspect): Make sure self is a

View File

@ -2107,6 +2107,8 @@ AC_ARG_ENABLE(shared,
AS_HELP_STRING([--enable-shared], [build a shared library for Ruby]),
[enable_shared=$enableval])
LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
libprefix='$(libdir)'
LIBRUBY_RELATIVE=no
if test "$enable_shared" = 'yes'; then
LIBRUBY='$(LIBRUBY_SO)'
LIBRUBYARG='$(LIBRUBYARG_SHARED)'
@ -2122,6 +2124,10 @@ if test "$enable_shared" = 'yes'; then
[linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu], [
LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'
LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
if test "$load_relative" = yes; then
LIBRUBY_RPATHFLAGS="'-Wl,-rpath,\$\${ORIGIN}/../lib'"
LIBRUBY_RELATIVE=yes
fi
],
[freebsd*|dragonfly*], [
SOLIBS='$(LIBS)'
@ -2175,8 +2181,7 @@ if test "$enable_shared" = 'yes'; then
LIBRUBY_LDSHARED='$(CC) -dynamiclib'
if test "$load_relative" = yes; then
libprefix='@executable_path/../lib'
else
libprefix='$(libdir)'
LIBRUBY_RELATIVE=yes
fi
LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-install_name '${libprefix}'/$(LIBRUBY_SO)'
LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(MAJOR).$(MINOR).$(TEENY)'
@ -2194,10 +2199,12 @@ if test "$enable_shared" = 'yes'; then
])
fi
if test "$enable_rpath" = yes; then
LIBRUBY_RPATHFLAGS="${linker_flag}-R ${linker_flag}\$(libdir) -L\$(libdir)"
test -z "$LIBRUBY_RPATHFLAGS" || LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS "
LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS${linker_flag}-R ${linker_flag}${libprefix} -L\$(libdir)"
LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED"
LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC"
fi
AC_SUBST(LIBRUBY_RELATIVE)
LDFLAGS="-L. $LDFLAGS"
AC_SUBST(ARCHFILE)

9
ruby.c
View File

@ -370,9 +370,12 @@ ruby_init_loadpath_safe(int safe_level)
#elif defined(HAVE_DLADDR)
Dl_info dli;
if (dladdr((void *)(VALUE)expand_include_path, &dli)) {
VALUE fname = rb_str_new_cstr(dli.dli_fname);
sopath = rb_file_absolute_path(fname, Qnil);
rb_str_resize(fname, 0);
VALUE rb_realpath_internal(VALUE basedir, VALUE path, int strict);
char fbuf[MAXPATHLEN];
char *f = dln_find_file_r(dli.dli_fname, getenv(PATH_ENV), fbuf, sizeof(fbuf));
VALUE fname = rb_str_new_cstr(f ? f : dli.dli_fname);
rb_str_freeze(fname);
sopath = rb_realpath_internal(Qnil, fname, 1);
}
else {
sopath = rb_str_new(0, 0);

View File

@ -300,6 +300,7 @@ enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
dll = CONFIG["LIBRUBY_SO"]
lib = CONFIG["LIBRUBY"]
arc = CONFIG["LIBRUBY_A"]
load_relative = configure_args.include?("--enable-load-relative")
install?(:local, :arch, :bin, :'bin-arch') do
prepare "binary commands", bindir
@ -371,6 +372,23 @@ install?(:doc, :capi) do
install_recursive "doc/capi", capidir, :mode => $data_mode
end
if load_relative
PROLOG_SCRIPT = <<EOS
#!/bin/sh\n# -*- ruby -*-
bindir=`#{CONFIG["CHDIR"]} "${0%/*}" 2>/dev/null; pwd`
EOS
if CONFIG["LIBRUBY_RELATIVE"] != 'yes' and libpathenv = CONFIG["LIBPATHENV"]
pathsep = File::PATH_SEPARATOR
PROLOG_SCRIPT << <<EOS
prefix="${bindir%/bin}"
export #{libpathenv}="$prefix/lib${#{libpathenv}#{pathsep}+#{pathsep}$#{libpathenv}}"
EOS
end
PROLOG_SCRIPT << %Q[exec "$bindir/#{ruby_install_name}" -x "$0" "$@"\n]
else
PROLOG_SCRIPT = nil
end
install?(:local, :comm, :bin, :'bin-comm') do
prepare "command scripts", bindir
@ -416,7 +434,11 @@ install?(:local, :comm, :bin, :'bin-comm') do
shebang = f.gets
body = f.read
end
shebang.sub!(/^\#!.*?ruby\b/) {"#!" + ruby_shebang}
if PROLOG_SCRIPT
shebang.sub!(/\A(\#!.*?ruby\b)?/) {PROLOG_SCRIPT + ($1 || "#!ruby\n")}
else
shebang.sub!(/\A\#!.*?ruby\b/) {"#!" + ruby_shebang}
end
shebang.sub!(/\r$/, '')
body.gsub!(/\r$/, '')

View File

@ -1,13 +1,13 @@
#define RUBY_VERSION "1.9.2"
#define RUBY_PATCHLEVEL 322
#define RUBY_PATCHLEVEL 323
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 9
#define RUBY_VERSION_TEENY 1
#define RUBY_RELEASE_YEAR 2012
#define RUBY_RELEASE_MONTH 5
#define RUBY_RELEASE_DAY 21
#define RUBY_RELEASE_DATE "2012-05-21"
#define RUBY_RELEASE_DAY 22
#define RUBY_RELEASE_DATE "2012-05-22"
#include "ruby/version.h"