]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
build-sys: create a regular shared libfdisk.so
authorKarel Zak <kzak@redhat.com>
Wed, 26 Nov 2014 11:45:24 +0000 (12:45 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 26 Nov 2014 11:45:24 +0000 (12:45 +0100)
- 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>
Makefile.am
configure.ac
libfdisk/Makemodule.am
libfdisk/src/.gitignore [new file with mode: 0644]
libfdisk/src/Makemodule.am
libfdisk/src/libfdisk.h.in [moved from libfdisk/src/libfdisk.h with 98% similarity]
libfdisk/src/libfdisk.sym [new file with mode: 0644]

index 122344e8075531bfca595bc9aabca95e73bb0f35..c7eb19584bc676d68e07c1505c6f5bca72bdd571 100644 (file)
@@ -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
 
index 6c504b8e105f4ba51288162f99f276214416e099..0966f7bcb9b8a579ac26d5dba8b2b9e7378318f6 100644 (file)
@@ -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
 ])
 
index 323a57f6fe293f114e077868b4c338fa979ec112..6d1803985ff4cdb71f2776fd2ed2e54caf896ab5 100644 (file)
@@ -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 (file)
index 0000000..7e79b65
--- /dev/null
@@ -0,0 +1 @@
+libfdisk.h
index e33962bf702211f11be2f9a87a837cd9921e68be..727b6a9b744f0657ac94f8117358fcf4f3656a38 100644 (file)
@@ -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
+
similarity index 98%
rename from libfdisk/src/libfdisk.h
rename to libfdisk/src/libfdisk.h.in
index 1c5d2ebcd27d35aee1dcb20ff8932d61ab22e041..ae1d03899964c526fc3749488ff320002d3681ba 100644 (file)
@@ -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" {
@@ -29,6 +29,13 @@ extern "C" {
 #include <stdarg.h>
 #include <stdint.h>
 
+/**
+ * LIBFDISK_VERSION:
+ *
+ * Library version string
+ */
+#define LIBFDISK_VERSION   "@LIBFDISK_VERSION@"
+
 /**
  * fdisk_context:
  *
@@ -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 (file)
index 0000000..7928322
--- /dev/null
@@ -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:
+       *;
+};