[libvirt] [PATCH] tests: Avoid double linking some libraries

Michal Privoznik 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 :-)
>>>
>>> John
>>
>> 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!
>>
>> John
>>
>
>
> 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.
>
>
> John
>


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 \
          testutilsqemu.h testutilsqemu.c
-securityselinuxlabeltest_LDADD = $(qemu_LDADDS) $(SELINUX_LIBS)
+securityselinuxlabeltest_LDADD = $(qemu_LDADDS) $(LDADDS) $(SELINUX_LIBS)
  securityselinuxlabeltest_DEPENDENCIES = libsecurityselinuxhelper.la \
         ../src/libvirt.la
  endif WITH_QEMU

With this everything should be working as expected. I'll rather post it 
as v2.

Michal




More information about the libvir-list mailing list