[libvirt PATCH v2 0/6] Fix compilation on msys2, update keycodemapdb

From: Marc-André Lureau <marcandre.lureau@redhat.com> Hi, libvirt fails to compile on msys2/win32. Also update keycodemapdb to fix CI build issues, and turn it into a subproject(), as that makes things simpler for meson. Fixes: https://gitlab.com/libvirt/libvirt/-/issues/453 v2: - update based on Michal version - update keycodemapdb, make it a subproject() Marc-André Lureau (6): meson: don't look for unix paths on win32 keycodemapdb: update submodule for build fixes meson: don't hard code find_program() location meson: drop explicit python interpreter rpc/ssh: ssh_userauth_agent() is not supported on win32 Move src/keycodemapdb -> subprojects/keycodemapdb .gitmodules | 2 +- docs/manpages/meson.build | 4 ++-- docs/meson.build | 6 ++---- meson.build | 15 ++++++++++----- src/admin/meson.build | 4 ++-- src/esx/meson.build | 4 ++-- src/hyperv/meson.build | 2 +- src/keycodemapdb | 1 - src/meson.build | 8 ++++---- src/rpc/virnetlibsshsession.c | 10 +++++++++- src/util/meson.build | 8 ++++---- subprojects/keycodemapdb | 1 + 12 files changed, 38 insertions(+), 27 deletions(-) delete mode 160000 src/keycodemapdb create mode 160000 subprojects/keycodemapdb -- 2.40.0

From: Marc-André Lureau <marcandre.lureau@redhat.com> Or meson will complain with: ../meson.build:770:2: ERROR: Search directory /sbin is not an absolute path. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com> --- meson.build | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/meson.build b/meson.build index 47ec7fcb74..f7f31a278d 100644 --- a/meson.build +++ b/meson.build @@ -742,11 +742,15 @@ conf.set('SIZEOF_LONG', cc.sizeof('long')) # Where we look for daemons and admin binaries during configure -libvirt_sbin_path = [ - '/sbin', - '/usr/sbin', - '/usr/local/sbin', -] +libvirt_sbin_path = [] + +if host_machine.system() != 'windows' + libvirt_sbin_path += [ + '/sbin', + '/usr/sbin', + '/usr/local/sbin', + ] +endif # required programs check -- 2.40.0

From: Marc-André Lureau <marcandre.lureau@redhat.com> A number of changes, but notably python script shebang fixing build issues in CI: Daniel P. Berrangé (1): Revert "Add local argparse for compat with python 2.6" Dawid Dziurla (1): Don't hardcode python3 path in shebang Eli Schwartz (1): make the meson.build stub a bit more well-rounded by exporting files Pierre Ossman (1): Fix macOS "ISO" key Ross Lagerwall (2): Use python3 binary rather than unversioned python Fix Hangeul/Hanja scancodes William (1): Add Qemu qcode support for F13 to F24 Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/keycodemapdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keycodemapdb b/src/keycodemapdb index 57ba70da53..22b8996dba 160000 --- a/src/keycodemapdb +++ b/src/keycodemapdb @@ -1 +1 @@ -Subproject commit 57ba70da5312170883a3d622cd2aa3fd0e2ec7ae +Subproject commit 22b8996dba9041874845c7446ce89ec4ae2b713d -- 2.40.0

From: Marc-André Lureau <marcandre.lureau@redhat.com> Use 'dirs' argument to locate the program. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/util/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/meson.build b/src/util/meson.build index 2fe6f7699e..f055079d0b 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -138,7 +138,7 @@ keyname_list = [ 'win32', ] -keymap_gen_prog = find_program('@0@/src/keycodemapdb/tools/keymap-gen'.format(meson.project_source_root())) +keymap_gen_prog = find_program('keymap-gen', dirs: [meson.project_source_root() / 'src' / 'keycodemapdb' / 'tools' ]) keymap_src_file = '@0@/src/keycodemapdb/data/keymaps.csv'.format(meson.project_source_root()) foreach name : keycode_list -- 2.40.0

