TiMidity++ をWindows用にコンパイルする方法

１．Msys環境下でMingwでコンパイル
２．Msys環境下でBoraland C++でコンパイル
３．Msys環境下でOpenWatcomでコンパイル
４．Msys環境下でVisual C++でコンパイル


１．Msys環境下でMingwでコンパイル
（１）MingwとMSYSのセットアップ
	１）MingwとMSYSのセットアップ(http://sourceforge.net/projects/mingw/　http://mingw.sourceforge.net/MinGWiki/))
	日本語版のインストールにはMingw-jp(http://sourceforge.jp/projects/mingw-jp)を使うとよい。
	少なくともリソースコンパイラはMingw-jpのものでないといけない。
	このリソースコンパイラを使うにはWindowsの環境変数で　CLANG=C-SJIS　と設定しないといけない。（MSYSの環境変数ではだめ）
（２）使用されるライブラリ達のセットアップ
	２−０）dllファイルからインポートライブラリを作る方法
		（pexportsはmingw-utils-0.3.tar.gzに含まれている）
    		pexports xxxx.dll >xxxx.def
    		dlltool --dllname xxxx.dll --input-def xxxx.def --output-lib libxxxx.a
	２−１）pcurses
		"pdcurses-2.6.0-2003.07.21-1.exe"をMingwのサイトからとってきて設定する。
    ２−２）oggvorbis(http://www.vorbis.com/)
    	"OggVorbis-win32sdk-1.0.1.zip”をとってくる
		dllファイルからインポートライブラリをつくる
    	include\ogg\os_type.hの２９行目を書き換える
			(os_types.h)
			29 #  if !defined(__GNUC__) || defined(__MINGW32__)
		起動用バッチファイルにエントリをつけたす
			REM OggVorbis
			set PATH=\usr\local\oggvorbis-win32sdk-1.0.1\bin;\usr\local\oggvorbis-win32sdk-1.0.1\lib;%PATH%
			set C_INCLUDE_PATH=/usr/local/oggvorbis-win32sdk-1.0.1/include:%C_INCLUDE_PATH
			set LD_LIBRARY_PATH=/usr/local/oggvorbis-win32sdk-1.0.1/lib:%LD_LIBRARY_PATH%
    ２−３）午後のコーダー(http://www.marinecat.net/mct_top.htm)
    	Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。
    	dllファイルからインポートライブラリを作る。
    		move gogo.h gogo\include\gogo
    		move gogo.dll libgogo.a gogo\lib
    	起動用バッチファイルにエントリをつけたす
			REM GOGO
			set PATH=\usr\local\gogo\bin;\usr\local\gogo\lib;%PATH%
			set C_INCLUDE_PATH=/usr/local/gogo/include:%C_INCLUDE_PATH%
			set LD_LIBRARY_PATH=/usr/local/gogo/lib:%LD_LIBRARY_PATH%
	２−4）flac(http://flac.sourceforge.net/)
		flac-1.1.0-win.zipをとってくる。
		Change include\*\export.hの２３行目をすべて以下のように変更
			(export.h)
			23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
				|| !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__)
		起動用バッチファイルにエントリをつけたす
			REM FLAC
			set PATH=\usr\local\flac-1.1.0-win\bin;;%PATH%
			set C_INCLUDE_PATH=/usr/local/flac-1.1.0-win/include:%C_INCLUDE_PATH%
			set LD_LIBRARY_PATH=/usr/local/flac-1.1.0-win/bin:%LD_LIBRARY_PATH%	
	２−５）portaudio(http://www.portaudio.com/)
		portaudio v1.18をとってきてコンパイルする
		asioについてはcallasio（http://www.audiomulch.com/~rossb/code/calliasio/)のHPに情報がある。
		portaudio.dllをそれぞれpa_asio.dll、pa_win_ds.dll、pa_win_wmme.dllのように名前をかえとく。
		portaudio.hさえあればTiMidity++はコンパイルできる。
	２−６）portmidi(http://www-2.cs.cmu.edu/~music/portmusic/)
		（ここでは使わない）
（３）TiMIdity++のコンパイル
        3-1)timw32g.exe
            (configure)
             CFLAGS="-O2" configure --enable-network --enable-w32gui \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make
             strip timidity.exe
             mv timidity.exe timw32g.exe
        3-2)twsyng.exe
            (configure)
             CFLAGS="-O2" configure --enable-network --enable-winsyng \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make
             strip timidity.exe
             mv timidity.exe twsyng.exe

        3-3)twsynsrv.exe
            (configure)
              CFLAGS="-O2" configure --enable-network --enable-winsyng \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
             add config.h following line
                #define TWSYNSRV 1
           (make)
             make
             strip timidity.exe
             mv timidity.exe twsynsrv.exe

        3-4)timidity.exe
            (configure)
             CFLAGS="-O2" configure --enable-interface=ncurses,vt100,winsyn --enable-network \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make
             strip timidity.exe
             
             
２．Msys環境下でBoraland C++でコンパイル
（１）Borland CとMSYSのセットアップ
	１）BorlandCのセットアップ
		C++Buldercompiler(http://www.borland.com/products/downloads/download_cbuilder.html#)をダウンロードしてくる。
		readme.tetにしたがってbcc32.cfg とilink 32.cfgをつくる
		(bcc32.cfg)
			-I"C:\Borland\Bcc55\include"
			-L"C:\Borland\Bcc55\lib;C:\Borland\Bcc55\lib\PSDK"
			-DWINVER=0x0400
			-D_WIN32_WINNT=0x0400
		(ilink32.cfg )
			-L"C:\Borland\Bcc55\lib;C:\Borland\Bcc55\lib\PSDK"
	２）MSYSのセットアップ(http://sourceforge.net/projects/mingw/　http://mingw.sourceforge.net/MinGWiki/))
		"/etc/fstab"からMINGWのパスの設定の行を消す
		"msys.bat"から"bcc_env.bat"を呼ぶようにする。
		(msys.batの先頭行）
			call c:\borland\bcc55\bin\bcc_env.bat
		(bcc_env.batの内容）
			@echo off
			set PATH=c:\borland\bcc55\bin;%PATH%
			
			Set INCLUDE=c:\usr\local\pdcurses_bcc\include;%INCLUDE%
				（続く）
				 ----

（２）使用されるライブラリ達のセットアップ
	２−０−１）dllファイルからインポートライブラリを作る方法
		implib -a -c xxx.lib xxx.dll
	２−０−２）VCのLIBファイルからBCのLIBファイルを作る方法
		coff2omf  xxxx.lib xxx_bcpp.lib

	２−１）pcurses
		"pdcurses-2.6.0-src.tar.bz2"をMingwのサイトからとってきてコンパイルする。
		pccurses.libはlibpdcuses.libに名前を変えないといけない。
		起動バッチファイルとilink32.cfgにエントリを書き込む		
    ２−２）oggvorbis(http://www.vorbis.com/)
    	"OggVorbis-win32sdk-1.0.1.zip”をとってくる
		dllファイルからインポートライブラリをつくる
		起動バッチファイルとilink32.cfgにエントリを書き込む		
    ２−３）午後のコーダー(http://www.marinecat.net/mct_top.htm)
    	Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。
    	dllファイルからインポートライブラリを作る。
    		move gogo.h gogo\include\gogo
    		move gogo.dll libgogo.a gogo\lib
		起動バッチファイルとilink32.cfgにエントリを書き込む		
	２−4）flac(http://flac.sourceforge.net/)
		flac-1.1.0-win.zipをとってくる。
		Change include\*\export.hの２３行目をすべて以下のように変更
			(export.h)
			23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
				|| !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__)
		include\FLAC\ordinals.hの３９行目を変更
			39 #if defined(_MSC_VER) || defined(__BORLANDC__)
		起動バッチファイルとilink32.cfgにエントリを書き込む
	２−５）portaudio(http://www.portaudio.com/)
		コンパイルの仕方はわからないが
		portaudio.hさえあればTiMidity++はコンパイルできる。
	２−６）portmidi(http://www-2.cs.cmu.edu/~music/portmusic/)
		（ここでは使わない）
（３）TiMIdity++のコンパイル
        3-0-1) perl -pe 's/CC\s-o\s\S\S*\s/CC /g' configure >configure_bc
                (configure中の -o xxxx はＢＣＣが受け付けないため)
        3-0-2)rm_float.sh を timidity/timidity ディレクトリの中で起動する。
                数値定数のあとの f , F, l and L を取り除くスクリプト(  123.45f -> 123.45 )
<rm_float.sh>
-------------------- from here -----------------------
#!/bin/sh

for foo in `ls *.c` `ls *.h`;do
perl -pe 's/(%[0-9]*\.[0-9]+f)/$1f/g' $foo|perl -pe 's/(\.[0-9]+)f/$1/g' - |perl -pe 's/(\.[0-9]+)F/$1/g' - |perl -pe 's/(\.[0-9]+)l/$1/g' - |perl -pe 's/(\.[0-9]+)L/$1/g' - |perl -pe 's/(0x[0-9a-f]+)l/$1/g' - |perl -pe 's/(0x[0-9a-f]+)L/$1/g' - >$foo.rm
mv $foo.rm $foo
done
-------------------- to here -------------------------
                
        3-1)timw32g.exe
            (configure)
             CC="bcc32" CPP="cpp32" CFLAGS="" ./configure_bc  --enable-w32gui \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make
             mv timidity.exe timw32g.exe
        3-2)twsyng.exe
            (configure)
            CC="bcc32" CPP="cpp32" CFLAGS="" \
            ./configure_bc --enable-network --enable-winsyng \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make
             mv timidity.exe twsyng.exe
        3-3)twsynsrv.exe
            (configure)
             CC="bcc32" CPP="cpp32" CFLAGS=""\
             ./configure_bc --enable-network --enable-winsyng \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
             add config.h following line
                #define TWSYNSRV 1
             (make)
             make
             mv timidity.exe twsynsrv.exe
       3-4)timidity.exe
            (configure)
            CC="bcc32" CPP="cpp32" CFLAGS="" \
             ./configure_bc --enable-interface=vt100,winsyn,ncurses --enable-network \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make


３．Msys環境下でOpenWatcomでコンパイル
（１）OpenWatcomとMSYSのセットアップ
	１）OpenWatcomのセットアップ(http://www.openwatcom.org)
		１−１）OpenWatcomをダウンロードしてくる。
		２−１）Microsoft Platform SDKからrc.exeを取ってきてさしかえる。
		（OpenWatomのrc.exeは使えない）
	２）MSYSのセットアップ(http://sourceforge.net/projects/mingw/　http://mingw.sourceforge.net/MinGWiki/))
		"/etc/fstab"からMINGWのパスの設定の行を消す
		"msys.bat"から"wcc_env.bat"を呼ぶようにする。
		(msys.batの先頭行）
			call wcc_env.bat
		(wcc_env.batの内容）
			@echo off
			set LIB=
			set INCLUDE=
			call i:\watcom\setvars.bat
			
			REM OggVorbis
			set PATH=\usr\local\oggvorbis-win32sdk-1.0.1_wcc\bin;\usr\local\oggvorbis-win32sdk-1.0.1_wcc\lib;%PATH%
			set C_INCLUDE_PATH=/usr/local/oggvorbis-win32sdk-1.0.1_wcc/include:%C_INCLUDE_PATH
			set LIB=\usr\local\oggvorbis-win32sdk-1.0.1_wcc\lib:%LIB%
				（続く）
				 ----
（２）使用されるライブラリ達のセットアップ
	２−０）dllファイルからインポートライブラリを作る方法
		mlib -n -b out.lib in.dll
	２−１）pcurses
		"pdcurses-2.5.0"をGnuWin32(http://sourceforge.net/projects/gnuwin32/)のサイトからとってくる
		dllファイルからインポートライブラリを作る。
		pccurses.libはlibpdcuses.libに名前を変えないといけない。
		起動バッチファイルにエントリを書き込む		
    ２−２）oggvorbis(http://www.vorbis.com/)
    	"OggVorbis-win32sdk-1.0.1.zip”をとってくる
           include\ogg\os_types.hを編集する。
              (os_types.h)
              29 #  if defined(__WATCOMC__)
              30 /* MSVC/Borland */
              31 typedef __int64 ogg_int64_t;
              32 typedef int ogg_int32_t;
              33 typedef unsigned int ogg_uint32_t;
              34 typedef short ogg_int16_t;
              35 typedef unsigned short ogg_uint16_t;
              36 #  else
                   -----
              52 #  endif
		dllファイルからインポートライブラリをつくる
		起動バッチファイルにエントリを書き込む		
    ２−３）午後のコーダー(http://www.marinecat.net/mct_top.htm)
    	Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。
    	dllファイルからインポートライブラリを作る。
    		move gogo.h gogo\include\gogo
    		move gogo.dll libgogo.a gogo\lib
		起動バッチファイルにエントリを書き込む		
	２−4）flac(http://flac.sourceforge.net/)
		flac-1.1.0-win.zipをとってくる。
		Change include\*\export.hの２３行目をすべて以下のように変更
			(export.h)
			23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
				|| !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__)
		include\FLAC\ordinals.hの３９行目を変更
			39 #if defined(_MSC_VER) || defined(__BORLANDC__)
		dllファイルからインポートライブラリをつくる
		起動バッチファイルにエントリを書き込む
	２−５）portaudio(http://www.portaudio.com/)
		コンパイルの仕方はわからないが
		portaudio.hさえあればTiMidity++はコンパイルできる。
	２−６）portmidi(http://www-2.cs.cmu.edu/~music/portmusic/)
		（ここでは使わない）
（３）TiMIdity++のコンパイル
        3-0)wcc386_w.sh ( scripts/ディレクトリにある )
            Wcc386 はGNUのauto Toolと仲が悪いのでラッパーをつくった。
            パスの通ったディレクトリに移動させておいて。
            wcc386.exeのかわりにwcc386_w.shを呼び出して使う。
        3-1)timw32g.exe
            (configure)
            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
           ./configure --enable-network --enable-w32gui \
            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
            (make)
             make
             mv timidity.exe timw32g.exe
        3-2)twsyng.exe
            (configure)
            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
            ./configure --enable-network --enable-winsyng \
            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
             (make)
             make
             mv timidity.exe twsyng.exe
        3-3)twsynsrv.exe
            (configure)
            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
            ./configure --enable-network --enable-winsyng \
            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
            add config.h following line
                #define TWSYNSRV 1
             (make)
             make
             mv timidity.exe twsynsrv.exe
        3-4)timidity.exe
            (configure)
            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
            ./configure --enable-interface=ncurses,vt100,winsyn --enable-network \
            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
            (make)
            make


４．Msys環境下でVisual C++でコンパイル
（１）Visual C++とMSYSのセットアップ
	１）VisualC++のセットアップ
		Microsoft Visual C++ Toolkit 2003
		Microsoft.NET SDK
		Microsoft Platform SDK
		をダウンロードしてインストールする。
======= CAUTION !! ===========
Microsoft Visual C++ Toolkit 2003でコンパイルしたバイナリはライセンス上配布できない。
配布するバイナリは、"Visual C++" か "Visual Studio"で作成する必要がある。
その際は、-MT オプションではなく -MD オプションを使い、libcmt.lib ではなく　msvcrt.libをリンクすること
============================== 
		
	２）MSYSのセットアップ(http://sourceforge.net/projects/mingw/　http://mingw.sourceforge.net/MinGWiki/))
		"/etc/fstab"からMINGWのパスの設定の行を消す
		"msys.bat"から"vcc_env.bat"を呼ぶようにする。
		(msys.batの先頭行）
			call vcc_env.bat
		(vcc_env.batの内容）
			@echo off
			call i:\"Program Files\Microsoft Visual C++ Toolkit 2003"\vcvars32.bat
			call i:\"Program Files\Microsoft SDK"\SetEnv.Bat /RETAIL
			call i:\"Program Files\Microsoft.NET\SDK\v1.1\bin"\sdkvars.bat

			Set INCLUDE=c:\DXSDK\include;%INCLUDE%
			Set LIB=c:\DXSDK\lib;%LIB%
				（続く）
				 ----
（２）使用されるライブラリ達のセットアップ
	２−１）pcurses
		"pdcurses-2.6.0-src.tar.bz2"をMingwのサイトからとってきてコンパイルする。
		pccurses.libはlibpdcuses.libに名前を変えないといけない。
		起動バッチファイルにエントリを書き込む		
    ２−２）oggvorbis(http://www.vorbis.com/)
    	"OggVorbis-win32sdk-1.0.1.zip”をとってくる
		起動バッチファイルにエントリを書き込む		
    ２−３）午後のコーダー(http://www.marinecat.net/mct_top.htm)
    	Gogo.dll を午後のコーダーからgogo.hをソースファイルからとりだす。
    		move gogo.h gogo\include\gogo
    		move gogo.dll libgogo.a gogo\lib
		起動バッチファイルにエントリを書き込む		
	２−4）flac(http://flac.sourceforge.net/)
		flac-1.1.0-win.zipをとってくる。
		Change include\*\export.hの２３行目をすべて以下のように変更
			(export.h)
			23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
				|| !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__)
		include\FLAC\ordinals.hの３９行目を変更
			39 #if defined(_MSC_VER) || defined(__BORLANDC__)
		起動バッチファイルにエントリを書き込む
	２−５）portaudio(http://www.portaudio.com/)
		コンパイルの仕方はわからないが
		portaudio.hさえあればTiMidity++はコンパイルできる。
	２−６）portmidi(http://www-2.cs.cmu.edu/~music/portmusic/)
		（ここでは使わない）
（３）TiMIdity++のコンパイル
        3-1)timw32g.exe
            (configure)
             CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2" \
            ./configure --enable-network --enable-w32gui \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
            make
             mv timidity.exe timw32g.exe
        3-2)twsyng.exe
            (configure)
            CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2" \
            ./configure --enable-network --enable-winsyng \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make
             mv timidity.exe twsyng.exe
        3-3)twsynsrv.exe
            (configure)
             CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2"\
             ./configure --enable-network --enable-winsyng \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
             add config.h following line
                #define TWSYNSRV 1
             (make)
             make
             mv timidity.exe twsynsrv.exe
        3-4)timidity.exe
            (configure)
            CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2" \
             ./configure --enable-interface=ncurses,vt100,winsyn --enable-network \
             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
            (make)
             make


2004.5.28 末永　圭司(skeishi@mutt.freemail.ne.jp)
