Bug 109587 - "xf86drm: Add drmIsMaster()" commit breaks X server builds
Summary: "xf86drm: Add drmIsMaster()" commit breaks X server builds
Status: RESOLVED FIXED
Alias: None
Product: DRI
Classification: Unclassified
Component: libdrm (show other bugs)
Version: XOrg git
Hardware: All All
: medium major
Assignee: Default DRI bug account
QA Contact:
URL:
Whiteboard:
Keywords:
: 109678 (view as bug list)
Depends on:
Blocks:
 
Reported: 2019-02-08 11:59 UTC by Eero Tamminen
Modified: 2019-02-19 15:58 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments

Description Eero Tamminen 2019-02-08 11:59:12 UTC
Following commit:
-----------------------------------------------
commit 17dfe3ac93217b43f93bc81d1129bd38a89d0368
Author:     Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
AuthorDate: Wed Jan 23 15:38:45 2019 +1100
Commit:     Emil Velikov <emil.l.velikov@gmail.com>
CommitDate: Thu Feb 7 17:43:01 2019 +0000

    xf86drm: Add drmIsMaster()
...
--- a/xf86drm.h
+++ b/xf86drm.h
@@ -37,6 +37,7 @@
 #include <stdarg.h>
 #include <sys/types.h>
 #include <stdint.h>
+#include <stdbool.h>
-----------------------------------------------

Breaks X server build:
-----------------------------------------------
FAILED: hw/xfree86/dri2/xorg_dri2@sta/dri2.c.o
...
In file included from /path/to/include/xf86drm.h:40:0,
                 from /path/to/hw/xfree86/dri2/dri2.c:39:
/path/to/hw/xfree86/common/xf86Opt.h:44:10: error: two or more data types in declaration specifiers
     Bool bool;
          ^
In file included from /path/to/hw/xfree86/common/xf86str.h:43:0,
                 from /path/to/hw/xfree86/common/xf86.h:44,
                 from /path/to/hw/xfree86/dri2/dri2.c:48:
/path/to/hw/xfree86/common/xf86Opt.h:44:14: warning: declaration does not declare anything
     Bool bool;
              ^
-----------------------------------------------

Because couple of structures in X source code are using struct members named as "bool" (added in 2012):
./hw/xfree86/common/xf86Opt.h:    Bool bool;
./hw/xwin/winconfig.h:    Bool bool;

(FYI: Bool is defined as "int" in several X headers.)

Please revert the part adding "stdbool.h" include / "bool" typedef to the xf86drm.h header used by X server, until somebody renames those badly named struct members in X server sources.
Comment 1 Eero Tamminen 2019-02-11 16:42:41 UTC
Fixed by:
-----------------------------------------------------
commit eba6609b7bee5a56fa5334992b1e6f3aef8d244a
Author: Eric Engestrom <eric.engestrom@intel.com>
Date:   Fri Feb 8 14:46:07 2019 +0000

    xf86drm: fix return type for drmIsMaster()
    
    Xserver has struct members named `bool`, which means the last commit
    breaks its build with errors like this:
    
      error: two or more data types in declaration specifiers
      Bool bool;
           ^
    
    Fix this by making it return a 0/1 integer, with the same semantic as
    the boolean it was before.
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=109587
    Fixes: 17dfe3ac93217b43f93b "xf86drm: Add drmIsMaster()"
    Cc: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
    Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
    Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
-----------------------------------------------------

I hope somebody fixes also those X server xf86Opt.h & winconfig.h headers soon as even some of X server code itself is using stdbool.h:
-----------------------------------------------------
$ git grep stdbool.h
hw/xquartz/GL/capabilities.h:#include <stdbool.h>
hw/xquartz/mach-startup/bundle-main.c:#include <stdbool.h>
hw/xwin/winmultiwindowicons.c:#include <stdbool.h>
test/damage/primitives.c:#include <stdbool.h>
test/simple-xinit.c:#include <stdbool.h>
-----------------------------------------------------
Comment 2 Michel Dänzer 2019-02-19 15:58:49 UTC
*** Bug 109678 has been marked as a duplicate of this bug. ***


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.