#include <sys/utsname.h>
#include "viralloc.h"
+#include "virfile.h"
#include "virlog.h"
#include "virstring.h"
#include "cpu/cpu.h"
virObjectUnref(caps);
return NULL;
}
+
+int
+virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps)
+{
+ char *binary, *help;
+ virCommandPtr cmd;
+ int ret, exit;
+
+ ret = 0;
+ *caps = 0;
+ cmd = NULL;
+ help = NULL;
+
+ binary = virFindFileInPath("grub-bhyve");
+ if (binary == NULL)
+ goto out;
+ if (!virFileIsExecutable(binary))
+ goto out;
+
+ cmd = virCommandNew(binary);
+ virCommandAddArg(cmd, "--help");
+ virCommandSetOutputBuffer(cmd, &help);
+ if (virCommandRun(cmd, &exit) < 0) {
+ ret = -1;
+ goto out;
+ }
+
+ if (strstr(help, "--cons-dev") != NULL)
+ *caps |= BHYVE_GRUB_CAP_CONSDEV;
+
+ out:
+ VIR_FREE(help);
+ virCommandFree(cmd);
+ VIR_FREE(binary);
+ return ret;
+}
virCapsPtr virBhyveCapsBuild(void);
+/* These are bit flags: */
+typedef enum {
+ BHYVE_GRUB_CAP_CONSDEV = 1,
+} virBhyveGrubCapsFlags;
+
+int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps);
+
#endif