Newer
Older
Ruby / make / mml530b / doc / compile.txt
 コンパイル方法


・UNIX上でのコンパイルの場合

  src/makefileを使います。また、コンパイルにはANSI C(例えばgcc)が必要で
  す。コンパイル手順は以下の通りです。

  1) srcディレクトリ下に移る
  2) 必要に応じてmakefileをいじる(実際には、いじる必要のある場合は多くない
     と思います)。gcc以外のC処理系を利用の場合は、CCおよびCFLAGSの定義を
     適切に変更して下さい。また、CONFIGSで定義可能なコンパイルスイッチの
     意味は下に記します。インストール先のディレクトリ(BINDIR, MANDIR)もお
     好みに応じて変更して下さい。ただし、そこに指定したディレクトリが既存
     である必要があります。
  3) make	…うまくできなかったらソースを適宜修正して下さい^^;
  4) make install(必要に応じてsuしてから)


・Win32上のegcs(mingw32)でコンパイル(Win32コンソール版を作成)する場合

  src/makefile.egcをmakefileにリネームして使って下さい。


・MS-DOS上のBorland C(bcc)でコンパイルする場合

  src/makefile.bcc をmakefileにリネームして使って下さい.
  (一部アセンブラを使っていますのでTASMが必要です)
  同梱のDOS版バイナリはbccでコンパイルしたものです。


・MS-DOS上のLSI C-86試食版でコンパイルする場合

  v5.27からLSI C-86試食版でコンパイル可能になっています。コンパイルする
には、src/makefile.lccをmakefileにリネームして使って下さい。手元では、
v3.30c試食版でコンパイルできることを確認しています。なお、同試食版はスモー
ルモデルである関係上、同試食版でmakeしたmml2midは、あまり大きなMMLファイ
ルはコンパイルできない可能性があります。
  LSI C-86試食版の場合、リンク時にスタックサイズをデフォルト(2500バイト)
よりある程度大きくしてやらないと、コンパイルはできても正常に動作しません
(多くのファイルではちゃんと動くように見えても、一部のファイルで異常動作
したりします)。添付のmakefile.lccではスタックサイズを6kバイトに指定して
います。動作がおかしい場合、lccの-hオプション(スタックサイズのチェックを
行う)をオンにして再コンパイルして、スタック溢れが起きていないか確かめる
とよいかも知れません。
  (注) LSI C-86試食版のサポートは試験的なもので、将来の版は再び、同試食
版ではコンパイルできなくなるかも知れません。


・makefile中で定義可能なコンパイルスイッチとその意味

  下記のスイッチを、必要に応じて各makefile中のCONFIGSマクロの定義に加え
  て下さい。

  -DUSE_NONMINUS_OPTS … これを定義すると以下の特例が有効になります。
      ・コマンド引数のうち、MMLファイル名の次の引数が2文字以下なら、それ
	とそれ以降の引数は「-」の有無に関わらず全てオプション引数と見な
	される
      ・MIDIファイル名より後の引数が「-」で始まっていなくてもエラーには
	ならず、それらは無条件にオプション引数扱いされる
  -DCASE_INSENSITIVE_OPTS … オプションスイッチの大文字小文字を区別しな
    いようになります。
  -DDEFAULT_MSCODE … MMLファイル内の文字列のコードとしてMS漢字コード(シ
    フトJIS)を仮定するのをデフォルトにします。この定義がない場合、文字列
    のコードとしてEUCコードを仮定するのがデフォルトになります。DOS版およ
    びWin32版はこれを定義してmakeされています(makefile.bcc, makefile.egc
    にもこの定義が含まれています)。
  -DNONANSI_REALLOC … お使いのCコンパイラのrealloc(), free()がANSI Cの
    規格に準拠していない場合に定義します。ANSI Cでは、realloc()の第1引数
    にNULLを渡したり、free()の引数にNULLを渡したりしても正常に動作するこ
    とを定めており、本ソースもそれを前提としています。そうでないコンパイ
    ラを利用する場合は、このスイッチを定義して下さい。
  -DNO_MEMMOVE … お使いのCコンパイラに関数memmove()がない場合に定義して
    下さい。
  -DMSG_TO_STDOUT … これを定義すると、各種メッセージがstderrでなくstdout
    に出力されます。DOS版およびWin32版はこれを定義してmakeされています
    (makefile.bcc, makefile.egcにもこの定義が含まれています)。


・ソースについて若干注記

  アセンブリ言語ファイル(file.asm)がありますが、これはDOS上のBorland Cで
コンパイルする場合しか使われません。UNIX版、Win32コンソール版は全てCで書
かれていますので、アセンブラを理解してなくても改造は可能ですよ(^_^)
  また、ちょっと混乱しやすいのですが、Win32コンソール版をコンパイルする
場合も -DUNIX のコンパイルスイッチが定義されます(逆に -DWINDOWS は定義さ
れません)。POSIX互換のライブラリを提供しているegcsによって、UNIX用の記述
をほぼそのまま流用してコンパイルしているためです。
  #ifdef WINDOWSの部分は、現在開発中断中のWindows GUI版のための記述です
(この版は、Windows専用の部分のソースは公開されていません)。