diff --git a/CHANGELOG.md b/CHANGELOG.md index ac8db1a9..233c0d40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed + +- Added support for Wine 6.23's new fixed winedbg command line argument + handling. + ### Fixed - Fixed sluggish UIs in _Output's Thermal_ and likely a handful of other diff --git a/meson.build b/meson.build index 8eae0442..084dcb4e 100644 --- a/meson.build +++ b/meson.build @@ -139,6 +139,10 @@ if wine_version.returncode() == 0 message('- Using the cdecl calling convention') compiler_options += '-DWINE_USE_CDECL' endif + if wine_version.stdout().version_compare('<6.23') and with_winedbg + message('- Using legacy winedbg argument quoting') + compiler_options += '-DWINEDBG_LEGACY_ARGUMENT_QUOTING' + endif else warning('Unable to determine the current Wine version') endif diff --git a/src/plugin/host-process.cpp b/src/plugin/host-process.cpp index da72f738..26510fb7 100644 --- a/src/plugin/host-process.cpp +++ b/src/plugin/host-process.cpp @@ -67,10 +67,10 @@ IndividualHost::IndividualHost(boost::asio::io_context& io_context, host( launch_host(host_path, plugin_type_to_string(host_request.plugin_type), -#ifdef WITH_WINEDBG - // Winedbg flattens all command line arguments to a single - // space separate Win32 command line, so we need to do our - // own quoting. +#if defined(WITH_WINEDBG) && defined(WINEDBG_LEGACY_ARGUMENT_QUOTING) + // Old versions of winedbg flattened all command line + // arguments to a single space separated Win32 command + // line, so we had to do our own quoting "\"" + plugin_info.windows_plugin_path + "\"", #else host_request.plugin_path, diff --git a/src/plugin/host-process.h b/src/plugin/host-process.h index fbc7b84f..3504e7f5 100644 --- a/src/plugin/host-process.h +++ b/src/plugin/host-process.h @@ -77,14 +77,19 @@ class HostProcess { // window managers require some slight modifications to spawn a // detached terminal emulator. Alternatively, you can spawn // `/usr/bin/winedbg` with the `--no-start` option to launch a gdb - // server and then connect to it from another terminal. Note the - // double quoting here, winedbg doesn't respect `argv` and instead - // expects a standard Win32 command line. + // server and then connect to it from another terminal. "/usr/bin/kstart5", "konsole", "--", "-e", "winedbg", "--gdb", +#ifdef WINEDBG_LEGACY_ARGUMENT_QUOTING + // Note the double quoting here. Old versions of winedbg didn't + // respect `argv` and instead expected a pre-quoted Win32 command + // line as its arguments. "\"" + host_path.string() + ".so\"", +#else + host_path.string() + ".so", +#endif // WINEDBG_LEGACY_ARGUMENT_QUOTING #else host_path, -#endif +#endif // WITH_WINEDBG boost::process::std_out = stdout_pipe, boost::process::std_err = stderr_pipe, // NOTE: If the Wine process outlives the host, then it may cause