Silent ABI break, memory corruption and potential security bugs introduced between 1.42 and 1.46
After updating from pango-1.42 (debian stable) to pango 1.46 (testing) all our pango-based renderers stopped compiling, with messages similar to these:
pango-font.c:45:20: error: field ‘parent_class’ has incomplete type ‘PangoFcFontClass’ {aka ‘_PangoFcFontClass’}
pango-font.c:243:16: error: invalid use of incomplete type ‘PangoFcFontClass’ {aka ‘struct _PangoFcFontClass’} fc_font_class->unlock_face = pango_opengl_font_real_unlock_face;
The reason is that all symbols required for subclassing, and also definitions for public members have been removed from the (public?) header files into "private" header files (called pangofc-private.h and so on). Also, subclassing PangoFcFont and PangoFcFontmap is required when implementing your own renderer (this is documented as well), and removing the required definitions from the public API means this is broken as well.
This is a major API breakage, as these structs and members are documented as part of the stable interface. Currently, this breaks all our renderer backends (e.g. for opengl).
This breakage seems to be intended, but it's not clear to me why third-party renderers are no longer allowed. It would be nice if this enourmous API-breakage would be reconsidered and mved into a major library version, and/or an alternative provided (as far as I can see, this change simply means implementing your own renderer, despite documented, is no longer wanted, as there is no other way to implement your own renderer now).
I think it is a strength that pango is extensible (e.g. by implementing your own opengl renderer), and I feel removing this extensibility is not a step into the right direction.