[devel] version script for libgtk+2

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Сен 5 01:06:22 MSD 2005


On Sun, Sep 04, 2005 at 06:10:13PM +0400, Dmitry V. Levin wrote:
> > На всякий случай ещё раз кратко фиксирую, "что нужно делать".
> На всякий случай напоминаю, что пока upstream не прозрел, это нужно делать
> перед упаковкой каждой новой версии.

Нарисовал скрипт, который вопроизводит последовательность действий.

$ rpmsymver /var/cache/apt/archives/libgtk+2_2.6.7-alt1_i586.rpm /var/cache/apt/archives/libgtk+2_2.8.3-alt1_i586.rpm
--- libgtk+2_2.6.7-alt1_i586.rpm/usr/lib/libgdk-x11-2.0.so.0.sym	2005-09-05 00:53:01 +0400
+++ libgtk+2_2.8.3-alt1_i586.rpm/usr/lib/libgdk-x11-2.0.so.0.sym	2005-09-05 00:53:01 +0400
@@ -12,2 +12,7 @@
 T gdk_byte_order_get_type
+T gdk_cairo_create
+T gdk_cairo_rectangle
+T gdk_cairo_region
+T gdk_cairo_set_source_color
+T gdk_cairo_set_source_pixbuf
 T gdk_cap_style_get_type
@@ -45,2 +50,3 @@
 T gdk_cursor_get_display
+T gdk_cursor_get_image
 T gdk_cursor_get_type
@@ -48,2 +54,3 @@
 T gdk_cursor_new_for_display
+T gdk_cursor_new_from_name
 T gdk_cursor_new_from_pixbuf
@@ -104,2 +111,3 @@
 T gdk_display_sync
+T gdk_display_warp_pointer
 T gdk_drag_abort
@@ -139,3 +147,2 @@
 T gdk_draw_rectangle
-T gdk_draw_rectangle_alpha_libgtk_only
 T gdk_draw_rgb_32_image
@@ -331,2 +338,3 @@
 T gdk_pixmap_get_type
+T gdk_pixmap_impl_x11_get_type
 T gdk_pixmap_lookup
@@ -387,2 +395,3 @@
 T gdk_screen_get_display
+T gdk_screen_get_font_options_libgtk_only
 T gdk_screen_get_height
@@ -394,4 +403,7 @@
 T gdk_screen_get_number
+T gdk_screen_get_resolution_libgtk_only
 T gdk_screen_get_rgb_colormap
 T gdk_screen_get_rgb_visual
+T gdk_screen_get_rgba_colormap
+T gdk_screen_get_rgba_visual
 T gdk_screen_get_root_window
@@ -409,2 +421,4 @@
 T gdk_screen_set_default_colormap
+T gdk_screen_set_font_options_libgtk_only
+T gdk_screen_set_resolution_libgtk_only
 T gdk_screen_width
@@ -529,2 +543,3 @@
 T gdk_window_move
+T gdk_window_move_region
 T gdk_window_move_resize
@@ -568,2 +583,3 @@
 T gdk_window_set_type_hint
+T gdk_window_set_urgency_hint
 T gdk_window_set_user_data
@@ -591,5 +607,6 @@
 T gdk_x11_cursor_get_xdisplay
-T gdk_x11_display_get_user_time_libgtk_only
+T gdk_x11_display_get_user_time
 T gdk_x11_display_get_xdisplay
 T gdk_x11_display_grab
+T gdk_x11_display_set_cursor_theme
 T gdk_x11_display_ungrab
@@ -622,2 +639,3 @@
 T gdk_x11_visual_get_xvisual
+T gdk_x11_window_move_to_current_desktop
 T gdk_x11_window_set_user_time
--- libgtk+2_2.6.7-alt1_i586.rpm/usr/lib/libgdk_pixbuf-2.0.so.0.sym	2005-09-05 00:53:01 +0400
+++ libgtk+2_2.8.3-alt1_i586.rpm/usr/lib/libgdk_pixbuf-2.0.so.0.sym	2005-09-05 00:53:01 +0400
@@ -85,2 +85,6 @@
 T gdk_pixbuf_set_option
