diff mbox

[v3] build: include sys/sysmacros.h for major() and minor()

Message ID 20161228200433.24244-1-cov@codeaurora.org
State New
Headers show

Commit Message

Christopher Covington Dec. 28, 2016, 8:04 p.m. UTC
The definition of the major() and minor() macros are moving within glibc to
<sys/sysmacros.h>. Include this header when it is available to avoid the
following sorts of build-stopping messages:

qga/commands-posix.c: In function ‘dev_major_minor’:
qga/commands-posix.c:656:13: error: 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>. [-Werror]
         *devmajor = major(st.st_rdev);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~

qga/commands-posix.c:657:13: error: In the GNU C Library, "minor" 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 "minor", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "minor", you should undefine it after including <sys/types.h>. [-Werror]
         *devminor = minor(st.st_rdev);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~

The additional include allows the build to complete on Fedora 26 (Rawhide)
with glibc version 2.24.90.

Signed-off-by: Christopher Covington <cov@codeaurora.org>
---
 configure                 | 18 ++++++++++++++++++
 include/sysemu/os-posix.h |  4 ++++
 2 files changed, 22 insertions(+)

Comments

Eric Blake Dec. 29, 2016, 2:03 p.m. UTC | #1
On 12/28/2016 02:04 PM, Christopher Covington wrote:

It's best when posting a v3 to do so as a new thread, rather than buried
in-reply-to an earlier thread, as some maintainers' tools overlook
deeply-threaded patches.  Probably won't matter too much in this case,
but it's useful information for future submissions; other tips can be
found here:
http://wiki.qemu.org/Contribute/SubmitAPatch


> The definition of the major() and minor() macros are moving within glibc to
> <sys/sysmacros.h>.

Or more precisely, major() and minor() have ALWAYS been in
<sys/sysmacros.h> under glibc, but are now being removed from
<sys/types.h>.  But your patch is the correct fix: if <sys/sysmacros.h>
exists, include it.

> Include this header when it is available to avoid the
> following sorts of build-stopping messages:
> 
> qga/commands-posix.c: In function ‘dev_major_minor’:
> qga/commands-posix.c:656:13: error: 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>. [-Werror]
>          *devmajor = major(st.st_rdev);
>              ^~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> qga/commands-posix.c:657:13: error: In the GNU C Library, "minor" 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 "minor", include <sys/sysmacros.h>
>  directly. If you did not intend to use a system-defined macro
>  "minor", you should undefine it after including <sys/types.h>. [-Werror]
>          *devminor = minor(st.st_rdev);
>              ^~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> The additional include allows the build to complete on Fedora 26 (Rawhide)
> with glibc version 2.24.90.
> 
> Signed-off-by: Christopher Covington <cov@codeaurora.org>
> ---
>  configure                 | 18 ++++++++++++++++++
>  include/sysemu/os-posix.h |  4 ++++
>  2 files changed, 22 insertions(+)

Reviewed-by: Eric Blake <eblake@redhat.com>
Eric Blake March 13, 2017, 6:31 p.m. UTC | #2
On 12/29/2016 08:03 AM, Eric Blake wrote:
> On 12/28/2016 02:04 PM, Christopher Covington wrote:
> 
> It's best when posting a v3 to do so as a new thread, rather than buried
> in-reply-to an earlier thread, as some maintainers' tools overlook
> deeply-threaded patches.  Probably won't matter too much in this case,
> but it's useful information for future submissions; other tips can be
> found here:
> http://wiki.qemu.org/Contribute/SubmitAPatch
> 
> 
>> The definition of the major() and minor() macros are moving within glibc to
>> <sys/sysmacros.h>.
> 
> Or more precisely, major() and minor() have ALWAYS been in
> <sys/sysmacros.h> under glibc, but are now being removed from
> <sys/types.h>.  But your patch is the correct fix: if <sys/sysmacros.h>
> exists, include it.
> 
>> Include this header when it is available to avoid the
>> following sorts of build-stopping messages:
>>
>> qga/commands-posix.c: In function ‘dev_major_minor’:
>> qga/commands-posix.c:656:13: error: In the GNU C Library, "major" is defined
>>  by <sys/sysmacros.h>. For historical compatibility, it is
...
>> The additional include allows the build to complete on Fedora 26 (Rawhide)
>> with glibc version 2.24.90.
>>
>> Signed-off-by: Christopher Covington <cov@codeaurora.org>
>> ---
>>  configure                 | 18 ++++++++++++++++++
>>  include/sysemu/os-posix.h |  4 ++++
>>  2 files changed, 22 insertions(+)
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 

Ping - can we get this applied to master to fix broken builds on rawhide?
Peter Maydell March 14, 2017, 10:12 a.m. UTC | #3
On 28 December 2016 at 21:04, Christopher Covington <cov@codeaurora.org> wrote:
> The definition of the major() and minor() macros are moving within glibc to
> <sys/sysmacros.h>. Include this header when it is available to avoid the
> following sorts of build-stopping messages:
>
> qga/commands-posix.c: In function ‘dev_major_minor’:
> qga/commands-posix.c:656:13: error: 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>. [-Werror]
>          *devmajor = major(st.st_rdev);
>              ^~~~~~~~~~~~~~~~~~~~~~~~~~
>
> qga/commands-posix.c:657:13: error: In the GNU C Library, "minor" 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 "minor", include <sys/sysmacros.h>
>  directly. If you did not intend to use a system-defined macro
>  "minor", you should undefine it after including <sys/types.h>. [-Werror]
>          *devminor = minor(st.st_rdev);
>              ^~~~~~~~~~~~~~~~~~~~~~~~~~
>
> The additional include allows the build to complete on Fedora 26 (Rawhide)
> with glibc version 2.24.90.
>
> Signed-off-by: Christopher Covington <cov@codeaurora.org>
> ---

Applied to master, thanks.

-- PMM
diff mbox

Patch

diff --git a/configure b/configure
index 218df87d21..58a33c71ad 100755
--- a/configure
+++ b/configure
@@ -4746,6 +4746,20 @@  if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
 fi
 
 ##########################################
+# check for sysmacros.h
+
+have_sysmacros=no
+cat > $TMPC << EOF
+#include <sys/sysmacros.h>
+int main(void) {
+    return makedev(0, 0);
+}
+EOF
+if compile_prog "" "" ; then
+    have_sysmacros=yes
+fi
+
+##########################################
 # End of CC checks
 # After here, no more $cc or $ld runs
 
@@ -5721,6 +5735,10 @@  if test "$have_af_vsock" = "yes" ; then
   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
 fi
 
+if test "$have_sysmacros" = "yes" ; then
+  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
+fi
+
 # Hold two types of flag:
 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
 #                                     a thread we have a handle to
diff --git a/include/sysemu/os-posix.h b/include/sysemu/os-posix.h
index b0a6c0695b..900bdcb45a 100644
--- a/include/sysemu/os-posix.h
+++ b/include/sysemu/os-posix.h
@@ -34,6 +34,10 @@ 
 #include <netdb.h>
 #include <sys/un.h>
 
+#ifdef CONFIG_SYSMACROS
+#include <sys/sysmacros.h>
+#endif
+
 void os_set_line_buffering(void);
 void os_set_proc_name(const char *s);
 void os_setup_signal_handling(void);