[DEFAULT_EDITOR=vi])
AC_DEFINE_UNQUOTED([DEFAULT_EDITOR], ["$DEFAULT_EDITOR"], [Default editor to use])
+AC_ARG_WITH([loader-nvram],
+ [AS_HELP_STRING([--with-loader-nvram],
+ [Pass list of pairs of <loader>:<nvram> paths. Both
+ pairs and list items are separated by a colon.
+ @<:default=paths to OVMF and its clones@:>@])],
+ [if test "$withval" = "no"; then
+ withval=""
+ else
+ l=`echo $withval | tr ':' '\n' | wc -l`
+ if test "`expr $l % 2`" -ne 0; then
+ AC_MSG_ERROR([Malformed --with-loader-nvram argument])
+ fi
+ fi
+ AC_DEFINE_UNQUOTED([DEFAULT_LOADER_NVRAM],
+ ["$withval"],
+ [List of laoder:nvram pairs])])
+
# Some GNULIB base64 symbols clash with a kerberos library
AC_DEFINE_UNQUOTED([isbase64],[libvirt_gl_isbase64],[Hack to avoid symbol clash])
AC_DEFINE_UNQUOTED([base64_encode],[libvirt_gl_base64_encode],[Hack to avoid symbol clash])
VIR_FREE(def);
}
+
+static int ATTRIBUTE_UNUSED
+virQEMUDriverConfigLoaderNVRAMParse(virQEMUDriverConfigPtr cfg,
+ const char *list)
+{
+ int ret = -1;
+ char **token;
+ size_t i, j;
+
+ if (!(token = virStringSplit(list, ":", 0)))
+ goto cleanup;
+
+ for (i = 0; token[i]; i += 2) {
+ if (!token[i] || !token[i + 1] ||
+ STREQ(token[i], "") || STREQ(token[i + 1], "")) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Invalid --with-loader-nvram list: %s"),
+ list);
+ goto cleanup;
+ }
+ }
+
+ if (i) {
+ if (VIR_ALLOC_N(cfg->loader, i / 2) < 0 ||
+ VIR_ALLOC_N(cfg->nvram, i / 2) < 0)
+ goto cleanup;
+ cfg->nloader = i / 2;
+
+ for (j = 0; j < i / 2; j++) {
+ if (VIR_STRDUP(cfg->loader[j], token[2 * j]) < 0 ||
+ VIR_STRDUP(cfg->nvram[j], token[2 * j + 1]) < 0)
+ goto cleanup;
+ }
+ }
+
+ ret = 0;
+ cleanup:
+ virStringFreeList(token);
+ return ret;
+}
+
+
#define VIR_QEMU_LOADER_FILE_PATH "/usr/share/OVMF/OVMF_CODE.fd"
#define VIR_QEMU_NVRAM_FILE_PATH "/usr/share/OVMF/OVMF_VARS.fd"
cfg->logTimestamp = true;
+#ifdef DEFAULT_LOADER_NVRAM
+ if (virQEMUDriverConfigLoaderNVRAMParse(cfg, DEFAULT_LOADER_NVRAM) < 0)
+ goto error;
+
+#else
+
if (VIR_ALLOC_N(cfg->loader, 1) < 0 ||
VIR_ALLOC_N(cfg->nvram, 1) < 0)
goto error;
if (VIR_STRDUP(cfg->loader[0], VIR_QEMU_LOADER_FILE_PATH) < 0 ||
VIR_STRDUP(cfg->nvram[0], VIR_QEMU_NVRAM_FILE_PATH) < 0)
goto error;
+#endif
return cfg;
struct fillQemuCapsData *data = (struct fillQemuCapsData *) opaque;
virQEMUCapsPtr qemuCaps = data->qemuCaps;
virQEMUDriverConfigPtr cfg = data->cfg;
+ virDomainCapsLoaderPtr loader = &domCaps->os.loader;
if (virQEMUCapsFillDomainCaps(domCaps, qemuCaps,
cfg->loader, cfg->nloader) < 0)
/* Moreover, as of f05b6a918e28 we are expecting to see
* OVMF_CODE.fd file which may not exists everywhere. */
- if (!domCaps->os.loader.values.nvalues) {
- virDomainCapsLoaderPtr loader = &domCaps->os.loader;
+ while (loader->values.nvalues)
+ VIR_FREE(loader->values.values[--loader->values.nvalues]);
+
+ if (fillStringValues(&loader->values,
+ "/usr/share/OVMF/OVMF_CODE.fd",
+ NULL) < 0)
+ return -1;
- if (fillStringValues(&loader->values,
- "/usr/share/OVMF/OVMF_CODE.fd",
- NULL) < 0)
- return -1;
- }
return 0;
}
#endif /* WITH_QEMU */