Issue #8524 has been reported by ngoto (Naohisa G.).
Bug #8524: r40755以降 No rule to make target
`.ext/include/sparc64-solaris2.10/ruby/config.h でビルドできない
Author: ngoto (Naohisa G.)
Status: Open
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: build
Target version:
ruby -v: -
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
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 by
main.o’.
Stop.
Issue #8524 has been updated by knu (Akinori MUSHA).
${var:+val} がサポートされていないってのはちょっとした驚きでした。少なくともSUSv2/UNIX98では定義されているので。
OpenIndianaだと/bin/shはksh93になっているようで、エラーは出ませんでした。
後学のために教えていただきたいのですが、 ${var+val} だとOKでしょうか。
あと、 ${var:-val} / ${var-val} もよく使うので気になります…。
Bug #8524: r40755以降 No rule to make target
`.ext/include/sparc64-solaris2.10/ruby/config.h でビルドできない
Author: ngoto (Naohisa G.)
Status: Closed
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: build
Target version:
ruby -v: -
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
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 by
main.o’.
Stop.
さとうふみやす @ 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: 置換が正しくありません。
fi
これは、
if [ -n "$keepsuffix" ]; then
mv -f "$target" "${target}${keepsuffix}"
fi
とするか、
${keepsuffix:+mv} ${keepsuffix:+-f} ${keepsuffix:+"$target"}
${keepsuffix:+"${target}${keepsuffix}"}
とする必要があります。
Issue #8524 has been updated by knu (Akinori MUSHA).
なるほど、ありがとうございます。
場合によっては sh -c “${var:+“command arg”}” という手もあるのかな。
Bug #8524: r40755以降 No rule to make target
`.ext/include/sparc64-solaris2.10/ruby/config.h でビルドできない
Author: ngoto (Naohisa G.)
Status: Closed
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: build
Target version:
ruby -v: -
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
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 by
main.o’.
Stop.