[Go to BBS]
All articles in a thread
SubjectSAD on MacOS 10.7.3
Article No1007
Date: 2012/05/03(Thu) 15:37:53
Contributor 田内利明
MacOS 10.7.3 (Lion) にSADをinstallしています。

sad.confで、
COMPILER=GCC
USE_X11=YES
X11_PREFIX=/usr/X11R6
USE_TCLTK=YES
のみを生かしてcompileしました。ソースは以下の3つです。

oldsad-snapshot-2012-04-09.tar.gz - (1)
oldsad-V1.0.10.5a.tar.gz - (2)
oldsad-amorita-snapshot-3995.tar.gz -(3)

3つとも、いろいろのwarining messageがありましたが、compileできました。
ILCのbeam delivery systemのSADコードを入力して、上の3つのSADで走らせてみました。

(1)と(2)は同じ結果で、disp Bなどでのtwiss parameterを見るとoptical elementごとに更新されていない正常ではないものでした。

(3)はtwiss parametersは正しい値と示していますが、disp Gなどで表示されるGx, Gy, Gz, s, Chi1など0.000となっています。LengthとValueは正しい値を示しています。
また、draw bx &by & ex ey q* term out では各Q-magnetでのs値がやはり0.00となり図を表示することができません。さらに、script/amida.sad を入力したところ、
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 45 (X_OpenFont)
Value in failed request: 0x1000034
というエラーで終了しました。

Mac上のX環境はMacOSX WorkShop/10.7にしたがっています。GCC,gfortanのversionは4.6.2です。

どのようにしたらよいのか、アドバイスをよろしくお願いします。

田内(KEK, 素核研)

SubjectRe: SAD on MacOS 10.7.3
Article No1009
Date: 2012/05/04(Fri) 01:11:05
ContributorAkio Morita
> oldsad-snapshot-2012-04-09.tar.gz - (1)
> oldsad-V1.0.10.5a.tar.gz - (2)
> oldsad-amorita-snapshot-3995.tar.gz -(3)
>
> 3つとも、いろいろのwarining messageがありましたが、compileできました。
> ILCのbeam delivery systemのSADコードを入力して、上の3つのSADで走らせてみました。
>
> (1)と(2)は同じ結果で、disp Bなどでのtwiss parameterを見るとoptical elementごとに更新されていない正常ではないものでした。
>
「正常でないもの」と分かるということは、正常な処理系が既に存在しているので、
問題の処理系と正常な処理系の違いを2分法で比較するのが原因特定の近道だと思います

例えば、
* 正常な処理系を構成する SAD source codeを問題があったターゲット環境上で makeして結果がどうなるか
* 正常な処理系の実行環境で、問題があった SAD source codeを makeして結果がどうなるか

> (3)はtwiss parametersは正しい値と示していますが、disp Gなどで表示されるGx, Gy, Gz, s, Chi1など0.000となっています。LengthとValueは正しい値を示しています。
> また、draw bx &by & ex ey q* term out では各Q-magnetでのs値がやはり0.00となり図を表示することができません。さらに、script/amida.sad を入力したところ、
> X Error of failed request: BadValue (integer parameter out of range for operation)
> Major opcode of failed request: 45 (X_OpenFont)
> Value in failed request: 0x1000034
> というエラーで終了しました。
>
症状的には、GNU Fortranで ./contrib/tools/workaround-gfortran:module-equivalence.sh を
実行していないケースが近いと思いますが、再現環境が無い&再現に必要な情報が無いため
私には検証は不可能です

SubjectRe^2: SAD on MacOS 10.7.3
Article No1010
Date: 2012/05/05(Sat) 17:01:58
Contributor 田内利明
どうも返事をありがとうございます。

> > oldsad-snapshot-2012-04-09.tar.gz - (1)
> > oldsad-V1.0.10.5a.tar.gz - (2)
> > oldsad-amorita-snapshot-3995.tar.gz -(3)

> * 正常な処理系を構成する SAD source codeを問題があったターゲット環境上で makeして結果がどうなるか
> * 正常な処理系の実行環境で、問題があった SAD source codeを makeして結果がどうなるか

以前の『正常な処理系』と環境は、oldsad-1.0.8.20.5b と Mac OS 10.5 でした。


