Project

General

Profile

Actions

Feature #2746

closed

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

Added by mrkn (Kenta Murata) about 14 years ago. Updated almost 13 years ago.

Status:
Closed
Assignee:
-
Target version:
[ruby-dev:40418]

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

Actions #1

Updated by matz (Yukihiro Matsumoto) about 14 years ago

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

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

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

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

=end

Actions #2

Updated by mrkn (Kenta Murata) about 14 years ago

=begin
むらたです。

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 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:
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

=end

Actions #3

Updated by mrkn (Kenta Murata) about 14 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: [ruby-dev:40418] [Feature #2746] ビルドする拡張ライブラリを configure 時に指定するための --with-exts オプション"
on Mon, 15 Feb 2010 13:36:10 +0900, Kenta Murata 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:
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

=end

Actions #4

Updated by matz (Yukihiro Matsumoto) about 14 years ago

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

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

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

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

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

=end

Actions #5

Updated by mrkn (Kenta Murata) about 14 years ago

=begin
むらたです。

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 writes:

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

  • 希望するアカウント名
  • 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:
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

=end

Actions #6

Updated by usa (Usaku NAKAMURA) about 14 years ago

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

In message "[ruby-dev:40418] [Feature #2746] ビルドする拡張ライブラリを configure 時に指定するための --with-exts オプション"
on Feb.15,2010 13:36:10, wrote:

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

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

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

それでは。

U.Nakamura

=end

Actions #7

Updated by mrkn (Kenta Murata) about 14 years ago

=begin
むらたです。

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, 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:
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

=end

Actions #8

Updated by mrkn (Kenta Murata) about 14 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 "[ruby-dev:40418] [Feature #2746] ビルドする拡張ライブラリを configure 時に指定するための --with-exts オプション"
on Feb.15,2010 13:36:10, 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:
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

Actions #9

Updated by mrkn (Kenta Murata) about 14 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:
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/

=end

Actions #10

Updated by mrkn (Kenta Murata) about 14 years ago

  • Status changed from Open to Closed

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0