みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

npietを自分でビルドしてみる(最低限なら簡単だよ!)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

npietを自分でビルドしてみる(最低限なら簡単だよ!)

投稿記事 by みけCAT » 10年前

Pietはソースコードを画像で「描く」という、面白い言語です。
ここでは詳しい説明は省略します。

npiet - an interpreter and editor for the piet programming language
npietというPietのインタプリタがあります。
このインタプリタは、Pietの公式ページでも推奨されているようなので、やはりこれを使いたいと考えます。
Erik Schoenfelder has written npiet, a very nice Piet interpreter with the ability to print program traces and a supporting Piet editor! It's feature-packed and the best version I'm aware of.
(http://www.dangermouse.net/esoteric/piet/tools.html より引用)

さて、npietのページを見ると、windowsのバイナリが用意されています。
「おっ!親切設計じゃん!」と思え、確かに実用的なのですが、2点ほど欠点があります。
・最新版ではない (バイナリにはよくあること)
・ソースコードのパスを何も考えずに渡すと、謎の警告が出力される
npiet_official.png
npiet公式バイナリが出力する謎のメッセージ
npiet_official.png (55.8 KiB) 閲覧数: 436 回
オフトピック
「謎の警告」と表現していますが、英語が読めないわけではないですよ!念のため。
そこで、自分でビルドしようと思いました。
どうせ./configureしてmakeしてmake installするだけだろ、そう思っていた時期が私にもありました。

コンパイラ「gd.hが無いよ!」(轟沈)

俺「はいはいlibgdをダウンロードして./configureしてmakeしてmake installしてパスを指定すればいいんだろ」
そう思っていた時期が私にもありました。

見てくださいこの大量の要求ライブラリ!

CODE:

日- npiet
├日- libpng
│└- zlib
├日- libgd
│├- jpeg
│├日- libpng (他の所でビルド済み)
││└- zlib (他の所でビルド済み)
│├日- libXpm (ビルド失敗)
││└日- imake
││ ├- (CPPFLAGS=-I(xprotoのinclude)/X11 -Dinline_syntax=1)
││ └- xproto
│├日- tiff (認識しないのでサポートを外した)
││├- xz
││├- zlib (他の所でビルド済み)
││└- jpeg (他の所でビルド済み)
│├日- libvpx (ビルド中止)
││└- yasm
│├日- freetype (ビルド失敗)
││├日- bzip2
│││└- (make installでBad file numberと怒られたら、touchでそのファイルを作成)
││├- zlib (他の所でビルド済み)
││└- libpng (他の所でビルド済み)
│└日- fontconfig (ビルド失敗)
│ ├日- libxml2 (ビルド失敗)
│ │├- zlib (他の所でビルド済み)
│ │└- lzma -> xz (他の所でビルド済み)
│ └- expat (libxml2とどちらか1個でよい)
└- giflib
しかもビルド失敗(相当含む)が大量に生えています。
► スポイラーを表示
しかし、とりあえずビルドに成功し、認識したライブラリを関連付けたlibgdのビルドに成功し、giflibのビルドを試みました。
結果→makeがutilに入ったあと、mkstempが無いよ!と怒られ、死亡。
これも轟沈かと思われましたが、気にせずmake installを実行したら奇跡的に必要なライブラリは確保できました。

さて、いよいよnpiet本体のビルドです。
これまでのライブラリみたいに要求されたライブラリのパスを設定して./configure、ビルドします。
コンパイラ「gd.hがないよ!」
俺「は!?ちゃんと環境変数にパス入れたよ!?何言ってるの?」
Makefile「いつから設定が反映されていると錯覚していた…」

めんどくさいのでMakefileのCCに設定されている"gcc"の後ろに直接パスの設定を書き込みます。
gcc「undefined reference!!!!!」(轟沈)

さらにめんどくさいので、libgdの関連付けを切ってconfigureします。
同様にMakefileにパスの設定を書き込み、ついでにFLAGSとLDFLAGSの設定も書き換えてmakeします。
gcc「gd.hが無いよ!!」
俺「は!?configureでlibgdのサポートは切ったつもりだったが…」

しかし、よく見るとこれはnpiet-foogolに対して吐かれたエラーであり、npiet.exeはできていました。
そこでこのままmake installを実行してみます。

CODE:

$ make install
/bin/install -c npiet /c/myprograms/npiet-build/bin/npiet-1.3b/bin
/bin/install: cannot create regular file `/c/myprograms/npiet-build/bin/npiet-1.
3b/bin.exe': No such file or directory
make: *** [install] Error 1
俺「は!?bin.exeって誰だよ!?」

でも大丈夫!このフォルダにnpiet.exeはあるので、きちんと起動してPietのプログラムを実行できます!
npiet_builded.png
npiet独自ビルド版
npiet_builded.png (47.02 KiB) 閲覧数: 443 回
libgdを切った結果、トレース画像を生成できなくなったみたいですが、
普通に実行したりテキストでトレースを出力したりする分には問題ないようです。
さらに、パスの区切りに円マークを使用しても、もちろん謎の警告は出力されない!快適!!
Dependency Walkerで確認しても、KERNEL32.DLLとMSVCRT.DLL以外のDLLは(直接は)要求していませんでした。
npiet_dependency_walker.png
Dependency Walkerでチェックした結果
npiet_dependency_walker.png (62.14 KiB) 閲覧数: 443 回
まとめ
Windowsでソースコードのパスに円マークを含めても謎の警告が出ないnpietを簡単に作るには
  1. npietのソースコードをダウンロードし、解凍する
    npiet - an interpreter and editor for the piet programming language
  2. zlib、libpng、giflibをダウンロードして解凍、ビルド、installする
    zlib Home Site
    libpng Home Page
    GIFLIB - Browse Files at SourceForge.net
  3. 2でinstallしたディレクトリを指定するコンパイルオプションを適切な環境変数に設定し、npietをconfigureする
  4. 生成されたMakefileをテキストエディタで開き、CCの行に1でinstallしたディレクトリを指定するコンパイルオプションを書き加える
    ※下の方にあるFLAGSにヘッダファイルのあるディレクトリを指定するオプションを、
     LDFLAGSにライブラリのあるディレクトリを指定するオプションを書き加えてもよさそう
  5. makeを実行する。エラーが出ても、運がよければインタプリタ本体であるnpiet.exeが生成されている

コメントはまだありません。