[ruby-dev:38286] Re: MinGW における拡張ライブラリ作成と Ruby 1.8/1.9 共存について
From:
Nobuyoshi Nakada <nobu@...>
Date:
2009-04-07 10:43:22 UTC
List:
ruby-dev #38286
なかだです。
At Wed, 1 Apr 2009 22:47:23 +0900,
Hajime Hoshi wrote in [ruby-dev:38241]:
> 1. のために Ruby コンパイル時の configure に --program-suffix 引数をつけた場合、
> ライブラリのファイル名も変わってしまうため、 2. の条件が満たされません。
[ruby-dev:38255]も含めて、--program-suffixにライブラリ名やパス名
まで影響を受けるのは利点よりも面倒なことのほうが多い気がします。
Index: configure.in
===================================================================
--- configure.in (revision 23150)
+++ configure.in (working copy)
@@ -112,4 +112,6 @@ if test "$program_prefix" = NONE; then
program_prefix=
fi
+RUBY_BASE_NAME=ruby
+AC_SUBST(RUBY_BASE_NAME)
AC_CANONICAL_TARGET
@@ -1924,5 +1926,5 @@ case "$target_os" in
esac
-RUBY_SO_NAME='$(RUBY_INSTALL_NAME)'
+RUBY_SO_NAME='$(RUBY_BASE_NAME)'
LIBRUBY_LDSHARED=$LDSHARED
LIBRUBY_DLDFLAGS=$DLDFLAGS
@@ -2012,5 +2014,5 @@ if test "$enable_shared" = 'yes'; then
LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_* $(XLDFLAGS)'
LIBRUBY_SO='lib$(RUBY_SO_NAME).dylib.$(MAJOR).$(MINOR).$(TEENY)'
- LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).dylib lib$(RUBY_INSTALL_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_INSTALL_NAME).dylib'
+ LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).dylib lib$(RUBY_BASE_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_INSTALL_NAME).dylib'
;;
when(interix*)
@@ -2102,14 +2104,15 @@ case "$target_os" in
;;
when(cygwin*|mingw*)
+ RUBY_SO_NAME="${RUBY_SO_NAME}${MAJOR}${MINOR}${TEENY}"
LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
case "$target_os" in
when(cygwin*)
if test x"$enable_shared" = xyes; then
- LIBRUBY_SO='cyg$(RUBY_SO_NAME)'${MAJOR}${MINOR}${TEENY}.dll
+ LIBRUBY_SO='cyg$(RUBY_SO_NAME).dll'
LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
fi
;;
when(mingw*)
- RUBY_SO_NAME=${rb_cv_msvcrt}-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR}${TEENY}
+ RUBY_SO_NAME="${rb_cv_msvcrt}-${RUBY_SO_NAME}"
if test x"$enable_shared" = xyes; then
LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
@@ -2267,12 +2270,19 @@ test "$program_suffix" != NONE &&
ri_suffix=$program_suffix
-RUBY_INSTALL_NAME="${ri_prefix}ruby${ri_suffix}"
+RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}"
case "$target_os" in
when(cygwin*|mingw*)
- RUBYW_INSTALL_NAME="${ri_prefix}rubyw${ri_suffix}"
- rubyw_install_name="$RUBYW_INSTALL_NAME"
+ RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)w'"${ri_suffix}"
+ rubyw_install_name='$(RUBYW_INSTALL_NAME)'
;;
esac
-RUBY_LIB_PREFIX=`eval echo \\"${libdir}/${RUBY_INSTALL_NAME}\\"`
+
+rubylibprefix='${libdir}/${RUBY_BASE_NAME}'
+AC_ARG_WITH(rubylibprefix,
+ AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_INSTALL_NAME]]]),
+ [rubylibprefix=$withval])
+
+RUBY_LIB_PREFIX=`eval echo \\"${rubylibprefix}\\"`
+AC_SUBST(rubylibprefix)
AC_ARG_WITH(ruby-version,
@@ -2306,12 +2316,18 @@ AC_ARG_WITH(sitedir,
AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]]]),
[sitedir=$withval],
- [sitedir='${libdir}/${RUBY_INSTALL_NAME}/site_ruby'])
-SITE_DIR=`eval echo \\"${sitedir}\\"`
+ [sitedir='${rubylibprefix}/site_ruby'])
+dir="${sitedir}"
+until SITE_DIR=`eval echo \\"${dir}\\"`; test "${dir}" = "${SITE_DIR}"; do
+ dir="${SITE_DIR}"
+done
AC_ARG_WITH(vendordir,
AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]]]),
[vendordir=$withval],
- [vendordir='${libdir}/${RUBY_INSTALL_NAME}/vendor_ruby'])
-VENDOR_DIR=`eval echo \\"${vendordir}\\"`
+ [vendordir='${rubylibprefix}/vendor_ruby'])
+dir="${vendordir}"
+until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "${dir}" = "${VENDOR_DIR}"; do
+ dir="${VENDOR_DIR}"
+done
if test "${LOAD_RELATIVE+set}"; then
@@ -2415,7 +2431,7 @@ fi
AC_ARG_WITH(rubyhdrdir,
- AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_INSTALL_NAME/RUBY_VERSION]]]),
+ AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_BASE_NAME/RUBY_VERSION]]]),
[rubyhdrdir=$withval],
- [rubyhdrdir='${includedir}/${RUBY_INSTALL_NAME}-${ruby_version}'])
+ [rubyhdrdir='${includedir}/${RUBY_BASE_NAME}-${ruby_version}'])
AC_ARG_WITH(sitehdrdir,
@@ -2486,5 +2502,5 @@ AC_SUBST(BUILTIN_TRANSSRCS)
AC_SUBST(BUILTIN_TRANSOBJS)
-PACKAGE=$RUBY_INSTALL_NAME
+PACKAGE=$RUBY_BASE_NAME
AC_SUBST(PACKAGE)
AC_MSG_RESULT($PACKAGE library version = $ruby_version)
Index: win32/Makefile.sub
===================================================================
--- win32/Makefile.sub (revision 23150)
+++ win32/Makefile.sub (working copy)
@@ -33,6 +33,9 @@ LIB = $(pathlist:;=/lib;)
srcdir = ..
!endif
+!ifndef RUBY_BASE_NAME
+RUBY_BASE_NAME = ruby
+!endif
!ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = $(PROGRAM_PREFIX)ruby$(RUBY_SUFFIX)
+RUBY_INSTALL_NAME = $(PROGRAM_PREFIX)$(RUBY_BASE_NAME)$(RUBY_SUFFIX)
!endif
!if !defined(RUBYW_INSTALL_NAME) || "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"
@@ -117,5 +120,5 @@ ruby_version = $(MAJOR).$(MINOR).$(TEENY
!ifndef RUBY_SO_NAME
-RUBY_SO_NAME = $(RT)-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)$(TEENY)
+RUBY_SO_NAME = $(RT)-$(RUBY_BASE_NAME)$(MAJOR)$(MINOR)$(TEENY)
!endif
!ifndef RUBY_PLATFORM
@@ -530,5 +533,5 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/
#define DLEXT ".so"
#define RUBY_LIB_VERSION_STYLE 3 /* full */
-#define RUBY_LIB_PREFIX "/lib/$(RUBY_INSTALL_NAME)"
+#define RUBY_LIB_PREFIX "/lib/$(RUBY_BASE_NAME)"
#define RUBY_LIB RUBY_LIB_PREFIX"/"RUBY_LIB_VERSION
#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"
@@ -646,4 +649,5 @@ s,@RDOCTARGET@,,;t t
s,@LIBRUBY_LDSHARED@,$(LIBRUBY_LDSHARED),;t t
s,@LIBRUBY_DLDFLAGS@,$(LIBRUBY_DLDFLAGS),;t t
+s,@RUBY_BASE_NAME@,$(RUBY_BASE_NAME),;t t
s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t
s,@rubyw_install_name@,$(RUBYW_INSTALL_NAME),;t t
@@ -687,7 +691,8 @@ s,@arch@,$(ARCH)-$(PLATFORM),;t t
s,@sitearch@,$(ARCH)-$(RT),;t t
s,@ruby_version@,$(ruby_version),;t t
-s,@sitedir@,$${prefix}/lib/$${RUBY_INSTALL_NAME}/site_ruby,;t t
-s,@vendordir@,$${prefix}/lib/$${RUBY_INSTALL_NAME}/vendor_ruby,;t t
-s,@rubyhdrdir@,$$(includedir)/$${RUBY_INSTALL_NAME}-$$(ruby_version),;t t
+s,@rubylibprefix@,$${prefix}/lib/$${RUBY_BASE_NAME},;t t
+s,@sitedir@,$${rubylibprefix}/site_ruby,;t t
+s,@vendordir@,$${rubylibprefix}/vendor_ruby,;t t
+s,@rubyhdrdir@,$$(includedir)/$${RUBY_BASE_NAME}-$$(ruby_version),;t t
s,@sitehdrdir@,$$(rubyhdrdir)/site_ruby,;t t
s,@vendorhdrdir@,$$(rubyhdrdir)/vendor_ruby,;t t
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