月別アーカイブ: 2012年11月

stklosでTk

gtkでは、エラーが出てしまうので、Tkを試しました。
stklos-pkg –test pstk

問題無く表示され、エラーも出ないのでinstallします。
stklos-pkg –install pstk

検索しても使い方が判らないので、pkgを解凍してみます。
tar xvzf ~/.stklos/pkg/cache/pstk-1.0.0.tar.gz
pstk/doc/pstk.html
のYour First PS/Tk Programをコピーして、pstk_1st.scmで保存します。
pstk.scmのBEGINNING OF NON-PORTABLE SECTIONの部分を修正します。
; Comment this out:の部分をコメントアウトして
; STKLOSの部分を有効にします。

stklos -f pstk_1st.scm

で無事動きました。

pstk.scmをみるとinstallしている他のSchemeでも動きそうなので試してみました。
stklosと同じようにNON-PORTABLEの部分を書き換えましたが
Gauche、mzscheme、scheme48とも動きませんでした。

追記
Gaucheは、
git clone https://github.com/shirok/Gauche-tk.git
cd Gauche-tk/
autoconf
./configure
make check
passed.が出るのを確認して、
sudo make install
cd examples/
gosh bind.scm
で表示されました。

追記 11/30
MacPortsでinstallした
guile @1.8.8_0 (active)
は、
guile pstk_1st.scm
で動きました。

PPC Macでstklos

[~/src/Scheme]sudo port install stklos
[~/src/Scheme]stklos -v
stklos (version 1.10)
http://www.geocities.jp/m_hiroi/func/abcscm12.html#list1
のソースをコピーし(use srfi-1)をコメントアウトして、stklos -f ファイル名で実行できました。
srfi-1を使うなら(require “srfi-1”)で出来ます。
http://www.stklos.net/stklos-gtk-base.html
を参考にgtkを使える様にします。
[~/src/Scheme]stklos-pkg –test stklos-gtk-base
**** cannot find package “stklos-gtk-base” in repository
**** EXIT
エラーになるので、
[~/src/Scheme]stklos-pkg –sync
Synchronizing server “main”
“http://www.stklos.net/ScmPkg/main” … done
Synchronizing server “stklos”
“http://www.stklos.net/ScmPkg/stklos” … done
[~/src/Scheme]stklos-pkg –test stklos-gtk-base
Testing stklos-gtk-base
(cd stklos-gtk-base; stklos-compile -c -L .. -o ../stklos-gtk-base.ostk stklos-\
gtk-base.spi)
**** Error while executing file “/opt/local/bin/stklos-compile”
Where: in error
Reason: Cannot find GTK+ library file “libgtk-x11-2.0”
今度はgtkをX11にしていないからのようなので
[~/src/Scheme]cd /opt/local/lib
[/opt/local/lib]sudo ln -s libgdk-quartz-2.0.dylib libgdk-x11-2.0.dylib
[/opt/local/lib]sudo ln -s libgdkglext-quartz-1.0.dylib libgdkglext-x11-1.0.dylib
[/opt/local/lib]sudo ln -s libgtk-quartz-2.0.dylib libgtk-x11-2.0.dylib
[/opt/local/lib]sudo ln -s libgtkglext-quartz-1.0.dylib libgtkglext-x11-1.0.dylib
[/opt/local/lib]cd ~/src/Scheme
再度
[~/src/Scheme]stklos-pkg –test stklos-gtk-base
Testing stklos-gtk-base
(cd stklos-gtk-base; stklos-compile -c -L .. -o ../stklos-gtk-base.ostk stklos-gtk-base.spi)
stklos-gtk-base.stk:60: warning: reference to undefined symbol iota
Compilation time 356.179ms
(cd stklos-gtk-base/test; stklos-compile -c -L ../.. -o ../../stklos-gtk-base-test.ostk stklos-gtk-base-test.spi)
Compilation time 46.177ms
echo ‘Running test’
Running test
stklos -c -l stklos-gtk-base-test.ostk -e ‘(begin (import stklos-gtk-base-test) (run ‘\”()))’
2012-11-23 23:09:26.388 stklos[42695:3103] *** _NSAutoreleaseNoPool(): Object 0x2bb260 of class NSConcreteMutableData autoreleased with no pool in place – just leaking
Stack: (0x91f27dac 0x91e54e14 0x9413286c 0x94131b10 0x94130e18 0x9412fcc8 0x9412c4cc 0x64ef28 0x63b3a0 0x63b410 0x60ae94 0x401f6c 0x402f98 0x403144 0x10e98a0 0xcb968 0xcb488 0x7558 0x329f4 0x330ac 0x34c48 0xe373c 0xde2a8 0x904c2f74)
2012-11-23 23:09:26.395 stklos[42695:3103] *** _NSAutoreleaseNoPool(): Object 0x2203f0 of class NSConcreteMutableData autoreleased with no pool in place – just leaking
Stack: (0x91f27dac 0x91e54e14 0x9413286c 0x63d6b8 0x94131ecc 0x94130e18 0x9412fcc8 0x9412c4cc 0x64ef28 0x63b3a0 0x63b410 0x60ae94 0x401f6c 0x402f98 0x403144 0x10e98a0 0xcb968 0xcb488 0x7558 0x329f4 0x330ac 0x34c48 0xe373c 0xde2a8 0x904c2f74)
^Cmake: *** [test] Interrupt
ボタンは表示されましたがエラーでます。

