[libvirt] new warning from ar on rawhide systems

When compiling libvirt (and probably other packages) on Fedora rawhide systems, I'm seeing a new warning message on every link line. # rpm -q libtool gcc binutils libtool-2.4.6-1.fc23.x86_64 gcc-5.0.0-0.16.fc23.x86_64 binutils-2.25-6.fc23.x86_64 For an example of the warning during a 'make V=1':
libtool: link: rm -fr .libs/libvirt_driver_qemu_impl.a .libs/libvirt_driver_qemu_impl.la libtool: link: ar cru .libs/libvirt_driver_qemu_impl.a qemu/.libs/libvirt_driver_qemu_impl_la-qemu_agent.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_capabilities.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_command.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_domain.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_cgroup.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_hostdev.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_hotplug.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_conf.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_process.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_migration.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_monitor.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_monitor_text.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_monitor_json.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_driver.o qemu/.libs/libvirt_driver_qemu_impl_la-qemu_interface.o ar: `u' modifier ignored since `D' is the default (see `U') libtool: link: ranlib .libs/libvirt_driver_qemu_impl.a
Reading 'man ar', it looks like a relatively new binutils invention, one that Fedora chose to flip on by default, but also one that might be worth using even when ar is built with 'U' rather than 'D' as the default:
D Operate in deterministic mode. When adding files and the archive index use zero for UIDs, GIDs, timestamps, and use consistent file modes for all files. When this option is used, if ar is used with identical options and identical input files, multiple runs will create identical output files regardless of the input files' owners, groups, file modes, or modification times.
If binutils was configured with --enable-deterministic-archives, then this mode is on by default. It can be disabled with the U modifier, below.
Is it worth teaching libtool to change ARFLAGS to be 'crD' instead of 'cru' when it is detected that ar is new enough to support deterministic libraries, in part to shut up the warning message being printed on every single libtool link line? (Note that I would explicitly include 'D', because even though Fedora chose to make 'D' the default, other distros may choose to make 'U' the default). Or conversely, do we want ARFLAGS to be 'cruU', to force non-deterministic mode, since any speedups made possible by timestamp comparison ('u') are only possible in non-deterministic mode? Does the use of 'u' buy us much measurable time when repeatedly and incrementally linking large libraries, where the new 'D' mode is forced to link everything instead of just the new inputs? And of course there's the question of how easy is it to detect that ar is new enough to understand the 'D'/'U' dichotomy? Is this something I should redirect to automake instead of libtool? -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

On Fri, 27 Feb 2015, Eric Blake wrote:
Is it worth teaching libtool to change ARFLAGS to be 'crD' instead of 'cru' when it is detected that ar is new enough to support deterministic libraries, in part to shut up the warning message being printed on every single libtool link line? (Note that I would explicitly include 'D', because even though Fedora chose to make 'D' the default, other distros may choose to make 'U' the default). Or conversely, do we want ARFLAGS to be 'cruU', to force non-deterministic mode, since any speedups made possible by timestamp comparison ('u') are only possible in non-deterministic mode? Does the use of 'u' buy us much measurable time when repeatedly and incrementally linking large libraries, where the new 'D' mode is forced to link everything instead of just the new inputs? And of course there's the question of how easy is it to detect that ar is new enough to understand the 'D'/'U' dichotomy?
It seems that -D mode only works if the archive is created from scratch, or the argument file list supplied is the same (including order) each time. This does not seem to be compatible with the options -ru which update the archive only if the provided file is newer, and may also be used in an incremental mode of operation (e.g. just one file is re-compiled). Regardless, 'cru' is portable other toolchains/systems whereas -D seems to be limited to binutils.
Is this something I should redirect to automake instead of libtool?
Perhaps so since it seems that Automake is in the driver's seat here. Bob -- Bob Friesenhahn bfriesen@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/ GraphicsMagick Maintainer, http://www.GraphicsMagick.org/
participants (2)
-
Bob Friesenhahn
-
Eric Blake