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
> ([email protected]) 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 [email protected]
>>> 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 [email protected]
>> http://two.pairlist.net/mailman/listinfo/scons-dev
>>
>


--
Pawel Tomulik

_______________________________________________
Scons-dev mailing list
[email protected]
http://two.pairlist.net/mailman/listinfo/scons-dev

Reply via email to