diff mbox series

ui: Link dbus-display with pixman again

Message ID 20230630234839.14716-1-philmd@linaro.org
State New
Headers show
Series ui: Link dbus-display with pixman again | expand

Commit Message

Philippe Mathieu-Daudé June 30, 2023, 11:48 p.m. UTC
Since its introduction in commit 142ca628a7 ("ui: add a D-Bus
display backend"), dbus_display1 depends on pixman.
Unfortunatly the refactor commit 1222070e77 ("meson: ensure
dbus-display generated code is built before other units")
dropped that dependency. Recently commit 6cc5a6159a ("ui/dbus:
win32 support") expose this problem:

  In file included from include/ui/console.h:4,
                   from ui/dbus.h:31,
                   from ../audio/dbusaudio.c:36:
  include/ui/qemu-pixman.h:12:10: fatal error: pixman.h: No such file or directory
     12 | #include <pixman.h>
        |          ^~~~~~~~~~

Restore the missing dependency on pixman.

Reported-by: Frederic Bezies <fredbezies@gmail.com>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1739
Fixes: 1222070e77 ("meson: ensure dbus-display generated code is built before other units")
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 ui/meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Marc-André Lureau July 3, 2023, 9:21 a.m. UTC | #1
Hi

On Sat, Jul 1, 2023 at 1:49 AM Philippe Mathieu-Daudé <philmd@linaro.org>
wrote:

> Since its introduction in commit 142ca628a7 ("ui: add a D-Bus
> display backend"), dbus_display1 depends on pixman.
> Unfortunatly the refactor commit 1222070e77 ("meson: ensure
> dbus-display generated code is built before other units")
> dropped that dependency. Recently commit 6cc5a6159a ("ui/dbus:
> win32 support") expose this problem:
>
>   In file included from include/ui/console.h:4,
>                    from ui/dbus.h:31,
>                    from ../audio/dbusaudio.c:36:
>   include/ui/qemu-pixman.h:12:10: fatal error: pixman.h: No such file or
> directory
>      12 | #include <pixman.h>
>         |          ^~~~~~~~~~
>
> Restore the missing dependency on pixman.
>

I fail to understand how this would help.  dbus-display1 unit is pure
GIO/GDBus code, no pixman involved. The derived library dependency is then
used to build and link the dbus ui/ module.

audio/dbus currently requires pixman because it compiles against units from
ui/dbus, which introduces some indirect pixman dependency from ui/console.

It would be worth working on making pixman optional altogether (
https://gitlab.com/qemu-project/qemu/-/issues/1172), I will try to look at
it.

thanks


> Reported-by: Frederic Bezies <fredbezies@gmail.com>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1739
> Fixes: 1222070e77 ("meson: ensure dbus-display generated code is built
> before other units")
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>  ui/meson.build | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/ui/meson.build b/ui/meson.build
> index d81609fb0e..cb178dd095 100644
> --- a/ui/meson.build
> +++ b/ui/meson.build
> @@ -90,7 +90,7 @@ if dbus_display
>                                            '--interface-prefix',
> 'org.qemu.',
>                                            '--c-namespace', 'QemuDBus',
>                                            '--generate-c-code', '@BASENAME@
> '])
> -  dbus_display1_lib = static_library('dbus-display1', dbus_display1,
> dependencies: gio)
> +  dbus_display1_lib = static_library('dbus-display1', dbus_display1,
> dependencies: [gio, pixman])
>    dbus_display1_dep = declare_dependency(link_with: dbus_display1_lib,
> include_directories: include_directories('.'))
>    dbus_ss.add(when: [gio, pixman, dbus_display1_dep],
>                if_true: [files(
> --
> 2.38.1
>
>
>
Richard Henderson July 3, 2023, 9:29 a.m. UTC | #2
On 7/3/23 11:21, Marc-André Lureau wrote:
> Hi
> 
> On Sat, Jul 1, 2023 at 1:49 AM Philippe Mathieu-Daudé <philmd@linaro.org 
> <mailto:philmd@linaro.org>> wrote:
> 
>     Since its introduction in commit 142ca628a7 ("ui: add a D-Bus
>     display backend"), dbus_display1 depends on pixman.
>     Unfortunatly the refactor commit 1222070e77 ("meson: ensure
>     dbus-display generated code is built before other units")
>     dropped that dependency. Recently commit 6cc5a6159a ("ui/dbus:
>     win32 support") expose this problem:
> 
>        In file included from include/ui/console.h:4,
>                         from ui/dbus.h:31,
>                         from ../audio/dbusaudio.c:36:
>        include/ui/qemu-pixman.h:12:10: fatal error: pixman.h: No such file or directory
>           12 | #include <pixman.h>
>              |          ^~~~~~~~~~
> 
>     Restore the missing dependency on pixman.
> 
> 
> I fail to understand how this would help.  dbus-display1 unit is pure GIO/GDBus code, no 
> pixman involved. The derived library dependency is then used to build and link the dbus 
> ui/ module.

meson dependencies

>     -  dbus_display1_lib = static_library('dbus-display1', dbus_display1, dependencies: gio)
>     +  dbus_display1_lib = static_library('dbus-display1', dbus_display1, dependencies:
>     [gio, pixman])

like so, also include the set of -Iinclude-path-options to use when building the items 
that use it.  Therefore, for the moment, Phil is correct.

While dbus-display1 might not use pixman itself, ui/dbus.h certainly does.
Perhaps the usage in ui/dbus.h is the greater mistake.


r~
diff mbox series

Patch

diff --git a/ui/meson.build b/ui/meson.build
index d81609fb0e..cb178dd095 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -90,7 +90,7 @@  if dbus_display
                                           '--interface-prefix', 'org.qemu.',
                                           '--c-namespace', 'QemuDBus',
                                           '--generate-c-code', '@BASENAME@'])
-  dbus_display1_lib = static_library('dbus-display1', dbus_display1, dependencies: gio)
+  dbus_display1_lib = static_library('dbus-display1', dbus_display1, dependencies: [gio, pixman])
   dbus_display1_dep = declare_dependency(link_with: dbus_display1_lib, include_directories: include_directories('.'))
   dbus_ss.add(when: [gio, pixman, dbus_display1_dep],
               if_true: [files(