[前][次][番号順一覧][スレッド一覧]

ruby-changes:11251

From: nobu <ko1@a...>
Date: Tue, 10 Mar 2009 00:06:33 +0900 (JST)
Subject: [ruby-changes:11251] Ruby:r22860 (trunk): * configure.in (load_relative): new option to enable load path

nobu	2009-03-10 00:06:22 +0900 (Tue, 10 Mar 2009)

  New Revision: 22860

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22860

  Log:
    * configure.in (load_relative): new option to enable load path
      relative to libruby_so.
    * ruby.c (ruby_init_loadpath_safe): added the case using dladdr().

  Modified files:
    trunk/ChangeLog
    trunk/configure.in
    trunk/ruby.c
    trunk/version.h

Index: configure.in
===================================================================
--- configure.in	(revision 22859)
+++ configure.in	(revision 22860)
@@ -198,6 +198,10 @@
     AC_DEFINE(USE_BUILTIN_FRAME_ADDRESS)
 fi
 
+AC_ARG_ENABLE(load-relative,
+       [  --enable-load-relative  resolve load paths at run time. ],
+       [load_relative=$enableval])
+
 AC_ARG_PROGRAM
 
 dnl Checks for programs.
@@ -1777,6 +1781,15 @@
 	DLEXT=so;;
   esac
 fi
+if test "$rb_cv_dlopen:$load_relative" = yes:yes; then
+    AC_CHECK_FUNCS(dladdr)
+    if test "$ac_cv_func_dladdr" = yes; then
+	LOAD_RELATIVE=1
+    else
+	unset load_relative
+    fi
+fi
+
 len=2 # .rb
 n=`expr "$DLEXT"  : '.*'`; test "$n" -gt "$len" && len=$n
 n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" && len=$n
@@ -1941,7 +1954,12 @@
     when(darwin*)
 	RUBY_SO_NAME="$RUBY_SO_NAME"'.$(MAJOR).$(MINOR).$(TEENY)'
 	LIBRUBY_LDSHARED='cc -dynamiclib -undefined suppress -flat_namespace'
-	LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib'
+	if test "$load_relative" = yes; then
+	    libprefix='@executable_path/..'
+	else
+	    libprefix='$(libdir)'
+	fi
+	LIBRUBY_DLDFLAGS='-install_name '${libprefix}'/lib/lib$(RUBY_SO_NAME).dylib'
 	LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(MAJOR).$(MINOR).$(TEENY)'
 	LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-compatibility_version $(MAJOR).$(MINOR).$(TEENY)'
 	LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_* $(XLDFLAGS)'
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22859)
+++ ChangeLog	(revision 22860)
@@ -1,3 +1,10 @@
+Tue Mar 10 00:06:21 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* configure.in (load_relative): new option to enable load path
+	  relative to libruby_so.
+
+	* ruby.c (ruby_init_loadpath_safe): added the case using dladdr().
+
 Mon Mar  9 16:49:13 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/rake: updated to rake code to rake-0.8.4 source code base.
Index: version.h
===================================================================
--- version.h	(revision 22859)
+++ version.h	(revision 22860)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.2"
-#define RUBY_RELEASE_DATE "2009-03-09"
+#define RUBY_RELEASE_DATE "2009-03-10"
 #define RUBY_PATCHLEVEL -1
 #define RUBY_BRANCH_NAME "trunk"
 
@@ -8,7 +8,7 @@
 #define RUBY_VERSION_TEENY 1
 #define RUBY_RELEASE_YEAR 2009
 #define RUBY_RELEASE_MONTH 3
-#define RUBY_RELEASE_DAY 9
+#define RUBY_RELEASE_DAY 10
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: ruby.c
===================================================================
--- ruby.c	(revision 22859)
+++ ruby.c	(revision 22860)
@@ -26,6 +26,9 @@
 #ifdef __hpux
 #include <sys/pstat.h>
 #endif
+#if defined(LOAD_RELATIVE) && defined(HAVE_DLADDR)
+#include <dlfcn.h>
+#endif
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -352,10 +355,16 @@
     char *p;
     int rest;
 
+    libpath[0] = '\0';
 #if defined _WIN32 || defined __CYGWIN__
     GetModuleFileName(libruby, libpath, sizeof libpath);
 #elif defined(__EMX__)
     _execname(libpath, sizeof(libpath) - 1);
+#elif defined(HAVE_DLADDR)
+    Dl_info dli;
+    if (dladdr(ruby_init_loadpath_safe, &dli)) {
+	strlcpy(libpath, dli.dli_fname, sizeof(libpath));
+    }
 #endif
 
     libpath[sizeof(libpath) - 1] = '\0';

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]