+T gdk_pixbuf_simple_anim_add_frame
+T gdk_pixbuf_simple_anim_get_type
+T gdk_pixbuf_simple_anim_iter_get_type
+T gdk_pixbuf_simple_anim_new
 T gdk_pixbuf_unref
--- libgtk+2_2.6.7-alt1_i586.rpm/usr/lib/libgtk-x11-2.0.so.0.sym	2005-09-05 00:53:01 +0400
+++ libgtk+2_2.8.3-alt1_i586.rpm/usr/lib/libgtk-x11-2.0.so.0.sym	2005-09-05 00:53:01 +0400
@@ -1,5 +1,3 @@
-B caches
 B gtk_debug_flags
 B gtk_text_attr_appearance_type
-B n_caches
 D gtk_text_char_type
@@ -32,2 +30,3 @@
 T gtk_about_dialog_get_website_label
+T gtk_about_dialog_get_wrap_license
 T gtk_about_dialog_new
@@ -48,2 +47,3 @@
 T gtk_about_dialog_set_website_label
+T gtk_about_dialog_set_wrap_license
 T gtk_accel_flags_get_type
@@ -102,2 +102,3 @@
 T gtk_action_disconnect_proxy
+T gtk_action_get_accel_closure
 T gtk_action_get_accel_path
@@ -613,2 +614,3 @@
 T gtk_dialog_get_has_separator
+T gtk_dialog_get_response_for_widget
 T gtk_dialog_get_type
@@ -642,2 +644,3 @@
 T gtk_drag_set_icon_default
+T gtk_drag_set_icon_name
 T gtk_drag_set_icon_pixbuf
@@ -652,2 +655,3 @@
 T gtk_drag_source_set_icon
+T gtk_drag_source_set_icon_name
 T gtk_drag_source_set_icon_pixbuf
@@ -704,2 +708,4 @@
 T gtk_entry_completion_get_popup_completion
+T gtk_entry_completion_get_popup_set_width
+T gtk_entry_completion_get_popup_single_match
 T gtk_entry_completion_get_text_column
@@ -715,2 +721,4 @@
 T gtk_entry_completion_set_popup_completion
+T gtk_entry_completion_set_popup_set_width
+T gtk_entry_completion_set_popup_single_match
 T gtk_entry_completion_set_text_column
@@ -782,2 +790,3 @@
 T gtk_file_chooser_button_set_width_chars
+T gtk_file_chooser_confirmation_get_type
 T gtk_file_chooser_dialog_get_type
@@ -790,2 +799,3 @@
 T gtk_file_chooser_get_current_folder_uri
+T gtk_file_chooser_get_do_overwrite_confirmation
 T gtk_file_chooser_get_extra_widget
@@ -818,2 +828,3 @@
 T gtk_file_chooser_set_current_name
+T gtk_file_chooser_set_do_overwrite_confirmation
 T gtk_file_chooser_set_extra_widget
@@ -883,2 +894,3 @@
 T gtk_file_system_filename_to_path
+T gtk_file_system_get_bookmark_label
 T gtk_file_system_get_folder
@@ -897,2 +909,3 @@
 T gtk_file_system_render_icon
+T gtk_file_system_set_bookmark_label
 T gtk_file_system_unix_get_type
@@ -1076,4 +1089,12 @@
 T gtk_icon_theme_set_search_path
+T gtk_icon_view_create_drag_icon
+T gtk_icon_view_drop_position_get_type
+T gtk_icon_view_enable_model_drag_dest
+T gtk_icon_view_enable_model_drag_source
 T gtk_icon_view_get_column_spacing
 T gtk_icon_view_get_columns
+T gtk_icon_view_get_cursor
+T gtk_icon_view_get_dest_item_at_pos
+T gtk_icon_view_get_drag_dest_item
+T gtk_icon_view_get_item_at_pos
 T gtk_icon_view_get_item_width
@@ -1085,2 +1106,3 @@
 T gtk_icon_view_get_pixbuf_column
+T gtk_icon_view_get_reorderable
 T gtk_icon_view_get_row_spacing
@@ -1091,2 +1113,3 @@
 T gtk_icon_view_get_type
