On Wed, Feb 13, 2013 at 4:44 PM, Tom Rondeau <[email protected]> wrote:

> On Wed, Feb 13, 2013 at 4:10 PM, Eric B <[email protected]> wrote:
>
>> I'm using the gr-modtool that is now included with gnuradio to add a
>> block to an existing module that was created with an earlier version of
>> gr-modtool.py. The swig.i file originally looks like:
>>
>> %include "gnuradio.i"
>> %include "testmod_swig_doc.i"
>>
>> {
>> #include "testmod_testblock.h"
>> }
>>
>> GR_SWIG_BLOCK_MAGIC(testmod,testblock);
>> %include "testmod_testblock.h"
>>
>>
>> After adding my new block the swig.i looks like:
>>
>>
>> %include "gnuradio.i"
>> %include "testmod_swig_doc.i"
>>
>> {
>> #include "testmod_testblock.h"
>> #include "testmod_testblock2.h"
>> }
>>
>> GR_SWIG_BLOCK_MAGIC(testmod,testblock);
>> %include "testmod_testblock.h"
>>
>> %include "testmod_testblock2.h"
>> GR_SWIG_BLOCK_MAGIC(testmod, testblock2);
>>
>> I can build and install the module just fine but when I got to execute a
>> flowgraph with testblock2 in it I get these errors:
>>
>> Traceback (most recent call last):
>>   File "/home/user/top_block.py", line 52, in <module>
>>     tb = top_block()
>>   File "/home/user/top_block.py", line 34, in __init__
>>     self.testmod_testblock2_0 = testmod.testblock2()
>> AttributeError: 'module' object has no attribute 'testblock2'
>> Error in sys.excepthook:
>> Traceback (most recent call last):
>>   File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 64,
>> in apport_excepthook
>>     from apport.fileutils import likely_packaged, get_recent_crashes
>>   File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 4, in
>> <module>
>>     from apport.report import Report
>>   File "/usr/lib/python2.7/dist-packages/apport/report.py", line 28, in
>> <module>
>>     import problem_report
>>   File "/usr/lib/python2.7/dist-packages/problem_report.py", line 14, in
>> <module>
>>     import zlib, base64, time, sys, gzip, struct, os
>>   File "/usr/lib/python2.7/gzip.py", line 10, in <module>
>>     import io
>>   File "/usr/lib/python2.7/io.py", line 51, in <module>
>>     import _io
>> TypeError: type '_io._IOBase' participates in gc and is a base type but
>> has inappropriate tp_free slot
>>
>> Original exception was:
>> Traceback (most recent call last):
>>   File "/home/user/top_block.py", line 52, in <module>
>>     tb = top_block()
>>   File "/home/user/top_block.py", line 34, in __init__
>>     self.testmod_testblock2_0 = testmod.testblock2()
>> AttributeError: 'module' object has no attribute 'testblock2'
>>
>>
>> Simply reversing the order of the last two lines (ie. GR_SWIG_BLOCK_MAGIC
>> comes BEFORE %include) fixes this and allows it to run correctly. This
>> isn't very intuitive from the error and it would be great if gr-modtool
>> could be updated to correct this.
>>
>
> Is this for the v3.6 or v3.7 API? I'm assuming this is for 3.6 (based off
> master). And this might finally clear up some confusion we've been having
> regarding this.
>
> In the new 3.7, the ordering should absolutely be:
>
> %import <thing's header>
> GR_SWIG_BLOCK_MAGIC2(thing)
>
> It sounds like this is the opposite for the 3.6 way of doing things (which
> we normally don't do this way and instead create a .i file for each block
> and handle things that way). But I guess this is why we named it MAGIC...
>
> Tom
>
>
Sorry, I should have mentioned I'm using the build-gnuradio script on
Ubuntu for my installation. I believe that is 3.6 API. Does this
mean the modules will need to be updated when moving to a 3.7 install in
the future?

Eric
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to