2011年09月20日

libcdioのコンパイル&インストール

2012/10/29 追記
libcdio-0.90がリリースされました。
いろいろ変わりましたので、記事を書き直しました。
libcdioのコンパイル&インストール (libcdio-0.90以降)


libcdioは、以下の場所にあります。
http://www.gnu.org/s/libcdio/

先に、libiconvをインストールしておいてください。

Browse Source Code
git (libcdio) – Browse libcdio source より、
http://git.savannah.gnu.org/gitweb/?p=libcdio.git

shortlogの右端一番上、snapshotからソースコードをダウンロードします。
libcdio-f920810.tar.gz

libcdio-の後ろの7桁の英数字は、gitのハッシュ値になっていますので、その時点での値に読み替えてください。

または、以下のように、gitでダウンロードします。
$ git clone http://git.savannah.gnu.org/r/libcdio.git

2012/02/26 追記
2012/02/20 の更新で、
paranoia code removed. Is now in separate tree under GPL v2+.
と書いてあり、paranoiaのソースコードは以下の場所にあります。

CDDA paranoia Homepage
http://xiph.org/paranoia/

cdparanoia-III-10.2.src.tgz をMinGWでビルドしてみたのですが、MinGWに無いヘッダファイルが使われていて、ビルドできませんでした。

FFmpegでlibcdioを有効にしてビルドするためには、paranoiaのソースコードも必要なので、libcdioのparanoiaのソースコードをrevertするパッチを作りました。
autogen.sh を実行する前に適用してください。
libcdio_paranoia-20120226.diff

2012/03/27 追記
paranoiaのソースコード用パッチを更新しました。
libcdio_paranoia-20120327.diff

2012/04/18 追記
libcdioにあるgetoptを使わないようにするパッチです。
適用しなくても、FFmpegのビルドには支障はありません。
libcdio-20120418.diff

2012/10/23 追記
getopt削除パッチを更新しました。
libcdio-20121023.diff

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf libcdio-f920810.tar.gz
$ cd libcdio-f920810
$ patch -p1 < libcdio_paranoia-20120327.diff
$ patch -p1 < libcdio-20121023.diff
$ ./autogen.sh --prefix=/mingw --disable-cxx --disable-example-progs --disable-shared
$ make
$ make install

以上で終了です。

2012/04/25 追記
mingwrtとw32apiの代わりにMinGW-w64を使用していると、コンパイル時にエラーになります。
その場合、 autogen.sh を実行した後、
$ make CC="gcc -D__MINGW64__"
としてください。

autogen.shは最初に1回実行すれば、次にconfigureからやりなおす場合、
$ ./configure --prefix=/mingw --disable-cxx --disable-example-progs --disable-shared
とすれば良いです。


【補足】
git cloneでソースコードをダウンロードした場合、autogen.shを実行した時に、以下のようなエラーで失敗することがあります。

Rebuilding ./configure with autoreconf...
(中略)
configure.ac:618: the top level
/bin/m4: cannot remove temporary directory /tmp/ar6368.3352/m4-7MK9zJ: Directory not empty
autom4te-2.67: /bin/m4 failed with exit status: 1
C:\msys\1.0\bin\aclocal: /usr/bin/autom4te-2.67 failed with exit status: 1
autoreconf: aclocal failed with exit status: 1
autoreconf failed

これは、configure.acの改行コードがCRLFになっているのが原因ですので、以下のようにして、改行コードを修正します。

$ mv configure.ac configure.ac.bak
$ tr -d \\r < configure.ac.bak > configure.ac

修正後、autogen.shを実行します。

2012/01/27 追記
2012/01/17の更新(gitハッシュ値b7b6551)で、改行コードの問題は修正されました。


【更新履歴】を見る
posted by あべちん at 19:03 | Comment(5) | TrackBack(0) | FFmpeg追加ライブラリ
この記事へのコメント
tr -d \\r < configure.ac.bak > configure.ac
↑情報ありがとうございます。
どうしてもgit cloneで入手したくて・・・w

でもやっぱ、x86_64でのmakeで"win32_ioctl.lo error"・・・コケますね。
Posted by X5-452 at 2011年09月21日 00:16
X5-452さん、こんにちは。管理人です。

改行コードの問題は、snapshotだと大丈夫なのに、git cloneだとなんでエラーになるんだろう?と、ハマってかなり悩みました。

お役に立ててよかったです。

"win32_ioctl.lo error"は、試せる環境が無いので分かりません。

新しいパソコンが欲しい…。
Posted by あべちん at 2011年09月21日 07:48
僕も"libcdio_paranoia-20120226.diff"のように全て"patch"で済ませたかったのですが、差分を取るgitコマンドがあるのかな?
わからなかったで、公式でpatchを取ってきて+と-を修正して作りましたw
"paranoia2.c"等、完全に削除されたものは、git-c742eedのをコピーしてますw


libcdio_paranoia-20120226.diffの
473行目
+paranoiaheaders = cdda.h
は↓にしなくて良いのでしょうか?
+paranoiaheaders = cdda.h cdtext.h
Posted by X5-452 at 2012年02月28日 01:16
X5-452さん、こんにちは。管理人です。

git diffだと削除されたファイルは表示されないみたいですね。

paranoiaのソースコードが削除される前と後のソースコードを両方用意して、こんな感じでdiffコマンドでpacthを作りました。

diff -urN -x.git* -x.cvs* -xrealpath.c libcdio-f9bd26c libcdio-c742eed

realpath.cは、字下げが修正されただけなので、除外しています。

paranoiaheaders = cdda.h の所は、
include/cdio/Makefile.am のdist_libcdioinclude_HEADERS のリストの中にも「cdtext.h」がダブっていて、make installの時にエラーになったので修正しました。

paranoiaheaders か、dist_libcdioinclude_HEADERS のリストのどちらかを修正すれば良いと思います。
Posted by あべちん at 2012年02月28日 07:55
お疲れ様です。

cdtext.hの件
僕...makeまでの確認で、make installまでは確認してませんでしたorz
申し訳ありませんでした。

diffコマンドありがとうございます。
何かで差分を取る時に使いたいと思います。
Posted by X5-452 at 2012年02月28日 14:44
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/48052301
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック