意外にもcygwinでMusicPlayerDaemonが動いた
http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki
のcygwinへのインストールについて(mpd-0.14.1)
けっこう頑張りが必要だがなんか適当にやったらできたのでメモ。
まず、
cygwinのsetup.exeのインストーラでcategory audioで要りそうなものをインストールする。
あとpkg-configとglib。
次に依存(していそうな)ライブラリをビルドした。
インストールしたのは、
libmad, libid3tag, lame
http://sourceforge.net/project/showfiles.php?group_id=12349
http://lame.sourceforge.net/
それぞれ解凍して
./configure make make install
で特に問題なくビルドできた。
しかしこのままではmpdのconfigureがlibmadを認識してくれないので、
libmadとlibid3tagのpkg_configをgentooからコピーしてやった。
/usr/lib/pkgconfig/mad.pc
prefix=/usr/local exec_prefix=${prefix} libdir=/usr/local/lib includedir=${prefix}/include Name: mad Description: MPEG Audio Decoder Requires: Version: 0.15.1b Libs: -L${libdir} -lmad -lm Cflags: -I${includedir}
/usr/lib/pkgconfig/id3tag.pc
prefix=/usr/local exec_prefix=${prefix} libdir=/usr/local/lib includedir=${prefix}/include Name: id3tag Description: ID3 tag reading library Requires: Version: 0.15.1b Libs: -L${libdir} -lid3tag -lz Cflags: -I${includedir}
次にmpd本体のビルド。
これはけっこう手をいれるところがあるので面倒。
とりあえずエラーメッセージを読めるように
$ export LANG=C
すかさず
$ ./configure
ここまでは問題ない。
ある場合は多分ライブラリが足りないのでsetup.exeで追加する。
$ make
ここでたしかresolv.hが無いというエラーが出る。
src/os_compat.hの
#include <resolv.h>
をコメントアウトする。
$ make
今度はsrc/listen.cのビルドで止まる。
src/listen.cの#includeが終わったあたりに
下記を追加
http://musicpd.org/mantis/view.php?id=1566
を参考に適当に書いております。
#include <cygwin/in.h> #include <netdb.h> #include <string.h> struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; unsigned long ai_addrlen; char *ai_canonname; struct sockaddr *ai_addr; struct addrinfo *ai_next; }; static int getaddrinfo(const char *hostname, struct addrinfo *ai, in_port_t port, void *dumy) { struct hostent *he; struct in_addr **ap; struct sockaddr_in *sa_in; he = gethostbyname(hostname); if (!he) return (-1); ai->ai_family = he->h_addrtype; ai->ai_socktype = SOCK_STREAM; ai->ai_protocol = 0; //ai->ai_addrlen = he->h_length; ai->ai_addrlen = sizeof(struct sockaddr_in); if (NULL == (ai->ai_addr = malloc(ai->ai_addrlen))) return (-1); sa_in = (struct sockaddr_in *)ai->ai_addr; memset(sa_in, 0, sizeof(struct sockaddr_in)); sa_in->sin_family = PF_INET; sa_in->sin_port = htons(port); ap = (struct in_addr **)he->h_addr_list; memcpy(&sa_in->sin_addr, *ap, sizeof(struct in_addr)); ai->ai_next = NULL; return (0); } static void freeaddrinfo(struct addrinfo *ai) { free(ai->ai_addr); } const char * gai_strerror(int errcode) { return "fake gai_strerror."; } #define AI_PASSIVE 0x1
それからconfig.hから
#define HAVE_STRUCT_UCRED 1
をコメントアウト。
$ make
ビルドが通ったはず。
$ make install $ cp mpdconf.example /etc/mpd.conf
インストール終わり。
適当にmpd.confを編集。
最低限、
music_directory
と
audio_outputのoss
を変える。
$ mpd
これでうまくいけばmusic_directory内のファイルを読み込んでデーモンが起きる(port:6600)
。
次にclientのインストール。
gmpcをインストールする。
http://gladewin32.sourceforge.net/
からGtk+をインストールする(多分、新しい方のRunTimeで十分)
gladeは必要ない。
http://gmpcwiki.sarine.nl/index.php?title=Installation_Win32
からgmpc-0.17.0.zip(windows版のクライアント)を入手して
実行。
デフォルトのlocalhost:6600につなぎに行くので
適当に再生してみる。
以上で動作確認完了。
しかしこのままだとSJISのタグが文字化けしている。
これを直すにはパッチを書かないといけないのだが、
それは明日、というか今度起きたらやるw