#53339 closed defect (fixed)
OpenCV 3.2.0 fails building bundled freetype
| Reported by: | BSeppke (Benjamin Seppke) | Owned by: | stromnov (Andrey Stromnov) |
|---|---|---|---|
| Priority: | Normal | Milestone: | |
| Component: | ports | Version: | 2.3.5 |
| Keywords: | Cc: | MarcusCalhoun-Lopez (Marcus Calhoun-Lopez) | |
| Port: | opencv |
Description
After updating to 3.2.0, I get the following error while building opencv using +contrib+python35+qt5 variants:
:info:build Undefined symbols for architecture x86_64: :info:build "_FT_Done_Face", referenced from: :info:build cv::freetype::FreeType2Impl::~FreeType2Impl() in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.cpp.o :info:build "_FT_Done_FreeType", referenced from: :info:build cv::freetype::FreeType2Impl::~FreeType2Impl() in freetype.cpp.o :info:build "_FT_Init_FreeType", referenced from: :info:build cv::freetype::FreeType2Impl::FreeType2Impl() in freetype.cpp.o :info:build "_FT_Load_Glyph", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_FT_New_Face", referenced from: :info:build cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.cpp.o :info:build "_FT_Outline_Decompose", referenced from: :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_FT_Outline_Transform", referenced from: :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_FT_Outline_Translate", referenced from: :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_FT_Render_Glyph", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_FT_Set_Pixel_Sizes", referenced from: :info:build cv::freetype::FreeType2Impl::putText(cv::_InputOutputArray const&, cv::String const&, cv::Point_<int>, int, cv::Scalar_<double>, int, int, bool) in freetype.cpp.o :info:build "_hb_buffer_add_utf8", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_hb_buffer_create", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_hb_buffer_destroy", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_hb_buffer_get_glyph_infos", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_hb_buffer_guess_segment_properties", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build "_hb_font_destroy", referenced from: :info:build cv::freetype::FreeType2Impl::~FreeType2Impl() in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.cpp.o :info:build "_hb_ft_font_create", referenced from: :info:build cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.cpp.o :info:build "_hb_shape", referenced from: :info:build cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.cpp.o :info:build cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.cpp.o :info:build ld: symbol(s) not found for architecture x86_64
A complete log is attached to this ticket.
Attachments (1)
Change History (5)
Changed 10 years ago by BSeppke (Benjamin Seppke)
comment:1 Changed 10 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)
| Cc: | MarcusCalhoun-Lopez added |
|---|
comment:2 Changed 10 years ago by mf2k (Frank Schima)
| Owner: | set to stromnov |
|---|---|
| Status: | new → assigned |
In the future, please Cc the port maintainers (port info --maintainers opencv), if any.
comment:3 Changed 10 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
comment:4 Changed 10 years ago by RJVB (René Bertin)
That's a bit of a tricky hack which wouldn't work with all patch implementations; on Linux patch typically refuses to patch files with a symlink in their path and that seems to apply here. Patching files outside of the current working directory also doesn't work reliably (otherwise one could do --- ../opencv_contrib-3.2.0/foo.orig etc.).
2 safe solutions:
post-patch {
system -W ${workpath}/opencv_contrib-${version} "patch -p1 -i ${filespath}/patch-freetype.diff"
}
but that would defeat my proposed enhancement of storing applied patchfiles in the statefile, or
post-extract {
file rename ${workpath}/opencv_contrib-${version} ${worksrcpath}/opencv_contrib
}
post-patch {
file rename ${worksrcpath}/opencv_contrib ${workpath}/opencv_contrib-${version}
}
Both are kludgy, but MacPorts hasn't really been conceived for ports that get additional sources from outside ${worksrcpath}.
@stromnov : if you have time you could try looking into getting everything to unpack into a parent directory so you get something like
> ls -R `port work opencv` build opencv/opencv-3.2.0 opencv/opencv_contrib-3.2.0
The idea is to redefine the work directory structure such that the patch command will be invoked in opencv, not in the actual directory holding the sources. This could (but may well not) be as simple as adding a line
worksrcdir opencv
but you could also do the re-arranging in a post-extract step (that will probably have less unforeseen side-effects). You'd have to add the appropriate directory to the patchfiles and add a configure.args argument so that CMake finds the correct CMakeLists.txt .
Like this the port will also be ready for using the muniversal PG if and when a simple +universal build no longer works.

Error log