ℹ️本記事は古いコンテンツを変換して表示しています。
表示が崩れたり、リンクが正しくない可能性があります。ご了承ください。
ℹ️本記事は古いコンテンツを変換して表示しています。
表示が崩れたり、リンクが正しくない可能性があります。ご了承ください。
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.txt
もdata
にある。ということは参照されてない……?
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
のマニュアルを少し読んでみる。
Makefile
中でPLIST_SUB
にA=B
の形式で書いて、pkg-plist
に%%A%%
を書くとB
になる。そしてpkg-plistの@commentで始まる行は無視されるので、これを使って対象外にするんだけど……。どうやらopencv
のplistを生成するターゲットは別の経路から起動されているようで適用できない。
今回はしょうがないからpkg-plist
から問題のファイルを(無条件で)削除して対応。