summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2014-11-26 12:45:24 +0100
committerKarel Zak2014-11-26 12:45:24 +0100
commit0bb4c979c68ec8ffeadc3315f26c883f19c98d1e (patch)
treedfc8741f1575ed1a0ae469f4976dd990e007e1a6
parentblkdiscard: fix compiler warning (diff)
downloadkernel-qcow2-util-linux-0bb4c979c68ec8ffeadc3315f26c883f19c98d1e.tar.gz
kernel-qcow2-util-linux-0bb4c979c68ec8ffeadc3315f26c883f19c98d1e.tar.xz
kernel-qcow2-util-linux-0bb4c979c68ec8ffeadc3315f26c883f19c98d1e.zip
build-sys: create a regular shared libfdisk.so
- symbols versioning - SONAME from configure.ac - library version to header file - modify build-sys to compile and install shared lib Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--Makefile.am7
-rw-r--r--configure.ac22
-rw-r--r--libfdisk/Makemodule.am2
-rw-r--r--libfdisk/src/.gitignore1
-rw-r--r--libfdisk/src/Makemodule.am70
-rw-r--r--libfdisk/src/libfdisk.h.in (renamed from libfdisk/src/libfdisk.h)15
-rw-r--r--libfdisk/src/libfdisk.sym232
7 files changed, 319 insertions, 30 deletions
diff --git a/Makefile.am b/Makefile.am
index 122344e80..c7eb19584 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,14 +18,15 @@ LDADD = $(LTLIBINTL)
dist_noinst_DATA = $(dist_man_MANS)
# Paths to in-tree libraries (use ul_ prefix to avoid possible collisions) Note
-# that blkid.h, libmount.h and libsmartcols.h are generated and stored in build
-# dirs.
+# that blkid.h, libmount.h, libfdisk.h and libsmartcols.h are generated and
+# stored in build dirs.
#
ul_libblkid_incdir = $(top_builddir)/libblkid/src
ul_libmount_incdir = $(top_builddir)/libmount/src
ul_libsmartcols_incdir = $(top_builddir)/libsmartcols/src
+ul_libfdisk_incdir = $(top_builddir)/libfdisk/src
+
ul_libuuid_incdir = $(top_srcdir)/libuuid/src
-ul_libfdisk_incdir = $(top_srcdir)/libfdisk/src
pkgconfigdir = $(usrlib_execdir)/pkgconfig
diff --git a/configure.ac b/configure.ac
index 6c504b8e1..0966f7bcb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -53,6 +53,13 @@ LIBSMARTCOLS_LT_MINOR=1
LIBSMARTCOLS_LT_MICRO=0
LIBSMARTCOLS_VERSION_INFO=`expr $LIBSMARTCOLS_LT_MAJOR + $LIBSMARTCOLS_LT_MINOR`:$LIBSMARTCOLS_LT_MICRO:$LIBSMARTCOLS_LT_MINOR
+dnl libfdisk version
+LIBFDISK_VERSION="$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_RELEASE"
+LIBFDISK_LT_MAJOR=1
+LIBFDISK_LT_MINOR=1
+LIBFDISK_LT_MICRO=0
+LIBFDISK_VERSION_INFO=`expr $LIBFDISK_LT_MAJOR + $LIBFDISK_LT_MINOR`:$LIBFDISK_LT_MICRO:$LIBFDISK_LT_MINOR
+
# Check whether exec_prefix=/usr:
AS_CASE([$exec_prefix:$prefix],
[NONE:NONE | NONE:/usr | /usr:*],
@@ -843,11 +850,21 @@ AC_DEFINE_UNQUOTED([LIBSMARTCOLS_VERSION], ["$LIBSMARTCOLS_VERSION"], [libsmartc
dnl
-dnl libfdisk is enabled at all times if possible
+dnl libfdisk
dnl
-UL_BUILD_INIT([libfdisk], [check])
+AC_ARG_ENABLE([libfdisk],
+ AS_HELP_STRING([--disable-libfdisk], [do not build libfdisk]),
+ [], [UL_DEFAULT_ENABLE([libfdisk], [check])]
+)
+UL_BUILD_INIT([libfdisk])
UL_REQUIRES_BUILD([libfdisk], [libuuid])
AM_CONDITIONAL([BUILD_LIBFDISK], [test "x$build_libfdisk" = xyes])
+AM_CONDITIONAL([BUILD_LIBFDISK_TESTS], [test "x$build_libfdisk" = xyes -a "x$enable_static" = xyes])
+
+AC_SUBST([LIBFDISK_VERSION])
+AC_SUBST([LIBFDISK_VERSION_INFO])
+AC_DEFINE_UNQUOTED([LIBFDISK_VERSION], ["$LIBFDISK_VERSION"], [libfdisk version string])
+
UL_BUILD_INIT([fdisk], [check])
UL_REQUIRES_BUILD([fdisk], [libfdisk])
@@ -1844,6 +1861,7 @@ libmount/src/libmount.h
libsmartcols/docs/Makefile
libsmartcols/docs/version.xml
libsmartcols/src/libsmartcols.h
+libfdisk/src/libfdisk.h
po/Makefile.in
])
diff --git a/libfdisk/Makemodule.am b/libfdisk/Makemodule.am
index 323a57f6f..6d1803985 100644
--- a/libfdisk/Makemodule.am
+++ b/libfdisk/Makemodule.am
@@ -2,4 +2,6 @@ if BUILD_LIBFDISK
include libfdisk/src/Makemodule.am
+EXTRA_DIST += libfdisk/COPYING
+
endif # BUILD_LIBFDISK
diff --git a/libfdisk/src/.gitignore b/libfdisk/src/.gitignore
new file mode 100644
index 000000000..7e79b6511
--- /dev/null
+++ b/libfdisk/src/.gitignore
@@ -0,0 +1 @@
+libfdisk.h
diff --git a/libfdisk/src/Makemodule.am b/libfdisk/src/Makemodule.am
index e33962bf7..727b6a9b7 100644
--- a/libfdisk/src/Makemodule.am
+++ b/libfdisk/src/Makemodule.am
@@ -1,13 +1,11 @@
-#
-# The libfdisk is used for internal util-linux purpose. The library is not
-# distributed as shared library for now. Maybe one day...
-#
+# libfdisk.h is generated, so it's stored in builddir!
+fdiskincdir = $(includedir)/libfdisk
+nodist_fdiskinc_HEADERS = $(top_builddir)/libfdisk/src/libfdisk.h
-noinst_LTLIBRARIES += libfdisk.la
+usrlib_exec_LTLIBRARIES += libfdisk.la
libfdisk_la_SOURCES = \
- libfdisk/src/libfdisk.h \
- libfdisk/src/fdiskP.h \
+ include/list.h \
\
libfdisk/src/init.c \
libfdisk/src/test.c \
@@ -26,47 +24,55 @@ libfdisk_la_SOURCES = \
libfdisk/src/sgi.c \
libfdisk/src/dos.c \
libfdisk/src/bsd.c \
- libfdisk/src/gpt.c
+ libfdisk/src/gpt.c \
+ $(nodist_fdiskinc_HEADERS)
nodist_libfdisk_la_SOURCES = libfdisk/src/fdiskP.h
-libfdisk_la_LIBADD = libcommon.la
-libfdisk_la_DEPENDENCIES = libcommon.la
+libfdisk_la_LIBADD = libcommon.la libuuid.la
libfdisk_la_CFLAGS = \
+ $(SOLIB_CFLAGS) \
+ -I$(ul_libuuid_incdir) \
-I$(ul_libfdisk_incdir) \
-I$(top_srcdir)/libfdisk/src
+libfdisk_la_DEPENDENCIES = \
+ libcommon.la \
+ libuuid.la \
+ libfdisk/src/libfdisk.sym \
+ libfdisk/src/libfdisk.h.in
+
+libfdisk_la_LDFLAGS = \
+ $(SOLIB_LDFLAGS) \
+ -Wl,--version-script=$(top_srcdir)/libfdisk/src/libfdisk.sym \
+ -version-info $(LIBFDISK_VERSION_INFO)
+
if BUILD_LIBBLKID
libfdisk_la_LIBADD += libblkid.la
libfdisk_la_DEPENDENCIES += libblkid.la
libfdisk_la_CFLAGS += -I$(ul_libblkid_incdir)
endif
-if BUILD_LIBUUID
-libfdisk_la_LIBADD += libuuid.la
-libfdisk_la_DEPENDENCIES += libuuid.la
-libfdisk_la_CFLAGS += -I$(ul_libuuid_incdir)
-endif
+EXTRA_DIST += \
+ libfdisk/src/libfdisk.sym \
+ libfdisk/src/libfdisk.h.in
+if BUILD_LIBFDISK_TESTS
check_PROGRAMS += \
test_fdisk_ask \
test_fdisk_script \
test_fdisk_utils
libfdisk_tests_cflags = -DTEST_PROGRAM $(libfdisk_la_CFLAGS)
-libfdisk_tests_ldflags = -static
-libfdisk_tests_ldadd = libfdisk.la
+libfdisk_tests_ldflags = libuuid.la -static
+libfdisk_tests_ldadd = libfdisk.la $(UUID_LIBS)
if BUILD_LIBBLKID
libfdisk_tests_ldflags += libblkid.la
endif
-if BUILD_LIBUUID
-libfdisk_tests_ldflags += libuuid.la
-endif
-
test_fdisk_ask_SOURCES = libfdisk/src/ask.c
test_fdisk_ask_CFLAGS = $(libfdisk_tests_cflags)
test_fdisk_ask_LDFLAGS = $(libfdisk_tests_ldflags)
@@ -81,3 +87,25 @@ test_fdisk_script_SOURCES = libfdisk/src/script.c
test_fdisk_script_CFLAGS = $(libfdisk_tests_cflags)
test_fdisk_script_LDFLAGS = $(libfdisk_tests_ldflags)
test_fdisk_script_LDADD = $(libfdisk_tests_ldadd)
+
+endif # BUILD_LIBFDISK_TESTS
+
+
+# move lib from $(usrlib_execdir) to $(libdir) if needed
+install-exec-hook-libfdisk:
+ if test "$(usrlib_execdir)" != "$(libdir)" -a -f "$(DESTDIR)$(usrlib_execdir)/libfdisk.so"; then \
+ mkdir -p $(DESTDIR)$(libdir); \
+ mv $(DESTDIR)$(usrlib_execdir)/libfdisk.so.* $(DESTDIR)$(libdir); \
+ so_img_name=$$(readlink $(DESTDIR)$(usrlib_execdir)/libfdisk.so); \
+ so_img_rel_target=$$(echo $(usrlib_execdir) | sed 's,\(^/\|\)[^/][^/]*,..,g'); \
+ (cd $(DESTDIR)$(usrlib_execdir) && \
+ rm -f libfdisk.so && \
+ $(LN_S) $$so_img_rel_target$(libdir)/$$so_img_name libfdisk.so); \
+ fi
+
+uninstall-hook-libfdisk:
+ rm -f $(DESTDIR)$(libdir)/libfdisk.so*
+
+INSTALL_EXEC_HOOKS += install-exec-hook-libfdisk
+UNINSTALL_HOOKS += uninstall-hook-libfdisk
+
diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h.in
index 1c5d2ebcd..ae1d03899 100644
--- a/libfdisk/src/libfdisk.h
+++ b/libfdisk/src/libfdisk.h.in
@@ -1,7 +1,7 @@
/*
* libfdisk.h - libfdisk API
*
- * Copyright (C) 2012 Karel Zak <kzak@redhat.com>
+ * Copyright (C) 2012-2014 Karel Zak <kzak@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef _LIBFDISK_FDISK_H
-#define _LIBFDISK_FDISK_H
+#ifndef _LIBFDISK_H
+#define _LIBFDISK_H
#ifdef __cplusplus
extern "C" {
@@ -30,6 +30,13 @@ extern "C" {
#include <stdint.h>
/**
+ * LIBFDISK_VERSION:
+ *
+ * Library version string
+ */
+#define LIBFDISK_VERSION "@LIBFDISK_VERSION@"
+
+/**
* fdisk_context:
*
* Basic library handler.
@@ -561,4 +568,4 @@ extern char *fdisk_partname(const char *dev, size_t partno);
}
#endif
-#endif /* _LIBFDISK_FDISK_H */
+#endif /* _LIBFDISK_H */
diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym
new file mode 100644
index 000000000..7928322b8
--- /dev/null
+++ b/libfdisk/src/libfdisk.sym
@@ -0,0 +1,232 @@
+/*
+ * The symbol versioning ensures that a new application requiring symbol foo;
+ * can't run with old libblkid.so not providing foo;
+ * version info can't enforce this since we never change the SONAME.
+ *
+ * Copyright (C) 2014 Karel Zak <kzak@redhat.com>
+ */
+MOUNT_2.26 {
+global:
+ fdisk_add_partition;
+ fdisk_align_lba;
+ fdisk_align_lba_in_range;
+ fdisk_apply_script;
+ fdisk_apply_script_headers;
+ fdisk_apply_table;
+ fdisk_ask_get_query;
+ fdisk_ask_get_type;
+ fdisk_ask_menu_get_default;
+ fdisk_ask_menu_get_item;
+ fdisk_ask_menu_get_nitems;
+ fdisk_ask_menu_get_result;
+ fdisk_ask_menu_set_result;
+ fdisk_ask_number;
+ fdisk_ask_number_get_base;
+ fdisk_ask_number_get_default;
+ fdisk_ask_number_get_high;
+ fdisk_ask_number_get_low;
+ fdisk_ask_number_get_range;
+ fdisk_ask_number_get_result;
+ fdisk_ask_number_get_unit;
+ fdisk_ask_number_inchars;
+ fdisk_ask_number_set_relative;
+ fdisk_ask_number_set_result;
+ fdisk_ask_partnum;
+ fdisk_ask_print_get_errno;
+ fdisk_ask_print_get_mesg;
+ fdisk_ask_string;
+ fdisk_ask_string_get_result;
+ fdisk_ask_string_set_result;
+ fdisk_ask_yesno;
+ fdisk_ask_yesno_get_result;
+ fdisk_ask_yesno_set_result;
+ fdisk_assign_device;
+ fdisk_bsd_edit_disklabel;
+ fdisk_bsd_link_partition;
+ fdisk_bsd_write_bootstrap;
+ fdisk_copy_parttype;
+ fdisk_create_disklabel;
+ fdisk_deassign_device;
+ fdisk_delete_all_partitions;
+ fdisk_delete_partition;
+ fdisk_dos_enable_compatible;
+ fdisk_dos_is_compatible;
+ fdisk_dos_move_begin;
+ fdisk_enable_details;
+ fdisk_enable_listonly;
+ fdisk_field_get_id;
+ fdisk_field_get_name;
+ fdisk_field_get_width;
+ fdisk_field_is_number;
+ fdisk_free_iter;
+ fdisk_get_alignment_offset;
+ fdisk_get_devfd;
+ fdisk_get_devname;
+ fdisk_get_disklabel_id;
+ fdisk_get_first_lba;
+ fdisk_get_freespaces;
+ fdisk_get_geom_cylinders;
+ fdisk_get_geom_heads;
+ fdisk_get_geom_sectors;
+ fdisk_get_grain_size;
+ fdisk_get_label;
+ fdisk_get_last_lba;
+ fdisk_get_minimal_iosize;
+ fdisk_get_nlabels;
+ fdisk_get_npartitions;
+ fdisk_get_nsectors;
+ fdisk_get_optimal_iosize;
+ fdisk_get_parent;
+ fdisk_get_partition;
+ fdisk_get_partitions;
+ fdisk_get_physector_size;
+ fdisk_get_script;
+ fdisk_get_sector_size;
+ fdisk_get_unit;
+ fdisk_get_units_per_sector;
+ fdisk_gpt_is_hybrid;
+ fdisk_has_label;
+ fdisk_has_user_device_properties;
+ fdisk_info;
+ fdisk_init_debug;
+ fdisk_is_details;
+ fdisk_is_labeltype;
+ fdisk_is_listonly;
+ fdisk_is_partition_used;
+ fdisk_is_readonly;
+ fdisk_iter_get_direction;
+ fdisk_label_get_field;
+ fdisk_label_get_field_by_name;
+ fdisk_label_get_fields_ids;
+ fdisk_label_get_name;
+ fdisk_label_get_nparttypes;
+ fdisk_label_get_parttype;
+ fdisk_label_get_parttype_from_code;
+ fdisk_label_get_parttype_from_string;
+ fdisk_label_get_type;
+ fdisk_label_has_code_parttypes;
+ fdisk_label_is_changed;
+ fdisk_label_is_disabled;
+ fdisk_label_parse_parttype;
+ fdisk_label_require_geometry;
+ fdisk_label_set_changed;
+ fdisk_label_set_disabled;
+ fdisk_lba_is_phy_aligned;
+ fdisk_list_disklabel;
+ fdisk_locate_disklabel;
+ fdisk_new_context;
+ fdisk_new_iter;
+ fdisk_new_nested_context;
+ fdisk_new_partition;
+ fdisk_new_parttype;
+ fdisk_new_script;
+ fdisk_new_script_from_file;
+ fdisk_new_table;
+ fdisk_new_unknown_parttype;
+ fdisk_next_label;
+ fdisk_override_geometry;
+ fdisk_partition_cmp_partno;
+ fdisk_partition_cmp_start;
+ fdisk_partition_end_follow_default;
+ fdisk_partition_end_is_default;
+ fdisk_partition_get_attrs;
+ fdisk_partition_get_name;
+ fdisk_partition_get_parent;
+ fdisk_partition_get_partno;
+ fdisk_partition_get_size;
+ fdisk_partition_get_start;
+ fdisk_partition_get_type;
+ fdisk_partition_get_uuid;
+ fdisk_partition_has_partno;
+ fdisk_partition_has_size;
+ fdisk_partition_has_start;
+ fdisk_partition_is_bootable;
+ fdisk_partition_is_container;
+ fdisk_partition_is_freespace;
+ fdisk_partition_is_nested;
+ fdisk_partition_is_used;
+ fdisk_partition_next_partno;
+ fdisk_partition_partno_follow_default;
+ fdisk_partition_set_attrs;
+ fdisk_partition_set_name;
+ fdisk_partition_set_partno;
+ fdisk_partition_set_size;
+ fdisk_partition_set_start;
+ fdisk_partition_set_type;
+ fdisk_partition_set_uuid;
+ fdisk_partition_size_explicit;
+ fdisk_partition_start_follow_default;
+ fdisk_partition_start_is_default;
+ fdisk_partition_toggle_flag;
+ fdisk_partition_to_string;
+ fdisk_partition_unset_partno;
+ fdisk_partition_unset_size;
+ fdisk_partition_unset_start;
+ fdisk_partname;
+ fdisk_parttype_get_code;
+ fdisk_parttype_get_name;
+ fdisk_parttype_get_string;
+ fdisk_parttype_is_unknown;
+ fdisk_parttype_set_code;
+ fdisk_parttype_set_name;
+ fdisk_parttype_set_typestr;
+ fdisk_ref_ask;
+ fdisk_ref_context;
+ fdisk_ref_partition;
+ fdisk_ref_parttype;
+ fdisk_ref_script;
+ fdisk_ref_table;
+ fdisk_reorder_partitions;
+ fdisk_reread_partition_table;
+ fdisk_reset_alignment;
+ fdisk_reset_device_properties;
+ fdisk_reset_iter;
+ fdisk_reset_partition;
+ fdisk_reset_table;
+ fdisk_save_user_geometry;
+ fdisk_save_user_sector_size;
+ fdisk_script_get_header;
+ fdisk_script_get_nlines;
+ fdisk_script_get_table;
+ fdisk_script_read_context;
+ fdisk_script_read_file;
+ fdisk_script_read_line;
+ fdisk_script_set_header;
+ fdisk_script_write_file;
+ fdisk_set_ask;
+ fdisk_set_disklabel_id;
+ fdisk_set_first_lba;
+ fdisk_set_last_lba;
+ fdisk_set_partition;
+ fdisk_set_partition_type;
+ fdisk_set_script;
+ fdisk_set_unit;
+ fdisk_sgi_create_info;
+ fdisk_sgi_set_bootfile;
+ fdisk_sun_set_alt_cyl;
+ fdisk_sun_set_ilfact;
+ fdisk_sun_set_pcylcount;
+ fdisk_sun_set_rspeed;
+ fdisk_sun_set_xcyl;
+ fdisk_table_add_partition;
+ fdisk_table_get_nents;
+ fdisk_table_get_partition;
+ fdisk_table_is_empty;
+ fdisk_table_next_partition;
+ fdisk_table_remove_partition;
+ fdisk_table_sort_partitions;
+ fdisk_table_wrong_order;
+ fdisk_unref_ask;
+ fdisk_unref_context;
+ fdisk_unref_partition;
+ fdisk_unref_parttype;
+ fdisk_unref_script;
+ fdisk_unref_table;
+ fdisk_use_cylinders;
+ fdisk_verify_disklabel;
+ fdisk_warn;
+ fdisk_warnx;
+ fdisk_write_disklabel;
+local:
+ *;
+};