[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00797] Re: configure 時のエラーについて
- Subject: [FDclone-users:00797] Re: configure 時のエラーについて
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Thu, 26 Jun 2008 03:46:39 +0900
しらいです。
In Message-Id <20080625002310.e6d62713.yasushi_imao@imao.jp>
Yasushi Imao <yasushi_imao@imao.jp>さんwrites:
> お世話になります。今尾です。
> >> これらのソフトウェアの tarball を展開し configure を走らせると
> >> ./configure: \: unexpected token
> >> というエラーメッセージが表示されて終了します。
>
> > FreeBSD だと /bin/sh の実体は Almquist Shell なので、それ
> > 以外の /bin/bash か /bin/ksh 辺りを選ぶといいんじゃないでし
> > ょうか。
>
> ports から bash を入れたところ (/usr/local/bin/bash)、それだけで、上記の
> エラーが表示されなくなり、configure が無事終了するようになってしまいまし
> た。そのため、エラーの該当箇所を追えませんでした。
どうも、最近の autoconf が吐く configure は、自身を走らせ
る shell の候補を PATH や SHELL の内容から判断して決定するよ
うですね。
path の通ったところに bash があるとそちらを優先して使うの
で、それで configure が bash 上で実行されるようになるみたい
です。
> > bash も tcsh もそう多くの環境変数は設定していないと思うの
> > で、思い当たるものと言えば「SHELL」くらいですかねー。
>
> おっしゃるとおり、bash をインストールしていない環境であっても ~/.fdshrc
> の中の SHELL=/usr/local/bin/fdsh の部分を SHELL=/bin/sh に変更したとこ
> ろ、問題なく configure が通るようになりました。
ふむ。ということは冒頭の error message は fdsh が出してい
るもののようですね。
上で書いた configure の挙動ですけど、候補の中に SHELL で指
定された shell が含まれるので、/usr/local/bin/fdsh を使うと
いう結論に至ったんだと思います。
他の OS 環境でも環境変数 CONFIG_SHELL=/usr/local/bin/fdsh
として configure を起動すると、fdsh が使われるようになる筈で、
その際は同じエラーに出会っていたことと思います。
shell の細かい挙動は仕様にも明記されていないことが多く、な
かなか既存の shell の動きに合わせるのが難しいんですよね。
取り急ぎ直せるところだけ直したので、この patch を試してみ
て下さい。多分、SHELL の値をいじらなくても configure に成功
するんじゃないかと思います。
ついでに、error message に行番号を添えるようにしておいたの
で、もし失敗しても configure 内の該当行を探すことが出来ると
思います。
configure の挙動は環境によってまちまちなので、その環境でし
かテストされない項目のチェックコードで失敗することもあります
から、こういうのはシラミ潰しに当たっていくしかありません。
なので、そちらの環境では他にもまだ error が出るようなら、
該当行を調べて改めて報告お願いします。
---- Cut Here ----
diff -u ../old/FD-3.00a/pathname.c ./pathname.c
--- ../old/FD-3.00a/pathname.c Sat Jun 21 00:00:00 2008
+++ ./pathname.c Thu Jun 26 01:25:41 2008
@@ -616,21 +616,12 @@
#else /* !FAKEMETA */
if (s[ptr] != PMETA || quote == '\'') return(0);
- if (len >= 0) {
- if (!(flags & EA_EOLMETA) && ptr + 1 >= len) return(0);
-# ifndef BASHSTYLE
- /* bash does not treat "\" as \ */
- if (quote == '"' && s[ptr + 1] == quote && ptr + 2 >= len)
- return(0);
-# endif
+ if (flags & EA_EOLMETA) /*EMPTY*/;
+ else if (len >= 0) {
+ if (ptr + 1 >= len) return(0);
}
else {
- if (!(flags & EA_EOLMETA) && !s[ptr + 1]) return(0);
-# ifndef BASHSTYLE
- /* bash does not treat "\" as \ */
- if (quote == '"' && s[ptr + 1] == quote && !s[ptr + 2])
- return(0);
-# endif
+ if (!s[ptr + 1]) return(0);
}
# ifdef BSPATHDELIM
@@ -2184,7 +2175,7 @@
*qp = *s;
return(PC_OPQUOTE);
}
- else if (*s == '"') {
+ else if (!(flags & EA_NOEVALDQ) && *s == '\"') {
*qp = *s;
return(PC_OPQUOTE);
}
diff -u ../old/FD-3.00a/pathname.h ./pathname.h
--- ../old/FD-3.00a/pathname.h Sat Jun 21 00:00:00 2008
+++ ./pathname.h Thu Jun 26 00:55:23 2008
@@ -143,15 +143,16 @@
u_char flags;
} wild_t;
-#define EA_STRIPQ 0001
-#define EA_BACKQ 0002
-#define EA_KEEPMETA 0004
-#define EA_NOEVALQ 0010
-#define EA_STRIPQLATER 0020
-#define EA_NOUNIQDELIM 0040
-#define EA_EOLMETA 0100
-#define EA_FINDMETA 0200
-#define EA_FINDDELIM 0400
+#define EA_STRIPQ 00001
+#define EA_BACKQ 00002
+#define EA_KEEPMETA 00004
+#define EA_NOEVALQ 00010
+#define EA_NOEVALDQ 00020
+#define EA_STRIPQLATER 00040
+#define EA_NOUNIQDELIM 00100
+#define EA_EOLMETA 00200
+#define EA_FINDMETA 00400
+#define EA_FINDDELIM 01000
#ifdef NOUID_T
typedef u_short uid_t;
diff -u ../old/FD-3.00a/system.c ./system.c
--- ../old/FD-3.00a/system.c Sat Jun 21 00:00:00 2008
+++ ./system.c Thu Jun 26 03:01:31 2008
@@ -2328,6 +2328,10 @@
else
#endif
if (argvar && argvar[0]) fprintf2(Xstderr, "%k: ", argvar[0]);
+#ifndef MINIMUMSHELL
+ if (!interactive && shlineno > 0L)
+ fprintf2(Xstderr, "%ld: ", shlineno);
+#endif
if (s) fprintf2(Xstderr, "%a: ",
(*s && syntaxerrno != ER_UNEXPNL) ? s : "syntax error");
if (syntaxerrstr[syntaxerrno])
@@ -3635,7 +3639,8 @@
}
if (!(hdp -> flags & HD_QUOTED) && ret == RET_SUCCESS) {
- cp = evalvararg(buf, '\'', EA_BACKQ, 1);
+ cp = evalvararg(buf, '\'',
+ EA_BACKQ | EA_NOEVALQ | EA_NOEVALDQ, 1);
if (!cp) ret = RET_FAIL;
free2(buf);
buf = cp;
@@ -5208,7 +5213,7 @@
size = c_allocsize(len + *tptrp + n + 2);
if (size > *sp) cp = realloc2(cp, *sp = size);
memmove(&(cp[len]), cp, *tptrp);
- strncpy2(cp, rp -> filename, len);
+ memcpy(cp, rp -> filename, len);
*tptrp += len;
strncpy2(&(cp[*tptrp]), &(s[*ptrp]), n);
*tptrp += n;
@@ -5527,10 +5532,13 @@
if ((stype = getparenttype(trp)) != STT_INCASE
&& stype != STT_CASEEND)
(*ptrp)--;
- else if (!(s[*ptrp]) || s[*ptrp] == '\n')
+ else if (!s[*ptrp] || s[*ptrp] == '\n')
syntaxerrno = ER_UNEXPNL;
else if (s[*ptrp] == ')' || s[*ptrp] == '|')
(*ptrp)--;
+ else if (s[*ptrp] == PMETA
+ && (!s[*ptrp + 1] || s[*ptrp] == '\n'))
+ (*ptrp)--;
else syntaxerrno = ER_UNEXPTOK;
}
break;
---- Cut Here ----
しらい たかし