+T gtk_icon_view_get_visible_range
 T gtk_icon_view_item_activated
@@ -1095,2 +1118,3 @@
 T gtk_icon_view_path_is_selected
+T gtk_icon_view_scroll_to_path
 T gtk_icon_view_select_all
@@ -1100,2 +1124,4 @@
 T gtk_icon_view_set_columns
+T gtk_icon_view_set_cursor
+T gtk_icon_view_set_drag_dest_item
 T gtk_icon_view_set_item_width
@@ -1106,2 +1132,3 @@
 T gtk_icon_view_set_pixbuf_column
+T gtk_icon_view_set_reorderable
 T gtk_icon_view_set_row_spacing
@@ -1112,2 +1139,4 @@
 T gtk_icon_view_unselect_path
+T gtk_icon_view_unset_model_drag_dest
+T gtk_icon_view_unset_model_drag_source
 T gtk_identifier_get_type
@@ -1138,2 +1167,3 @@
 T gtk_im_status_style_get_type
+T gtk_image_clear
 T gtk_image_get
@@ -1361,4 +1391,8 @@
 T gtk_menu_attach_to_widget
+T gtk_menu_bar_get_child_pack_direction
+T gtk_menu_bar_get_pack_direction
 T gtk_menu_bar_get_type
 T gtk_menu_bar_new
+T gtk_menu_bar_set_child_pack_direction
+T gtk_menu_bar_set_pack_direction
 T gtk_menu_detach
@@ -1404,2 +1438,3 @@
 T gtk_menu_shell_deselect
+T gtk_menu_shell_get_take_focus
 T gtk_menu_shell_get_type
@@ -1409,2 +1444,3 @@
 T gtk_menu_shell_select_item
+T gtk_menu_shell_set_take_focus
 T gtk_menu_tool_button_get_menu
@@ -1506,2 +1542,3 @@
 T gtk_orientation_get_type
+T gtk_pack_direction_get_type
 T gtk_pack_type_get_type
@@ -1718,2 +1755,3 @@
 T gtk_scrolled_window_get_hadjustment
+T gtk_scrolled_window_get_hscrollbar
 T gtk_scrolled_window_get_placement
@@ -1723,2 +1761,3 @@
 T gtk_scrolled_window_get_vadjustment
+T gtk_scrolled_window_get_vscrollbar
 T gtk_scrolled_window_new
@@ -1784,2 +1823,3 @@
 T gtk_size_group_add_widget
+T gtk_size_group_get_ignore_hidden
 T gtk_size_group_get_mode
@@ -1789,2 +1829,3 @@
 T gtk_size_group_remove_widget
+T gtk_size_group_set_ignore_hidden
 T gtk_size_group_set_mode
@@ -1838,2 +1879,3 @@
 T gtk_stock_lookup
+T gtk_stock_set_translate_func
 T gtk_style_apply_default_background
@@ -1975,2 +2017,4 @@
 T gtk_text_iter_backward_visible_cursor_positions
+T gtk_text_iter_backward_visible_line
+T gtk_text_iter_backward_visible_lines
 T gtk_text_iter_backward_visible_word_start
@@ -2004,2 +2048,4 @@
 T gtk_text_iter_forward_visible_cursor_positions
+T gtk_text_iter_forward_visible_line
+T gtk_text_iter_forward_visible_lines
 T gtk_text_iter_forward_visible_word_end
@@ -2213,2 +2259,3 @@
 T gtk_toggle_tool_button_set_active
+T gtk_tool_button_get_icon_name
 T gtk_tool_button_get_icon_widget
@@ -2221,2 +2268,3 @@
 T gtk_tool_button_new_from_stock
+T gtk_tool_button_set_icon_name
 T gtk_tool_button_set_icon_widget
@@ -2396,2 +2444,3 @@
 T gtk_tree_row_reference_free
+T gtk_tree_row_reference_get_model
 T gtk_tree_row_reference_get_path
@@ -2494,2 +2543,3 @@
 T gtk_tree_view_column_pack_start
+T gtk_tree_view_column_queue_resize
 T gtk_tree_view_column_set_alignment
@@ -2546,2 +2596,3 @@
 T gtk_tree_view_get_vadjustment
