Gauche > Archives > 2010/01/05

2010/01/05 09:43:52 UTCk_tsj
#
Gaucheをmake -j 4したときに以下のエラーが起きました。
#
make[1]: Entering directory `/tmp/Gauche-0.9/src'
/bin/bash ./genconfig
/bin/bash ./genconfig
echo "#!/usr/local/bin/gosh" > gauche-install && \
        cat gauche-install.in >> gauche-install
echo "#!/usr/local/bin/gosh" > gauche-package && \
        cat gauche-package.in >> gauche-package
echo "#!/usr/local/bin/gosh" > gauche-cesconv && \
        cat gauche-cesconv.in >> gauche-cesconv
mv: cannot stat `gauche-config.c.tmp': No such file or directory
mv: cannot stat `gauche/arch.h.tmp': No such file or directory
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./../gc/include   -g -O2 -fPIC -fomit-frame-pointer  -c gauche-config.c
mv: cannot stat `../lib/gauche/config.scm.tmp': No such file or directory
make[1]: *** [gauche/arch.h] Error 1
make[1]: *** Waiting for unfinished jobs....
#
タイミングによっては問題ないこともありますが、手元の環境ではmake完了後に
#
rm src/gauche-config.* src/gauche/arch.h && make -j 4
#
とすれば高確率で再現できました。
#
genconigが同時実行されるのが問題のようなのでgenconfigをgauche-conifg.cとconifg.scm向け、arch.h向けというように分割してみました。 http://tinyurl.com/y8jmfz7
2010/01/05 09:49:53 UTCshiro
#
ソースが増殖するのはちょっといやな感じですね。tmpからscmへのリネームが競合してるということは、一時ファイル名をユニークにしてみたらどうなるでしょう? tmp.$$ などとして。
2010/01/05 09:58:58 UTCk_tsj
#
あぁ、なるほど。ちょっとやってみます。
2010/01/05 10:03:33 UTCk_tsj
#
/bin/bash ./genconfig
/bin/bash ./genconfig
echo "#!/usr/local/bin/gosh" > gauche-install && \
        cat gauche-install.in >> gauche-install
echo "#!/usr/local/bin/gosh" > gauche-package && \
        cat gauche-package.in >> gauche-package
echo "#!/usr/local/bin/gosh" > gauche-cesconv && \
        cat gauche-cesconv.in >> gauche-cesconv
mv: cannot stat `gauche/arch.h.tmp.12186': No such file or directory
mv: cannot stat `gauche/arch.h.tmp.12187': No such file or directory
#
意外にもうまくいかなかったです。なんでだろうな.
#
修正漏れでした。。。
2010/01/05 10:10:49 UTCk_tsj
#
OK、テストまで通った。
#
diff --git a/src/genconfig.in b/src/genconfig.in
index f4269be..6ee82b9 100644
--- a/src/genconfig.in
+++ b/src/genconfig.in
@@ -81,7 +81,7 @@ libgauche_so="@LIBGAUCHE_SO@"
 #============================================================
 # gauche-config.c
 #
-cat > gauche-config.c.tmp <<EOF
+cat > gauche-config.c.tmp.$$ <<EOF
 /* Generated automatically by genconfig.  DO NOT EDIT */

 /* The small program gauche-config is installed in the same place
@@ -338,12 +338,12 @@ int main(int argc, char **argv)
 }

 EOF
-mv gauche-config.c.tmp gauche-config.c
+mv gauche-config.c.tmp.$$ gauche-config.c

 #============================================================
 # gauche/arch.h
 #
-cat > gauche/arch.h.tmp <<EOF
+cat > gauche/arch.h.tmp.$$ <<EOF
 /* Generated by genconfig.  DO NOT EDIT */
 #define GAUCHE_ARCH "$arch"
 #define GAUCHE_LIB_DIR "$gauche_libdir"
@@ -352,12 +352,12 @@ cat > gauche/arch.h.tmp <<EOF
 #define GAUCHE_SITE_ARCH_DIR "$gauche_sitearchdir"
 EOF

-mv gauche/arch.h.tmp gauche/arch.h
+mv gauche/arch.h.tmp.$$ gauche/arch.h

 #============================================================
 # gauche/arch.h
 #
-cat > ../lib/gauche/config.scm.tmp <<EOF
+cat > ../lib/gauche/config.scm.tmp.$$ <<EOF
 ;; Generated by genconfig.  DO NOT EDIT
 (define-module gauche.config
   (use gauche.process)
@@ -413,7 +413,7 @@ cat > ../lib/gauche/config.scm.tmp <<EOF

 EOF

-mv ../lib/gauche/config.scm.tmp ../lib/gauche/config.scm
+mv ../lib/gauche/config.scm.tmp.$$ ../lib/gauche/config.scm

 # Local variables:
 # mode: shell-script
#
一応パッチです。
2010/01/05 10:56:59 UTCshiro
#
直しました。ありがとうございます。