とりあえずinstallして、上記URLにプログラムを実行してみます。
[~/src/Scheme]stklos-pkg –install stklos-gtk-base
[~/src/Scheme]stklos -f stklos.stk

表はされますが(testと同じ)、同じエラーになります。

最新のソースを取得してinstallしてみます。
[~/src/Scheme]hg clone http://www.stklos.net/download/current-tree STklos
[~/src/Scheme]cd STklos/
[~/src/Scheme]./configure
[~/src/Scheme]make
[~/src/Scheme]sudo make install
[~/src/Scheme]stklos -v
stklos (version 1.11)
結果は、同じでした。

MacPortsのtkでquartzの指定が無くなった

port upgradeしたらtkがX11に表示されるようになってしまいました。
[~/src/Tcl]port variants tk
tk has the variants:
universal: Build for multiple architectures
quartzの指定が無くなっています。

@でバージョン指定すれば古いバージョンが指定できると思っていましたが駄目でした。
http://blog.iss.ms/2009/12/27/094523
の手順が必要なようです。
リビジョン番号を調べます。
Rev    時期   更新者   ログメッセージ
@99837  8時間  ryandesign tk: fix build on Leopard and older by not offering the quartz variant …
@99787  41時間 jeremyhu  tk: Add an x11 variant which conflicts with quartz.
@99784  42時間 jmr     tk: keep xorg-libX11 dependency in quartz variant (#37005)
@99712  5日   jmr     tcl, tk: update to 8.5.13 (resolves #20799, #35692)
@97617  2ヵ月  jmr     tk: use 10.6 SDK so QuickDraw headers are available when building with …
@96064  4ヵ月  mww    tcl, tk: version 8.5.12

調べたリビジョンを取得します。
[~/src/Tcl]svn co -r 97617 http://svn.macports.org/repository/macports/trunk/dports/x11/tk

確認します。
[~/src/Tcl]cd tk
[~/src/Tcl/tk]port variants
tk has the variants:
quartz: Support for native Mac OS X graphics
universal: Build for multiple architectures
quartzの指定が有ります。

インストールします。
[~/src/Tcl/tk]sudo port install +quartz

使わない方を削除します。
[~/src/Tcl/tk]sudo port uninstall tk @8.5.13_0

追記 11/23
リビジョン番号を調べるのは。webページより
svn log http://svn.macports.org/repository/macports/trunk/dports/x11/tk
の方が簡単でした。

PPC MacでNu

nu2は、targets only from 10.7 onward.なので
sudo port install nu
でinstallします。
サンプルを動かしてみます。
[~/src/Nu]cp -r /opt/local/share/nu/examples/ .
[~/src/Nu]cd examples/Console/
[Nu/examples/Console]ls
./ ../ Nukefile nu/
[Nu/examples/Console]nuke
Using Nukefile with target default.
nuke: running in ~/src/Nu/examples/Console
nuke: echo -n ‘APPL????’ > ‘Console.app/Contents/PkgInfo’
[Nu/examples/Console]ls
./ ../ Console.app/ Nukefile nu/
[Nu/examples/Console]open Console.app

NukefileがMakefileで、nukeがmakeコマンドのような感じです。
nuの説明が
http://codezine.jp/article/detail/4698
にあります。ここのNuTwitterClient.zipをダウンロードして、nukeして動かしてみました。
でもBasic認証のみのようで、タイムラインの表示は出ませんでした。
プログラム自体は動いていました。

LTK(Lisp Tk)

cd ~/.sbcl/site/
wget http://common-lisp.net/project/clbuild/mirror/ltk/ltk-mw.lisp
でファイルを取得して
(asdf-install:install :ltk)
でインストールできました。プログラムは、
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/commonlisp/ltk/HTML/index.html
にある物で動作を確認しました。
一行目が
#!/usr/bin/env clisp
になっているのは、コメントアウトして文字コードはUTFにしています。
sbcl,clispとも動きました。

PPC Macでcl-gtk2

http://common-lisp.net/project/cl-gtk2/tutorial.html
を参考にinstallしました。
.soを使おうとするので、dylibに書き換えます。
grep -r dylib *
gdk/gdk.package.lisp: (:unix “/opt/local/lib/libgdk-quartz-2.0.dylib”)
gdk/gdk.package.lisp: (:unix “/opt/local/lib/libgdk_pixbuf-2.0.dylib”)
generating.lisp:(load-foreign-library “/opt/local/lib/libgtk-quartz-2.0.dylib”)
glib/glib.lisp: (:unix “/opt/local/lib/libglib-2.0.dylib”)
glib/glib.lisp: (:unix “/opt/local/lib/libgthread-2.0.dylib”)
glib/gobject.init.lisp: (:unix “/opt/local/lib/libgobject-2.0.dylib”)
gtk/gtk.package.lisp: (:unix “/opt/local/lib/libgtk-quartz-2.0.dylib”)
gtk-glext/gtkglext.package.lisp: (:unix “/opt/local/lib/libgtkglext-quartz-1.0.dylib”)
gtk-glext/gtkglext.package.lisp: (:unix “/opt/local/lib/libgdkglext-quartz-1.0.dylib”)
pango/pango.init.lisp: (:unix “/opt/local/lib/libpango-1.0.dylib”)

Can not define ‘gsize’, unknown CPU architecture (known are x86 and x86-64
になるので、glib/glib.lispにppc32を追加します。
(eval-when (:compile-toplevel :load-toplevel :execute)
  (cond
   ((cffi-features:cffi-feature-p :x86-64) (defctype gsize :uint64))
   ((cffi-features:cffi-feature-p :x86) (defctype gsize :ulong))
   ((cffi-features:cffi-feature-p :ppc32) (defctype gsize :ulong))
これで、上記URLにあるHello, worldが表示できました。

http://d.hatena.ne.jp/khiker/20090811/cl_library
(gtk-demo:demo-text-editor)
でエディターが表示されると有りました。
早速試すと
(:34190): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)’ failed
が出て起動できません。
defaults write sbcl AppleLanguages ‘(“en-US”,”jp”)’
してから起動すると無事動きました。プルダウンメニューは日本語で表示されてました。


追記 11/18
(gtk-demo:demo-all)
にすると、選択画面が出てdemoの内容を選べます。
追記 11/19
[~/.sbcl/site/cl-opengl]grep -r darwin *
gl/library.lisp: (:darwin (:framework “OpenGL”))
glu/library.lisp: ((:and :unix (:not :darwin)) (:or “libGLU.so.1” “libGLU.so”))
になっているので、dylibに書き換えている所は、:darwinを使った書き換えの方が良いよいです。
gtk2 @2.24.13_0+no_x11+quartzでinstallしているので上記修正ですが、
+x11でinstallしているなら、quartzの部分はx11になるので:orで両方書いた方がより多くの環境で動くと思います。

lispでSDL

11/14に動かないと書いたSDLですが動きました。
http://lambdasakura.hatenablog.com/entries/2011/01/12
を参考にして、win32-*のファイルの変わりにmac-*のファイルをダウンロードして
手順通りやっていたのですが、
(asdf:operate ‘asdf:load-op :lispbuilder-sdl)
でエラーになっていました。
.sbcl/site/lispbuilder-sdl/bin/README-SDL.txtに有る様に
sudo mv *framework /Library/Frameworks/
するとcocoahelperでエラーになります。
cd .sbcl/site/lispbuilder-sdl/cocoahelper
make cocoahelper.framework
sudo rm -rf /Library/Frameworks/cocoahelper.framework
sudo mv cocoahelper.framework /Library/Frameworks/
で動きました。

clispは、
http://d.hatena.ne.jp/TAKUMA_N/20110429/1304058909
に有る様に、
sudo port install ffcall
sudo port uninstall clisp
sudo port install clisp
でcfffiが動く様になり、SDLも動きました。
上記URLでは、sudo port install clisp +dynffiしてますが、
port variants clisp
clisp has no variants
でした。
http://www.math.s.chiba-u.ac.jp/~matsu/cl/clisp.html
を参考に、asdfとasdf-installを入れてあとは、sbclと同じでOKでした。

cl-opengl

SDLをインストールしていてうまく動かないので、cffiの確認をかねてcl-openglを試しました。
http://blog.bugyo.tk/lyrical/archives/261
を参考にインストールしました。

sudo port install darcs
Password:
—> Computing dependencies for darcs
Error: Cannot install hs-platform-ghc for the arch(s) ‘ppc’ because
Error: its dependency ghc-bootstrap only supports the arch(s) ‘x86_64’.
Error: Unable to execute port: architecture mismatch
でいきなり最初のステップでエラーになります。

git clone https://github.com/3b/cl-opengl.git
でソースを取得して、
cp -r cl-opengl ~/.sbcl/site/
でコピーしました。
後は、上記URLの手順でOKでした。(cffiは、インストールして有ったので飛ばしました)
CL-USER> (cl-glut-examples:gears)
5991 frames in 5.0 seconds = 1198.200 FPS
6806 frames in 5.0 seconds = 1361.200 FPS
6838 frames in 5.0 seconds = 1367.600 FPS
6828 frames in 5.0 seconds = 1365.600 FPS

T
CL-USER> (quit)

MacPortでinstallしたsbcl @1.1.1_0 で確認しました。

追記 11/16
cffiの確認なら
http://d.hatena.ne.jp/niitsuma/20080328
が簡単でした。