Add --firmwarepath to configure
cover Add --firmwarepath to configure
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.
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(-)
Signature · 1 line
2.9.3
PATCH 1/2 add qemu_add_data_dir()
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.
--- vl.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-)
vl.c +23 -11
@@ -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) {
Signature · 1 line
2.9.3
PATCH 2/2 Add --firmwarepath to configure
In reply to Gerd HoffmannAdd 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.
--- configure | 6 ++++++ vl.c | 12 +++++++++--- scripts/create_config | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-)
configure +6 -0
@@ -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
vl.c +9 -3
@@ -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 ,":" ,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. */
scripts/create_config +1 -1
@@ -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]')
Signature · 1 line
2.9.3
Quoted 41 lines · Gerd Hoffmann
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/seabiosto the firmware path instead.Signed-off-by Gerd Hoffmann <[email protected]>--- configure | 6 ++++++ vl.c | 12 +++++++++--- scripts/create_config | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-)configure +3
-0@@ -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=*)
configure Advanced options (experts only): · line 1424
Quoted 4 lines
configure +1
-0@@ -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
Maybe --firmwaredir or --with-firmwaredir (because firmwaredir is not one of the "standard" directories)?
configure int main(int argc, char **argv, char **envp) · line 4237
Quoted 8 lines
configure +2
-2@@ -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, ":", 0);
Windows probably wants to use ; here, so you can use G_SEARCHPATH_SEPARATOR_S instead of ":".
Thanks,
Paolo
Quoted 26 lines
configure +6
-1+ 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. */scripts/create_config +1
-1@@ -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]')
Hi,
Quoted 4 lines
Quoted 1 line
+ --firmwarepath=PATH search PATH for firmware files
Maybe --firmwaredir or --with-firmwaredir (because firmwaredir is not one of the "standard" directories)?
I've intentionally named this "path" because it can actually have multiple directories.
Or do you mean something else? If so --verbose please.
Quoted 5 lines
Quoted 2 lines
+ /* add configured firmware directories */
+ dirs =g_strsplit(CONFIG_QEMU_FIRMWAREPATH, ":", 0);Windows probably wants to use ; here, so you can use
G_SEARCHPATH_SEPARATOR_Sinstead of ":".
Ah, cool, didn't know this exists. Fixing ...
cheers,
Gerd
Quoted 11 lines · Gerd Hoffmann
Hi,
Quoted 4 lines
Quoted 1 line
+ --firmwarepath=PATH search PATH for firmware files
Maybe --firmwaredir or --with-firmwaredir (because firmwaredir is not one of the "standard" directories)?
I've intentionally named this "path" because it can actually have multiple directories.
Or do you mean something else? If so --verbose please.
No, you're right.
Paolo
Quoted 11 lines
Quoted 5 lines
vl.c int main(int argc, char **argv, char **envp) · line 4237
Quoted 2 lines
vl.c +2
-0+/* add configured firmware directories */ + dirs =g_strsplit (CONFIG_QEMU_FIRMWAREPATH ,":" ,0 );Windows probably wants to use ; here, so you can use
G_SEARCHPATH_SEPARATOR_Sinstead of ":".Ah, cool, didn't know this exists. Fixing ...
cheers,
Gerd