ruby.c: fix for multiarch library
* ruby.c (ruby_init_loadpath_safe): try two levels upper for stripping libdir name. [Bug #7874] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
739c8ffcee
commit
74016f1842
@ -1,4 +1,7 @@
|
|||||||
Thu Feb 21 12:42:19 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Thu Feb 21 12:45:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* ruby.c (ruby_init_loadpath_safe): try two levels upper for stripping
|
||||||
|
libdir name. [Bug #7874]
|
||||||
|
|
||||||
* configure.in (libdir_basename): expand with multiarch in configure,
|
* configure.in (libdir_basename): expand with multiarch in configure,
|
||||||
not to defer the expansion till ruby.pc.in and mkmf.rb. [Bug #7874]
|
not to defer the expansion till ruby.pc.in and mkmf.rb. [Bug #7874]
|
||||||
|
@ -2670,6 +2670,9 @@ AS_CASE(["$target_os"],
|
|||||||
AC_ARG_ENABLE(multiarch,
|
AC_ARG_ENABLE(multiarch,
|
||||||
AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]),
|
AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]),
|
||||||
[multiarch=], [unset multiarch])
|
[multiarch=], [unset multiarch])
|
||||||
|
if test ${multiarch+set}; then
|
||||||
|
AC_DEFINE(ENABLE_MULTIARCH)
|
||||||
|
fi
|
||||||
|
|
||||||
archlibdir='${libdir}/${arch}'
|
archlibdir='${libdir}/${arch}'
|
||||||
sitearchlibdir='${libdir}/${sitearch}'
|
sitearchlibdir='${libdir}/${sitearch}'
|
||||||
|
25
ruby.c
25
ruby.c
@ -464,15 +464,30 @@ ruby_init_loadpath_safe(int safe_level)
|
|||||||
#endif
|
#endif
|
||||||
const ptrdiff_t bindir_len = (ptrdiff_t)sizeof(bindir) - 1;
|
const ptrdiff_t bindir_len = (ptrdiff_t)sizeof(bindir) - 1;
|
||||||
const ptrdiff_t libdir_len = (ptrdiff_t)sizeof(libdir) - 1;
|
const ptrdiff_t libdir_len = (ptrdiff_t)sizeof(libdir) - 1;
|
||||||
*p = 0;
|
|
||||||
if (p - libpath >= bindir_len && !STRCASECMP(p - bindir_len, bindir)) {
|
#ifdef ENABLE_MULTIARCH
|
||||||
|
char *p2 = NULL;
|
||||||
|
|
||||||
|
multiarch:
|
||||||
|
#endif
|
||||||
|
if (p - libpath >= bindir_len && !STRNCASECMP(p - bindir_len, bindir, bindir_len)) {
|
||||||
p -= bindir_len;
|
p -= bindir_len;
|
||||||
*p = 0;
|
|
||||||
}
|
}
|
||||||
else if (p - libpath >= libdir_len && !strcmp(p - libdir_len, libdir)) {
|
else if (p - libpath >= libdir_len && !strncmp(p - libdir_len, libdir, libdir_len)) {
|
||||||
p -= libdir_len;
|
p -= libdir_len;
|
||||||
*p = 0;
|
|
||||||
}
|
}
|
||||||
|
#ifdef ENABLE_MULTIARCH
|
||||||
|
else if (p2) {
|
||||||
|
p = p2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
p2 = p;
|
||||||
|
p = rb_enc_path_last_separator(libpath, p, rb_ascii8bit_encoding());
|
||||||
|
if (p) goto multiarch;
|
||||||
|
p = p2;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
*p = 0;
|
||||||
}
|
}
|
||||||
#if !VARIABLE_LIBPATH
|
#if !VARIABLE_LIBPATH
|
||||||
else {
|
else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user