[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00797] Re: configure 時のエラーについて



 しらいです。

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

                                               しらい たかし