Hello.

On Wed, 2014-04-30 at 16:11, Tom Hacohen wrote:
> Hey,
> 
> As promised, these are my ABI reports. There's a bit of noise because of 
> the switch to Eo2 and the fact that our object's Eo API is not always 
> ifdefed out in the headers (the Eo api is though, so they can't be used 
> without the define). Also, obviously, the symbols exposed in the binary 
> that can not be turned off. I think though, that it's easy enough to 
> scan through the noise and find the issues.
> 
> Here's the new index for all the scans:
> http://enlightenment.org/~tasn/abi/
> 
> 
> Please have a look and share if you see anything suspicious.

I like to have some more people looking over this. The list out of my
head would be raster, cedric and k-s as they have expenrience with
this but obviously everyone is welcome.

> A good example would be:
>   [+] elm_widget_focus_highlight_geometry_get ( Evas_Object const* obj, 
> Evas_Coord* x, Evas_Coord* y, Evas_Coord* w, Evas_Coord* h ) (1)
> 
> But I guess that's "fine" because it's internal.

The application linked against the old lib and now switching to the
new one should still work with this. A problem arises this new
parameter changes the behaviour if not set. Its available through
elm_widget.h so its not really internal.

I spent some time going through this and want to share and discuss my
doubts. Starting with elm, efl is below.

Elementary:
-----------

o 1359 new symbols added. The Majority it due to eolian/eo2 and thus
not so relevant until we declare them stable.

o There are some other symbols added though which one can easily miss.
Listing them here and I would like to hear comments if we are fine
with maintaining these new APIs

Newly added symbols:

elm_config.h, libelementary.so.1.10.0
elm_config_accel_preference_get ( )
elm_config_accel_preference_set ( char const* pref )
elm_config_atspi_mode_get ( )
elm_config_atspi_mode_set ( Eina_Bool is_atspi )
elm_config_color_classes_list_free ( Eina_List* list )
elm_config_color_classes_list_get ( )
elm_config_color_overlay_apply ( )
elm_config_color_overlay_list_get ( )
elm_config_color_overlay_set ( char const* color_class, int r, int g, int b, 
int a, int r2, int g2, int b2, int a2, int r3, int g3, int b3, int a3 )
elm_config_color_overlay_unset ( char const* color_class )
elm_config_focus_auto_scroll_bring_in_enabled_get ( )
elm_config_focus_auto_scroll_bring_in_enabled_set ( Eina_Bool enabled )
elm_config_focus_highlight_clip_disabled_get ( )
elm_config_focus_highlight_clip_disabled_set ( Eina_Bool disable )
elm_config_focus_move_policy_get ( )
elm_config_focus_move_policy_set ( enum Elm_Focus_Move_Policy policy )
elm_config_item_select_on_focus_disabled_get ( )
elm_config_item_select_on_focus_disabled_set ( Eina_Bool enabled )

elm_focus.h, libelementary.so.1.10.0
elm_object_focused_item_get ( Evas_Object const* obj )
elm_object_item_focus_get ( Elm_Object_Item const* it )
elm_object_item_focus_set ( Elm_Object_Item* it, Eina_Bool focused )

elm_scroll.h, libelementary.so.1.10.0
elm_object_scroll_item_loop_enabled_get ( Evas_Object const* obj )
elm_object_scroll_item_loop_enabled_set ( Evas_Object* obj, Eina_Bool enable )

