blob: a890954fc35cd8a45d82067705a979e893db8d73 [file] [log] [blame]
From e8b3fbfa3d6a11eee25db2dc0f31f439aaf0b65a Mon Sep 17 00:00:00 2001
From: Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
Date: Thu, 26 May 2011 17:30:04 -0300
Subject: [PATCH] Allow disabling atasmart, lvm2 and devicemapper support.
https://bugs.freedesktop.org/show_bug.cgi?id=37647
---
configure.ac | 53 +++++++++++++++++++++++++++++++++++++++----------
src/adapter-private.h | 1 -
src/adapter.c | 1 -
src/daemon.c | 4 ++++
src/device-private.c | 2 +-
src/device-private.h | 5 ++---
src/device.c | 23 +++++++++++++++++----
src/expander-private.h | 1 -
src/expander.c | 1 -
src/helpers/Makefile.am | 20 +++++++++++++------
src/helpers/partutil.c | 3 ++-
src/port-private.h | 1 -
src/probers/Makefile.am | 8 ++++++--
tools/udisks.c | 10 ++++++++--
14 files changed, 99 insertions(+), 34 deletions(-)
diff --git a/configure.ac b/configure.ac
index 9454423..8c4e4c2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -155,13 +155,33 @@ PKG_CHECK_MODULES(POLKIT_GOBJECT_1, [polkit-gobject-1 >= 0.97])
AC_SUBST(POLKIT_GOBJECT_1_CFLAGS)
AC_SUBST(POLKIT_GOBJECT_1_LIBS)
-PKG_CHECK_MODULES(LIBPARTED, [libparted >= 1.8.8])
-AC_SUBST(LIBPARTED_CFLAGS)
-AC_SUBST(LIBPARTED_LIBS)
-
-PKG_CHECK_MODULES(DEVMAPPER, [devmapper >= 1.02])
-AC_SUBST(DEVMAPPER_CFLAGS)
-AC_SUBST(DEVMAPPER_LIBS)
+have_parted=no
+AC_ARG_ENABLE(parted, AS_HELP_STRING([--disable-parted], [disable disk partitioning]))
+if test "x$enable_parted" != "xno"; then
+ PKG_CHECK_MODULES(LIBPARTED, [libparted >= 1.8.8],
+ [AC_DEFINE(USE_PARTED, 1, [Define if parted should be used]) have_parted=yes],
+ have_parted=no)
+ AC_SUBST(LIBPARTED_CFLAGS)
+ AC_SUBST(LIBPARTED_LIBS)
+ if test "x$have_parted" = xno -a "x$enable_parted" = xyes; then
+ AC_MSG_ERROR([parted support requested but libraries not found])
+ fi
+fi
+AM_CONDITIONAL(HAVE_PARTED, [test "$have_parted" = "yes"])
+
+have_devmapper=no
+AC_ARG_ENABLE(devmapper, AS_HELP_STRING([--disable-devmapper], [disable device mapper support]))
+if test "x$enable_devmapper" != "xno"; then
+ PKG_CHECK_MODULES(DEVMAPPER, [devmapper >= 1.02],
+ [AC_DEFINE(HAVE_DEVMAPPER, 1, [Define if device mapper is available]) have_devmapper=yes],
+ have_devmapper=no)
+ AC_SUBST(DEVMAPPER_CFLAGS)
+ AC_SUBST(DEVMAPPER_LIBS)
+ if test "x$have_devmapper" = xno -a "x$enable_devmapper" = xyes; then
+ AC_MSG_ERROR([devmapper support requested but libraries not found])
+ fi
+fi
+AM_CONDITIONAL(HAVE_DEVMAPPER, [test "$have_devmapper" = "yes"])
have_lvm2=no
AC_ARG_ENABLE(lvm2, AS_HELP_STRING([--enable-lvm2], [enable LVM2 support]))
@@ -185,9 +205,19 @@ if test "x$enable_dmmp" = "xyes"; then
fi
AM_CONDITIONAL(HAVE_DMMP, [test "$have_dmmp" = "yes"])
-PKG_CHECK_MODULES(LIBATASMART, [libatasmart >= 0.14])
-AC_SUBST(LIBATASMART_CFLAGS)
-AC_SUBST(LIBATASMART_LIBS)
+have_libatasmart=no
+AC_ARG_ENABLE(libatasmart, AS_HELP_STRING([--disable-libatasmart], [disable libatasmart support]))
+if test "x$enable_libatasmart" != "xno"; then
+ PKG_CHECK_MODULES(LIBATASMART, [libatasmart >= 0.14],
+ [AC_DEFINE(HAVE_LIBATASMART, 1, [Define if libatasmart is available]) have_libatasmart=yes],
+ have_libatasmart=no)
+ AC_SUBST(LIBATASMART_CFLAGS)
+ AC_SUBST(LIBATASMART_LIBS)
+ if test "x$have_libatasmart" = xno -a "x$enable_libatasmart" = xyes; then
+ AC_MSG_ERROR([libatasmart support requested but libraries not found])
+ fi
+fi
+AM_CONDITIONAL(HAVE_LIBATASMART, [test "$have_libatasmart" = "yes"])
PKG_CHECK_MODULES(LIBUDEV, [libudev >= 143])
AC_SUBST(LIBUDEV_CFLAGS)
@@ -278,9 +308,12 @@ echo "
cppflags: ${CPPFLAGS}
xsltproc: ${XSLTPROC}
+ Parted support: ${have_parted}
+ Device Mapper support: ${have_devmapper}
LVM2 support: ${have_lvm2}
dm-multipath: ${have_dmmp}
Remote Access: ${remote_access}
+ libatasmart support: ${have_libatasmart}
Maintainer mode: ${USE_MAINTAINER_MODE}
Profiling: ${enable_profiling}
diff --git a/src/adapter-private.h b/src/adapter-private.h
index 3409e21..ef584e3 100644
--- a/src/adapter-private.h
+++ b/src/adapter-private.h
@@ -23,7 +23,6 @@
#include <dbus/dbus-glib.h>
#include <gudev/gudev.h>
-#include <atasmart.h>
#include "types.h"
diff --git a/src/adapter.c b/src/adapter.c
index 65e05b0..45db8c8 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -30,7 +30,6 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <gudev/gudev.h>
-#include <atasmart.h>
#include "daemon.h"
#include "adapter.h"
diff --git a/src/daemon.c b/src/daemon.c
index fafcf9a..14e952f 100644
--- a/src/daemon.c
+++ b/src/daemon.c
@@ -1748,6 +1748,7 @@ mdstat_changed_event (GIOChannel *channel,
return TRUE;
}
+#ifdef HAVE_LIBATASMART
static gboolean
refresh_ata_smart_data (Daemon *daemon)
{
@@ -1776,6 +1777,7 @@ refresh_ata_smart_data (Daemon *daemon)
return FALSE;
}
+#endif
static gboolean
register_disks_daemon (Daemon *daemon)
@@ -1987,12 +1989,14 @@ daemon_new (void)
mount_file_clean_stale (l);
g_list_free (l);
+#ifdef HAVE_LIBATASMART
/* set up timer for refreshing ATA SMART data - we don't want to refresh immediately because
* when adding a device we also do this...
*/
daemon->priv->ata_smart_refresh_timer_id = g_timeout_add_seconds (ATA_SMART_REFRESH_INTERVAL_SECONDS,
(GSourceFunc) refresh_ata_smart_data,
daemon);
+#endif
PROFILE ("daemon_new(): end");
return daemon;
diff --git a/src/device-private.c b/src/device-private.c
index 45418ce..fb1d959 100644
--- a/src/device-private.c
+++ b/src/device-private.c
@@ -1390,7 +1390,7 @@ device_set_drive_ata_smart_time_collected (Device *device,
void
device_set_drive_ata_smart_status (Device *device,
- SkSmartOverall value)
+ guint value)
{
if (G_UNLIKELY (device->priv->drive_ata_smart_status != value))
{
diff --git a/src/device-private.h b/src/device-private.h
index 32a9bd0..8c57c13 100644
--- a/src/device-private.h
+++ b/src/device-private.h
@@ -23,7 +23,6 @@
#include <dbus/dbus-glib.h>
#include <gudev/gudev.h>
-#include <atasmart.h>
#include "types.h"
@@ -228,7 +227,7 @@ struct DevicePrivate
gboolean drive_ata_smart_is_available;
guint64 drive_ata_smart_time_collected;
- SkSmartOverall drive_ata_smart_status;
+ guint drive_ata_smart_status;
void *drive_ata_smart_blob;
gsize drive_ata_smart_blob_size;
@@ -396,7 +395,7 @@ void device_set_holders_objpath (Device *device, GStrv value);
void device_set_drive_ata_smart_is_available (Device *device, gboolean value);
void device_set_drive_ata_smart_time_collected (Device *device, guint64 value);
-void device_set_drive_ata_smart_status (Device *device, SkSmartOverall value);
+void device_set_drive_ata_smart_status (Device *device, guint value);
void device_set_drive_ata_smart_blob_steal (Device *device, gchar *blob, gsize blob_size);
G_END_DECLS
diff --git a/src/device.c b/src/device.c
index 2ae7f38..d73f9d6 100644
--- a/src/device.c
+++ b/src/device.c
@@ -50,7 +50,9 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <gudev/gudev.h>
+#ifdef HAVE_LIBATASMART
#include <atasmart.h>
+#endif
#include "daemon.h"
#include "device.h"
@@ -664,10 +666,14 @@ get_property (GObject *object,
case PROP_DRIVE_ATA_SMART_STATUS:
{
const gchar *status;
- if (device->priv->drive_ata_smart_status == (SkSmartOverall) - 1)
+#ifdef HAVE_LIBATASMART
+ if (device->priv->drive_ata_smart_status == (guint) - 1)
status = "";
else
status = sk_smart_overall_to_string (device->priv->drive_ata_smart_status);
+#else
+ status = "";
+#endif
g_value_set_string (value, status);
}
break;
@@ -5144,6 +5150,7 @@ device_new (Daemon *daemon,
goto out;
}
+#ifdef HAVE_LIBATASMART
/* if just added, update the smart data if applicable */
if (device->priv->drive_ata_smart_is_available)
{
@@ -5151,6 +5158,7 @@ device_new (Daemon *daemon,
gchar *ata_smart_refresh_data_options[] = { NULL };
device_drive_ata_smart_refresh_data (device, ata_smart_refresh_data_options, NULL);
}
+#endif
PROFILE ("device_new(native_path=%s): end", native_path);
out:
@@ -9840,16 +9848,18 @@ drive_ata_smart_refresh_data_completed_cb (DBusGMethodInvocation *context,
const char *stdout,
gpointer user_data)
{
+#ifdef HAVE_LIBATASMART
gint rc;
- SkDisk *d;
+ SkDisk *d = NULL;
+ SkSmartOverall overall;
gchar *blob;
gsize blob_size;
time_t time_collected;
- SkSmartOverall overall;
+#endif
PROFILE ("drive_ata_smart_refresh_data_completed_cb(device=%s) start", device->priv->native_path);
- d = NULL;
+#ifdef HAVE_LIBATASMART
blob = NULL;
if (job_was_cancelled || stdout == NULL)
@@ -9953,6 +9963,11 @@ drive_ata_smart_refresh_data_completed_cb (DBusGMethodInvocation *context,
g_free (blob);
if (d != NULL)
sk_disk_free (d);
+
+#else
+ throw_error (context, ERROR_FAILED, "libatasmart support disabled");
+#endif
+
PROFILE ("drive_ata_smart_refresh_data_completed_cb(device=%s) end", device->priv->native_path);
}
diff --git a/src/expander-private.h b/src/expander-private.h
index ef4f440..98a8300 100644
--- a/src/expander-private.h
+++ b/src/expander-private.h
@@ -23,7 +23,6 @@
#include <dbus/dbus-glib.h>
#include <gudev/gudev.h>
-#include <atasmart.h>
#include "types.h"
diff --git a/src/expander.c b/src/expander.c
index 734ec0a..e799f13 100644
--- a/src/expander.c
+++ b/src/expander.c
@@ -34,7 +34,6 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <gudev/gudev.h>
-#include <atasmart.h>
#include <stdlib.h>
#include "daemon.h"
diff --git a/src/helpers/Makefile.am b/src/helpers/Makefile.am
index 4b863c0..d3ec4e9 100644
--- a/src/helpers/Makefile.am
+++ b/src/helpers/Makefile.am
@@ -19,15 +19,9 @@ INCLUDES = \
libexec_PROGRAMS = \
udisks-helper-mkfs \
- udisks-helper-delete-partition \
- udisks-helper-create-partition \
- udisks-helper-modify-partition \
- udisks-helper-create-partition-table \
udisks-helper-change-filesystem-label \
udisks-helper-linux-md-remove-component \
udisks-helper-fstab-mounter \
- udisks-helper-ata-smart-collect \
- udisks-helper-ata-smart-selftest \
udisks-helper-drive-detach \
udisks-helper-drive-poll \
udisks-helper-linux-md-check \
@@ -48,6 +42,13 @@ udisks_helper_mkfs_SOURCES = job-shared.h job-mkfs.c
udisks_helper_mkfs_CPPFLAGS = $(AM_CPPFLAGS)
udisks_helper_mkfs_LDADD = $(GLIB_LIBS)
+if HAVE_PARTED
+libexec_PROGRAMS += \
+ udisks-helper-delete-partition \
+ udisks-helper-create-partition \
+ udisks-helper-modify-partition \
+ udisks-helper-create-partition-table
+
udisks_helper_delete_partition_SOURCES = job-shared.h job-delete-partition.c
udisks_helper_delete_partition_CPPFLAGS = $(AM_CPPFLAGS)
udisks_helper_delete_partition_LDADD = $(GLIB_LIBS) libpartutil.la
@@ -63,11 +64,17 @@ udisks_helper_modify_partition_LDADD = $(GLIB_LIBS) libpartutil.la
udisks_helper_create_partition_table_SOURCES = job-shared.h job-create-partition-table.c
udisks_helper_create_partition_table_CPPFLAGS = $(AM_CPPFLAGS)
udisks_helper_create_partition_table_LDADD = $(GLIB_LIBS) libpartutil.la
+endif
udisks_helper_change_filesystem_label_SOURCES = job-shared.h job-change-filesystem-label.c
udisks_helper_change_filesystem_label_CPPFLAGS = $(AM_CPPFLAGS)
udisks_helper_change_filesystem_label_LDADD = $(GLIB_LIBS)
+if HAVE_LIBATASMART
+libexec_PROGRAMS += \
+ udisks-helper-ata-smart-collect \
+ udisks-helper-ata-smart-selftest
+
udisks_helper_ata_smart_selftest_SOURCES = job-shared.h job-ata-smart-selftest.c
udisks_helper_ata_smart_selftest_CPPFLAGS = $(AM_CPPFLAGS) $(LIBATASMART_CFLAGS) $(GLIB_CFLAGS)
udisks_helper_ata_smart_selftest_LDADD = $(LIBATASMART_LIBS) $(GLIB_LIBS)
@@ -75,6 +82,7 @@ udisks_helper_ata_smart_selftest_LDADD = $(LIBATASMART_LIBS) $(GLIB_LIBS)
udisks_helper_ata_smart_collect_SOURCES = job-ata-smart-collect.c
udisks_helper_ata_smart_collect_CPPFLAGS = $(AM_CPPFLAGS) $(LIBATASMART_CFLAGS) $(GLIB_CFLAGS)
udisks_helper_ata_smart_collect_LDADD = $(LIBATASMART_LIBS) $(GLIB_LIBS)
+endif
udisks_helper_linux_md_remove_component_SOURCES = job-shared.h job-linux-md-remove-component.c
udisks_helper_linux_md_remove_component_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/src/helpers/partutil.c b/src/helpers/partutil.c
index 72a8fe3..8893a39 100644
--- a/src/helpers/partutil.c
+++ b/src/helpers/partutil.c
@@ -62,7 +62,6 @@ DEBUG (const gchar *format,
# include <config.h>
#endif
-#define USE_PARTED
#ifdef USE_PARTED
#include <parted/parted.h>
#endif
@@ -928,6 +927,7 @@ part_table_parse_apple (int fd,
return p;
}
+#ifdef USE_PARTED
static PartitionTable *
part_table_load_from_disk_from_file (char *device_file)
{
@@ -948,6 +948,7 @@ part_table_load_from_disk_from_file (char *device_file)
out:
return ret;
}
+#endif
PartitionTable *
part_table_load_from_disk (int fd)
diff --git a/src/port-private.h b/src/port-private.h
index cc48376..a91532f 100644
--- a/src/port-private.h
+++ b/src/port-private.h
@@ -23,7 +23,6 @@
#include <dbus/dbus-glib.h>
#include <gudev/gudev.h>
-#include <atasmart.h>
#include "types.h"
diff --git a/src/probers/Makefile.am b/src/probers/Makefile.am
index 06bb566..01c693b 100644
--- a/src/probers/Makefile.am
+++ b/src/probers/Makefile.am
@@ -22,8 +22,6 @@ INCLUDES = \
udevhelperdir = $(slashlibdir)/udev
udevhelper_PROGRAMS = udisks-part-id \
- udisks-dm-export \
- udisks-probe-ata-smart \
udisks-probe-sas-expander \
$(NULL)
@@ -35,17 +33,23 @@ udisks_part_id_SOURCES = part-id.c
udisks_part_id_CPPFLAGS = $(AM_CPPFLAGS) $(LIBUDEV_CFLAGS)
udisks_part_id_LDADD = $(GLIB_LIBS) $(LIBUDEV_LIBS) $(top_builddir)/src/helpers/libpartutil.la
+if HAVE_DEVMAPPER
+udevhelper_PROGRAMS += udisks-dm-export
udisks_dm_export_SOURCES = udisks-dm-export.c
udisks_dm_export_CPPFLAGS = $(AM_CPPFLAGS) $(DEVMAPPER_CFLAGS) $(GLIB_CFLAGS)
udisks_dm_export_LDADD = $(DEVMAPPER_LIBS) $(GLIB_LIBS)
+endif
udisks_lvm_pv_export_SOURCES = udisks-lvm-pv-export.c
udisks_lvm_pv_export_CPPFLAGS = $(AM_CPPFLAGS) $(DEVMAPPER_CFLAGS) $(LVM2_CFLAGS) $(GLIB_CFLAGS)
udisks_lvm_pv_export_LDADD = $(DEVMAPPER_LIBS) $(LVM2_LIBS) $(GLIB_LIBS)
+if HAVE_LIBATASMART
+udevhelper_PROGRAMS += udisks-probe-ata-smart
udisks_probe_ata_smart_SOURCES = udisks-probe-ata-smart.c
udisks_probe_ata_smart_CPPFLAGS = $(AM_CPPFLAGS) $(LIBATASMART_CFLAGS)
udisks_probe_ata_smart_LDADD = $(LIBATASMART_LIBS)
+endif
udisks_probe_sas_expander_SOURCES = udisks-probe-sas-expander.c
udisks_probe_sas_expander_CPPFLAGS = $(AM_CPPFLAGS) $(GLIB_CFLAGS)
diff --git a/tools/udisks.c b/tools/udisks.c
index 97e80d7..d30159b 100644
--- a/tools/udisks.c
+++ b/tools/udisks.c
@@ -43,7 +43,9 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
+#ifdef HAVE_LIBATASMART
#include <atasmart.h>
+#endif
#include "udisks-daemon-glue.h"
#include "udisks-device-glue.h"
@@ -983,6 +985,7 @@ end_highlight (void)
g_print ("\x1B[0m");
}
+#ifdef HAVE_LIBATASMART
static const gchar *
ata_smart_status_to_desc (const gchar *status,
gboolean *out_highlight)
@@ -1163,6 +1166,7 @@ print_ata_smart_attr (SkDisk *d,
g_free (threshold_str);
g_free (pretty);
}
+#endif
static void
do_show_info (const char *object_path)
@@ -1445,7 +1449,7 @@ do_show_info (const char *object_path)
g_print (" if speed: %" G_GINT64_FORMAT " bits/s\n", props->drive_connection_speed);
/* ------------------------------------------------------------------------------------------------- */
-
+#ifdef HAVE_LIBATASMART
if (!props->drive_ata_smart_is_available)
{
g_print (" ATA SMART: not available\n");
@@ -1498,7 +1502,9 @@ do_show_info (const char *object_path)
}
}
-
+#else
+ g_print (" ATA SMART: not supported\n");
+#endif
/* ------------------------------------------------------------------------------------------------- */
}