Project

General

Profile

Actions

Bug #8524

closed

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

Added by ngoto (Naohisa Goto) over 11 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
-
[ruby-dev:47420]

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 by main.o'. Stop.


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #12303: No rule to make target '.ext/include/i386-cygwin/ruby/config.h', needed by 'main.o' when ./configure TEST_COLORS=skip=43ClosedActions
Actions #1

Updated by nobu (Nobuyoshi Nakada) over 11 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. [ruby-dev:47420] [Bug #8524]

Updated by knu (Akinori MUSHA) over 11 years ago

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

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

Updated by fumiyas (Fumiyasu SATOH) over 11 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

Updated by knu (Akinori MUSHA) over 11 years ago

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

Actions #5

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

  • Related to Bug #12303: No rule to make target '.ext/include/i386-cygwin/ruby/config.h', needed by 'main.o' when ./configure TEST_COLORS=skip=43 added
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0