elm_widget.h, libelementary.so.1.10.0
_elm_widget_item_focus_get ( Elm_Widget_Item const* item )
_elm_widget_item_focus_get_hook_set ( Elm_Widget_Item* item, 
Elm_Widget_Focus_Get_Cb func )
_elm_widget_item_focus_set ( Elm_Widget_Item* item, Eina_Bool focused )
_elm_widget_item_focus_set_hook_set ( Elm_Widget_Item* item, 
Elm_Widget_Focus_Set_Cb func )
elm_widget_focus_highlight_enabled_get ( Evas_Object const* obj )
elm_widget_focus_highlight_focus_part_geometry_get ( Evas_Object const* obj, 
Evas_Coord* x, Evas_Coord* y, Evas_Coord* w, Evas_Coord* h )
elm_widget_focused_item_get ( Evas_Object const* obj )
elm_widget_item_loop_enabled_get ( Evas_Object const* obj )
elm_widget_item_loop_enabled_set ( Evas_Object* obj, Eina_Bool enable )
elm_gengrid.eo.legacy.h, libelementary.so.1.10.0
elm_gengrid_wheel_disabled_get ( Eo const* obj )
elm_gengrid_wheel_disabled_set ( Eo* obj, Eina_Bool disabled )


I also wonder why we have some newly added symbols in the generated legacy
headers. Should they not cover what we already had thus legacy?


elm_gengrid_legacy.h, libelementary.so.1.10.0
elm_gengrid_reorder_mode_start ( Evas_Object* obj, Ecore_Pos_Map tween_mode )
elm_gengrid_reorder_mode_stop ( Evas_Object* obj )

elm_photo.eo.legacy.h, libelementary.so.1.10.0
elm_photo_editable_get ( Eo const* obj )
elm_photo_fill_inside_get ( Eo const* obj )
elm_photo_size_get ( Eo const* obj )

elm_route.eo.legacy.h, libelementary.so.1.10.0
elm_route_emap_set ( Eo* obj, void* emap )

o Removed symbols seem only to come from the eo2 change which we have
declared unstable right now. But please have another look if that is
correct:

elm_atspi_object_eo.h, libelementary.so.1.9.3
elm_atspi_component_interface_get ( )
elm_atspi_obj_class_get ( )
elm_atspi_widget_obj_class_get ( )
elm_atspi_window_interface_get ( )

elm_interface_fileselector.h, libelementary.so.1.9.3
elm_fileselector_interface_get ( )

elm_interface_scrollable.h, libelementary.so.1.9.3
elm_obj_pan_eo_class_get ( )
elm_scrollable_interface_get ( )

elm_web_legacy.h, libelementary.so.1.9.3
elm_web_uri_get ( Evas_Object const* obj )

^^^^ This one looks suspicious to me. Can our elm and webkit people please
comment on this removal?


elm_widget.h, libelementary.so.1.9.3
elm_widget_class_get ( )

o Other problems

elm_map_legacy.h, libelementary.so.1.9.3
[−] elm_map_canvas_to_region_convert ( Evas_Object const* obj, Evas_Coord const 
x, Evas_Coord const y, double* lon, double* lat ) (2) 
changed to:
elm_map_canvas_to_region_convert ( Eo const* obj, Evas_Coord x, Evas_Coord y, 
double* lon, double* lat )

The removal of the const here can cause us trouble or am I wrong?

o We also have tons of changes in all legacy headers from Evas_Object
to Eo, but I guess that might be ok in the legacy headers.

o Many constants have been changed but from what I have seen only in
the generated eo code


EFL:
----
o Ignoring all eo based added symbols I see the following new ones.
Are we fine with maintaining those?

Ecore_Evas.h, libecore_evas.so.1.10.0
ecore_evas_aux_hint_add ( Ecore_Evas* ee, char const* hint, char const* val )
ecore_evas_aux_hint_del ( Ecore_Evas* ee, int const id )
ecore_evas_aux_hint_val_set ( Ecore_Evas* ee, int const id, char const* val )
ecore_evas_aux_hints_allowed_get ( Ecore_Evas const* ee )
ecore_evas_aux_hints_supported_get ( Ecore_Evas const* ee )

Ecore_X_Atoms.h, libecore_x.so.1.10.0
ECORE_X_ATOM_E_WINDOW_AUX_HINT [data]
ECORE_X_ATOM_E_WINDOW_AUX_HINT_ALLOWED [data]
ECORE_X_ATOM_E_WINDOW_AUX_HINT_SUPPORT [data]
ECORE_X_ATOM_E_WINDOW_AUX_HINT_SUPPORTED_LIST [data]

