Bug 106561 - ./libdrm_macros.h:26:5: error: 'HAVE_VISIBILITY' is not defined, evaluates to 0 [-Werror,-Wundef]
Summary: ./libdrm_macros.h:26:5: error: 'HAVE_VISIBILITY' is not defined, evaluates to...
Status: RESOLVED NOTABUG
Alias: None
Product: DRI
Classification: Unclassified
Component: libdrm (show other bugs)
Version: DRI git
Hardware: x86-64 (AMD64) All
: medium critical
Assignee: Default DRI bug account
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-05-18 07:25 UTC by Tomasz Paweł Gajc
Modified: 2018-05-25 06:32 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Description Tomasz Paweł Gajc 2018-05-18 07:25:59 UTC
I'm compiling libdrm-2.4.92 with LLVM/Clang-7.0.0-git
full logs:
http://file-store.openmandriva.org/api/v1/file_stores/4bcfed586cf82d265277f3612dcb7f9cb20e3caf.log?show=true

BUILDSTDERR: In file included from xf86drm.c:68:
BUILDSTDERR: ./libdrm_macros.h:26:5: error: 'HAVE_VISIBILITY' is not defined, evaluates to 0 [-Werror,-Wundef]
BUILDSTDERR: #if HAVE_VISIBILITY
BUILDSTDERR:     ^
BUILDSTDERR: xf86drm.c:293:6: error: 'UDEV' is not defined, evaluates to 0 [-Werror,-Wundef]
BUILDSTDERR: #if !UDEV
BUILDSTDERR:      ^
BUILDSTDERR: xf86drm.c:332:6: error: 'UDEV' is not defined, evaluates to 0 [-Werror,-Wundef]
BUILDSTDERR: #if !UDEV
BUILDSTDERR:      ^
BUILDSTDERR: xf86drm.c:361:6: error: 'UDEV' is not defined, evaluates to 0 [-Werror,-Wundef]
BUILDSTDERR: #if !UDEV
BUILDSTDERR:      ^
BUILDSTDERR: xf86drm.c:414:6: error: 'UDEV' is not defined, evaluates to 0 [-Werror,-Wundef]
BUILDSTDERR: #if !UDEV
BUILDSTDERR:      ^
BUILDSTDERR: xf86drm.c:1110:19: warning: implicit conversion from enumeration type 'drmMapType' to different enumeration type 'enum drm_map_type' [-Wenum-conversion]
BUILDSTDERR:     map.type    = type;
BUILDSTDERR:                 ~ ^~~~
BUILDSTDERR: xf86drm.c:1111:19: warning: implicit conversion from enumeration type 'drmMapFlags' to different enumeration type 'enum drm_map_flags' [-Wenum-conversion]
BUILDSTDERR:     map.flags   = flags;
BUILDSTDERR:                 ~ ^~~~~
BUILDSTDERR: xf86drm.c:1433:36: warning: implicit conversion from enumeration type 'drmDMAFlags' to different enumeration type 'enum drm_dma_flags' [-Wenum-conversion]
BUILDSTDERR:     dma.flags           = request->flags;
BUILDSTDERR:                         ~ ~~~~~~~~~^~~~~
BUILDSTDERR: xf86drm.c:2364:19: warning: implicit conversion from enumeration type 'enum drm_map_type' to different enumeration type 'drmMapType' [-Wenum-conversion]
BUILDSTDERR:     *type   = map.type;
BUILDSTDERR:             ~ ~~~~^~~~
BUILDSTDERR: xf86drm.c:2365:19: warning: implicit conversion from enumeration type 'enum drm_map_flags' to different enumeration type 'drmMapFlags' [-Wenum-conversion]
BUILDSTDERR:     *flags  = map.flags;
BUILDSTDERR:             ~ ~~~~^~~~~
BUILDSTDERR: xf86drm.c:2922:11: error: implicit declaration of function 'vasprintf' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
BUILDSTDERR:     num = vasprintf(&key, fmt, ap);
BUILDSTDERR:           ^
BUILDSTDERR: xf86drm.c:2922:11: note: did you mean 'vsprintf'?
BUILDSTDERR: /usr/include/bits/stdio2.h:43:8: note: 'vsprintf' declared here
BUILDSTDERR: __NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt,
BUILDSTDERR:        ^
BUILDSTDERR: /usr/include/sys/cdefs.h:57:59: note: expanded from macro '__NTH'
BUILDSTDERR: #  define __NTH(fct)    __attribute__ ((__nothrow__ __LEAF)) fct
BUILDSTDERR:                                                              ^
BUILDSTDERR: xf86drm.c:2922:11: warning: this function declaration is not a prototype [-Wstrict-prototypes]
BUILDSTDERR:     num = vasprintf(&key, fmt, ap);
BUILDSTDERR:           ^
BUILDSTDERR: 6 warnings and 6 errors generated.
BUILDSTDERR: make[2]: *** [Makefile:757: libdrm_la-xf86drm.lo] Error 1
Comment 1 Eric Engestrom 2018-05-18 15:49:26 UTC
Hi Tomasz,

I found this file; is that what you used to configure and compile libdrm?
https://abf.io/openmandriva/libdrm/blob/master/libdrm.spec

You seem to be using autotools, which is deprecated and will one day go away; you should convert to Meson eventually, although I don't think this would change anything with regards to your issue here.
We have a short page explaining how to use Meson on the Mesa website:
https://mesa3d.org/meson.html

The errors you're seeing are very strange; HAVE_VISIBILITY and UDEV are always defined (by the build system) as far as I can tell, and the enum conversion warnings are technically correct (although the value are identical, so it should be trivial to fix), but this code hasn't been touched since 2009/1999.
Has any previous version of libdrm ever built in your build/packaging system?

For the last error, vasprintf() is a GNU extension, so I'm not surprised it's not working with clang; I'll have a look next week to see if I can fix it the way we did in Mesa (src/util/u_string.h).
Comment 2 Tomasz Paweł Gajc 2018-05-23 15:46:44 UTC
Yes, previous libdrm versions were building without any issues on OpenMandriva Lx.

I've already commited changes to spec file to use meson.
Comment 3 Tomasz Paweł Gajc 2018-05-25 06:32:48 UTC
Fixed by compiling libdrm with meson. Thanks.


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.