再度、oldsad-snapshot-2012-04-09 で試したところ以下のエラーを得ていたことがわかりました。
QEF=( L=LQA/2.0, K1=KQEF )! APERTURE=RQA
LALR(1) parser: syntax error
QED=( L=LQA/2.0, K1=KQED )! APERTURE=RQA
LALR(1) parser: syntax error
....
したがって、sad入力ファイル中の , をスペースに交換すると上のsyntax errorがなくなり、正常な結果が得られるようになりました。 ただし、使用していた入力のSAD-scriptは以前のものと同じです。また、acsad5.kek.jp上でもsyntax errorは出ていません。

oldsad-amorita-snapshot-3995 も試しましたが、この場合、結果は改善されませんでした。別の原因のようです。

とりあえず、syntax errorを無くすようにscriptを変え、oldsad-snapshot-2012-04-09 を使用し、問題なくsadを利用できるようになりました。


残る問題はTclTkです。

報告した"X Error of failed request: BadValue (integer parameter out of range for operation)"は、sad.confで、TCLTK_FONT_SYSTEM=Xlib|Xftを指定したためです。
これを指定せず、USE_TCLTK=YES の場合だけとすると、リンク時に、
Undefined symbols for architecture x86_64:
"_FcCharSetHasChar", referenced from:
_GetFont in tkUnixRFont.o
....
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[3]: *** [libtk8.5.dylib] Error 1
make[2]: *** [/Users/tauchi/oldsad-snapshot-2012-04-09/obj/i386-Darwin11/tk8.5.10/.build_done] Error 2
のエラーで終了してしまいます。
また、TclTkはMacOS 10.7にinstallされていますので、
USE_TCLTK=NO
TCLTK_PREFIX=/usr
TCLTK_INCDIR=$(TCLTK_PREFIX)/include
TCLTK_LIBDIR=$(TCLTK_PREFIX)/lib
として、compileしました。 その後、amida.sadを入力したところ、
a = Amida[];
No such loadable library[SAD/Tkinter]
???General::wrongtype: Argument must be Character-string in StringReplace[Tcl["return $tk_version",String],("."->",")]
???General::wrongtype: Argument must be Character-string in StringReplace[Tcl["return $tk_version",String],("."->",")]
...
などのエラーがでました。

このTclTKの問題解決のためのアドバイスもよろしくお願いします。

SubjectRe^3: SAD on MacOS 10.7.3
Article No1011
Date: 2012/05/06(Sun) 13:29:42
ContributorAkio Morita
> > > oldsad-snapshot-2012-04-09.tar.gz - (1)
> > > oldsad-V1.0.10.5a.tar.gz - (2)
> > > oldsad-amorita-snapshot-3995.tar.gz -(3)
>
> > * 正常な処理系を構成する SAD source codeを問題があったターゲット環境上で makeして結果がどうなるか
> > * 正常な処理系の実行環境で、問題があった SAD source codeを makeして結果がどうなるか
>
> 以前の『正常な処理系』と環境は、oldsad-1.0.8.20.5b と Mac OS 10.5 でした。
>
> 再度、oldsad-snapshot-2012-04-09 で試したところ以下のエラーを得ていたことがわかりました。
> QEF=( L=LQA/2.0, K1=KQEF )! APERTURE=RQA
> LALR(1) parser: syntax error
> QED=( L=LQA/2.0, K1=KQED )! APERTURE=RQA
> LALR(1) parser: syntax error
> ....
> したがって、sad入力ファイル中の , をスペースに交換すると上のsyntax errorがなくなり、正常な結果が得られるようになりました。 ただし、使用していた入力のSAD-scriptは以前のものと同じです。また、acsad5.kek.jp上でもsyntax errorは出ていません。
>
既に、acsad5つまり Compaq Tru64上の SADの保守は打ちきられています

> oldsad-amorita-snapshot-3995 も試しましたが、この場合、結果は改善されませんでした。別の原因のようです。
>
> とりあえず、syntax errorを無くすようにscriptを変え、oldsad-snapshot-2012-04-09 を使用し、問題なくsadを利用できるようになりました。
>
私の個人的見解では、古いSADの実装の曖昧さに起因する非互換性です

