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>
This commit is contained in:
Karel Zak 2014-11-26 12:45:24 +01:00
parent 784467ad2d
commit 0bb4c979c6
7 changed files with 319 additions and 30 deletions

View 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

View 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
])

View File

@ -2,4 +2,6 @@ if BUILD_LIBFDISK
include libfdisk/src/Makemodule.am
EXTRA_DIST += libfdisk/COPYING
endif # BUILD_LIBFDISK

1
libfdisk/src/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
libfdisk.h

View 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

View 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 */

232
libfdisk/src/libfdisk.sym Normal file
View File

@ -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:
*;
};