試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

GNU/Linux上におけるppmckについてのその後(2010/2/2現在)

2009年末に更新されているppmckのバージョン9aでは、GNU/Linux上で用いる上で非常にありがたい修正点が複数ある。

  1. 修正点
    1. GNU/Linux上でビルドしたnesasmが落ちる問題の修正
    2. MMLからNSFへの変換スクリプト
    3. ビルドスクリプトについて
  2. Mandriva Linux向けのパッケージを作成

修正点

GNU/Linux上でビルドしたnesasmが落ちる問題の修正
nesasmコマンドが内部エラーを起こして落ちてしまう問題が(ppmck側で)修正されている。これによりWineでWin32版を用いる必要がなくなっている。

MMLからNSFへの変換スクリプト
以前からあるperlスクリプト以外にMMLファイルからNSFファイルへの変換シェルスクリプトmck/songs/mknsfが追加されている。
このスクリプト事前に入力MMLファイルを現在の作業ディレクトリに配置し、その拡張子「.mml」を除いた部分を引数に指定して実行する。例えばeine.mmlというファイルを変換する場合は「mknsf eine」とする。シェルの補完機能を用いると拡張子まで入力されてしまい、後から削る必要が出ることもあるので注意。
変換後には幾つかの中間ファイルが残ってしまうが、繰り返し実行した場合は前回のファイルを消すようになっているので、それにより問題が起こるということはない。

ビルドスクリプトについて
GNU/Linux上でのビルド作業を自動化するスクリプトmck/src/compile_unix.shがあるが、日本語メッセージのエンコーディング変換処理がEUC-JP向けでUTF-8環境では文字化けするため

nkf --overwrite -e -Lu *.c *.h

の部分を

nkf --overwrite -w -Lu *.c *.h

もしくは(追加でインストールする必要のある場合が多い)nkfを用いずに、標準のiconvを用いて

for f in *.[ch]; do mv ${f}{,.orig}; iconv -f cp932 -t utf8 ${f}.orig > ${f}; done

とするとよい。

Mandriva Linux向けのパッケージを作成

GNU/Linuxネイティブのアプリケーションとして正常に動くようになったこともあり、Mandriva Linux向けのRPMパッケージを作成してみた。
システムへのインストールとなるため、ファイルの配置は一部変えており、Windows向けのバッチファイルなどの不要なファイルは入れていない。また、nesasmコマンドを含むMagicKitパッケージは別のパッケージに分けた。*1ppmckのソースツリーに含まれるnesasmにはsrc/as/defs.hの「SBOLSZ」が「SBOLSZ+1」になっている修正があるので、これを適用したものをパッケージ化した。
ppmckのファイル配置は

/usr/bin/mknsf
/usr/bin/mknsf_e
/usr/bin/ppmckc
/usr/bin/ppmckc_e
/usr/share/doc/ppmck/*.txt (mck/とmck/doc/以下のテキスト・圧縮済み)
/usr/share/ppmck/nes_include/ppmck.asm
/usr/share/ppmck/nes_include/ppmck/*.h
/usr/share/ppmck/songs/sample_auto_bank.mml
/usr/share/ppmck/songs/sample_n106_sa.mml

のようにし、mknsfの先頭には環境変数NES_INCLUDEを設定する記述を入れている(set_envs.shは用いない)。mknsf_eは配布ファイルにはないが、mknsfの中でppmckcの代わりにppmckc_eを用いるバージョンとして入れた。
また、(2009.1とそれよりも後のバージョンのMandriva LinuxRPMパッケージをビルドする際の最適化オプションに付いてくる)-Wformat -Werror=format-securityオプションを付けたときのエラー*2対策としてprintf()関数の最初の引数「"%s"」を補う修正も行っている。
パッケージは別館の配布ページで公開した。
(2014/10/12)配布ページは削除済み。

使用したバージョン:

  • ppmck 9a

*1:バージョンがずっと変わっていないため、今後ppmckのパッケージを更新するときに同じnesasmを繰り返し入れるのには抵抗があるのと、同ツール群にはpceasという別のツールも含むということなどにより分けることにした

*2:「format not a string literal and no format arguments(フォーマットは非文字列リテラルで、且つフォーマット引数を持ちません)」