GCC 7 complains about major(), minor() and makedev(): warning: In the GNU C Library, "major" is defined by <sys/sysmacros.h>. For historical compatibility, it is currently defined by <sys/types.h> as well, but we plan to remove this soon. To use "major", include <sys/sysmacros.h> directly. If you did not intend to use a system-defined macro "major", you should undefine it after including <sys/types.h>.
Signed-off-by: Eric Engestrom eric.engestrom@imgtec.com --- xf86drm.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/xf86drm.c b/xf86drm.c index 88f86ed5..8f8dfb6e 100644 --- a/xf86drm.c +++ b/xf86drm.c @@ -48,6 +48,7 @@ #include <limits.h> #include <signal.h> #include <time.h> +#include <sys/sysmacros.h> #include <sys/types.h> #include <sys/stat.h> #define stat_t struct stat
GCC 7 complains about major() and minor(): warning: In the GNU C Library, "major" is defined by <sys/sysmacros.h>. For historical compatibility, it is currently defined by <sys/types.h> as well, but we plan to remove this soon. To use "major", include <sys/sysmacros.h> directly. If you did not intend to use a system-defined macro "major", you should undefine it after including <sys/types.h>.
Signed-off-by: Eric Engestrom eric.engestrom@imgtec.com --- libkms/linux.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/libkms/linux.c b/libkms/linux.c index 0b50777e..e063e2be 100644 --- a/libkms/linux.c +++ b/libkms/linux.c @@ -39,6 +39,7 @@ #include <xf86drm.h> #include <string.h> #include <unistd.h> +#include <sys/sysmacros.h> #include <sys/stat.h> #include <sys/types.h> #ifdef MAJOR_IN_MKDEV
On 16 March 2017 at 13:56, Eric Engestrom eric.engestrom@imgtec.com wrote:
GCC 7 complains about major(), minor() and makedev(): warning: In the GNU C Library, "major" is defined by <sys/sysmacros.h>. For historical compatibility, it is currently defined by <sys/types.h> as well, but we plan to remove this soon. To use "major", include <sys/sysmacros.h> directly. If you did not intend to use a system-defined macro "major", you should undefine it after including <sys/types.h>.
This (and 2/2) should be handled by the MAJOR_IN_MKDEV/MAJOR_IN_SYSMACROS blocks.
Any ideas why those are not kicking it ? -Emil
On Thursday, 2017-03-16 15:09:15 +0000, Emil Velikov wrote:
On 16 March 2017 at 13:56, Eric Engestrom eric.engestrom@imgtec.com wrote:
GCC 7 complains about major(), minor() and makedev(): warning: In the GNU C Library, "major" is defined by <sys/sysmacros.h>. For historical compatibility, it is currently defined by <sys/types.h> as well, but we plan to remove this soon. To use "major", include <sys/sysmacros.h> directly. If you did not intend to use a system-defined macro "major", you should undefine it after including <sys/types.h>.
This (and 2/2) should be handled by the MAJOR_IN_MKDEV/MAJOR_IN_SYSMACROS blocks.
Any ideas why those are not kicking it ?
Didn't know about those, and didn't look closely enough to see them the first time around.
From the AC_HEADER_MAJOR doc:
If ‘sys/types.h’ does not define major, minor, and makedev, but ‘sys/mkdev.h’ does, define MAJOR_IN_MKDEV; otherwise, if ‘sys/sysmacros.h’ does, define MAJOR_IN_SYSMACROS.
The issue is that <sys/types.h> *does* define it for now, but prints a warning if <sys/sysmacros.h> isn't also included.
Given the autoconf macro and #ifdef, it will always work, even once GCC does drop the macros from <sys/types.h>, but the current method will always result in a warning until then. (And there's no flag to turn the warning off either.)
I guess "don't change the code and learn to ignore the wall of warnings" is the only course of action?
Cheers, Eric
On 16 March 2017 at 17:00, Eric Engestrom eric.engestrom@imgtec.com wrote:
On Thursday, 2017-03-16 15:09:15 +0000, Emil Velikov wrote:
On 16 March 2017 at 13:56, Eric Engestrom eric.engestrom@imgtec.com wrote:
GCC 7 complains about major(), minor() and makedev(): warning: In the GNU C Library, "major" is defined by <sys/sysmacros.h>. For historical compatibility, it is currently defined by <sys/types.h> as well, but we plan to remove this soon. To use "major", include <sys/sysmacros.h> directly. If you did not intend to use a system-defined macro "major", you should undefine it after including <sys/types.h>.
This (and 2/2) should be handled by the MAJOR_IN_MKDEV/MAJOR_IN_SYSMACROS blocks.
Any ideas why those are not kicking it ?
Didn't know about those, and didn't look closely enough to see them the first time around.
From the AC_HEADER_MAJOR doc: If ‘sys/types.h’ does not define major, minor, and makedev, but ‘sys/mkdev.h’ does, define MAJOR_IN_MKDEV; otherwise, if ‘sys/sysmacros.h’ does, define MAJOR_IN_SYSMACROS.
The issue is that <sys/types.h> *does* define it for now, but prints a warning if <sys/sysmacros.h> isn't also included.
Given the autoconf macro and #ifdef, it will always work, even once GCC does drop the macros from <sys/types.h>, but the current method will always result in a warning until then. (And there's no flag to turn the warning off either.)
I guess "don't change the code and learn to ignore the wall of warnings" is the only course of action?
Sigh, I wonder if GCC devs considered the annoyance this will bring and that some people actually do the "correct" thing :-\
As an alternative we can replace the AC_HEADER_MAJOR + MAJOR_IN_FOO with AC_CHECK_HEADERS + HAVE.... It [hopefully] will work everywhere and will squash the annoying warning(s).
-Emil
dri-devel@lists.freedesktop.org