Make check failures in inband on Cygwin

I am getting make check failures in usrp/host/lib/inband on Cygwin (see
below). This happens with the latest trunk as well as with earlier
revisions of the trunk. Is this a reflection of work in progress or
should
this be working?

If this should work and only fails on Cygwin, I will to try to chase it
down, but any hints on where to start would be appreciated.

Program output showing error messages follows.

– Don W.

make[6]: Entering directory `/home/Don/gnuradio/usrp/host/lib/inband’
…E.E.E.E.E.E

!!!FAILURES!!!
Test Results:
Run: 8 Failures: 0 Errors: 6

  1. test: qa_inband_usrp_server::test_open_close (E)
    uncaught exception of type mbe_mblock_failed
  • Message block failed: top
  1. test: qa_inband_usrp_server::test_chan_allocation (E)
    uncaught exception of type mbe_mblock_failed
  • Message block failed: qa_alloc_top
  1. test: qa_inband_usrp_server::test_chan_deallocation (E)
    uncaught exception of type mbe_mblock_failed
  • Message block failed: qa_dealloc_top
  1. test: qa_inband_usrp_server::test_tx (E)
    uncaught exception of type mbe_mblock_failed
  • Message block failed: top
  1. test: qa_inband_usrp_server::test_rx (E)
    uncaught exception of type mbe_mblock_failed
  • Message block failed: top
  1. test: qa_inband_usrp_server::test_cs (E)
    uncaught exception of type mbe_mblock_failed
  • Message block failed: top

FAIL: test_inband.exe

1 of 1 tests failed

make[6]: *** [check-TESTS] Error 1
make[6]: Leaving directory `/home/Don/gnuradio/usrp/host/lib/inband’

These pass on unix machines, I’ve never tried running any of the inband
stuff in cygwin… but I don’t see how it would change. If the mblock
QA code passes, I would expect the inband QA code to pass in cygwin.
It’s simply utilizing m-blocks.

Can you go to the ‘mblock’ directory and run a ‘make check’ ?

In short, nothing will be affected by inband failing to pass a check at
the current point in time if you’re not using any of the inband code…
which I don’t think anyone else in the world other than developers are.

  • George

Thanks, George.

These pass on unix machines, I’ve never tried running any of the inband
stuff in cygwin… but I don’t see how it would change. If the mblock QA
code passes, I would expect the inband QA code to pass in cygwin. It’s
simply utilizing m-blocks.

Can you go to the ‘mblock’ directory and run a ‘make check’ ?

Yes, make check works in the mblock directory.

In short, nothing will be affected by inband failing to pass a check at
the current point in time if you’re not using any of the inband code…
which I don’t think anyone else in the world other than developers are.

Ok. The only thing I lose is ‘make check’ on everything after inband.

I have found what is happening: It appears (to the linker, at least)
that
test_inband.exe depends on libusrp_inband-qa.dll but not on
libusrp_inband.dll. But the code to initialize s_ALL_PROTOCOL_CLASSES
(in
mb_protocol_class.cc) is contained in usrp_{server,interface}_mbh.cc
which
is in libusrp_inband.dll. Since libusrp_inband.dll is not used (as far
as
the linker can determine) by test_inband.exe, s_ALL_PROTOCOL_CLASSES is
never initialized. The “uncaught exception of type mbe_mblock_failed”
is a
result (I don’t understand how) of the ‘throw’ on line 40 of mb_port.cc
(after mb_protocol_class_lookup failed).

Somehow we need to be sure that any code that relies on initializations
performed in libusrp_inband.dll actually references libusrp_inband.dll
in a
way that the linker can recognize.

Note that adding $(BUILT_SOURCES) to libusrp_inband_la_SOURCES helps but
is
not enough—apparently there is something else in libusrp_inband.dll
that
is needed.

– Don W.