aboutsummaryrefslogtreecommitdiff
path: root/sysutils/ipmitool
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils/ipmitool')
-rw-r--r--sysutils/ipmitool/Makefile7
-rw-r--r--sysutils/ipmitool/files/freeipmi-support.patch189
2 files changed, 196 insertions, 0 deletions
diff --git a/sysutils/ipmitool/Makefile b/sysutils/ipmitool/Makefile
index 4190827c9208..81da45af86ff 100644
--- a/sysutils/ipmitool/Makefile
+++ b/sysutils/ipmitool/Makefile
@@ -48,6 +48,13 @@ CONFIGURE_ARGS+= --disable-intf-open
.if defined(WITH_FREEIPMI) || \
(exists(${LOCALBASE}/include/freeipmi/freeipmi.h) && \
!defined(WITHOUT_FREEIPMI))
+# Support for FreeIPMI 0.4.x and 0.5.x API
+EXTRA_PATCHES+= ${FILESDIR}/freeipmi-support.patch
+USE_AUTOTOOLS+= autoconf:261 libtool:15 aclocal:19 automake:19
+# libtool15 installs it's aclocal macros into ${LOCALBASE}/share/aclocal
+ACLOCAL_ARGS+= --acdir=${ACLOCAL_DIR} -I ${LOCALBASE}/share/aclocal
+# Make automake quiet about missing NEWS and ChangeLog files
+AUTOMAKE_ARGS+= --foreign
LIB_DEPENDS+= freeipmi:${PORTSDIR}/sysutils/freeipmi
CPPFLAGS+= -I${LOCALBASE}/include
LDFLAGS+= -L${LOCALBASE}/lib
diff --git a/sysutils/ipmitool/files/freeipmi-support.patch b/sysutils/ipmitool/files/freeipmi-support.patch
new file mode 100644
index 000000000000..af926ea52858
--- /dev/null
+++ b/sysutils/ipmitool/files/freeipmi-support.patch
@@ -0,0 +1,189 @@
+diff -u -ruN ../ipmitool-1.8.9/configure.in ./configure.in
+--- ../ipmitool-1.8.9/configure.in Wed Mar 7 04:15:35 2007
++++ ./configure.in Sat Dec 15 19:22:10 2007
+@@ -239,7 +239,7 @@
+ fi
+ if test "x$enable_intf_free" = "xyes"; then
+ dnl Determine if you got the right FreeIPMI version
+- AC_MSG_CHECKING([for good libfreeipmi version])
++ AC_MSG_CHECKING([for libfreeipmi version 0.3.0])
+ AC_TRY_COMPILE([
+ #include <sys/types.h> /* For size_t */
+ #include <stdio.h> /* For NULL */
+@@ -253,13 +253,65 @@
+ 0,
+ NULL,
+ 0);
+- ], ac_free_version_good=yes,ac_free_version_good=no)
+- AC_MSG_RESULT($ac_free_version_good)
+- if test "x$ac_free_version_good" = "xyes"; then
++ ], ac_free_version_0_3_0=yes,ac_free_version_0_3_0=no)
++ AC_MSG_RESULT($ac_free_version_0_3_0)
++ AC_MSG_CHECKING([for libfreeipmi version 0.4.0])
++ AC_TRY_COMPILE([
++#include <sys/types.h> /* For size_t */
++#include <stdio.h> /* For NULL */
++#include <freeipmi/freeipmi.h>
++#include <freeipmi/udm/ipmi-udm.h>
++ ], [
++ ipmi_device_t dev = NULL;
++ int rv;
++ dev = ipmi_device_create();
++ rv = ipmi_open_inband(dev,
++ IPMI_DEVICE_KCS,
++ 0,
++ 0,
++ 0,
++ NULL,
++ 0);
++ ], ac_free_version_0_4_0=yes,ac_free_version_0_4_0=no)
++ AC_MSG_RESULT($ac_free_version_0_4_0)
++
++ AC_MSG_CHECKING([for libfreeipmi version 0.5.0])
++ AC_TRY_COMPILE([
++#include <sys/types.h> /* For size_t */
++#include <stdio.h> /* For NULL */
++#include <freeipmi/freeipmi.h>
++#include <freeipmi/udm/ipmi-udm.h>
++ ], [
++ ipmi_device_t dev = NULL;
++ int rv;
++ dev = ipmi_device_create();
++ rv = ipmi_open_inband(dev,
++ IPMI_DEVICE_KCS,
++ 0,
++ 0,
++ 0,
++ NULL,
++ 0,
++ 0);
++ ], ac_free_version_0_5_0=yes,ac_free_version_0_5_0=no)
++ AC_MSG_RESULT($ac_free_version_0_5_0)
++
++ if test "x$ac_free_version_0_3_0" = "xyes" \
++ || test "x$ac_free_version_0_4_0" = "xyes" \
++ || test "x$ac_free_version_0_5_0" = "xyes"; then
+ AC_DEFINE(IPMI_INTF_FREE, [1], [Define to 1 to enable FreeIPMI interface.])
+ AC_SUBST(INTF_FREE, [free])
+ AC_SUBST(INTF_FREE_LIB, [libintf_free.la])
+ IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB free/libintf_free.la"
++ if test "x$ac_free_version_0_3_0" = "xyes"; then
++ AC_DEFINE(IPMI_INTF_FREE_VERSION_0_3_0, [1], [Define to 1 for FreeIPMI 0.3.0.])
++ fi
++ if test "x$ac_free_version_0_4_0" = "xyes"; then
++ AC_DEFINE(IPMI_INTF_FREE_VERSION_0_4_0, [1], [Define to 1 for FreeIPMI 0.4.0.])
++ fi
++ if test "x$ac_free_version_0_5_0" = "xyes"; then
++ AC_DEFINE(IPMI_INTF_FREE_VERSION_0_5_0, [1], [Define to 1 for FreeIPMI 0.5.0.])
++ fi
+ else
+ enable_intf_free=no
+ fi
+diff -u -ruN ../ipmitool-1.8.9/src/plugins/free/free.c ./src/plugins/free/free.c
+--- ../ipmitool-1.8.9/src/plugins/free/free.c Fri Feb 23 00:17:46 2007
++++ ./src/plugins/free/free.c Sat Dec 15 19:22:10 2007
+@@ -58,6 +58,7 @@
+ return -1;
+ }
+
++#if IPMI_INTF_FREE_VERSION_0_3_0
+ if (!(dev = ipmi_open_inband (IPMI_DEVICE_KCS,
+ 0,
+ 0,
+@@ -74,19 +75,80 @@
+ goto cleanup;
+ }
+ }
++#elif IPMI_INTF_FREE_VERSION_0_4_0
++ if (!(dev = ipmi_device_create())) {
++ perror("ipmi_open_inband()");
++ goto cleanup;
++ }
++ if (ipmi_open_inband (dev,
++ IPMI_DEVICE_KCS,
++ 0,
++ 0,
++ 0,
++ NULL,
++ IPMI_FLAGS_DEFAULT) < 0) {
++ if (ipmi_open_inband (dev,
++ IPMI_DEVICE_SSIF,
++ 0,
++ 0,
++ 0,
++ NULL,
++ IPMI_FLAGS_DEFAULT) < 0) {
++ fprintf(stderr,
++ "ipmi_open_inband(): %s\n",
++ ipmi_device_strerror(ipmi_device_errnum(dev)));
++ goto cleanup;
++ }
++ }
++#elif IPMI_INTF_FREE_VERSION_0_5_0
++ if (!(dev = ipmi_device_create())) {
++ perror("ipmi_open_inband()");
++ goto cleanup;
++ }
++ if (ipmi_open_inband (dev,
++ IPMI_DEVICE_KCS,
++ 0,
++ 0,
++ 0,
++ NULL,
++ 0,
++ IPMI_FLAGS_DEFAULT) < 0) {
++ if (ipmi_open_inband (dev,
++ IPMI_DEVICE_SSIF,
++ 0,
++ 0,
++ 0,
++ NULL,
++ 0,
++ IPMI_FLAGS_DEFAULT) < 0) {
++ fprintf(stderr,
++ "ipmi_open_inband(): %s\n",
++ ipmi_device_strerror(ipmi_device_errnum(dev)));
++ goto cleanup;
++ }
++ }
++#endif
+
+ intf->opened = 1;
+ return 0;
+ cleanup:
+- if (dev)
++ if (dev) {
+ ipmi_close_device(dev);
++#if IPMI_INTF_FREE_VERSION_0_4_0
++ ipmi_device_destroy(dev);
++#endif
++ }
+ return -1;
+ }
+
+ static void ipmi_free_close(struct ipmi_intf * intf)
+ {
+- if (dev)
++ if (dev) {
+ ipmi_close_device(dev);
++#if IPMI_INTF_FREE_VERSION_0_4_0
++ ipmi_device_destroy(dev);
++#endif
++ }
+ intf->opened = 0;
+ }
+
+@@ -132,7 +194,13 @@
+ req->msg.data_len + 1,
+ rs_buf,
+ rs_buf_len)) < 0) {
++#if IPMI_INTF_FREE_VERSION_0_3_0
+ perror("ipmi_cmd_raw");
++#elif IPMI_INTF_FREE_VERSION_0_4_0
++ fprintf(stderr,
++ "ipmi_cmd_raw: %s\n",
++ ipmi_device_strerror(ipmi_device_errnum(dev)));
++#endif
+ return NULL;
+ }
+