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