summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2013-08-17 13:58:15 +0200
committerPeter Hutterer <peter.hutterer@who-t.net>2014-01-29 15:02:40 +1000
commit5f40be0b43b3f58cc05f8db5e3db72a5594ba95a (patch)
tree40ebc33cd6093e8b6a4d579b52c2f6641b348d6f
parent8356f417df3b03c15a4d81e0a01a33d34c138c2f (diff)
downloadlibevdev-5f40be0b43b3f58cc05f8db5e3db72a5594ba95a.tar.gz
Add ld version-script
Explicit symbol versioning allows us to provide multiple versions of incompatible API changes. It is a very common practice in GNU world and avoids the problems occuring if distributions try to ship multiple version of a single DSO. Background information available at: http://people.redhat.com/drepper/dsohowto.pdf To see the symbol-versions, use objdump: objdump -T libevdev/.libs/libevdev.so.1.0.0 This can also be used to verify that all symbols are correctly exported (typos in linker-scripts are silently ignored by ld). Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Updated for evdev 0.6's API. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--libevdev/Makefile.am6
-rw-r--r--libevdev/libevdev.sym104
2 files changed, 108 insertions, 2 deletions
diff --git a/libevdev/Makefile.am b/libevdev/Makefile.am
index 96974fc..c83a225 100644
--- a/libevdev/Makefile.am
+++ b/libevdev/Makefile.am
@@ -15,16 +15,18 @@ libevdev_la_SOURCES = \
libevdev_la_LDFLAGS = \
-version-info $(LIBEVDEV_LT_VERSION) \
- -export-symbols-regex '^libevdev_|^LIBEVDEV_' \
+ -Wl,--version-script="$(srcdir)/libevdev.sym" \
$(GNU_LD_FLAGS)
+EXTRA_libevdev_la_DEPENDENCIES = $(srcdir)/libevdev.sym
+
libevdevincludedir = $(includedir)/libevdev-1.0/libevdev
libevdevinclude_HEADERS = libevdev.h libevdev-uinput.h
event-names.h: Makefile make-event-names.py
$(PYTHON) $(srcdir)/make-event-names.py $(top_srcdir)/include/linux/input.h > $@
-EXTRA_DIST = make-event-names.py
+EXTRA_DIST = make-event-names.py libevdev.sym
CLEANFILES = event-names.h
BUILT_SOURCES = event-names.h
diff --git a/libevdev/libevdev.sym b/libevdev/libevdev.sym
new file mode 100644
index 0000000..ef4f06b
--- /dev/null
+++ b/libevdev/libevdev.sym
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2013 David Herrmann <dh.herrmann@gmail.com>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+LIBEVDEV_1 {
+global:
+ libevdev_change_fd;
+ libevdev_disable_event_code;
+ libevdev_disable_event_type;
+ libevdev_enable_event_code;
+ libevdev_enable_event_type;
+ libevdev_enable_property;
+ libevdev_event_code_from_name;
+ libevdev_event_code_from_name_n;
+ libevdev_event_code_get_name;
+ libevdev_event_is_code;
+ libevdev_event_is_type;
+ libevdev_event_type_from_name;
+ libevdev_event_type_from_name_n;
+ libevdev_event_type_get_max;
+ libevdev_event_type_get_name;
+ libevdev_fetch_event_value;
+ libevdev_fetch_slot_value;
+ libevdev_free;
+ libevdev_get_abs_flat;
+ libevdev_get_abs_fuzz;
+ libevdev_get_abs_info;
+ libevdev_get_abs_maximum;
+ libevdev_get_abs_minimum;
+ libevdev_get_abs_resolution;
+ libevdev_get_current_slot;
+ libevdev_get_driver_version;
+ libevdev_get_event_value;
+ libevdev_get_fd;
+ libevdev_get_id_bustype;
+ libevdev_get_id_product;
+ libevdev_get_id_vendor;
+ libevdev_get_id_version;
+ libevdev_get_log_priority;
+ libevdev_get_name;
+ libevdev_get_num_slots;
+ libevdev_get_phys;
+ libevdev_get_repeat;
+ libevdev_get_slot_value;
+ libevdev_get_uniq;
+ libevdev_grab;
+ libevdev_has_event_code;
+ libevdev_has_event_pending;
+ libevdev_has_event_type;
+ libevdev_has_property;
+ libevdev_kernel_set_abs_info;
+ libevdev_kernel_set_led_value;
+ libevdev_kernel_set_led_values;
+ libevdev_new;
+ libevdev_new_from_fd;
+ libevdev_next_event;
+ libevdev_property_get_name;
+ libevdev_set_abs_flat;
+ libevdev_set_abs_fuzz;
+ libevdev_set_abs_info;
+ libevdev_set_abs_maximum;
+ libevdev_set_abs_minimum;
+ libevdev_set_abs_resolution;
+ libevdev_set_clock_id;
+ libevdev_set_event_value;
+ libevdev_set_fd;
+ libevdev_set_id_bustype;
+ libevdev_set_id_product;
+ libevdev_set_id_vendor;
+ libevdev_set_id_version;
+ libevdev_set_log_function;
+ libevdev_set_log_priority;
+ libevdev_set_name;
+ libevdev_set_phys;
+ libevdev_set_slot_value;
+ libevdev_set_uniq;
+ libevdev_uinput_create_from_device;
+ libevdev_uinput_destroy;
+ libevdev_uinput_get_devnode;
+ libevdev_uinput_get_fd;
+ libevdev_uinput_get_syspath;
+ libevdev_uinput_write_event;
+
+local:
+ *;
+};