[adding libvirt list, as this is what sparked my investigations so far today] On 09/13/2016 04:36 PM, Eric Blake wrote: > One other possibility that distros can do is to prime a config.site > file, with $ac_cv_header_sys_types_h_makedev=no, to forcefully bypass > the configure check that is normally done where <sys/types.h> would > warn. It has to be in config.site, because non-glibc systems do not > want to do that. Okay, I have confirmed that this prime-the-cache idea DOES work, using libvirt.git commit 419bc8cf (one commit prior to d53fa838 which installed a hack into libvirt to force the use of -Werror for the duration of AC_HEADER_MAJOR [1]). By itself, './configure' succeeds but leaves MAJOR_IN_SYSMACROS undefined, which results in a build failure later in libvirt; but when run as './configure ac_cv_header_sys_types_h_makedev=no', MAJOR_IN_SYSMACROS gets defined and the build succeeds. I want to remove the libvirt hack (not all compilers understand -Werror, even if libvirt is only ever built by gcc or clang), and my experiment was enough to prove that: 1. distros that provide a config.site file can use this file to avoid the problem, even for packages that have not yet rebuilt with a new-enough autoconf to fix the issue 2. autoconf and gnulib should indeed be fixed to probe for <sys/sysmacros.h> _prior_ to probing for whether makedev() exists in <sys/type.h>, rather than the 2.69 logic of only checking for <sys/sysmacros.h> if makedev() was not found earlier. Of course, the libvirt hack should not be reverted until autoconf and gnulib have the final solution in place. > > Meanwhile, even without an autoconf release scheduled, I am currently > working on patching the existing autoconf macro and documentation to > match the current situation. It sounds to me like we want the following > logic: > > If <sys/sysmacros.h> exists and defines major(), use that, > else if <sys/mkdev.h> exists, use that, > else if <sys/types.h> defines major(), use that, > else not available The current autoconf code assumes that if <sys/sysmacros.h> exists, then it defines major()/minor()/makedev(); I think that assumption is still safe. Where autoconf was wrong was that it was not even probing for the existence of <sys/sysmacros.h> if it found that <sys/types.h> was enough to pollute the namespace with the three macros. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Autoconf mailing list Autoconf@xxxxxxx https://lists.gnu.org/mailman/listinfo/autoconf