Bug #8524

r40755以降 No rule to make target `.ext/include/sparc64-solaris2.10/ruby/config.h でビルドできない

Added by Naohisa Goto almost 2 years ago. Updated almost 2 years ago.

[ruby-dev:47420]
Status:Closed
Priority:Normal
Assignee:Nobuyoshi Nakada
ruby -v:- Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN

Description

r40755以降、Solarisでは、以下のように .ext/include/アーキテクチャ/ruby/config.h が作成されません。

原因は、r40755にて以下の行が./tool/ifchange に追加されたためです。

@@ -30,6 +37,7 @@
rm -f "$temp"
else
echo "$target updated"
+ ${keepsuffix:+ mv -f "$target" "${target}${keepsuffix}" }
mv -f "$temp" "$target"
fi

この tool/ifchangeは #!/bin/sh なのに、基本的な/bin/shでは解釈できない(bash依存?)記述が追加されたため、Solarisのようにピュアな/bin/shを持つOSでは、そこで処理がストップし、しかしconfigureではエラーを検知できないらしく、そのままconfig.hが作成されないままconfigureが正常終了してしまうのが原因のようです。

$ ./configure --prefix=/hoge/hoge/hoge
(中略)
checking for nroff... /usr/bin/nroff
.ext/include/sparc64-solaris2.10/ruby/config.h updated
./tool/ifchange: bad substitution
verconf.h updated
./tool/ifchange: bad substitution
ruby library version = 2.1.0
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating Makefile
config.status: creating ruby-2.1.pc
$ make V=1
CC = cc
LD = /usr/ccs/bin/ld
LDSHARED = cc -G
CFLAGS = -xO1 -xtarget=sparc64viiplus -m64
XCFLAGS = -DRUBY_EXPORT
CPPFLAGS = -I/usr/local/64/lib/libffi-3.0.10/include -I/usr/local/64/include -I. -I.ext/include/sparc64-solaris2.10 -I./include -I.
DLDFLAGS = -m64 -L/usr/local/64/lib -R/usr/local/64/lib -m64
SOLIBS =
cc: Sun C 5.12 SunOS_sparc 2011/11/16
make: *** No rule to make target .ext/include/sparc64-solaris2.10/ruby/config.h', needed bymain.o'. Stop.

Associated revisions

Revision 41280
Added by Nobuyoshi Nakada almost 2 years ago

no alternate value expansion

  • configure.in (opt-dir), tool/ifchange: get rid of "alternate value" expansion for legacy sh. [Bug #8524]

Revision 41280
Added by Nobuyoshi Nakada almost 2 years ago

no alternate value expansion

  • configure.in (opt-dir), tool/ifchange: get rid of "alternate value" expansion for legacy sh. [Bug #8524]

History

#1 Updated by Nobuyoshi Nakada almost 2 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r41280.
Naohisa, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


no alternate value expansion

  • configure.in (opt-dir), tool/ifchange: get rid of "alternate value" expansion for legacy sh. [Bug #8524]

#2 Updated by Akinori MUSHA almost 2 years ago

${var:+val} がサポートされていないってのはちょっとした驚きでした。少なくともSUSv2/UNIX98では定義されているので。
OpenIndianaだと/bin/shはksh93になっているようで、エラーは出ませんでした。

後学のために教えていただきたいのですが、 ${var+val} だとOKでしょうか。
あと、 ${var:-val} / ${var-val} もよく使うので気になります…。

#3 Updated by Fumiyasu SATOH almost 2 years ago

さとうふみやす @ OSSTech です。

At Fri, 14 Jun 2013 21:36:17 +0900,
knu (Akinori MUSHA) wrote:

${var:+val} がサポートされていないってのはちょっとした驚きでした。少なくともSUSv2/UNIX98では定義されているので。

Solaris 10 (それより古いのも含む) の /bin/sh は ${var:+val} は
サポートしています。ただし、val 部分に空白文字を含めることができません。
空白等を含めるにはクォートする必要があります。

$ /bin/sh -c 'var=foo; echo ${var:+val val}'
/bin/sh: 置換が正しくありません。

$ /bin/sh -c 'unset var; echo ${var:+val val}'
/bin/sh: 置換が正しくありません。

$ /bin/sh -c 'var=foo; echo ${var:+"val val"}'
val val

$ /bin/sh -c 'var=foo; echo ${var:+"val" "val val"}'
/bin/sh: 置換が正しくありません。

r40755以降、Solarisでは、以下のように .ext/include/アーキテクチャ/ruby/config.h が作成されません。

原因は、r40755にて以下の行が./tool/ifchange に追加されたためです。

@@ -30,6 +37,7 @@
rm -f "$temp"
else
echo "$target updated"
+ ${keepsuffix:+ mv -f "$target" "${target}${keepsuffix}" }
mv -f "$temp" "$target"
fi

これは、

     if [ -n "$keepsuffix" ]; then
         mv -f "$target" "${target}${keepsuffix}"
     fi

とするか、

 ${keepsuffix:+mv} ${keepsuffix:+-f} ${keepsuffix:+"$target"} ${keepsuffix:+"${target}${keepsuffix}"}

とする必要があります。

--
-- Name: SATOH Fumiyasu @ OSS Technology Corp. (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- GitHub Home: https://GitHub.com/fumiyas/
-- PGP Fingerprint: BBE1 A1C9 525A 292E 6729 CDEC ADC2 9DCA 5E1C CBCA

#4 Updated by Akinori MUSHA almost 2 years ago

なるほど、ありがとうございます。
場合によっては sh -c "${var:+"command arg"}" という手もあるのかな。

Also available in: Atom PDF