[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