Edje_Common.h, libedje.so.1.10.0
edje_object_part_object_name_get ( Evas_Object const* obj )

Eet.h, libeet.so.1.10.0
eet_data_image_colorspace_get ( Eet_File* ef, char const* name, char const* 
cipher_key, Eet_Colorspace const** cspaces )
eet_data_image_decode_to_cspace_surface_cipher ( void const* data, char const* 
cipher_key, int size, unsigned int src_x, unsigned int src_y, unsigned int* d, 
unsigned int w, unsigned int h, unsigned int row_stride, Eet_Colorspace cspace, 
int* alpha, int* comp, int* quality, Eet_Image_Encoding* lossy )
eet_data_image_read_to_cspace_surface_cipher ( Eet_File* ef, char const* name, 
char const* cipher_key, unsigned int src_x, unsigned int src_y, unsigned int* 
d, unsigned int w, unsigned int h, unsigned int row_stride, Eet_Colorspace 
cspace, int* alpha, int* comp, int* quality, Eet_Image_Encoding* lossy )
eet_data_read_cipher_buffer ( Eet_File* ef, Eet_Data_Descriptor* edd, char 
const* name, char const* cipher_key, char* buffer, int buffer_size )

Eeze.h, libeeze.so.1.10.0
eeze_udev_get ( )
eeze_udev_syspath_check_property ( char const* syspath, char const* property, 
char const* value )
eeze_udev_syspath_check_sysattr ( char const* syspath, char const* sysattr, 
char const* value )
eeze_udev_syspath_get_parent_filtered ( char const* syspath, char const* 
subsystem, char const* devtype )

eina_accessor.h, libeina.so.1.10.0
eina_accessor_clone ( Eina_Accessor* accessor )

eina_hash.h, libeina.so.1.10.0
eina_hash_list_append ( Eina_Hash* hash, void const* key, void const* data )
eina_hash_list_prepend ( Eina_Hash* hash, void const* key, void const* data )
eina_hash_list_remove ( Eina_Hash* hash, void const* key, void const* data )

eina_inarray.h, libeina.so.1.10.0
eina_inarray_resize ( Eina_Inarray* array, unsigned int new_size )

eina_log.h, libeina.so.1.10.0
eina_log_domain_registered_level_set ( int domain, int level )

Eio.h, libeio.so.1.10.0
eio_memory_burst_limit_get ( )
eio_memory_burst_limit_set ( size_t limit )

Evas_Common.h, libevas.so.1.10.0
evas_font_path_global_append ( char const* path )
evas_font_path_global_clear ( )
evas_font_path_global_list ( )
evas_font_path_global_prepend ( char const* path )

o Same question why we have new symbols listed in legacy as I raised in elm

evas.eo.legacy.h, libevas.so.1.10.0
evas_event_feed_key_down_with_keycode ( Eo* obj, char const* keyname, char 
const* key, char const* string, char const* compose, unsigned int timestamp, 
void const* data, unsigned int keycode )
evas_event_feed_key_up_with_keycode ( Eo* obj, char const* keyname, char const* 
key, char const* string, char const* compose, unsigned int timestamp, void 
const* data, unsigned int keycode )

evas_image.eo.legacy.h, libevas.so.1.10.0
evas_object_image_mmap_get ( Eo const* obj, Eina_File const** f, char const** 
key )
evas_object_image_scene_get ( Eo const* obj )
evas_object_image_scene_set ( Eo* obj, Evas_3D_Scene* scene )

o Removed symbols have only been in EO headers

o Again some Evas_Object to Eo changes inEO legacy headers.

o Some changes in eet public APIs from int to Eet_Image_Encoding enum

