* [PATCH] meson: Prefix each element of firmware path
@ 2022-06-24 15:40 Akihiko Odaki
2022-06-24 15:50 ` Paolo Bonzini
0 siblings, 1 reply; 2+ messages in thread
From: Akihiko Odaki @ 2022-06-24 15:40 UTC (permalink / raw)
Cc: Alex Bennée, Philippe Mathieu-Daudé, Thomas Huth,
Wainer dos Santos Moschetta, Beraldo Leal, Daniel P . Berrange,
John Snow, Cleber Rosa, qemu-devel, Akihiko Odaki
Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
---
configure | 23 +++++++++++++++++++++++
meson.build | 10 ++++++++--
meson_options.txt | 2 +-
scripts/meson-buildoptions.py | 7 +++++--
scripts/meson-buildoptions.sh | 6 +++---
softmmu/datadir.c | 8 +++++---
6 files changed, 45 insertions(+), 11 deletions(-)
diff --git a/configure b/configure
index 4b12a8094ca..ab952e7ce3b 100755
--- a/configure
+++ b/configure
@@ -675,6 +675,29 @@ fi
werror=""
+meson_option_build_array() {
+ local a
+ local ifs
+
+ if test "$targetos" == windows; then
+ ifs=\;
+ else
+ ifs=:
+ fi
+
+ echo -n "["
+
+ while IFS="$ifs" read -ra a; do
+ for e in "${a[@]}"; do
+ echo -n '"""'
+ echo -n "$e" | sed 's/\\/\\\\/g; s/"/\\"/g'
+ echo -n '"""',
+ done
+ done <<< "$1"
+
+ echo "]"
+}
+
. $source_path/scripts/meson-buildoptions.sh
meson_options=
diff --git a/meson.build b/meson.build
index 0c2e11ff071..40111ce4053 100644
--- a/meson.build
+++ b/meson.build
@@ -1684,7 +1684,13 @@ config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
config_host_data.set_quoted('CONFIG_QEMU_DATADIR', get_option('prefix') / qemu_datadir)
config_host_data.set_quoted('CONFIG_QEMU_DESKTOPDIR', get_option('prefix') / qemu_desktopdir)
-config_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('prefix') / get_option('qemu_firmwarepath'))
+
+qemu_firmwarepath = ''
+foreach k : get_option('qemu_firmwarepath')
+ qemu_firmwarepath += '"' + get_option('prefix') / k + '", '
+endforeach
+config_host_data.set('CONFIG_QEMU_FIRMWAREPATH', qemu_firmwarepath)
+
config_host_data.set_quoted('CONFIG_QEMU_HELPERDIR', get_option('prefix') / get_option('libexecdir'))
config_host_data.set_quoted('CONFIG_QEMU_ICONDIR', get_option('prefix') / qemu_icondir)
config_host_data.set_quoted('CONFIG_QEMU_LOCALEDIR', get_option('prefix') / get_option('localedir'))
@@ -3622,7 +3628,7 @@ endif
summary_info = {}
summary_info += {'Install prefix': get_option('prefix')}
summary_info += {'BIOS directory': qemu_datadir}
-summary_info += {'firmware path': get_option('prefix') / get_option('qemu_firmwarepath')}
+summary_info += {'firmware path': qemu_firmwarepath}
summary_info += {'binary directory': get_option('prefix') / get_option('bindir')}
summary_info += {'library directory': get_option('prefix') / get_option('libdir')}
summary_info += {'module directory': qemu_moddir}
diff --git a/meson_options.txt b/meson_options.txt
index 0e8197386b9..8ad5cd73819 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -6,7 +6,7 @@ option('qemu_suffix', type : 'string', value: 'qemu',
description: 'Suffix for QEMU data/modules/config directories (can be empty)')
option('docdir', type : 'string', value : 'share/doc',
description: 'Base directory for documentation installation (can be empty)')
-option('qemu_firmwarepath', type : 'string', value : 'qemu-firmware',
+option('qemu_firmwarepath', type : 'array', value : ['qemu-firmware'],
description: 'search PATH for firmware files')
option('pkgversion', type : 'string', value : '',
description: 'use specified string as sub-version of the package')
diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
index e624c16b01a..3e2b4785388 100755
--- a/scripts/meson-buildoptions.py
+++ b/scripts/meson-buildoptions.py
@@ -156,7 +156,7 @@ def cli_metavar(opt):
if opt["type"] == "string":
return "VALUE"
if opt["type"] == "array":
- return "CHOICES"
+ return "CHOICES" if "choices" in opt else "VALUES"
return "CHOICE"
@@ -199,7 +199,10 @@ def print_parse(options):
key = cli_option(opt)
name = opt["name"]
if require_arg(opt):
- print(f' --{key}=*) quote_sh "-D{name}=$2" ;;')
+ if opt["type"] == "array" and not "choices" in opt:
+ print(f' --{key}=*) quote_sh "-D{name}=$(meson_option_build_array $2)" ;;')
+ else:
+ print(f' --{key}=*) quote_sh "-D{name}=$2" ;;')
elif opt["type"] == "boolean":
print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 1fc1d2e2c36..238bab162bd 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -42,12 +42,12 @@ meson_options_help() {
printf "%s\n" ' --enable-trace-backends=CHOICES'
printf "%s\n" ' Set available tracing backends [log] (choices:'
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
- printf "%s\n" ' --firmwarepath=VALUE search PATH for firmware files [qemu-firmware]'
+ printf "%s\n" ' --firmwarepath=VALUES search PATH for firmware files [qemu-firmware]'
printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
printf "%s\n" ' --includedir=VALUE Header file directory [include]'
printf "%s\n" ' --interp-prefix=VALUE where to find shared libraries etc., use %M for'
printf "%s\n" ' cpu name [/usr/gnemul/qemu-%M]'
- printf "%s\n" ' --libdir=VALUE Library directory [lib64]'
+ printf "%s\n" ' --libdir=VALUE Library directory [lib]'
printf "%s\n" ' --libexecdir=VALUE Library executable directory [libexec]'
printf "%s\n" ' --localedir=VALUE Locale data directory [share/locale]'
printf "%s\n" ' --localstatedir=VALUE Localstate data directory [/var/local]'
@@ -356,7 +356,7 @@ _meson_option_parse() {
--disable-qcow1) printf "%s" -Dqcow1=disabled ;;
--enable-qed) printf "%s" -Dqed=enabled ;;
--disable-qed) printf "%s" -Dqed=disabled ;;
- --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$2" ;;
+ --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$(meson_option_build_array $2)" ;;
--enable-qga-vss) printf "%s" -Dqga_vss=enabled ;;
--disable-qga-vss) printf "%s" -Dqga_vss=disabled ;;
--enable-qom-cast-debug) printf "%s" -Dqom_cast_debug=true ;;
diff --git a/softmmu/datadir.c b/softmmu/datadir.c
index 160cac999a6..fd24629c543 100644
--- a/softmmu/datadir.c
+++ b/softmmu/datadir.c
@@ -105,15 +105,17 @@ static char *find_datadir(void)
void qemu_add_default_firmwarepath(void)
{
- char **dirs;
+ static const char * const dirs[] = {
+ CONFIG_QEMU_FIRMWAREPATH
+ NULL
+ };
+
size_t i;
/* 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(get_relocated_path(dirs[i]));
}
- g_strfreev(dirs);
/* try to find datadir relative to the executable path */
qemu_add_data_dir(find_datadir());
--
2.32.1 (Apple Git-133)
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] meson: Prefix each element of firmware path
2022-06-24 15:40 [PATCH] meson: Prefix each element of firmware path Akihiko Odaki
@ 2022-06-24 15:50 ` Paolo Bonzini
0 siblings, 0 replies; 2+ messages in thread
From: Paolo Bonzini @ 2022-06-24 15:50 UTC (permalink / raw)
To: Akihiko Odaki
Cc: Alex Bennée, Philippe Mathieu-Daudé, Thomas Huth,
Wainer dos Santos Moschetta, Beraldo Leal, Daniel P . Berrange,
John Snow, Cleber Rosa, qemu-devel
Queued, thanks!
Paolo
On 6/24/22 17:40, Akihiko Odaki wrote:
> Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
> ---
> configure | 23 +++++++++++++++++++++++
> meson.build | 10 ++++++++--
> meson_options.txt | 2 +-
> scripts/meson-buildoptions.py | 7 +++++--
> scripts/meson-buildoptions.sh | 6 +++---
> softmmu/datadir.c | 8 +++++---
> 6 files changed, 45 insertions(+), 11 deletions(-)
>
> diff --git a/configure b/configure
> index 4b12a8094ca..ab952e7ce3b 100755
> --- a/configure
> +++ b/configure
> @@ -675,6 +675,29 @@ fi
>
> werror=""
>
> +meson_option_build_array() {
> + local a
> + local ifs
> +
> + if test "$targetos" == windows; then
> + ifs=\;
> + else
> + ifs=:
> + fi
> +
> + echo -n "["
> +
> + while IFS="$ifs" read -ra a; do
> + for e in "${a[@]}"; do
> + echo -n '"""'
> + echo -n "$e" | sed 's/\\/\\\\/g; s/"/\\"/g'
> + echo -n '"""',
> + done
> + done <<< "$1"
> +
> + echo "]"
> +}
> +
> . $source_path/scripts/meson-buildoptions.sh
>
> meson_options=
> diff --git a/meson.build b/meson.build
> index 0c2e11ff071..40111ce4053 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1684,7 +1684,13 @@ config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
> config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
> config_host_data.set_quoted('CONFIG_QEMU_DATADIR', get_option('prefix') / qemu_datadir)
> config_host_data.set_quoted('CONFIG_QEMU_DESKTOPDIR', get_option('prefix') / qemu_desktopdir)
> -config_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('prefix') / get_option('qemu_firmwarepath'))
> +
> +qemu_firmwarepath = ''
> +foreach k : get_option('qemu_firmwarepath')
> + qemu_firmwarepath += '"' + get_option('prefix') / k + '", '
> +endforeach
> +config_host_data.set('CONFIG_QEMU_FIRMWAREPATH', qemu_firmwarepath)
> +
> config_host_data.set_quoted('CONFIG_QEMU_HELPERDIR', get_option('prefix') / get_option('libexecdir'))
> config_host_data.set_quoted('CONFIG_QEMU_ICONDIR', get_option('prefix') / qemu_icondir)
> config_host_data.set_quoted('CONFIG_QEMU_LOCALEDIR', get_option('prefix') / get_option('localedir'))
> @@ -3622,7 +3628,7 @@ endif
> summary_info = {}
> summary_info += {'Install prefix': get_option('prefix')}
> summary_info += {'BIOS directory': qemu_datadir}
> -summary_info += {'firmware path': get_option('prefix') / get_option('qemu_firmwarepath')}
> +summary_info += {'firmware path': qemu_firmwarepath}
> summary_info += {'binary directory': get_option('prefix') / get_option('bindir')}
> summary_info += {'library directory': get_option('prefix') / get_option('libdir')}
> summary_info += {'module directory': qemu_moddir}
> diff --git a/meson_options.txt b/meson_options.txt
> index 0e8197386b9..8ad5cd73819 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -6,7 +6,7 @@ option('qemu_suffix', type : 'string', value: 'qemu',
> description: 'Suffix for QEMU data/modules/config directories (can be empty)')
> option('docdir', type : 'string', value : 'share/doc',
> description: 'Base directory for documentation installation (can be empty)')
> -option('qemu_firmwarepath', type : 'string', value : 'qemu-firmware',
> +option('qemu_firmwarepath', type : 'array', value : ['qemu-firmware'],
> description: 'search PATH for firmware files')
> option('pkgversion', type : 'string', value : '',
> description: 'use specified string as sub-version of the package')
> diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
> index e624c16b01a..3e2b4785388 100755
> --- a/scripts/meson-buildoptions.py
> +++ b/scripts/meson-buildoptions.py
> @@ -156,7 +156,7 @@ def cli_metavar(opt):
> if opt["type"] == "string":
> return "VALUE"
> if opt["type"] == "array":
> - return "CHOICES"
> + return "CHOICES" if "choices" in opt else "VALUES"
> return "CHOICE"
>
>
> @@ -199,7 +199,10 @@ def print_parse(options):
> key = cli_option(opt)
> name = opt["name"]
> if require_arg(opt):
> - print(f' --{key}=*) quote_sh "-D{name}=$2" ;;')
> + if opt["type"] == "array" and not "choices" in opt:
> + print(f' --{key}=*) quote_sh "-D{name}=$(meson_option_build_array $2)" ;;')
> + else:
> + print(f' --{key}=*) quote_sh "-D{name}=$2" ;;')
> elif opt["type"] == "boolean":
> print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
> print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
> diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> index 1fc1d2e2c36..238bab162bd 100644
> --- a/scripts/meson-buildoptions.sh
> +++ b/scripts/meson-buildoptions.sh
> @@ -42,12 +42,12 @@ meson_options_help() {
> printf "%s\n" ' --enable-trace-backends=CHOICES'
> printf "%s\n" ' Set available tracing backends [log] (choices:'
> printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
> - printf "%s\n" ' --firmwarepath=VALUE search PATH for firmware files [qemu-firmware]'
> + printf "%s\n" ' --firmwarepath=VALUES search PATH for firmware files [qemu-firmware]'
> printf "%s\n" ' --iasl=VALUE Path to ACPI disassembler'
> printf "%s\n" ' --includedir=VALUE Header file directory [include]'
> printf "%s\n" ' --interp-prefix=VALUE where to find shared libraries etc., use %M for'
> printf "%s\n" ' cpu name [/usr/gnemul/qemu-%M]'
> - printf "%s\n" ' --libdir=VALUE Library directory [lib64]'
> + printf "%s\n" ' --libdir=VALUE Library directory [lib]'
> printf "%s\n" ' --libexecdir=VALUE Library executable directory [libexec]'
> printf "%s\n" ' --localedir=VALUE Locale data directory [share/locale]'
> printf "%s\n" ' --localstatedir=VALUE Localstate data directory [/var/local]'
> @@ -356,7 +356,7 @@ _meson_option_parse() {
> --disable-qcow1) printf "%s" -Dqcow1=disabled ;;
> --enable-qed) printf "%s" -Dqed=enabled ;;
> --disable-qed) printf "%s" -Dqed=disabled ;;
> - --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$2" ;;
> + --firmwarepath=*) quote_sh "-Dqemu_firmwarepath=$(meson_option_build_array $2)" ;;
> --enable-qga-vss) printf "%s" -Dqga_vss=enabled ;;
> --disable-qga-vss) printf "%s" -Dqga_vss=disabled ;;
> --enable-qom-cast-debug) printf "%s" -Dqom_cast_debug=true ;;
> diff --git a/softmmu/datadir.c b/softmmu/datadir.c
> index 160cac999a6..fd24629c543 100644
> --- a/softmmu/datadir.c
> +++ b/softmmu/datadir.c
> @@ -105,15 +105,17 @@ static char *find_datadir(void)
>
> void qemu_add_default_firmwarepath(void)
> {
> - char **dirs;
> + static const char * const dirs[] = {
> + CONFIG_QEMU_FIRMWAREPATH
> + NULL
> + };
> +
> size_t i;
>
> /* 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(get_relocated_path(dirs[i]));
> }
> - g_strfreev(dirs);
>
> /* try to find datadir relative to the executable path */
> qemu_add_data_dir(find_datadir());
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-06-24 16:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-24 15:40 [PATCH] meson: Prefix each element of firmware path Akihiko Odaki
2022-06-24 15:50 ` Paolo Bonzini
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).