MAIN levelの構文解析器の実装で、パラメータ部の部分式解析器を YACCで生成している(calc.y)ですが、
昔の実装は 部分式の評価は必ず文法エラーになっていました(YACC上で定義している 部分式の文法)
で、ある時点から後続する字句が次のパラメータ式あるいは パラメータブロックの終了記号の場合に受理、
それ以外は拒否となるように部分式文法の定義を修正しています(2008/03/21 Revision 1.4)
もっとも、現時点でも正しく文脈依存性が実装されていません
(地の文に現れる代入式と構文解析器を共有しているため `;'が終端記号になり得る)

一貫した文法定義自体が存在しない&構文解析器にも不具合多数なので、
文法的な解釈とSADの実行系の解釈が一致しない事例もそれなりにあります

> 報告した"X Error of failed request: BadValue (integer parameter out of range for operation)"は、sad.confで、TCLTK_FONT_SYSTEM=Xlib|Xftを指定したためです。
> これを指定せず、USE_TCLTK=YES の場合だけとすると、リンク時に、
> Undefined symbols for architecture x86_64:
> "_FcCharSetHasChar", referenced from:
> _GetFont in tkUnixRFont.o
> ....
> ld: symbol(s) not found for architecture x86_64
> collect2: ld returned 1 exit status
> make[3]: *** [libtk8.5.dylib] Error 1
> make[2]: *** [/Users/tauchi/oldsad-snapshot-2012-04-09/obj/i386-Darwin11/tk8.5.10/.build_done] Error 2
> のエラーで終了してしまいます。
>
コメントの意味は、TCLTK_FONT_SYSTEM=Xlib or TCLTK_FONT_SYSTEM=Xftのどちらか2択という意味です
設定が無い場合、Tcl/Tk 8.5では Xftベースの font systemが採用されるので、
fontconfig libraryが link可能である必要があるます
これは、runtime libraryだけではなく開発環境もインストールされている必要があります
(FcCharSetHasCharは fontconfig libraryが提供するはずのシンボル)

設定が正しくない場合は、build frameworkによって TCLTK_FONT_SYSTEM=Xlibへフォールバックしますので
前回のレポートにあったエラーメッセージ
>>X Error of failed request: BadValue (integer parameter out of range for operation)
>>Major opcode of failed request: 45 (X_OpenFont)
>>Value in failed request: 0x1000034
は、XLFDベースの昔ながらのX11 Font Systemに対する Font Queryに失敗を意味します
X Serverと通信していれば、Xに寄贈されたフォント群にフォールバックするはずなので、
X11 Font System周りがまともに動いているようには見えません

> また、TclTkはMacOS 10.7にinstallされていますので、
> USE_TCLTK=NO
> TCLTK_PREFIX=/usr
> TCLTK_INCDIR=$(TCLTK_PREFIX)/include
> TCLTK_LIBDIR=$(TCLTK_PREFIX)/lib
> として、compileしました。 その後、amida.sadを入力したところ、
> a = Amida[];
> No such loadable library[SAD/Tkinter]
> ???General::wrongtype: Argument must be Character-string in StringReplace[Tcl["return $tk_version",String],("."->",")]
> ???General::wrongtype: Argument must be Character-string in StringReplace[Tcl["return $tk_version",String],("."->",")]
> ...
> などのエラーがでました。
>
* USE_TCLTK=NOだと Tcl/Tk bindingは組み込まれません (したがってTcl[]関数自体が存在しない)
* 生のTcl/Tkは使えません!
Makefile読むと分かるはずですが、SAD側からTcl/TKの内部データにアクセスするためと
Toolkitの機能拡張のためににパッチを当てています
追加の APIを埋め込むため生のTcl/Tkに対してはシンボル不足でlinkに失敗します
(このために、Tcl/Tk 8.6系列は beta1以降には未対応です)

SubjectRe^4: SAD on MacOS 10.7.3
Article No1012
Date: 2012/05/06(Sun) 16:14:47
ContributorAkio Morita
> > > > oldsad-snapshot-2012-04-09.tar.gz - (1)
> > > > oldsad-V1.0.10.5a.tar.gz - (2)
> > > > oldsad-amorita-snapshot-3995.tar.gz -(3)
> >
> > > * 正常な処理系を構成する SAD source codeを問題があったターゲット環境上で makeして結果がどうなるか
> > > * 正常な処理系の実行環境で、問題があった SAD source codeを makeして結果がどうなるか
> >
> > 以前の『正常な処理系』と環境は、oldsad-1.0.8.20.5b と Mac OS 10.5 でした。
> >
> > 再度、oldsad-snapshot-2012-04-09 で試したところ以下のエラーを得ていたことがわかりました。
> > QEF=( L=LQA/2.0, K1=KQEF )! APERTURE=RQA
> > LALR(1) parser: syntax error
> > QED=( L=LQA/2.0, K1=KQED )! APERTURE=RQA
> > LALR(1) parser: syntax error
> > ....
> > したがって、sad入力ファイル中の , をスペースに交換すると上のsyntax errorがなくなり、正常な結果が得られるようになりました。 ただし、使用していた入力のSAD-scriptは以前のものと同じです。また、acsad5.kek.jp上でもsyntax errorは出ていません。
> >
> 既に、acsad5つまり Compaq Tru64上の SADの保守は打ちきられています
>
> > oldsad-amorita-snapshot-3995 も試しましたが、この場合、結果は改善されませんでした。別の原因のようです。
> >
> > とりあえず、syntax errorを無くすようにscriptを変え、oldsad-snapshot-2012-04-09 を使用し、問題なくsadを利用できるようになりました。
> >
> 私の個人的見解では、古いSADの実装の曖昧さに起因する非互換性です
>
> MAIN levelの構文解析器の実装で、パラメータ部の部分式解析器を YACCで生成している(calc.y)ですが、
> 昔の実装は 部分式の評価は必ず文法エラーになっていました(YACC上で定義している 部分式の文法)
> で、ある時点から後続する字句が次のパラメータ式あるいは パラメータブロックの終了記号の場合に受理、
> それ以外は拒否となるように部分式文法の定義を修正しています(2008/03/21 Revision 1.4)
> もっとも、現時点でも正しく文脈依存性が実装されていません
> (地の文に現れる代入式と構文解析器を共有しているため `;'が終端記号になり得る)
>
一応、以下のパッチを当てて src/calc.cを作り直せば歴史的 ","構文を受け入れるようになるはずです
Index: src/calc.y
===================================================================
--- src/calc.y (revision 3670)
+++ src/calc.y (revision 3671)
@@ -24,7 +24,7 @@
%right '~'
%start expr
%%
-end_of_expr: ';' | ')' | ID;
+end_of_expr: ',' | ';' | ')' | ID;
opt_eol: /* empty */ | EOL;
expr:
UNIT {yyerror("Unexpected UNIT");}
Index: Changes
===================================================================
--- Changes (revision 3670)
+++ Changes (revision 3671)
@@ -1,3 +1,8 @@
+2011/06/02:
+ Fix expr syntax to accept tailing `,'
+ src/calc.y
+ src/calc.c
+
2011/05/30:
Update MFC status
TODO.MFC

SubjectRe^5: SAD on MacOS 10.7.3
Article No1013
Date: 2012/05/08(Tue) 20:24:28
Contributor 田内利明
TCLTK_FONT_SYSTEMとして、Xlib又はXftにするかについて、X11とfontconfigを調べて見ました。
MAcOS 10.7.3上の関係すると思われるものは、
/usr/X11/lib/X11/fontconfig
/usr/X11/share/fonts
が見つかりました。 これらはdefaultでinstallされていると思います。
ただし、SADとの関係がわかりませんので、ここで作業を中止したいと思います。TDR(topdraw)が利用できますのでほとんどTclTKを使用しなくてもよいと思います。

どなたか、MAcOS 10.7.3上で、SAD, TclTKを使用されている方がいればアドバイスをよろしくお願いします。

SubjectRe^6: SAD on MacOS 10.7.3
Article No1014
Date: 2012/05/17(Thu) 12:29:25
Contributor高木宏之
私も10.7に上げてからtcltkがコンパイルエラーを吐き出すようになりましたが
finkのgcc 4.6.2を使うとすんなり通りました。
apple純正およびmacportsの4.6.2では上手くコンパイルできませんでした。
何故かはわかりませんが。。。

sad.confの設定は田内さんと同様に以下のものを外しただけです。
COMPILER=GCC
USE_X11=YES
X11_PREFIX=/usr/X11R6
USE_TCLTK=YES

ご参考までに。