Eet.h, libeet.so.1.9.3
[+] eet_data_image_decode ( void const* data, int size, unsigned int* w, 
unsigned int* h, int* alpha, int* compress, int* quality, int* lossy ) (1) 
[+] eet_data_image_decode_cipher ( void const* data, char const* cipher_key, 
int size, unsigned int* w, unsigned int* h, int* alpha, int* compress, int* 
quality, int* lossy ) (1) 
[+] eet_data_image_decode_to_surface ( void const* data, int size, unsigned int 
src_x, unsigned int src_y, unsigned int* d, unsigned int w, unsigned int h, 
unsigned int row_stride, int* alpha, int* compress, int* quality, int* lossy ) 
(1) 
[+] eet_data_image_decode_to_surface_cipher ( void const* data, char const* 
cipher_key, int size, unsigned int src_x, unsigned int src_y, unsigned int* d, 
unsigned int w, unsigned int h, unsigned int row_stride, int* alpha, int* 
compress, int* quality, int* lossy ) (1) 
[+] eet_data_image_encode ( void const* data, int* size_ret, unsigned int w, 
unsigned int h, int alpha, int compress, int quality, int lossy ) (1) 
[+] eet_data_image_encode_cipher ( void const* data, char const* cipher_key, 
unsigned int w, unsigned int h, int alpha, int compress, int quality, int 
lossy, int* size_ret ) (1) 
[+] eet_data_image_header_decode ( void const* data, int size, unsigned int* w, 
unsigned int* h, int* alpha, int* compress, int* quality, int* lossy ) (1) 
[+] eet_data_image_header_decode_cipher ( void const* data, char const* 
cipher_key, int size, unsigned int* w, unsigned int* h, int* alpha, int* 
compress, int* quality, int* lossy ) (1) 
[+] eet_data_image_header_read ( Eet_File* ef, char const* name, unsigned int* 
w, unsigned int* h, int* alpha, int* compress, int* quality, int* lossy ) (1) 
[+] eet_data_image_header_read_cipher ( Eet_File* ef, char const* name, char 
const* cipher_key, unsigned int* w, unsigned int* h, int* alpha, int* compress, 
int* quality, int* lossy ) (1) 
[+] eet_data_image_read ( Eet_File* ef, char const* name, unsigned int* w, 
unsigned int* h, int* alpha, int* compress, int* quality, int* lossy ) (1) 
[+] eet_data_image_read_cipher ( Eet_File* ef, char const* name, char const* 
cipher_key, unsigned int* w, unsigned int* h, int* alpha, int* compress, int* 
quality, int* lossy ) (1) 
[+] eet_data_image_read_to_surface ( Eet_File* ef, char const* name, unsigned 
int src_x, unsigned int src_y, unsigned int* d, unsigned int w, unsigned int h, 
unsigned int row_stride, int* alpha, int* compress, int* quality, int* lossy ) 
(1) 
[+] eet_data_image_read_to_surface_cipher ( Eet_File* ef, char const* name, 
char const* cipher_key, unsigned int src_x, unsigned int src_y, unsigned int* 
d, unsigned int w, unsigned int h, unsigned int row_stride, int* alpha, int* 
compress, int* quality, int* lossy ) (1) 
[+] eet_data_image_write ( Eet_File* ef, char const* name, void const* data, 
unsigned int w, unsigned int h, int alpha, int compress, int quality, int lossy 
) (1) 
[+] eet_data_image_write_cipher ( Eet_File* ef, char const* name, char const* 
cipher_key, void const* data, unsigned int w, unsigned int h, int alpha, int 
compress, int quality, int lossy ) (1) 

Somehow in the back of my head I have a note that enums are not int everywhere.
Are we care about these cases?

o More constants changes in EO legacy headers


This concludes what I have found. In summary I think most issues are
noise from EO and get be ignored right now but we should have another
look at the newly added APIs to make sure we are happy with them. Also
the removal of elm_web_uri_get() strikes me odd and I would like to
hear about it.

regards
Stefan Schmidt

------------------------------------------------------------------------------
Is your legacy SCM system holding you back? Join Perforce May 7 to find out:
• 3 signs your SCM is hindering your productivity
• Requirements for releasing software faster
• Expert tips and advice for migrating your SCM now
http://p.sf.net/sfu/perforce
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to