Feature #2746

ビルドする拡張ライブラリを configure 時に指定するための --with-exts オプション

Added by mrkn (Kenta Murata) over 2 years ago. Updated about 1 year ago.

[ruby-dev:40418]
Status:Closed Start date:02/15/2010
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:build
Target version:2.0.0

Description

現在 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,

History

Updated by matz (Yukihiro Matsumoto) over 2 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:40418] [Feature #2746] 	ビルドする拡張ライブラリを configure 	時に指定するための --with-exts 	オプション"
    on Mon, 15 Feb 2010 13:36:10 +0900, Kenta Murata <redmine@ruby-lang.org> writes:

|現在 make に対して EXTS 変数を指定することでビルドする拡張ライブラリを限定できます。
|この方法では make の度に拡張ライブラリのリストを指定しなければならず、
|例えば dbm, gdbm, sdbm, tk 以外をビルドしたい場合は
|除外するライブラリ以外を列挙する必要があり不便です。
|
|この状況を改善するために、configure.in に --with-exts オプションを追加する以下のパッチを提案します。

いいんじゃないでしょうか。村田さんってまだコミッターじゃない
んでしたっけ?

Updated by mrkn (Kenta Murata) over 2 years ago

むらたです。

On 2010/02/15, at 13:49, Yukihiro Matsumoto wrote:

> まつもと ゆきひろです
> 
> In message "Re: [ruby-dev:40418] [Feature #2746] 	ビルドする拡張ライブラリを configure 	時に指定するための --with-exts 	オプション"
>    on Mon, 15 Feb 2010 13:36:10 +0900, Kenta Murata <redmine@ruby-lang.org> writes:
> 
> |現在 make に対して EXTS 変数を指定することでビルドする拡張ライブラリを限定できます。
> |この方法では make の度に拡張ライブラリのリストを指定しなければならず、
> |例えば dbm, gdbm, sdbm, tk 以外をビルドしたい場合は
> |除外するライブラリ以外を列挙する必要があり不便です。
> |
> |この状況を改善するために、configure.in に --with-exts オプションを追加する以下のパッチを提案します。
> 
> いいんじゃないでしょうか。村田さんってまだコミッターじゃない
> んでしたっけ?

ありがとうございます。まだコミッターではありませんが、
コミット権を頂ければマージしてコミットさせて頂きます。

--
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

Updated by mrkn (Kenta Murata) over 2 years ago

むらたです。

On 2010/02/15, at 13:59, Kenta Murata wrote:

> むらたです。
> 
> On 2010/02/15, at 13:49, Yukihiro Matsumoto wrote:
> 
>> まつもと ゆきひろです
>> 
>> In message "Re: [ruby-dev:40418] [Feature #2746] 	ビルドする拡張ライブラリを configure 	時に指定するための --with-exts 	オプション"
>>   on Mon, 15 Feb 2010 13:36:10 +0900, Kenta Murata <redmine@ruby-lang.org> writes:
>> 
>> |現在 make に対して EXTS 変数を指定することでビルドする拡張ライブラリを限定できます。
>> |この方法では make の度に拡張ライブラリのリストを指定しなければならず、
>> |例えば dbm, gdbm, sdbm, tk 以外をビルドしたい場合は
>> |除外するライブラリ以外を列挙する必要があり不便です。
>> |
>> |この状況を改善するために、configure.in に --with-exts オプションを追加する以下のパッチを提案します。
>> 
>> いいんじゃないでしょうか。村田さんってまだコミッターじゃない
>> んでしたっけ?
> 
> ありがとうございます。まだコミッターではありませんが、
> コミット権を頂ければマージしてコミットさせて頂きます。

現在メンテナが不在になっている bigdecimal のメンテナも
やらせて頂けないでしょうか。

--
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

Updated by matz (Yukihiro Matsumoto) over 2 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:40420] Re: [Feature #2746] 	ビルドする拡張ライブラリを configure 	時に指定するための --with-exts 	オプション"
    on Mon, 15 Feb 2010 13:59:36 +0900, Kenta Murata <muraken@gmail.com> writes:

|ありがとうございます。まだコミッターではありませんが、
|コミット権を頂ければマージしてコミットさせて頂きます。

cvs-admin@ruby-lang.org に

 * 希望するアカウント名
 * ssh2公開鍵

をgpgで署名して送ってください。bigdecimalの修正もお願いしま
すね。

Updated by mrkn (Kenta Murata) over 2 years ago

むらたです。

On 2010/02/15, at 14:29, Yukihiro Matsumoto wrote:

> まつもと ゆきひろです
> 
> In message "Re: [ruby-dev:40420] Re: [Feature #2746] 	ビルドする拡張ライブラリを configure 	時に指定するための --with-exts 	オプション"
>    on Mon, 15 Feb 2010 13:59:36 +0900, Kenta Murata <muraken@gmail.com> writes:
> 
> |ありがとうございます。まだコミッターではありませんが、
> |コミット権を頂ければマージしてコミットさせて頂きます。
> 
> cvs-admin@ruby-lang.org に
> 
> * 希望するアカウント名
> * ssh2公開鍵
> 
> をgpgで署名して送ってください。bigdecimalの修正もお願いしま
> すね。
> 

送りました。よろしくお願いします。

--
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

Updated by usa (Usaku NAKAMURA) over 2 years ago

こんにちは、なかむら(う)です。

In message "[ruby-dev:40418] [Feature #2746]  ビルドする拡張ライブラリを configure  時に指定するための --with-exts  オプション"
    on Feb.15,2010 13:36:10, <redmine@ruby-lang.org> wrote:
> 現在 make に対して EXTS 変数を指定することでビルドする拡張ライブラリを限定できます。
> この方法では make の度に拡張ライブラリのリストを指定しなければならず、
> 例えば dbm, gdbm, sdbm, tk 以外をビルドしたい場合は
> 除外するライブラリ以外を列挙する必要があり不便です。
> 
> この状況を改善するために、configure.in に --with-exts オプションを追加する以下のパッチを提案します。

既に--with-ext(または--with-extensions)というものがあるのです
が。
ext/extmk.rbあたりを参照してください。


それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>

Updated by mrkn (Kenta Murata) over 2 years ago

むらたです。

On 2010/02/15, at 21:37, U.Nakamura wrote:

> こんにちは、なかむら(う)です。
> 
> In message "[ruby-dev:40418] [Feature #2746]  ビルドする拡張ライブラリを configure  時に指定するための --with-exts  オプション"
>    on Feb.15,2010 13:36:10, <redmine@ruby-lang.org> wrote:
>> 現在 make に対して EXTS 変数を指定することでビルドする拡張ライブラリを限定できます。
>> この方法では make の度に拡張ライブラリのリストを指定しなければならず、
>> 例えば dbm, gdbm, sdbm, tk 以外をビルドしたい場合は
>> 除外するライブラリ以外を列挙する必要があり不便です。
>> 
>> この状況を改善するために、configure.in に --with-exts オプションを追加する以下のパッチを提案します。
> 
> 既に--with-ext(または--with-extensions)というものがあるのです
> が。
> ext/extmk.rbあたりを参照してください。

extmk.rb に対して --with-ext または --without-ext を EXTS 変数経由で渡せるなら
configure.in で AC_SUBST(EXTS) するだけで良く、--with-exts を導入するまでもないですね。
しかも extmk.rb の機能を直接使えば拡張ライブラリ名にワイルドカードが使えるんですね。

以下のパッチで configure EXTS=--without-ext=*dbm,tk,win32api ができるようになります。
これで問題ないようでしたら、アカウント登録され次第マージしてコミットします。

diff --git a/Makefile.in b/Makefile.in
index a4848d8..14071f8 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -96,6 +96,7 @@ THREAD_MODEL  = @THREAD_MODEL@
 PREP          = @PREP@
 ARCHFILE      = @ARCHFILE@
 SETUP         =
+EXTS          = @EXTS@
 EXTSTATIC     = @EXTSTATIC@
 SET_LC_MESSAGES = env LC_MESSAGES=C

diff --git a/configure.in b/configure.in
index d65f481..667c9b4 100644
--- a/configure.in
+++ b/configure.in
@@ -1918,6 +1918,7 @@ AS_CASE(["$target_os"],
   [nextstep* | openstep* | rhapsody* | darwin*], [
 	STRIP='strip -A -n'])

+AC_SUBST(EXTS)dnl
 EXTSTATIC=
 AC_SUBST(EXTSTATIC)dnl
 AC_ARG_WITH(static-linked-ext,


--
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

Updated by mrkn (Kenta Murata) over 2 years ago

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

むらたです。

On 2010/02/16, at 15:48, Akinori MUSHA wrote:

> At Tue, 16 Feb 2010 12:05:49 +0900,
> Kenta Murata wrote:
>>> こんにちは、なかむら(う)です。
>>> 
>>> In message "[ruby-dev:40418] [Feature #2746]  ビルドする拡張ライブラリを configure  時に指定するための --with-exts  オプション"
>>>   on Feb.15,2010 13:36:10, <redmine@ruby-lang.org> wrote:
>>>> 現在 make に対して EXTS 変数を指定することでビルドする拡張ライブラリを限定できます。
>>>> この方法では make の度に拡張ライブラリのリストを指定しなければならず、
>>>> 例えば dbm, gdbm, sdbm, tk 以外をビルドしたい場合は
>>>> 除外するライブラリ以外を列挙する必要があり不便です。
>>>> 
>>>> この状況を改善するために、configure.in に --with-exts オプションを追加する以下のパッチを提案します。
>>> 
>>> 既に--with-ext(または--with-extensions)というものがあるのです
>>> が。
>>> ext/extmk.rbあたりを参照してください。
>> 
>> extmk.rb に対して --with-ext または --without-ext を EXTS 変数経由で渡せるなら
>> configure.in で AC_SUBST(EXTS) するだけで良く、--with-exts を導入するまでもないですね。
>> しかも extmk.rb の機能を直接使えば拡張ライブラリ名にワイルドカードが使えるんですね。
>> 
>> 以下のパッチで configure EXTS=--without-ext=*dbm,tk,win32api ができるようになります。
>> これで問題ないようでしたら、アカウント登録され次第マージしてコミットします。
> 
>  --with-ext=... は今もそのまま configure の引数に書けば渡るはず。
> 問題は --without-ext=... が configure の文法上エラーになってしまう
> ので渡せないことでしょうか。
> 
>  よって、たとえば --with-out-ext に改名すれば解決しそうです。
> 
> Index: extmk.rb
> ===================================================================
> --- extmk.rb	(revision 26649)
> +++ extmk.rb	(working copy)
> @@ -396,7 +396,7 @@ end unless $extstatic
> 
> ext_prefix = "#{$top_srcdir}/ext"
> exts = $static_ext.sort_by {|t, i| i}.collect {|t, i| t}
> -withes, withouts = %w[--with --without].collect {|w|
> +withes, withouts = %w[--with --with-out].collect {|w|
>   if not (w = %w[-extensions -ext].collect {|o|arg_config(w+o)}).any?
>     nil
>   elsif (w = w.grep(String)).empty?
> 
> 
> あるいは、互換性が重要ならこうするか。
> 
> Index: extmk.rb
> ===================================================================
> --- extmk.rb	(revision 26649)
> +++ extmk.rb	(working copy)
> @@ -396,7 +396,7 @@ end unless $extstatic
> 
> ext_prefix = "#{$top_srcdir}/ext"
> exts = $static_ext.sort_by {|t, i| i}.collect {|t, i| t}
> -withes, withouts = %w[--with --without].collect {|w|
> +withes, *withouts = %w[--with --without --with-out].collect {|w|
>   if not (w = %w[-extensions -ext].collect {|o|arg_config(w+o)}).any?
>     nil
>   elsif (w = w.grep(String)).empty?
> @@ -405,6 +405,7 @@ withes, withouts = %w[--with --without].
>     proc {|c1| w.collect {|o| o.split(/,/)}.flatten.any?(&c1)}
>   end
> }
> +withouts = withouts.compact.first
> if withes
>   withouts ||= proc {true}
> else

without を with-out に分離する方法は思いつきませんでした。
以下のように --with-ext と --with-out-ext を定義して
mkconfig.rb で with-out を without へ変換すると、
configure で警告も出ず、extmk.rb を変更する必要もなくなります。


diff --git a/configure.in b/configure.in
index 513898d..4542bda 100644
- --- a/configure.in
+++ b/configure.in
@@ -1918,6 +1918,12 @@ AS_CASE(["$target_os"],
   [nextstep* | openstep* | rhapsody* | darwin*], [
 	STRIP='strip -A -n'])

+AC_ARG_WITH(ext,
+            AC_HELP_STRING([--with-ext=EXTS],
+                           [pass to --with-ext option of extmk.rb]))
+AC_ARG_WITH(out-ext,
+            AC_HELP_STRING([--with-out-ext=EXTS],
+                           [pass to --without-ext option of extmk.rb]))
 EXTSTATIC=
 AC_SUBST(EXTSTATIC)dnl
 AC_ARG_WITH(static-linked-ext,
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
index df3c35f..ac24821 100755
- --- a/tool/mkconfig.rb
+++ b/tool/mkconfig.rb
@@ -111,7 +111,10 @@ File.foreach "config.status" do |line|
         end
       end
     end
- -    val.gsub!(/ +(?!-)/, "=") if name == "configure_args" && /mswin32/ =~ RUBY_PLATFORM
+    if name == "configure_args"
+      val.gsub!(/ +(?!-)/, "=") if /mswin32/ =~ RUBY_PLATFORM
+      val.gsub!(/--with-out-ext/, "--without-ext")
+    end
     val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump
     if /^prefix$/ =~ name
       val = "(TOPDIR || DESTDIR + #{val})"


- --
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.14 (Darwin)

iF4EAREIAAYFAkt8sKAACgkQ8hOWb+nrC8yM2AD9Gl1dZF9aTzL6twwC2lspYGSg
AVouWvosi9dCa6oz1M8A/1JG3ul3LdlbC5zPQqmc9QBAGjcnx+ePfI1EHTzjRZjS
=teb9
-----END PGP SIGNATURE-----

Updated by mrkn (Kenta Murata) over 2 years ago

むらたです。

On 2010/02/18, at 12:14, Kenta Murata wrote:

> without を with-out に分離する方法は思いつきませんでした。
> 以下のように --with-ext と --with-out-ext を定義して
> mkconfig.rb で with-out を without へ変換すると、
> configure で警告も出ず、extmk.rb を変更する必要もなくなります。

これでコミットしました。

--
Kenta Murata
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

Updated by mrkn (Kenta Murata) about 2 years ago

  • Status changed from Open to Closed

Also available in: Atom PDF