Feature #2746: ビルドする拡張ライブラリを configure 時に指定するための --with-exts オプション
http://redmine.ruby-lang.org/issues/show/2746

起票者: Kenta Murata
ステータス: Open, 優先度: Normal
カテゴリ: build, Target version: 1.9.x

現在 make に対して EXTS 変数を指定することでビルドする拡張ライブラリを限定できます。
この方法では make の度に拡張ライブラリのリストを指定しなければならず、
例えば dbm, gdbm, sdbm, tk 以外をビルドしたい場合は
除外するライブラリ以外を列挙する必要があり不便です。

この状況を改善するために、configure.in に --with-exts オプションを追加する以下のパッチを提案します。
--with-exts オプションは以下のように使用します。

(1) すべての拡張ライブラリをビルドする事を明示する場合は、
    何も指定しないか --with-exts を値なしで指定する。

(2) ビルドする拡張ライブラリのリストを = の後に指定する。
    例: bigdecimal, fiber, openssl, socket, zlib のみをビルドする場合は
        --with-exts=bigdecimal,fiber,openssl,socket,zlib

(3) ビルドしない拡張ライブラリのリストを =- の後に指定する。
    例: dbm, gdbm, sdbm, tk,win32ole 以外をビルドする場合は
        --with-exts=-dbm,gdbm,sdbm,tk,win32ole

(4) すべての拡張ライブラリをビルドしない場合は
    --without-exts を指定する。

従来のように make に対して EXTS 変数を指定する方法は
上記 (1-3) の場合において有効になります。


diff --git a/Makefile.in b/Makefile.in
index a4848d8..b5afa68 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -96,6 +96,8 @@ THREAD_MODEL  = @THREAD_MODEL@
 PREP          = @PREP@
 ARCHFILE      = @ARCHFILE@
 SETUP         =
+EXTS          = @EXTS@
+EXTMK_EXTENSION = @EXTMK_EXTENSION@
 EXTSTATIC     = @EXTSTATIC@
 SET_LC_MESSAGES = env LC_MESSAGES=C
 
diff --git a/common.mk b/common.mk
index 74f9ff7..b74eb65 100644
--- a/common.mk
+++ b/common.mk
@@ -103,7 +103,7 @@ SCRIPT_ARGS   =	--dest-dir="$(DESTDIR)" \
 		--extout="$(EXTOUT)" \
 		--mflags="$(MFLAGS)" \
 		--make-flags="$(MAKEFLAGS)"
-EXTMK_ARGS    =	$(SCRIPT_ARGS) --extension $(EXTS) --extstatic $(EXTSTATIC) \
+EXTMK_ARGS    =	$(SCRIPT_ARGS) $(EXTMK_EXTENSION) --extstatic $(EXTSTATIC) \
 		--make-flags="MINIRUBY='$(MINIRUBY)'" --
 INSTRUBY      =	$(MINIRUBY) $(srcdir)/tool/rbinstall.rb
 INSTRUBY_ARGS =	$(SCRIPT_ARGS) \
diff --git a/configure.in b/configure.in
index d65f481..e3c7f23 100644
--- a/configure.in
+++ b/configure.in
@@ -1918,6 +1918,40 @@ AS_CASE(["$target_os"],
   [nextstep* | openstep* | rhapsody* | darwin*], [
 	STRIP='strip -A -n'])
 
+EXTS=
+AC_SUBST(EXTS)dnl
+EXTMK_EXTENSION="--extension \$(EXTS)"
+AC_SUBST(EXTMK_EXTENSION)
+AC_ARG_WITH(exts,
+            AS_HELP_STRING([--with-exts=EXTS],
+                           [build with external modules;
+                            if you specify the name list leading minus sign,
+                            the modules is not builded]),
+            [exts="$withval"], [unset exts])
+AC_MSG_CHECKING([builded extensions])
+if test x"$exts" = x -o x"$exts" = xno; then
+  EXTMK_EXTENSION=--no-extension
+  AC_MSG_RESULT([no])
+elif test x"$exts" = xyes; then
+  AC_MSG_RESULT([all])
+else
+  if echo "$exts" | grep -q ^\- 2>/dev/null; then
+    for name in `ls -1 ${srcdir}/ext`; do
+      if test -f ${srcdir}/ext/${name}/extconf.rb; then
+        echo $exts | grep -q $name 2>/dev/null || \
+          EXTS=${EXTS},${name}
+      fi
+    done
+  else
+    exts=`echo $exts | tr , ' '`
+    for name in $exts; do
+      test -f ${srcdir}/ext/${name}/extconf.rb && EXTS=${EXTS},${name}
+    done
+  fi
+  EXTS=`echo $EXTS | sed -e 's/^,//'`
+  AC_MSG_RESULT([$EXTS])
+fi
+
 EXTSTATIC=
 AC_SUBST(EXTSTATIC)dnl
 AC_ARG_WITH(static-linked-ext,


----------------------------------------
http://redmine.ruby-lang.org