[PATCH 1/2] lib + tests: make --pm-method logind dependant on glib version (LP: #1364998)

Colin King colin.king at canonical.com
Wed Sep 3 15:15:15 UTC 2014


From: Colin Ian King <colin.king at canonical.com>

Only make logind related code compile in if we have glib version
2.26 or higher.  This addresses older releases that support the
older glib version.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/acpi/s3/s3.c                 | 11 ++++++++++-
 src/acpi/s3power/s3power.c       | 11 ++++++++++-
 src/acpi/s4/s4.c                 | 11 ++++++++++-
 src/lib/include/fwts_pm_method.h |  7 +++++++
 src/lib/src/fwts_framework.c     | 12 ++++++++++--
 src/lib/src/fwts_pm_method.c     |  2 ++
 6 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
index 411d243..7aa420d 100644
--- a/src/acpi/s3/s3.c
+++ b/src/acpi/s3/s3.c
@@ -61,11 +61,14 @@ static int s3_init(fwts_framework *fw)
 /* Detect the best available power method */
 static void detect_pm_method(fwts_pm_method_vars *fwts_settings)
 {
+#if FWTS_ENABLE_LOGIND
 	if (s3_hybrid ?
 		fwts_logind_can_hybrid_suspend(fwts_settings) :
 		fwts_logind_can_suspend(fwts_settings))
 		fwts_settings->fw->pm_method = FWTS_PM_LOGIND;
-	else if (s3_hybrid ?
+	else
+#endif
+	if (s3_hybrid ?
 		fwts_sysfs_can_hybrid_suspend(fwts_settings) :
 		fwts_sysfs_can_suspend(fwts_settings))
 		fwts_settings->fw->pm_method = FWTS_PM_SYSFS;
@@ -73,6 +76,7 @@ static void detect_pm_method(fwts_pm_method_vars *fwts_settings)
 		fwts_settings->fw->pm_method = FWTS_PM_PMUTILS;
 }
 
+#if FWTS_ENABLE_LOGIND
 static int wrap_logind_do_suspend(fwts_pm_method_vars *fwts_settings,
 	const int percent,
 	int *duration,
@@ -89,6 +93,7 @@ static int wrap_logind_do_suspend(fwts_pm_method_vars *fwts_settings,
 
 	return *duration > 0 ? 0 : 1;
 }
+#endif
 
 static int wrap_sysfs_do_suspend(fwts_pm_method_vars *fwts_settings,
 	const int percent,
@@ -165,6 +170,7 @@ static int s3_do_suspend_resume(fwts_framework *fw,
 	}
 
 	switch (fw->pm_method) {
+#if FWTS_ENABLE_LOGIND
 		case FWTS_PM_LOGIND:
 			fwts_log_info(fw, "Using logind as the default power method.");
 			if (fwts_logind_init_proxy(fwts_settings) != 0) {
@@ -173,6 +179,7 @@ static int s3_do_suspend_resume(fwts_framework *fw,
 			}
 			do_suspend = &wrap_logind_do_suspend;
 			break;
+#endif
 		case FWTS_PM_PMUTILS:
 			fwts_log_info(fw, "Using pm-utils as the default power method.");
 			do_suspend = &wrap_pmutils_do_suspend;
@@ -413,10 +420,12 @@ static int s3_test_multiple(fwts_framework *fw)
 	int awake_delay = s3_min_delay * 1000;
 	int delta = (int)(s3_delay_delta * 1000.0);
 
+#if FWTS_ENABLE_LOGIND
 #if !GLIB_CHECK_VERSION(2,35,0)
 	/* This is for backward compatibility with old glib versions */
 	g_type_init();
 #endif
+#endif
 
 	if (s3_multiple == 1)
 		fwts_log_info(fw, "Defaulted to 1 test, use --s3-multiple=N to run more S3 cycles\n");
diff --git a/src/acpi/s3power/s3power.c b/src/acpi/s3power/s3power.c
index c391fd9..f93ffd2 100644
--- a/src/acpi/s3power/s3power.c
+++ b/src/acpi/s3power/s3power.c
@@ -118,14 +118,18 @@ static int s3power_init(fwts_framework *fw)
 /* Detect the best available power method */
 static void detect_pm_method(fwts_pm_method_vars *fwts_settings)
 {
+#if FWTS_ENABLE_LOGIND
 	if (fwts_logind_can_suspend(fwts_settings))
 		fwts_settings->fw->pm_method = FWTS_PM_LOGIND;
-	else if (fwts_sysfs_can_suspend(fwts_settings))
+	else
+#endif
+	if (fwts_sysfs_can_suspend(fwts_settings))
 		fwts_settings->fw->pm_method = FWTS_PM_SYSFS;
 	else
 		fwts_settings->fw->pm_method = FWTS_PM_PMUTILS;
 }
 
+#if FWTS_ENABLE_LOGIND
 static int wrap_logind_do_suspend(fwts_pm_method_vars *fwts_settings,
 	const int percent,
 	int *duration,
@@ -141,6 +145,7 @@ static int wrap_logind_do_suspend(fwts_pm_method_vars *fwts_settings,
 
 	return *duration > 0 ? 0 : 1;
 }
+#endif
 
 static int wrap_sysfs_do_suspend(fwts_pm_method_vars *fwts_settings,
 	const int percent,
@@ -247,10 +252,12 @@ static int s3power_test(fwts_framework *fw)
 
 	int (*do_suspend)(fwts_pm_method_vars *, const int, int*, const char*);
 
+#if FWTS_ENABLE_LOGIND
 #if !GLIB_CHECK_VERSION(2,35,0)
 	/* This is for backward compatibility with old glib versions */
 	g_type_init();
 #endif
+#endif
 
 	fwts_settings = calloc(1, sizeof(fwts_pm_method_vars));
 	if (fwts_settings == NULL)
@@ -264,6 +271,7 @@ static int s3power_test(fwts_framework *fw)
 	}
 
 	switch (fw->pm_method) {
+#if FWTS_ENABLE_LOGIND
 		case FWTS_PM_LOGIND:
 			fwts_log_info(fw, "Using logind as the default power method.");
 			if (fwts_logind_init_proxy(fwts_settings) != 0) {
@@ -272,6 +280,7 @@ static int s3power_test(fwts_framework *fw)
 			}
 			do_suspend = &wrap_logind_do_suspend;
 			break;
+#endif
 		case FWTS_PM_PMUTILS:
 			fwts_log_info(fw, "Using pm-utils as the default power method.");
 			do_suspend = &wrap_pmutils_do_suspend;
diff --git a/src/acpi/s4/s4.c b/src/acpi/s4/s4.c
index 2ea76bb..684cb68 100644
--- a/src/acpi/s4/s4.c
+++ b/src/acpi/s4/s4.c
@@ -89,14 +89,18 @@ static void s4_check_log(fwts_framework *fw,
 /* Detect the best power method available */
 static void detect_pm_method(fwts_pm_method_vars *fwts_settings)
 {
+#if FWTS_ENABLE_LOGIND
 	if (fwts_logind_can_hibernate(fwts_settings))
 		fwts_settings->fw->pm_method = FWTS_PM_LOGIND;
-	else if (fwts_sysfs_can_hibernate(fwts_settings))
+	else
+#endif
+	if (fwts_sysfs_can_hibernate(fwts_settings))
 		fwts_settings->fw->pm_method = FWTS_PM_SYSFS;
 	else
 		fwts_settings->fw->pm_method = FWTS_PM_PMUTILS;
 }
 
+#if FWTS_ENABLE_LOGIND
 static int wrap_logind_do_s4(fwts_pm_method_vars *fwts_settings,
 	const int percent,
 	int *duration,
@@ -113,6 +117,7 @@ static int wrap_logind_do_s4(fwts_pm_method_vars *fwts_settings,
 
 	return *duration > 0 ? 0 : 1;
 }
+#endif
 
 static int wrap_sysfs_do_s4(fwts_pm_method_vars *fwts_settings,
 	const int percent,
@@ -193,6 +198,7 @@ static int s4_hibernate(fwts_framework *fw,
 	}
 
 	switch (fw->pm_method) {
+#if FWTS_ENABLE_LOGIND
 		case FWTS_PM_LOGIND:
 			fwts_log_info(fw, "Using logind as the default power method.");
 			if (fwts_logind_init_proxy(fwts_settings) != 0) {
@@ -201,6 +207,7 @@ static int s4_hibernate(fwts_framework *fw,
 			}
 			do_s4 = &wrap_logind_do_s4;
 			break;
+#endif
 		case FWTS_PM_PMUTILS:
 			fwts_log_info(fw, "Using pm-utils as the default power method.");
 			do_s4 = &wrap_pmutils_do_s4;
@@ -348,10 +355,12 @@ static int s4_test_multiple(fwts_framework *fw)
 	bool retried = false;
 	char tmp[32];
 
+#if FWTS_ENABLE_LOGIND
 #if !GLIB_CHECK_VERSION(2,35,0)
 	/* This is for backward compatibility with old glib versions */
 	g_type_init();
 #endif
+#endif
 
         if (s4_multiple == 1)
                 fwts_log_info(fw, "Defaulted to run 1 test, run --s4-multiple=N to run more S4 cycles\n");
diff --git a/src/lib/include/fwts_pm_method.h b/src/lib/include/fwts_pm_method.h
index 75c9c84..5f9bcce 100644
--- a/src/lib/include/fwts_pm_method.h
+++ b/src/lib/include/fwts_pm_method.h
@@ -25,6 +25,9 @@
 #include <time.h>
 #include <stdbool.h>
 
+#define FWTS_ENABLE_LOGIND 	\
+	((GLIB_MAJOR_VERSION >= 2) && (GLIB_MINOR_VERSION >= 26))
+
 #include "fwts_types.h"
 
 typedef struct
@@ -32,10 +35,12 @@ typedef struct
 	fwts_framework *fw;
 	time_t t_start;
 	time_t t_end;
+#if FWTS_ENABLE_LOGIND
 	GDBusProxy *logind_proxy;
 	GDBusConnection *logind_connection;
 	GMainLoop *gmainloop;
 	char *action;
+#endif
 	int  min_delay;
 } fwts_pm_method_vars;
 
@@ -58,6 +63,7 @@ static inline void free_pm_method_vars(void *vars)
 {
 	fwts_pm_method_vars *var = *(void**)vars;
 
+#if FWTS_ENABLE_LOGIND
 	if (var) {
 		if (var->logind_proxy) {
 			g_object_unref(var->logind_proxy);
@@ -76,6 +82,7 @@ static inline void free_pm_method_vars(void *vars)
 			var->action = NULL;
 		}
 	}
+#endif
 	free(var);
 	var = NULL;
 }
diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
index 7229af5..f4500f8 100644
--- a/src/lib/src/fwts_framework.c
+++ b/src/lib/src/fwts_framework.c
@@ -28,6 +28,7 @@
 #include <sys/time.h>
 
 #include "fwts.h"
+#include "fwts_pm_method.h"
 
 /* Suffix ".log", ".xml", etc gets automatically appended */
 #define RESULTS_LOG	"results"
@@ -1005,14 +1006,21 @@ static int fwts_framework_acpica_parse(fwts_framework *fw, const char *arg)
  */
 static int fwts_framework_pm_method_parse(fwts_framework *fw, const char *arg)
 {
+#if FWTS_ENABLE_LOGIND
 	if (strcmp(arg, "logind") == 0)
 		fw->pm_method = FWTS_PM_LOGIND;
-	else if (strcmp(arg, "pm-utils") == 0)
+	else
+#endif
+	if (strcmp(arg, "pm-utils") == 0)
 		fw->pm_method = FWTS_PM_PMUTILS;
 	else if (strcmp(arg, "sysfs") == 0)
 		fw->pm_method = FWTS_PM_SYSFS;
 	else {
-		fprintf(stderr, "--pm-method only supports logind, pm-utils, and sysfs methods\n");
+#if FWTS_ENABLE_LOGIND
+		fprintf(stderr, "--pm-method only supports logind, pm-utils and sysfs methods\n");
+#else
+		fprintf(stderr, "--pm-method only supports pm-utils and sysfs methods\n");
+#endif
 		return FWTS_ERROR;
 	}
 
diff --git a/src/lib/src/fwts_pm_method.c b/src/lib/src/fwts_pm_method.c
index 846aeff..9aed8b1 100644
--- a/src/lib/src/fwts_pm_method.c
+++ b/src/lib/src/fwts_pm_method.c
@@ -23,6 +23,7 @@
 #include "fwts.h"
 #include "fwts_pm_method.h"
 
+#if FWTS_ENABLE_LOGIND
 /*
  *  logind_do()
  *  call Logind to perform an action
@@ -360,6 +361,7 @@ bool fwts_logind_can_hibernate(fwts_pm_method_vars *fwts_settings)
 {
 	return logind_can_do_action(fwts_settings, "CanHibernate");
 }
+#endif
 
 /*
  *  fwts_sysfs_can_suspend()
-- 
2.1.0




More information about the fwts-devel mailing list