How to compile TiMidity++ for Windows This file contains fllowing instructions. 1.Mingw in Msys environment 2.Borland C++ in Msys environment 3.OpenWatcom C++ in Msys environment 4.Visual C++ in Msys environment 1.Mingw in Msys environment (1)Setup Mingw and MSYS 1)Setup Mingw(http://sourceforge.net/projects/mingw/) and MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/)) If want to build Japanese version of TiMidity++, you can use Mingw-JP(http://sourceforge.jp/projects/mingw-jp), at least windres.exe from Mingw-JP is needed, and to set windows(not msys) environment valiable CLANG=C-SJIS is recomended. (2)Setup needed libraries 2-0)get pexports from Mingw "pexports" is included in mingw-utils-0.3.tar.gz, get it and extract it. 2-1)pdcurses Get pdcurses-2.6.0-2003.07.21-1.exe from Mingw. and extract them. Move curses.h to include path and libcurses.a libarary path. 2-2)oggvorbis(http://www.vorbis.com/) get OggVorbis-win32sdk-1.0.1.zip and extract it. make export libraries pexports xxxx.dll >xxxx.def dlltool --dllname xxxx.dll --input-def xxxx.def --output-lib libxxxx.a Change include\ogg\os_type.h line 29 as following (os_types.h) 29 # if !defined(__GNUC__) || defined(__MINGW32__) set environment variables in batch file like this. 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% 2-3)gogo no coder(http://www.marinecat.net/mct_top.htm) get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe) get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh) move gogo.h gogo\include\gogo move gogo.dll gogo\lib make export libraries pexports gogo.dll >gogo.def dlltool --dllname gogo.dll --input-def gogo.def --output-lib libgogo.a set environment variables in batch file like this. 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% 2-4)flac(http://flac.sourceforge.net/) get flac-1.1.0-win.zip and extract it. Change include\*\export.h line 23 as following (export.h) 23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \ || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) set environment variables in batch file like this. 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% 2-5)portaudio(http://www.portaudio.com/) Download and make portaudio v1.18. (see callasio http://www.audiomulch.com/~rossb/code/calliasio/) Each portaudio.dll must be renamed pa_asio.dllApa_win_ds.dllApa_win_wmme.dll. Only portaudo.h is needed for compiling TiMidity++. 2-6)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) Download portmidi18jun03.zip, extract it and compile it. Copy porttime.h libporttime.a portmidi.h libportmidi.a to appropriate directories. (3)Make TiMidity++ binaries 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 2.Borland C++ in Msys environment (1)Setup BorlandC and MSYS 1)Setup BorlandC Downlod C++Buldercompiler(http://www.borland.com/products/downloads/download_cbuilder.html#) , read readme.txt and make bcc32.cfg and 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" 2)Setup MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/)) Remove mingw path from /etc/fstab. Add fllowing line at the top of Msys.bat and create bcc_env.bat. call c:\borland\bcc55\bin\bcc_env.bat bcc_env.bat is like follow ing @echo off set PATH=c:\borland\bcc55\bin;%PATH% Set INCLUDE=c:\usr\local\pdcurses_bcc\include;%INCLUDE% ---- ( setteing of various env. val. s ) ---- (2)Setup needed libraries 2-0-1)implib.exe(to make import library from dll) implib -a -c xxx.lib xxx.dll 2-0-2)coff2omf.exe(VCC library to BCC library) coff2omf xxxx.lib xxx_bcpp.lib. 2-1)pdcurses pdcurses-2.6.0-src.tar.bz2 from Mingw(http://sourceforge.net/project/showfiles.php?group_id=2435) and make them. rename pdcurses.lib libpdcurses.lib Move curses.h to include path. Add library path in ilink32.cfg 2-2)oggvorbis(http://www.vorbis.com/) get OggVorbis-win32sdk-1.0.1.zip and extract it. set environment variables in batch file like this. 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 Add library path in ilink32.cfg Only hederfiles are need for compiling TiMidity++ 2-3)gogo no coder(http://www.marinecat.net/mct_top.htm) get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe) get gogo.h files from Gogo no Coder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh) move gogo.h gogo\include\gogo (for timidity gogo.lib is not necessary) set environment variables in batch file like this. REM GOGO set PATH=\usr\local\gogo\bin;\usr\local\gogo\lib;%PATH% set C_INCLUDE_PATH=/usr/local/gogo/include:%C_INCLUDE_PATH% Add library path in ilink32.cfg Only hederfiles are need for TiMidity++ 2-5)flac(http://flac.sourceforge.net/) get flac-1.1.0-win.zip and extract it. Change include\*\export.h line 23 as following (export.h) 23 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \ || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) Change include\FLAC\ordinals.h line 39 as following 39 #if defined(_MSC_VER) || defined(__BORLANDC__) set environment variables in batch file like this. 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% Add library path in ilink32.cfg 2-6)portaudio(http://www.portaudio.com/) I don't know how to comple portaudio with bcc commandline tools. Only portaudio.h is needed for compiling TiMidity++. 2-7)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) I don't know how to comple portaudio with bcc commandline tools. (3)Make TiMidity++ binaries 3-0-1) perl -pe 's/CC\s-o\s\S\S*\s/CC /g' configure >configure_bc ( -o xxxx options are not work correctly with BCC) 3-0-2)Invoke sh rm_float.sh in timidity/timidity directory. This removes f , F, l and L after sonst float valude( ex. 123.45f ) -------------------- 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 3.OpenWatcom C++ in Msys environment (1)OpenWatcom and MSYS 1)Set OpenWatcom(http://www.openwatcom.org) 1-1)Download OpenWatcom, install and configure them 1-2)Download Microsoft Platform SDK install and configure them. Replace rc.exe of OpenWatom with the one of Platform SDK's one. (OpenWatcom's rc.exe can't use). 2)Setup Mngw and MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/)) Remove mingw path from /etc/fstab. Add fllowing line at the top of Msys.bat and create wcc_env.bat. call wcc_env.bat wcc_env.bat is like follow ing @echo off set LIB= set INCLUDE= call i:\watcom\setvars.bat ---- ( setteing of various env. val. s ) ---- (2)Setup needed libraries(The wcc386 option -5s is recomended !! Because of TiMidity++ compatibility.!!) 2-0) make import Libray from dll mlib -n -b out.lib in.dll 2-1)pdcurses Get pdcurses-2.5.0 from GnuWin32(http://sourceforge.net/projects/gnuwin32/) and make import Libraries from dlls. "libpdcurses.lib" is needed (not pdcurses.lib). Move curses.h to include path and libpdcurses.lib libarary path. 2-2)oggvorbis(http://www.vorbis.com/) Get OggVorbis-win32sdk-1.0.1.zip and extract it. Edit 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 Make inport Libraries from dll Set environment variables in batch file like this. 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% Only *.h files are needed for TiMidity++. 2-3)gogo no coder(http://www.marinecat.net/mct_top.htm) Get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe) Get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh) Move gogo.h gogo\include\gogo (for timidity gogo.lib not necessary) Set environment variables in batch file like this. REM GOGO set PATH=\usr\local\gogo_wcc\bin;\usr\local\gogo_wcc\lib;%PATH% set C_INCLUDE_PATH=/usr/local/gogo_wcc/include:%C_INCLUDE_PATH% set LIB=\usr\local\gogo_wcc\lib:%LIB% Only *.h files are needed for compiling TiMidity++. 2-5)flac(http://flac.sourceforge.net/) get flac-1.1.0-win.zip and extract it. make inport Libraries from dll set environment variables in batch file like this. REM FLAC set PATH=\usr\local\flac-1.1.0-win_wcc\bin;%PATH% set C_INCLUDE_PATH=/usr/local/flac-1.1.0-win_wcc/include:%C_INCLUDE_PATH% set LIB=\usr\local\flac-1.1.0-win_wcc\bin:%LIB% Only *.h files are needed for compiling TiMidity++. 2-6)portaudio(http://www.portaudio.com/) I don't know how to comple portaudio with OpenWatcom commandline tools. Only port audio.h is needed for compling TiMidity++. 2-7)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) I don't know how to comple portmidi with OpenWatcom commandline tools.. (3)Make TiMidity++ binaries 3-0-1)wcc386_w.sh ( it is in scripts/directory ) Wcc386 is not familier to GNU autoconf tools, Use my wrapper wcc386_w.sh, instead of wcc386.exe 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 4.Visual C++ in Msys environment (1)Setup VisualC++ and MSYS 1)Setup Visual C++ Download Microsoft Visual C++ Toolkit 2003 Microsoft.NET SDK Microsoft Platform SDK install and configure them. ======= CAUTION !! =========== If you plan to distribute TiMidity++ binary, use "Visual C++" or "Visual Studio" not "Microsoft Visual C++ Toolkit 2003". because of LICENCE issue. Use -MD option insted of -MT and link msvcrt.lib instead of libcmt.lib. ============================== 2)Setup Mngw and MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/)) Remove mingw path from /etc/fstab. Add fllowing line at the top of Msys.bat and create bcc_env.bat. call vc_msys_env.bat vc_msys_env.bat is like follow ing @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% ---- ( setteing of various env. val. s ) ---- (2)Setup needed libraries 2-1)pdcurses pdcurses-2.6.0-src.tar.bz2 from Mingw(http://sourceforge.net/project/showfiles.php?group_id=2435) and make them. rename pdcurses.lib libpdcurses.lib move curses.h to include path and libpdcurses.lib libarary path. 2-2)oggvorbis(http://www.vorbis.com/) get OggVorbis-win32sdk-1.0.1.zip and extract it. set environment variables in batch file like this. 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 LIB=\usr\local\oggvorbis-win32sdk-1.0.1\lib:%LIB% 2-3)gogo no coder(http://www.marinecat.net/mct_top.htm) Get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe) Get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh) Move gogo.h gogo\include\gogo (for timidity gogo.lib not necessary) Set environment variables in batch file like this. 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 LIB=\usr\local\gogo\lib:%LIB% 2-5)flac(http://flac.sourceforge.net/) Set flac-1.1.0-win.zip and extract it. Set environment variables in batch file like this. 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 LIB=\usr\local\flac-1.1.0-win\bin:%LIB% 2-6)portaudio(http://www.portaudio.com/). I don't know how to comple portaudio with vc commandline tools. But for compling TiMidity++ only port audio.h is needed. 2-7)portmidi(http://www-2.cs.cmu.edu/~music/portmusic/) I don't know how to comple portmidi with vc commandline tools.. (3)Make TiMidity++ binaries 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 Keishi Suenaga(skeishi@mutt.freemail.ne.jp)