Message ID | 20190909235116.19290-1-alan.coopersmith@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [libdrm] meson: Fix sys/mkdev.h detection on Solaris | expand |
On Monday, 2019-09-09 16:51:16 -0700, Alan Coopersmith wrote: > On Solaris, sys/sysmacros.h has long-deprecated copies of major() & minor() > but not makedev(). sys/mkdev.h has all three and is the preferred choice. > > So we check for sys/mkdev.h first, as autoconf's AC_HEADER_MAJOR does. Reviewed-by: Eric Engestrom <eric.engestrom@intel.com> Alternatively, how about this? ---8<--- diff --git a/meson.build b/meson.build index bc5cfc588d0c621a9725..263f691ab2b9107f5be1 100644 --- a/meson.build +++ b/meson.build @@ -183,9 +183,14 @@ foreach header : ['sys/sysctl.h', 'sys/select.h', 'alloca.h'] config.set('HAVE_' + header.underscorify().to_upper(), cc.compiles('#include <@0@>'.format(header), name : '@0@ works'.format(header))) endforeach -if cc.has_header_symbol('sys/sysmacros.h', 'major') +if (cc.has_header_symbol('sys/sysmacros.h', 'major') and + cc.has_header_symbol('sys/sysmacros.h', 'minor') and + cc.has_header_symbol('sys/sysmacros.h', 'makedev')) config.set10('MAJOR_IN_SYSMACROS', true) -elif cc.has_header_symbol('sys/mkdev.h', 'major') +endif +if (cc.has_header_symbol('sys/mkdev.h', 'major') and + cc.has_header_symbol('sys/mkdev.h', 'minor') and + cc.has_header_symbol('sys/mkdev.h', 'makedev')) config.set10('MAJOR_IN_MKDEV', true) endif config.set10('HAVE_OPEN_MEMSTREAM', cc.has_function('open_memstream')) --->8--- Makes both checks independent and represent the reality of what's wanted more accurately (despite the historical name of the macro). > > Fixes build failure with error: > ../xf86drm.c: In function ‘drmOpenMinor’: > ../xf86drm.c:454:30: error: implicit declaration of function ‘makedev’ [-Werror=implicit-function-declaration] > 454 | return drmOpenDevice(makedev(DRM_MAJOR, minor), minor, type); > | ^~~~~~~ > > Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> > --- > meson.build | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/meson.build b/meson.build > index bc5cfc58..a3363c32 100644 > --- a/meson.build > +++ b/meson.build > @@ -183,10 +183,10 @@ foreach header : ['sys/sysctl.h', 'sys/select.h', 'alloca.h'] > config.set('HAVE_' + header.underscorify().to_upper(), > cc.compiles('#include <@0@>'.format(header), name : '@0@ works'.format(header))) > endforeach > -if cc.has_header_symbol('sys/sysmacros.h', 'major') > - config.set10('MAJOR_IN_SYSMACROS', true) > -elif cc.has_header_symbol('sys/mkdev.h', 'major') > +if cc.has_header_symbol('sys/mkdev.h', 'major') > config.set10('MAJOR_IN_MKDEV', true) > +elif cc.has_header_symbol('sys/sysmacros.h', 'major') > + config.set10('MAJOR_IN_SYSMACROS', true) > endif > config.set10('HAVE_OPEN_MEMSTREAM', cc.has_function('open_memstream')) > > -- > 2.15.2 >
On 9/10/19 5:55 AM, Eric Engestrom wrote: > On Monday, 2019-09-09 16:51:16 -0700, Alan Coopersmith wrote: >> On Solaris, sys/sysmacros.h has long-deprecated copies of major() & minor() >> but not makedev(). sys/mkdev.h has all three and is the preferred choice. >> >> So we check for sys/mkdev.h first, as autoconf's AC_HEADER_MAJOR does. > > Reviewed-by: Eric Engestrom <eric.engestrom@intel.com> > > Alternatively, how about this? > ---8<--- > diff --git a/meson.build b/meson.build > index bc5cfc588d0c621a9725..263f691ab2b9107f5be1 100644 > --- a/meson.build > +++ b/meson.build > @@ -183,9 +183,14 @@ foreach header : ['sys/sysctl.h', 'sys/select.h', 'alloca.h'] > config.set('HAVE_' + header.underscorify().to_upper(), > cc.compiles('#include <@0@>'.format(header), name : '@0@ works'.format(header))) > endforeach > -if cc.has_header_symbol('sys/sysmacros.h', 'major') > +if (cc.has_header_symbol('sys/sysmacros.h', 'major') and > + cc.has_header_symbol('sys/sysmacros.h', 'minor') and > + cc.has_header_symbol('sys/sysmacros.h', 'makedev')) > config.set10('MAJOR_IN_SYSMACROS', true) > -elif cc.has_header_symbol('sys/mkdev.h', 'major') > +endif > +if (cc.has_header_symbol('sys/mkdev.h', 'major') and > + cc.has_header_symbol('sys/mkdev.h', 'minor') and > + cc.has_header_symbol('sys/mkdev.h', 'makedev')) > config.set10('MAJOR_IN_MKDEV', true) > endif > config.set10('HAVE_OPEN_MEMSTREAM', cc.has_function('open_memstream')) > --->8--- > > Makes both checks independent and represent the reality of what's wanted > more accurately (despite the historical name of the macro). That works: Header <sys/sysmacros.h> has symbol "major" : YES (cached) Header <sys/sysmacros.h> has symbol "minor" : YES Header <sys/sysmacros.h> has symbol "makedev" : NO Header <sys/mkdev.h> has symbol "major" : YES Header <sys/mkdev.h> has symbol "minor" : YES Header <sys/mkdev.h> has symbol "makedev" : YES Would you like me to resubmit with that, or do you want to submit it? If you want to go ahead, then: Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Tested-by: Alan Coopersmith <alan.coopersmith@oracle.com>
On Friday, 2019-09-13 16:26:55 -0700, Alan Coopersmith wrote: > On 9/10/19 5:55 AM, Eric Engestrom wrote: > > On Monday, 2019-09-09 16:51:16 -0700, Alan Coopersmith wrote: > > > On Solaris, sys/sysmacros.h has long-deprecated copies of major() & minor() > > > but not makedev(). sys/mkdev.h has all three and is the preferred choice. > > > > > > So we check for sys/mkdev.h first, as autoconf's AC_HEADER_MAJOR does. > > > > Reviewed-by: Eric Engestrom <eric.engestrom@intel.com> > > > > Alternatively, how about this? > > ---8<--- > > diff --git a/meson.build b/meson.build > > index bc5cfc588d0c621a9725..263f691ab2b9107f5be1 100644 > > --- a/meson.build > > +++ b/meson.build > > @@ -183,9 +183,14 @@ foreach header : ['sys/sysctl.h', 'sys/select.h', 'alloca.h'] > > config.set('HAVE_' + header.underscorify().to_upper(), > > cc.compiles('#include <@0@>'.format(header), name : '@0@ works'.format(header))) > > endforeach > > -if cc.has_header_symbol('sys/sysmacros.h', 'major') > > +if (cc.has_header_symbol('sys/sysmacros.h', 'major') and > > + cc.has_header_symbol('sys/sysmacros.h', 'minor') and > > + cc.has_header_symbol('sys/sysmacros.h', 'makedev')) > > config.set10('MAJOR_IN_SYSMACROS', true) > > -elif cc.has_header_symbol('sys/mkdev.h', 'major') > > +endif > > +if (cc.has_header_symbol('sys/mkdev.h', 'major') and > > + cc.has_header_symbol('sys/mkdev.h', 'minor') and > > + cc.has_header_symbol('sys/mkdev.h', 'makedev')) > > config.set10('MAJOR_IN_MKDEV', true) > > endif > > config.set10('HAVE_OPEN_MEMSTREAM', cc.has_function('open_memstream')) > > --->8--- > > > > Makes both checks independent and represent the reality of what's wanted > > more accurately (despite the historical name of the macro). > > That works: > > Header <sys/sysmacros.h> has symbol "major" : YES (cached) > Header <sys/sysmacros.h> has symbol "minor" : YES > Header <sys/sysmacros.h> has symbol "makedev" : NO > Header <sys/mkdev.h> has symbol "major" : YES > Header <sys/mkdev.h> has symbol "minor" : YES > Header <sys/mkdev.h> has symbol "makedev" : YES > > Would you like me to resubmit with that, or do you want to submit it? > > If you want to go ahead, then: > > Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> > Tested-by: Alan Coopersmith <alan.coopersmith@oracle.com> Just pushed it as 827a2a2042359ac93a9b082ee9584b43baa1a3f7; thanks for testing it! I've also tagged you on a Mesa MR to the same effect, in case you want to give it a go :) > > -- > -Alan Coopersmith- alan.coopersmith@oracle.com > Oracle Solaris Engineering - https://blogs.oracle.com/alanc > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/meson.build b/meson.build index bc5cfc58..a3363c32 100644 --- a/meson.build +++ b/meson.build @@ -183,10 +183,10 @@ foreach header : ['sys/sysctl.h', 'sys/select.h', 'alloca.h'] config.set('HAVE_' + header.underscorify().to_upper(), cc.compiles('#include <@0@>'.format(header), name : '@0@ works'.format(header))) endforeach -if cc.has_header_symbol('sys/sysmacros.h', 'major') - config.set10('MAJOR_IN_SYSMACROS', true) -elif cc.has_header_symbol('sys/mkdev.h', 'major') +if cc.has_header_symbol('sys/mkdev.h', 'major') config.set10('MAJOR_IN_MKDEV', true) +elif cc.has_header_symbol('sys/sysmacros.h', 'major') + config.set10('MAJOR_IN_SYSMACROS', true) endif config.set10('HAVE_OPEN_MEMSTREAM', cc.has_function('open_memstream'))
On Solaris, sys/sysmacros.h has long-deprecated copies of major() & minor() but not makedev(). sys/mkdev.h has all three and is the preferred choice. So we check for sys/mkdev.h first, as autoconf's AC_HEADER_MAJOR does. Fixes build failure with error: ../xf86drm.c: In function ‘drmOpenMinor’: ../xf86drm.c:454:30: error: implicit declaration of function ‘makedev’ [-Werror=implicit-function-declaration] 454 | return drmOpenDevice(makedev(DRM_MAJOR, minor), minor, type); | ^~~~~~~ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> --- meson.build | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)