* [Qemu-devel] [PATCH v2 0/2] Add --firmwarepath to configure
@ 2017-09-14 11:42 Gerd Hoffmann
2017-09-14 11:42 ` [Qemu-devel] [PATCH v2 1/2] add qemu_add_data_dir() Gerd Hoffmann
2017-09-14 11:42 ` [Qemu-devel] [PATCH v2 2/2] Add --firmwarepath to configure Gerd Hoffmann
0 siblings, 2 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2017-09-14 11:42 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Patch #1 is a cleanup to factor out code and simplify patch #2 a bit.
Patch #2 is the actual change, see patch commit log for details.
v2: use G_SEARCHPATH_SEPARATOR_S (paolo)
Gerd Hoffmann (2):
add qemu_add_data_dir()
Add --firmwarepath to configure
configure | 6 ++++++
vl.c | 44 +++++++++++++++++++++++++++++++-------------
scripts/create_config | 2 +-
3 files changed, 38 insertions(+), 14 deletions(-)
--
2.9.3
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Qemu-devel] [PATCH v2 1/2] add qemu_add_data_dir()
2017-09-14 11:42 [Qemu-devel] [PATCH v2 0/2] Add --firmwarepath to configure Gerd Hoffmann
@ 2017-09-14 11:42 ` Gerd Hoffmann
2017-09-14 11:42 ` [Qemu-devel] [PATCH v2 2/2] Add --firmwarepath to configure Gerd Hoffmann
1 sibling, 0 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2017-09-14 11:42 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Paolo Bonzini
Add helper function to add a directory to the qemu search path, so we
don't duplicate the checks. Add a check for duplicate entries, so we
stop trying to open files twice.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 34 +++++++++++++++++++++++-----------
1 file changed, 23 insertions(+), 11 deletions(-)
diff --git a/vl.c b/vl.c
index fb1f05b937..37a3401920 100644
--- a/vl.c
+++ b/vl.c
@@ -2272,6 +2272,24 @@ char *qemu_find_file(int type, const char *name)
return NULL;
}
+static void qemu_add_data_dir(const char *path)
+{
+ int i;
+
+ if (path == NULL) {
+ return;
+ }
+ if (data_dir_idx == ARRAY_SIZE(data_dir)) {
+ return;
+ }
+ for (i = 0; i < data_dir_idx; i++) {
+ if (strcmp(data_dir[i], path) == 0) {
+ return; /* duplicate */
+ }
+ }
+ data_dir[data_dir_idx++] = path;
+}
+
static inline bool nonempty_str(const char *str)
{
return str && *str;
@@ -3450,8 +3468,8 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_L:
if (is_help_option(optarg)) {
list_data_dirs = true;
- } else if (data_dir_idx < ARRAY_SIZE(data_dir)) {
- data_dir[data_dir_idx++] = optarg;
+ } else {
+ qemu_add_data_dir(optarg);
}
break;
case QEMU_OPTION_bios:
@@ -4216,16 +4234,10 @@ int main(int argc, char **argv, char **envp)
/* If no data_dir is specified then try to find it relative to the
executable path. */
- if (data_dir_idx < ARRAY_SIZE(data_dir)) {
- data_dir[data_dir_idx] = os_find_datadir();
- if (data_dir[data_dir_idx] != NULL) {
- data_dir_idx++;
- }
- }
+ qemu_add_data_dir(os_find_datadir());
+
/* If all else fails use the install path specified when building. */
- if (data_dir_idx < ARRAY_SIZE(data_dir)) {
- data_dir[data_dir_idx++] = CONFIG_QEMU_DATADIR;
- }
+ qemu_add_data_dir(CONFIG_QEMU_DATADIR);
/* -L help lists the data directories and exits. */
if (list_data_dirs) {
--
2.9.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [Qemu-devel] [PATCH v2 2/2] Add --firmwarepath to configure
2017-09-14 11:42 [Qemu-devel] [PATCH v2 0/2] Add --firmwarepath to configure Gerd Hoffmann
2017-09-14 11:42 ` [Qemu-devel] [PATCH v2 1/2] add qemu_add_data_dir() Gerd Hoffmann
@ 2017-09-14 11:42 ` Gerd Hoffmann
1 sibling, 0 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2017-09-14 11:42 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Paolo Bonzini
Add a firmware path config option to configure. Multiple directories
are accepted, with the usual colon as separator. Default value is
${prefix}/share/qemu-firmware. The path is searched in addition to the
current search path (typically ${prefix}/share/qemu).
This prepares qemu for the planned split of the prebuilt firmware blobs
into a separate project.
Distributions can also use this to get rid of the firmware symlink farm
and add -- for example -- /usr/share/seabios to the firmware path
instead.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
configure | 6 ++++++
vl.c | 12 +++++++++---
scripts/create_config | 2 +-
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/configure b/configure
index fd7e3a5e81..870bdbd3e4 100755
--- a/configure
+++ b/configure
@@ -332,6 +332,7 @@ modules="no"
prefix="/usr/local"
mandir="\${prefix}/share/man"
datadir="\${prefix}/share"
+firmwarepath="\${prefix}/share/qemu-firmware"
qemu_docdir="\${prefix}/share/doc/qemu"
bindir="\${prefix}/bin"
libdir="\${prefix}/lib"
@@ -915,6 +916,8 @@ for opt do
;;
--localstatedir=*) local_statedir="$optarg"
;;
+ --firmwarepath=*) firmwarepath="$optarg"
+ ;;
--sbindir=*|--sharedstatedir=*|\
--oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
--htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
@@ -1418,6 +1421,7 @@ Advanced options (experts only):
--libdir=PATH install libraries in PATH
--sysconfdir=PATH install config in PATH$confsuffix
--localstatedir=PATH install local state in PATH (set at runtime on win32)
+ --firmwarepath=PATH search PATH for firmware files
--with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
--enable-debug enable common debug build options
--disable-strip disable stripping binaries
@@ -5259,6 +5263,7 @@ libs_softmmu="$pixman_libs $libs_softmmu"
echo "Install prefix $prefix"
echo "BIOS directory $(eval echo $qemu_datadir)"
+echo "firmware path $(eval echo $firmwarepath)"
echo "binary directory $(eval echo $bindir)"
echo "library directory $(eval echo $libdir)"
echo "module directory $(eval echo $qemu_moddir)"
@@ -5450,6 +5455,7 @@ echo "mandir=$mandir" >> $config_host_mak
echo "sysconfdir=$sysconfdir" >> $config_host_mak
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
+echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
if test "$mingw32" = "no" ; then
diff --git a/vl.c b/vl.c
index 37a3401920..da6dfaf9d4 100644
--- a/vl.c
+++ b/vl.c
@@ -3048,6 +3048,7 @@ int main(int argc, char **argv, char **envp)
Error *main_loop_err = NULL;
Error *err = NULL;
bool list_data_dirs = false;
+ char **dirs;
typedef struct BlockdevOptions_queue {
BlockdevOptions *bdo;
Location loc;
@@ -4232,11 +4233,16 @@ int main(int argc, char **argv, char **envp)
qemu_set_log(0);
}
- /* If no data_dir is specified then try to find it relative to the
- executable path. */
+ /* add configured firmware directories */
+ dirs = g_strsplit(CONFIG_QEMU_FIRMWAREPATH, G_SEARCHPATH_SEPARATOR_S, 0);
+ for (i = 0; dirs[i] != NULL; i++) {
+ qemu_add_data_dir(dirs[i]);
+ }
+
+ /* try to find datadir relative to the executable path */
qemu_add_data_dir(os_find_datadir());
- /* If all else fails use the install path specified when building. */
+ /* add the datadir specified when building */
qemu_add_data_dir(CONFIG_QEMU_DATADIR);
/* -L help lists the data directories and exits. */
diff --git a/scripts/create_config b/scripts/create_config
index e6929dd61e..603b826886 100755
--- a/scripts/create_config
+++ b/scripts/create_config
@@ -15,7 +15,7 @@ case $line in
echo "#define QEMU_VERSION_MINOR $minor"
echo "#define QEMU_VERSION_MICRO $micro"
;;
- qemu_*dir=*) # qemu-specific directory configuration
+ qemu_*dir=* | qemu_*path=*) # qemu-specific directory configuration
name=${line%=*}
value=${line#*=}
define_name=$(echo $name | LC_ALL=C tr '[a-z]' '[A-Z]')
--
2.9.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-09-14 11:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-14 11:42 [Qemu-devel] [PATCH v2 0/2] Add --firmwarepath to configure Gerd Hoffmann
2017-09-14 11:42 ` [Qemu-devel] [PATCH v2 1/2] add qemu_add_data_dir() Gerd Hoffmann
2017-09-14 11:42 ` [Qemu-devel] [PATCH v2 2/2] Add --firmwarepath to configure Gerd Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).