[Scons-users] [Scons-dev] howto debug configure

Paweł Tomulik ptomulik at meil.pw.edu.pl
Thu Apr 3 14:57:25 EDT 2014


William,

Neal is the original author of this thread. I just replied with a
possible solution. The PR report I mentioned contains an example. Let me
just paste it here:

<code>

# SConstruct
#
# The CheckHello should return 'yes' if everything works fine. Othervise it
# returns 'failed'.
#
def hello(target, source, env):
import traceback
try:
print 'hello!\n' # this breaks the script
with open(env.subst('$TARGET', target = target),'w') as f:
f.write('yes')
except:
# write to file, as stdout/stderr is broken
traceback.print_exc(file=open('traceback','w'))
return 0

def CheckHello(context):
import sys
context.Display('Checking whether hello works... ')
stat,out = context.TryAction(hello,'','.in')
if stat and out:
context.Result(out)
else:
context.Result('failed')
return out

env = Environment()
cfg = Configure(env)

cfg.AddTest('CheckHello', CheckHello)
cfg.CheckHello()

env = cfg.Finish()

</code>

Few words of explanation:

The above code raises "TypeError: unicode argument expected, got 'str'"
in the line "print ....". Normally such an exception is eaten by SConf
machinery and it's quite hard to debug. Above I just write its backtrace
to 'traceback' file, as stdout/stderr is captured by SConf.Streamer
which is broken. The backtrace points to line 183 of SCons/SConf.py:

Traceback (most recent call last):
File "SConstruct", line 9, in hello
print 'hello!\n' # this breaks the script
File "/usr/lib/scons/SCons/SConf.py", line 183, in write
self.s.write(str)


Here the "self.s" object is an instance of io.StringIO. On python 2.x
io.StringIO accepts only unicode, and doesn't accept str - and this is
main reason why this code fails.

W dniu 03.04.2014 19:40, William Deegan pisze:

> Pawel,

>
> Likely you’re better off bringing such questions to the users mailing
> list. The devel mailing list is meant to discuss the internal
> development of SCons. I’m cc’ing that list. I believe there is a
> config.log generated when you run the configure context.
>
> Also, can you create a small reproducible test case for this? That
> way we can try it out and see what’s going on.
>
>
> -Bill
>
> On April 3, 2014 at 2:13:01 AM, Paweł Tomulik
> (ptomulik at meil.pw.edu.pl) wrote:
>> W dniu 06.09.2013 19:47, Neal Becker pisze:
>>> I have a lot working, but not configure. I don't know how to
>>> debug it.
>>>
>>> even with --debug=stacktrace, the stack trace is not useful. I
>>> don't have any idea where this error is coming from:
>>>
>>> file ,line 92: Configure(confdir = .sconf_temp) scons: Configure:
>>> Checking for C header file unuran.h... .sconf_temp/conftest_0.c
>>> <- | |#include "unuran.h" | | scons: Configure: Caught exception
>>> while building ".sconf_temp/conftest_0.c":
>>>
>>> Traceback (most recent call last): File
>>> "/home/nbecker/scons-replaced-by-scons-
>>> p3/bootstrap/src/engine/SCons/Job.py", line 201, in start
>>> task.execute() File "/home/nbecker/scons-replaced-by-scons-
>>> p3/bootstrap/src/engine/SCons/SConf.py", line 352, in execute
>>> raise e TypeError: unicode argument expected, got 'str'
>>>
>>> _______________________________________________ Scons-dev mailing
>>> list Scons-dev at scons.org
>>> http://two.pairlist.net/mailman/listinfo/scons-dev
>>
>> Hi,
>>
>> I think, this is a bug in SCons. I've addressed it in BitBucket PR
>> 126: https://bitbucket.org/scons/scons/pull-request/126/
>>
>> Best Regards!
>>
>> -- Pawel Tomulik
>>
>> _______________________________________________ Scons-dev mailing
>> list Scons-dev at scons.org
>> http://two.pairlist.net/mailman/listinfo/scons-dev
>>
>


--
Pawel Tomulik

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://four.pairlist.net/pipermail/scons-users/attachments/20140403/bcab12a3/attachment.htm


More information about the Scons-users mailing list