-e 's|@LIBSMARTCOLS_VERSION[@]|$(LIBSMARTCOLS_VERSION)|g' \
-e 's|@LIBFDISK_PC_REQUIRES[@]|$(LIBFDISK_PC_REQUIRES)|g' \
-e 's|@LIBFDISK_VERSION[@]|$(LIBFDISK_VERSION)|g' \
+ -e 's|@LIBFDISK_MAJOR_VERSION[@]|$(LIBFDISK_MAJOR_VERSION)|g' \
+ -e 's|@LIBFDISK_MINOR_VERSION[@]|$(LIBFDISK_MINOR_VERSION)|g' \
+ -e 's|@LIBFDISK_PATCH_VERSION[@]|$(LIBFDISK_PATCH_VERSION)|g' \
-e 's|@LIBBLKID_VERSION[@]|$(LIBBLKID_VERSION)|g'
CLEANFILES += $(PATHFILES)
AC_SUBST([LIBFDISK_PC_REQUIRES])
AC_SUBST([LIBFDISK_VERSION])
+AC_SUBST([LIBFDISK_MAJOR_VERSION], $PACKAGE_VERSION_MAJOR)
+AC_SUBST([LIBFDISK_MINOR_VERSION], $PACKAGE_VERSION_MINOR)
+AC_SUBST([LIBFDISK_PATCH_VERSION], $PACKAGE_VERSION_RELEASE)
AC_SUBST([LIBFDISK_VERSION_INFO])
AC_DEFINE_UNQUOTED([LIBFDISK_VERSION], ["$LIBFDISK_VERSION"], [libfdisk version string])
<xi:include href="xml/iter.xml"/>
<xi:include href="xml/utils.xml"/>
<xi:include href="xml/init.xml"/>
+ <xi:include href="xml/version-utils.xml"/>
+
</part>
<index id="api-index-full">
<title>API Index</title>
<SECTION>
<FILE>init</FILE>
-LIBFDISK_VERSION
fdisk_init_debug
</SECTION>
+<SECTION>
+<FILE>version-utils</FILE>
+LIBFDISK_MAJOR_VERSION
+LIBFDISK_MINOR_VERSION
+LIBFDISK_PATCH_VERSION
+fdisk_parse_version_string
+fdisk_get_library_version
+fdisk_get_library_features
+LIBFDISK_VERSION
+</SECTION>
+
<SECTION>
<FILE>ask</FILE>
fdisk_info
libfdisk/src/table.c \
libfdisk/src/iter.c \
libfdisk/src/script.c \
+ libfdisk/src/version.c \
\
libfdisk/src/sun.c \
libfdisk/src/sgi.c \
check_PROGRAMS += \
test_fdisk_ask \
test_fdisk_script \
- test_fdisk_utils
+ test_fdisk_utils \
+ test_fdisk_version
libfdisk_tests_cflags = -DTEST_PROGRAM $(libfdisk_la_CFLAGS)
libfdisk_tests_ldflags = libuuid.la -static
test_fdisk_script_LDFLAGS = $(libfdisk_tests_ldflags)
test_fdisk_script_LDADD = $(libfdisk_tests_ldadd)
+test_fdisk_version_SOURCES = libfdisk/src/version.c
+test_fdisk_version_CFLAGS = $(libfdisk_tests_cflags)
+test_fdisk_version_LDFLAGS = $(libfdisk_tests_ldflags)
+test_fdisk_version_LDADD = $(libfdisk_tests_ldadd)
+
endif # BUILD_LIBFDISK_TESTS
*/
#define LIBFDISK_VERSION "@LIBFDISK_VERSION@"
+#define LIBFDISK_MAJOR_VERSION @LIBFDISK_MAJOR_VERSION@
+#define LIBFDISK_MINOR_VERSION @LIBFDISK_MINOR_VERSION@
+#define LIBFDISK_PATCH_VERSION @LIBFDISK_PATCH_VERSION@
+
/**
* fdisk_context:
*
/* init.c */
extern void fdisk_init_debug(int mask);
+/* version.c */
+extern int fdisk_parse_version_string(const char *ver_string);
+extern int fdisk_get_library_version(const char **ver_string);
+extern int fdisk_get_library_features(const char ***features);
+
/* context.h */
#define FDISK_PLURAL 0
fdisk_get_grain_size;
fdisk_get_label;
fdisk_get_last_lba;
+ fdisk_get_library_features;
+ fdisk_get_library_version;
fdisk_get_minimal_iosize;
fdisk_get_nlabels;
fdisk_get_npartitions;
fdisk_new_unknown_parttype;
fdisk_next_label;
fdisk_override_geometry;
+ fdisk_parse_version_string;
fdisk_partition_cmp_partno;
fdisk_partition_cmp_start;
fdisk_partition_end_follow_default;
fdisk_partition_size_explicit;
fdisk_partition_start_follow_default;
fdisk_partition_start_is_default;
- fdisk_toggle_partition_flag;
fdisk_partition_to_string;
fdisk_partition_unset_partno;
fdisk_partition_unset_size;
fdisk_table_remove_partition;
fdisk_table_sort_partitions;
fdisk_table_wrong_order;
+ fdisk_toggle_partition_flag;
fdisk_unref_ask;
fdisk_unref_context;
fdisk_unref_partition;
--- /dev/null
+/*
+ * version.c - Return the version of the library
+ *
+ * Copyright (C) 2015 Karel Zak <kzak@redhat.com>
+ *
+ */
+
+/**
+ * SECTION: version-utils
+ * @title: Version functions
+ * @short_description: functions to get the library version.
+ */
+
+#include <ctype.h>
+
+#include "fdiskP.h"
+
+static const char *lib_version = LIBFDISK_VERSION;
+static const char *lib_features[] = {
+#ifdef CONFIG_LIBFDISK_ASSERT
+ "assert",
+#endif
+ "debug", /* always enabled */
+ NULL
+};
+
+/**
+ * fdisk_parse_version_string:
+ * @ver_string: version string (e.g "2.18.0")
+ *
+ * Returns: release version code.
+ */
+int fdisk_parse_version_string(const char *ver_string)
+{
+ const char *cp;
+ int version = 0;
+
+ assert(ver_string);
+
+ for (cp = ver_string; *cp; cp++) {
+ if (*cp == '.')
+ continue;
+ if (!isdigit(*cp))
+ break;
+ version = (version * 10) + (*cp - '0');
+ }
+ return version;
+}
+
+/**
+ * fdisk_get_library_version:
+ * @ver_string: return pointer to the static library version string if not NULL
+ *
+ * Returns: release version number.
+ */
+int fdisk_get_library_version(const char **ver_string)
+{
+ if (ver_string)
+ *ver_string = lib_version;
+
+ return fdisk_parse_version_string(lib_version);
+}
+
+/**
+ * fdisk_get_library_features:
+ * @features: returns a pointer to the static array of strings, the array is
+ * terminated by NULL.
+ *
+ * Returns: number of items in the features array not including the last NULL,
+ * or less than zero in case of error
+ *
+ * Example:
+ * <informalexample>
+ * <programlisting>
+ * const char *features;
+ *
+ * fdisk_get_library_features(&features);
+ * while (features && *features)
+ * printf("%s\n", *features++);
+ * </programlisting>
+ * </informalexample>
+ *
+ */
+int fdisk_get_library_features(const char ***features)
+{
+ if (!features)
+ return -EINVAL;
+
+ *features = lib_features;
+ return ARRAY_SIZE(lib_features) - 1;
+}
+
+#ifdef TEST_PROGRAM
+int test_version(struct fdisk_test *ts, int argc, char *argv[])
+{
+ const char *ver;
+ const char **features;
+
+ fdisk_get_library_version(&ver);
+
+ printf("Library version: %s\n", ver);
+ printf("Library API version: " LIBFDISK_VERSION "\n");
+ printf("Library features:");
+
+ fdisk_get_library_features(&features);
+ while (features && *features)
+ printf(" %s", *features++);
+
+ if (fdisk_get_library_version(NULL) ==
+ fdisk_parse_version_string(LIBFDISK_VERSION))
+ return 0;
+
+ return -1;
+}
+
+int main(int argc, char *argv[])
+{
+ struct fdisk_test ts[] = {
+ { "--print", test_version, "print versions" },
+ { NULL }
+ };
+
+ return fdisk_run_test(ts, argc, argv);
+}
+#endif