[PATCH] Use a library symbol version map
Ran Benita
ran234 at gmail.com
Thu Oct 25 10:49:37 PDT 2012
On Thu, Oct 25, 2012 at 04:02:49PM +0200, Jan Engelhardt wrote:
> This helps package managers recognize when a new version of libxkbcommon
> (with same SONAME) is required due to new symbols.
This seems like a good thing to me. But you left out the symbols in
src/compat.c, which provides some ABI backwards compatibility. But since
xkbcommon-compat.h does the rewriting to the new symbols, and the new
release broke API and ABI anyway, I say we should just drop this file.
So if Daniel agrees, we should just remove src/compat.c, before merging
this patch.
And we should also really set --version-info... But that's a different
story.
[One comment below]
> Signed-off-by: Jan Engelhardt <jengelh at inai.de>
> ---
> Makefile.am | 4 +++-
> libxkbcommon.map | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 69 insertions(+), 1 deletion(-)
> create mode 100644 libxkbcommon.map
>
> diff --git a/Makefile.am b/Makefile.am
> index c08bca1..a50422b 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -35,7 +35,9 @@ xkbcommoninclude_HEADERS = \
> xkbcommon/xkbcommon-names.h
>
> lib_LTLIBRARIES = libxkbcommon.la
> -libxkbcommon_la_LDFLAGS = -no-undefined
> +libxkbcommon_la_LDFLAGS = \
> + -Wl,--version-script=${srcdir}/libxkbcommon.map \
> + -no-undefined
Would you mind adding -Wl,--no-undefined-version here, also? It checks
the case where you remove a symbol from the code, but not from the
version map (which of course shouldn't happen, but still).
If there's also a way to make it warn about new symbols which are
XKB_EXPORT'ed but are not mentioned in the map, that would be helpful
as well.
Thanks,
Ran
> libxkbcommon_la_SOURCES = \
> src/xkbcomp/action.c \
> src/xkbcomp/action.h \
> diff --git a/libxkbcommon.map b/libxkbcommon.map
> new file mode 100644
> index 0000000..822d985
> --- /dev/null
> +++ b/libxkbcommon.map
> @@ -0,0 +1,66 @@
> +XKBCOMMON_0.2.0 {
> +global:
> + xkb_keysym_get_name;
> + xkb_keysym_from_name;
> + xkb_keysym_to_utf8;
> + xkb_keysym_to_utf32;
> + xkb_context_new;
> + xkb_context_ref;
> + xkb_context_unref;
> + xkb_context_set_user_data;
> + xkb_context_get_user_data;
> + xkb_context_include_path_append;
> + xkb_context_include_path_append_default;
> + xkb_context_include_path_reset_defaults;
> + xkb_context_include_path_clear;
> + xkb_context_num_include_paths;
> + xkb_context_include_path_get;
> + xkb_context_set_log_level;
> + xkb_context_get_log_level;
> + xkb_context_set_log_verbosity;
> + xkb_context_get_log_verbosity;
> + xkb_context_set_log_fn;
> + xkb_keymap_new_from_names;
> + xkb_keymap_new_from_file;
> + xkb_keymap_new_from_string;
> + xkb_keymap_ref;
> + xkb_keymap_unref;
> + xkb_keymap_get_as_string;
> + xkb_keymap_num_mods;
> + xkb_keymap_mod_get_name;
> + xkb_keymap_mod_get_index;
> + xkb_keymap_num_layouts;
> + xkb_keymap_layout_get_name;
> + xkb_keymap_layout_get_index;
> + xkb_keymap_num_layouts_for_key;
> + xkb_keymap_num_levels_for_key;
> + xkb_keymap_key_get_syms_by_level;
> + xkb_keymap_num_leds;
> + xkb_keymap_led_get_name;
> + xkb_keymap_led_get_index;
> + xkb_keymap_key_repeats;
> + xkb_state_new;
> + xkb_state_ref;
> + xkb_state_unref;
> + xkb_state_get_keymap;
> + xkb_state_update_key;
> + xkb_state_key_get_syms;
> + xkb_state_key_get_one_sym;
> + xkb_state_key_get_layout;
> + xkb_state_key_get_level;
> + xkb_state_update_mask;
> + xkb_state_serialize_mods;
> + xkb_state_serialize_layout;
> + xkb_state_mod_name_is_active;
> + xkb_state_mod_names_are_active;
> + xkb_state_mod_index_is_active;
> + xkb_state_mod_indices_are_active;
> + xkb_state_mod_index_is_consumed;
> + xkb_state_mod_mask_remove_consumed;
> + xkb_state_layout_name_is_active;
> + xkb_state_layout_index_is_active;
> + xkb_state_led_name_is_active;
> + xkb_state_led_index_is_active;
> +local:
> + *;
> +};
> --
> 1.7.10.4
More information about the wayland-devel
mailing list