Feature #2746

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

Added by Kenta Murata about 5 years ago. Updated almost 4 years ago.

[ruby-dev:40418]
Status:Closed
Priority:Normal
Assignee:-

Description

=begin
現在 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,
=end

History

#1 Updated by Yukihiro Matsumoto about 5 years ago

=begin
まつもと ゆきひろです

In message "Re: [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 オプションを追加する以下のパッチを提案します。

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

=end

#2 Updated by Kenta Murata about 5 years ago

=begin
むらたです。

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

まつもと ゆきひろです

In message "Re: [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/

=end

#3 Updated by Kenta Murata about 5 years ago

=begin
むらたです。

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

むらたです。

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

まつもと ゆきひろです

In message "Re: [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/

=end

#4 Updated by Yukihiro Matsumoto about 5 years ago

=begin
まつもと ゆきひろです

In message "Re: 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の修正もお願いしま
    すね。

=end

#5 Updated by Kenta Murata about 5 years ago

=begin
むらたです。

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

まつもと ゆきひろです

In message "Re: 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/

=end

#6 Updated by Usaku NAKAMURA about 5 years ago

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

In message " [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

=end

#7 Updated by Kenta Murata about 5 years ago

=begin
むらたです。

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

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

In message " [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/

=end

#8 Updated by Kenta Murata about 5 years ago

=begin
-----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 " [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-----

=end

#9 Updated by Kenta Murata about 5 years ago

=begin
むらたです。

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/

=end

#10 Updated by Kenta Murata almost 5 years ago

  • Status changed from Open to Closed

=begin

=end

Also available in: Atom PDF