[libvirt] [PATCH] tests: Avoid double linking some libraries
mprivozn at redhat.com
Thu Jul 3 19:16:06 UTC 2014
On 03.07.2014 20:34, John Ferlan wrote:
> On 07/03/2014 12:47 PM, John Ferlan wrote:
>> On 07/03/2014 08:44 AM, John Ferlan wrote:
>>> On 07/03/2014 08:34 AM, Michal Privoznik wrote:
>>>> The problem is, since 614581f32b domaincapstest is linked with
>>>> $(LDADDS) by default. Then, since 94e3f23e8a7 the test may be
>>>> conditionally linked with $(qemu_LDADDS) which already contains
>>>> $(LDADDS). And some linkers doesn't cope with this nicely:
>>>> CCLD domaincapstest
>>>> ../src/libvirt_probes.o:(.probes+0x0): multiple definition of `libvirt_event_poll_add_handle_semaphore'
>>>> ../src/libvirt_probes.o:(.probes+0x0): first defined here
>>>> ../src/libvirt_probes.o:(.probes+0x2): multiple definition of `libvirt_event_poll_update_handle_semaphore'
>>>> ../src/libvirt_probes.o:(.probes+0x2): first defined here
>>>> ../src/libvirt_probes.o:(.probes+0x4): multiple definition of `libvirt_event_poll_remove_handle_semaphore'
>>>> ../src/libvirt_probes.o:(.probes+0x4): first defined here
>>>> ../src/libvirt_probes.o:(.probes+0x6): multiple definition of `libvirt_event_poll_dispatch_handle_semaphore'
>>>> ../src/libvirt_probes.o:(.probes+0x6): first defined here
>>>> And so on.
>>>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>>>> I'd push this as build breaker, but there's another approach to consider,
>>>> create qemu_BARE_LDADDS and fill it with the qemu_impl, etc. Then, let:
>>>> qemu_LDADDS = $(qemu_BARE_LDADDS) $(LDADDS)
>>>> What's your preference?
>>> What is below works for me - so to that degree I'd ACK. However, if
>>> someone had a preference for whatever it is you're describing as an
>>> option, then I suppose that would be fine too. Makefile's are mostly
>>> black magic to me :-)
>> Let me amend my last statement - something is not quite working...
>> I tried to apply this patch to other work I'm doing and things fell
>> apart with missing symbols. If I try to reset my environment back to
>> the top of the tree, then the build seems to work fine... If I apply
>> this patch, then things fall apart in the same way.
>> It's kind of difficult to describe, but there seems to be some
>> dependency that isn't quite right or doesn't get reset if this patch is
>> removed from the environment.
>> I think the following steps make things reproducible.
>> 1. Start with a "clean" top...
>> 2. Build, will get the multiple definition failure...
>> 3. Apply this patch (git am)
>> 4. Build - get lots of failures
>> 5. git reset HEAD^
>> 6. git co tests/Makefile.am
>> 7. Build cleanly
>> 8. git am the first change from my series
>> 9. Build, results from step2
>> 10. Repeat steps 3->7 for each/all of the patches from my series.
>> I'm still wondering why steps 3 & 4 worked for me before - perhaps
>> because I was testing something intermediary.
>> Like I said before these Makefiles are black magic to me!
> The following works for me:
> $ git diff tests/Makefile.am
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index a262c7b..2441742 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -833,12 +833,12 @@ vircaps2xmltest_LDADD = $(LDADDS)
> domaincapstest_SOURCES = \
> domaincapstest.c testutils.h testutils.c
> -domaincapstest_LDADD = $(LDADDS)
> if WITH_QEMU
> domaincapstest_SOURCES += testutilsqemu.c testutilsqemu.h
> -domaincapstest_LDADD += $(qemu_LDADDS)
> -endif WITH_QEMU
> +domaincapstest_LDADD = $(qemu_LDADDS)
> +else ! WITH_QEMU
> +domaincapstest_LDADD = $(LDADDS)
> +endif ! WITH_QEMU
> if WITH_LIBVIRTD
> libvirtdconftest_SOURCES = \
> Not sure if it's the "right" solution, but I'm at least able to avoid
> the cycle of apply, build, remove, build.
The problem is, I've unintentionally omitted one qemu_LDADDS change:
@@ -1055,7 +1056,7 @@ if WITH_QEMU
securityselinuxlabeltest_SOURCES = \
securityselinuxlabeltest.c testutils.h testutils.c \
-securityselinuxlabeltest_LDADD = $(qemu_LDADDS) $(SELINUX_LIBS)
+securityselinuxlabeltest_LDADD = $(qemu_LDADDS) $(LDADDS) $(SELINUX_LIBS)
securityselinuxlabeltest_DEPENDENCIES = libsecurityselinuxhelper.la \
With this everything should be working as expected. I'll rather post it
More information about the libvir-list