りんけーじ - blog

ℹ️本記事は古いコンテンツを変換して表示しています。

表示が崩れたり、リンクが正しくない可能性があります。ご了承ください。

2016/01/23 22:01 : py-opencvがmakeできない

うっかりpkg installして、手動ビルドしたopencvが上書きされちゃった。ffmpegがないとH.264が読めないじゃんさ……。

そのまま再ビルドしようとしたらvulnerableだといってインストールさせてくれない。しょうがないからとports treeを更新してからやり直したら、ビルドがコケた。

結果的にはports側のpkg-plistを書き換えて対応。

うっかりpkg installして、手動ビルドしたopencvが上書きされちゃった。ffmpegがないとH.264が読めないじゃんさ……。

そのまま再ビルドしようとしたらvulnerableだといってインストールさせてくれない。しょうがないからとports treeを更新してからやり直したら、ビルドがコケた。

# make
(snip)
===>   Registering installation for opencv-2.4.9_7 as automatic
(snip)
pkg-static: Unable to access file /usr/ports-work/opencv/stage/usr/local/share/OpenCV/haarcascades/haarcascade_eye.xml: No such file or directory
(他多数)

ports壊れた?make cleanしてもdistcleanしても変わらず。py-opencvは内部的にopencvらしい(当たり前か)なので、それらをcleanしたら直るか?とやってみても変わらない。

# cd /var/db/ports
# rm -rf graphics_opencv graphics_py-opencv

これでもだめか。しょうがないからデバッグしよう。

元ファイルはdata/haarcascades/以下にちゃんとある。対応するCMakeList.txtdataにある。ということは参照されてない……?

CMakeは使ったことがないからわからないけど、add_directoryでサブディレクトリのCMakeList.txtを読んでくれそうな気がする。で、直下のCMakeList.txtをみると、add_directory(data)がない。

あれー……?ということでports直下のMakefileを見てみると、

.if defined(OCV_SLAVE)
        @${REINPLACE_CMD} -e 's|add_subdirectory(data)||g' \
                ${WRKSRC}/CMakeLists.txt
.endif

OCV_SLAVEは、どうやらpy-opencvからmakeするとOCV_SLAVE=pythonになる模様。

さてこの変更は2014/09に導入されていて、そんなに新しいわけではない。みんなビルドできてる?

Update to 2.4.9 (opencv側の更新)Update graphics/*opencv* to 2.4.7 (py-opencv側の更新)

そして、なんでdataを排除してるんだろう?インストールしないならpkg-plistからも削除しないといけない。しかもpy-opencvのビルド時だけという条件付きで。portsのマニュアルを少し読んでみる。

Chapter 7. Advanced pkg-plist Practices

Makefile中でPLIST_SUBA=Bの形式で書いて、pkg-plist%%A%%を書くとBになる。そしてpkg-plistの@commentで始まる行は無視されるので、これを使って対象外にするんだけど……。どうやらopencvのplistを生成するターゲットは別の経路から起動されているようで適用できない。

今回はしょうがないからpkg-plistから問題のファイルを(無条件で)削除して対応。