+T gtk_tree_view_get_visible_range
 T gtk_tree_view_get_visible_rect
@@ -2809,2 +2860,3 @@
 T gtk_window_get_type_hint
+T gtk_window_get_urgency_hint
 T gtk_window_group_add_window
@@ -2824,2 +2876,3 @@
 T gtk_window_present
+T gtk_window_present_with_time
 T gtk_window_propagate_key_event
@@ -2864,2 +2917,3 @@
 T gtk_window_set_type_hint
+T gtk_window_set_urgency_hint
 T gtk_window_set_wmclass
$

Из этого видно, что ABI у библиотек меняется довольно сильно (к счастью,
совместимым образом; то есть только новые функции добавляются).
Удалилось и добавилось несколько *_libgtk_only функций.  По-видимому,
все эти функции нужно повесить на какой-нибудь PRIVATE интерфейс.  Или
вообще не экспортировать (с этим ещё надо разбираться).

Вообще, если это делать, то нужно делать для всех системных библиотек
(ну, "базовых" библиотек, которые широко используются).  К сожалению,
сейчас у нас как бы согласия нет -- есть два возражения (vsu и mhz).
Если после рассмотрения вопроса по существу возражения останутся, тогда
не знаю что делать.

PS: недавно читал.  Избранные места из истории разногласий в проекте XFree86:
http://www.xfree86.org/pipermail/forum/2003-March/001997.html
http://www.xfree86.org/pipermail/forum/2003-March/002165.html
http://www.xfree86.org/pipermail/forum/2003-April/003016.html
----------- следующая часть -----------
#!/bin/sh -e
export LC_ALL=C

[ $# = 2 ] || pod2usage --exit=2 "$0"
rpm1="$1" rpm2="$2"

dir1= dir2=
cleanup()
{
	local rc=$?
	trap - EXIT
	rm -rf $dir1 $dir2
	exit $rc
}
trap cleanup EXIT HUP INT QUIT PIPE TERM
dir1=`mktemp -d -t rpmsymver.XXXXXXXX`
dir2=`mktemp -d -t rpmsymver.XXXXXXXX`

rpm -qp --provides "$rpm1" >$dir1/provides
rpm -qp --provides "$rpm2" >$dir2/provides

awk '$1~/^lib.*[.]so[^(]*$/{print$1}' $dir1/provides |sort -u >$dir1/libraries
awk '$1~/^lib.*[.]so[^(]*$/{print$1}' $dir2/provides |sort -u >$dir2/libraries

workdir=$dir1
comm -12 $dir1/libraries $dir2/libraries >$workdir/common
[ -s $workdir/common ] || { echo "$rpm1: no common libraries with $rpm2" >&2; exit 0; }

rpm2cpio "$rpm1" |(cd $dir1; cpio -idmu --quiet)
rpm2cpio "$rpm2" |(cd $dir2; cpio -idmu --quiet)

while read -r lib; do
	lib1="$(find $dir1 -name "$lib" |head -1)"
	lib2="$(find $dir2 -name "$lib" |head -1)"
	[ -f "$lib1" ] || { echo "lib=$lib lib1=$lib1" >&2; exit 1; }
	[ -f "$lib2" ] || { echo "lib=$lib lib2=$lib2" >&2; exit 1; }
	nm -D "$lib1" |awk 'NF==3{print$2,$3}' |sort -u >"$lib1".sym
	nm -D "$lib2" |awk 'NF==3{print$2,$3}' |sort -u >"$lib2".sym
	diff -U1 "$lib1".sym "$lib2".sym >$workdir/diff || [ $? = 1 ]
	sed	-e "s@$dir1@${rpm1##*/}@g" \
		-e "s@$dir2@${rpm2##*/}@g" $workdir/diff
done <$workdir/common

: <<'__EOF__'

=head1	NAME

rpmsymver - compare symbol versioning

=head1	SYNOPSIS

B<rpmsymver> I<librpm-1.0-alt1.i586.rpm> I<librpm-2.0-alt1.i586.rpm>

=cut

__EOF__
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20050905/f1189571/attachment-0001.bin>


Подробная информация о списке рассылки Devel