From: Marc-André Lureau <marcandre.lureau@redhat.com> meson wraps python scripts already on win32, so we end up with these failing commands: [1/359] "C:/msys64/ucrt64/bin/meson" "--internal" "exe" "--capture" "src/util/virkeycodetable_atset1.h" "--" "sh" "C:/msys64/home/marca/src/libvirt/scripts/meson-python.sh" "C:/msys64/ucrt64/bin/python3.EXE" "python" "C:/msys64/home/marca/src/libvirt/src/keycodemapdb/tools/keymap-gen" "code-table" "--lang" "stdc" "--varname" "virKeyCodeTable_atset1" "C:/msys64/home/marca/src/libvirt/src/keycodemapdb/data/keymaps.csv" "atset1" FAILED: src/util/virkeycodetable_atset1.h "C:/msys64/ucrt64/bin/meson" "--internal" "exe" "--capture" "src/util/virkeycodetable_atset1.h" "--" "sh" "C:/msys64/home/marca/src/libvirt/scripts/meson-python.sh" "C:/msys64/ucrt64/bin/python3.EXE" "python" "C:/msys64/home/marca/src/libvirt/src/keycodemapdb/tools/keymap-gen" "code-table" "--lang" "stdc" "--varname" "virKeyCodeTable_atset1" "C:/msys64/home/marca/src/libvirt/src/keycodemapdb/data/keymaps.csv" "atset1" If LC_ALL, LANG and LC_CTYPE need to be set, it would probably be better to use a meson environment() instead. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com> --- docs/manpages/meson.build | 4 ++-- docs/meson.build | 6 ++---- src/admin/meson.build | 4 ++-- src/esx/meson.build | 4 ++-- src/hyperv/meson.build | 2 +- src/meson.build | 8 ++++---- src/util/meson.build | 4 ++-- 7 files changed, 15 insertions(+), 17 deletions(-) diff --git a/docs/manpages/meson.build b/docs/manpages/meson.build index 84b2e247e9..afcadaefbd 100644 --- a/docs/manpages/meson.build +++ b/docs/manpages/meson.build @@ -49,7 +49,7 @@ foreach name : keycode_list input: keymap_src_file, output: 'virkeycode-@0@.rst'.format(name), command: [ - meson_python_prog, python3_prog, keymap_gen_prog, 'code-docs', + keymap_gen_prog, 'code-docs', '--lang', 'rst', '--title', 'virkeycode-@0@'.format(name), '--subtitle', 'Key code values for @0@'.format(name), @@ -70,7 +70,7 @@ foreach name : keyname_list input: keymap_src_file, output: 'virkeyname-@0@.rst'.format(name), command: [ - meson_python_prog, python3_prog, keymap_gen_prog, 'name-docs', + keymap_gen_prog, 'name-docs', '--lang', 'rst', '--title', 'virkeyname-@0@'.format(name), '--subtitle', 'Key name values for @0@'.format(name), diff --git a/docs/meson.build b/docs/meson.build index 8f84d08912..769efe7b6a 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -123,7 +123,7 @@ aclperms_gen = custom_target( input: access_perm_h, output: 'aclperms.htmlinc', command: [ - meson_python_prog, python3_prog, genaclperms_prog, '@INPUT@', + genaclperms_prog, '@INPUT@', ], capture: true, ) @@ -145,7 +145,7 @@ docs_api_generated = custom_target( 'libvirt-admin-api.xml', ], command: [ - meson_python_prog, python3_prog, apibuild_prog, + apibuild_prog, meson.current_source_dir(), meson.current_build_dir(), ], @@ -264,8 +264,6 @@ hvsupport_html_in = custom_target( 'hvsupport.html.in', output: 'hvsupport.html.in', command: [ - meson_python_prog, - python3_prog, hvsupport_prog, meson.project_source_root(), meson.project_build_root(), diff --git a/src/admin/meson.build b/src/admin/meson.build index 692cc128a3..e04d610f92 100644 --- a/src/admin/meson.build +++ b/src/admin/meson.build @@ -68,7 +68,7 @@ libvirt_admin_syms = custom_target( ], output: 'libvirt_admin.syms', command: [ - meson_python_prog, python3_prog, meson_gen_sym_prog, + meson_gen_sym_prog, '@OUTPUT@', 'LIBVIRT_ADMIN_PRIVATE_' + meson.project_version(), '@INPUT@', ], ) @@ -79,7 +79,7 @@ if host_machine.system() == 'windows' input: libvirt_admin_syms, output: 'libvirt_admin.def', command: [ - meson_python_prog, python3_prog, meson_gen_def_prog, + meson_gen_def_prog, '@INPUT@', '@OUTPUT@', ], ) diff --git a/src/esx/meson.build b/src/esx/meson.build index d1f42fdcc4..4bd0dadd51 100644 --- a/src/esx/meson.build +++ b/src/esx/meson.build @@ -25,7 +25,7 @@ esx_gen_headers = custom_target( 'esx_vi_types.generated.typeenum', ], command: [ - meson_python_prog, python3_prog, esx_vi_generator_prog, + esx_vi_generator_prog, meson.project_source_root() / 'src', meson.project_build_root() / 'src', 'header', @@ -46,7 +46,7 @@ esx_gen_sources = custom_target( 'esx_vi_types.generated.typetostring', ], command: [ - meson_python_prog, python3_prog, esx_vi_generator_prog, + esx_vi_generator_prog, meson.project_source_root() / 'src', meson.project_build_root() / 'src', 'source', diff --git a/src/hyperv/meson.build b/src/hyperv/meson.build index 3509ce12f7..446b6ddada 100644 --- a/src/hyperv/meson.build +++ b/src/hyperv/meson.build @@ -17,7 +17,7 @@ hyperv_gen_sources = custom_target( 'hyperv_wmi_classes.generated.typedef', ], command: [ - meson_python_prog, python3_prog, hyperv_wmi_generator_prog, + hyperv_wmi_generator_prog, meson.project_source_root() / 'src', meson.project_build_root() / 'src', ], diff --git a/src/meson.build b/src/meson.build index 35951d8990..ad7796f03d 100644 --- a/src/meson.build +++ b/src/meson.build @@ -350,7 +350,7 @@ libvirt_syms = custom_target( input: [ public_sym_file ] + used_sym_files + generated_sym_files, output: 'libvirt.syms', command: [ - meson_python_prog, python3_prog, meson_gen_sym_prog, + meson_gen_sym_prog, '@OUTPUT@', 'LIBVIRT_PRIVATE_' + meson.project_version(), '@INPUT@', ], ) @@ -361,7 +361,7 @@ if host_machine.system() == 'windows' input: libvirt_syms, output: 'libvirt.def', command: [ - meson_python_prog, python3_prog, meson_gen_def_prog, + meson_gen_def_prog, '@INPUT@', '@OUTPUT@', ], ) @@ -417,7 +417,7 @@ if host_machine.system() == 'windows' input: libvirt_qemu_syms, output: 'libvirt_qemu.def', command: [ - meson_python_prog, python3_prog, meson_gen_def_prog, + meson_gen_def_prog, '@INPUT@', '@OUTPUT@', ], ) @@ -476,7 +476,7 @@ if host_machine.system() == 'windows' input: libvirt_lxc_syms, output: 'libvirt_lxc.def', command: [ - meson_python_prog, python3_prog, meson_gen_def_prog, + meson_gen_def_prog, '@INPUT@', '@OUTPUT@', ], ) diff --git a/src/util/meson.build b/src/util/meson.build index f055079d0b..c6b1294f24 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -147,7 +147,7 @@ foreach name : keycode_list input: keymap_src_file, output: 'virkeycodetable_@0@.h'.format(name), command: [ - meson_python_prog, python3_prog, keymap_gen_prog, 'code-table', + keymap_gen_prog, 'code-table', '--lang', 'stdc', '--varname', 'virKeyCodeTable_@0@'.format(name), '@INPUT@', name, @@ -162,7 +162,7 @@ foreach name : keyname_list input: keymap_src_file, output: 'virkeynametable_@0@.h'.format(name), command: [ - meson_python_prog, python3_prog, keymap_gen_prog, 'name-table', + keymap_gen_prog, 'name-table', '--lang', 'stdc', '--varname', 'virKeyNameTable_@0@'.format(name), '@INPUT@', name, -- 2.40.0

From: Marc-André Lureau <marcandre.lureau@redhat.com> The function does not exist on win32. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com> --- src/rpc/virnetlibsshsession.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/rpc/virnetlibsshsession.c b/src/rpc/virnetlibsshsession.c index e71a79d0fb..8cb57e857f 100644 --- a/src/rpc/virnetlibsshsession.c +++ b/src/rpc/virnetlibsshsession.c @@ -700,7 +700,9 @@ virNetLibsshAuthenticate(virNetLibsshSession *sess) break; case VIR_NET_LIBSSH_AUTH_AGENT: /* try to authenticate using ssh-agent */ +#ifndef WIN32 ret = ssh_userauth_agent(sess->session, NULL); +#endif if (ret == SSH_AUTH_ERROR) { errmsg = ssh_get_error(sess->session); virReportError(VIR_ERR_LIBSSH, @@ -861,8 +863,13 @@ virNetLibsshSessionAuthAddPasswordAuth(virNetLibsshSession *sess, } int -virNetLibsshSessionAuthAddAgentAuth(virNetLibsshSession *sess) +virNetLibsshSessionAuthAddAgentAuth(virNetLibsshSession *sess G_GNUC_UNUSED) { +#ifdef WIN32 + virReportError(VIR_ERR_LIBSSH, "%s", + _("Agent authentication is not supported on this host")); + return -1; +#else virNetLibsshAuthMethod *auth; virObjectLock(sess); @@ -873,6 +880,7 @@ virNetLibsshSessionAuthAddAgentAuth(virNetLibsshSession *sess) virObjectUnlock(sess); return 0; +#endif } int -- 2.40.0

From: Marc-André Lureau <marcandre.lureau@redhat.com> Follow better meson build system conventions. This allows to find keymap-gen or CSV without explicitly setting the paths. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- .gitmodules | 2 +- meson.build | 1 + src/util/meson.build | 4 ++-- {src => subprojects}/keycodemapdb | 0 4 files changed, 4 insertions(+), 3 deletions(-) rename {src => subprojects}/keycodemapdb (100%) diff --git a/.gitmodules b/.gitmodules index 79b7e19485..7bee617505 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "keycodemapdb"] - path = src/keycodemapdb + path = subprojects/keycodemapdb url = https://gitlab.com/keycodemap/keycodemapdb.git diff --git a/meson.build b/meson.build index f7f31a278d..de087666f5 100644 --- a/meson.build +++ b/meson.build @@ -2028,6 +2028,7 @@ runutf8 = [ 'LC_ALL=', 'LANG=C', 'LC_CTYPE=en_US.UTF-8' ] top_inc_dir = include_directories('.') +keycodemapdb = subproject('keycodemapdb') # include remaining subdirs diff --git a/src/util/meson.build b/src/util/meson.build index c6b1294f24..c2175f1098 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -138,8 +138,8 @@ keyname_list = [ 'win32', ] -keymap_gen_prog = find_program('keymap-gen', dirs: [meson.project_source_root() / 'src' / 'keycodemapdb' / 'tools' ]) -keymap_src_file = '@0@/src/keycodemapdb/data/keymaps.csv'.format(meson.project_source_root()) +keymap_gen_prog = find_program('keymap-gen') +keymap_src_file = keycodemapdb.get_variable('keymaps_csv') foreach name : keycode_list keycode_gen_sources += custom_target( diff --git a/src/keycodemapdb b/subprojects/keycodemapdb similarity index 100% rename from src/keycodemapdb rename to subprojects/keycodemapdb -- 2.40.0

With this code in master I am no longer able to build rpms from the tarball with rpmbuild. Am I the only one? On 4/17/23 1:54 PM, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Follow better meson build system conventions. This allows to find keymap-gen or CSV without explicitly setting the paths.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- .gitmodules | 2 +- meson.build | 1 + src/util/meson.build | 4 ++-- {src => subprojects}/keycodemapdb | 0 4 files changed, 4 insertions(+), 3 deletions(-) rename {src => subprojects}/keycodemapdb (100%)
diff --git a/.gitmodules b/.gitmodules index 79b7e19485..7bee617505 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "keycodemapdb"] - path = src/keycodemapdb + path = subprojects/keycodemapdb url = https://gitlab.com/keycodemap/keycodemapdb.git diff --git a/meson.build b/meson.build index f7f31a278d..de087666f5 100644 --- a/meson.build +++ b/meson.build @@ -2028,6 +2028,7 @@ runutf8 = [ 'LC_ALL=', 'LANG=C', 'LC_CTYPE=en_US.UTF-8' ]
top_inc_dir = include_directories('.')
+keycodemapdb = subproject('keycodemapdb')
# include remaining subdirs
diff --git a/src/util/meson.build b/src/util/meson.build index c6b1294f24..c2175f1098 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -138,8 +138,8 @@ keyname_list = [ 'win32', ]
-keymap_gen_prog = find_program('keymap-gen', dirs: [meson.project_source_root() / 'src' / 'keycodemapdb' / 'tools' ]) -keymap_src_file = '@0@/src/keycodemapdb/data/keymaps.csv'.format(meson.project_source_root()) +keymap_gen_prog = find_program('keymap-gen') +keymap_src_file = keycodemapdb.get_variable('keymaps_csv')
foreach name : keycode_list keycode_gen_sources += custom_target( diff --git a/src/keycodemapdb b/subprojects/keycodemapdb similarity index 100% rename from src/keycodemapdb rename to subprojects/keycodemapdb
-- Mit freundlichen Grüßen/Kind regards Boris Fiuczynski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Gregor Pillen Geschäftsführung: David Faller Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

On 4/20/23 17:10, Boris Fiuczynski wrote:
With this code in master I am no longer able to build rpms from the tarball with rpmbuild. Am I the only one?
This is the pipeline that run after this very patch: https://gitlab.com/libvirt/libvirt/-/pipelines/839521848 and for instance x86_64-fedora-rawhide-prebuilt-env job does an rpmbuild: https://gitlab.com/libvirt/libvirt/-/jobs/4125368643 Did you remove old src/keycodemapdb dir? What error are you getting? Michal

On 4/20/23 5:34 PM, Michal Prívozník wrote:
On 4/20/23 17:10, Boris Fiuczynski wrote:
With this code in master I am no longer able to build rpms from the tarball with rpmbuild. Am I the only one?
This is the pipeline that run after this very patch:
https://gitlab.com/libvirt/libvirt/-/pipelines/839521848
and for instance x86_64-fedora-rawhide-prebuilt-env job does an rpmbuild:
https://gitlab.com/libvirt/libvirt/-/jobs/4125368643
Did you remove old src/keycodemapdb dir? What error are you getting?
Michal
Thanks Michal, it was a setup problem on my end. Sorry for the noise. -- Mit freundlichen Grüßen/Kind regards Boris Fiuczynski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Gregor Pillen Geschäftsführung: David Faller Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

On 4/17/23 13:53, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Hi,
libvirt fails to compile on msys2/win32.
Also update keycodemapdb to fix CI build issues, and turn it into a subproject(), as that makes things simpler for meson.
Fixes: https://gitlab.com/libvirt/libvirt/-/issues/453
v2: - update based on Michal version - update keycodemapdb, make it a subproject()
Marc-André Lureau (6): meson: don't look for unix paths on win32 keycodemapdb: update submodule for build fixes meson: don't hard code find_program() location meson: drop explicit python interpreter rpc/ssh: ssh_userauth_agent() is not supported on win32 Move src/keycodemapdb -> subprojects/keycodemapdb
.gitmodules | 2 +- docs/manpages/meson.build | 4 ++-- docs/meson.build | 6 ++---- meson.build | 15 ++++++++++----- src/admin/meson.build | 4 ++-- src/esx/meson.build | 4 ++-- src/hyperv/meson.build | 2 +- src/keycodemapdb | 1 - src/meson.build | 8 ++++---- src/rpc/virnetlibsshsession.c | 10 +++++++++- src/util/meson.build | 8 ++++---- subprojects/keycodemapdb | 1 + 12 files changed, 38 insertions(+), 27 deletions(-) delete mode 160000 src/keycodemapdb create mode 160000 subprojects/keycodemapdb
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> and merged. Michal
participants (3)
-
Boris Fiuczynski
-
marcandre.lureau@redhat.com
-
Michal Prívozník