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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---

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

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]