diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | configure.in | 3 | ||||
-rw-r--r-- | ruby.c | 25 |
3 files changed, 27 insertions, 6 deletions
@@ -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, not to defer the expansion till ruby.pc.in and mkmf.rb. [Bug #7874] diff --git a/configure.in b/configure.in index d692372f27..d803ba9f8a 100644 --- a/configure.in +++ b/configure.in @@ -2670,6 +2670,9 @@ AS_CASE(["$target_os"], AC_ARG_ENABLE(multiarch, AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]), [multiarch=], [unset multiarch]) +if test ${multiarch+set}; then + AC_DEFINE(ENABLE_MULTIARCH) +fi archlibdir='${libdir}/${arch}' sitearchlibdir='${libdir}/${sitearch}' @@ -464,15 +464,30 @@ ruby_init_loadpath_safe(int safe_level) #endif const ptrdiff_t bindir_len = (ptrdiff_t)sizeof(bindir) - 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 = 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 = 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 else { |