[Scons-dev] code fails on scons master with python3

Neal Becker ndbecker2 at gmail.com
Tue Jun 13 11:07:52 EDT 2017


Problem seems to be
        RPATH = [Literal(':'.join([ORIGIN + x for x in 
':'.join([MKLPATH]).split(':')]))]
        print ("RPATH:", RPATH)
        libs3 = [MKLLIB, 'm']
        Default (env.SharedObject (target='mkl'+OBJ_SUFFIX, source='mkl.cc', 
SHLIBPREFIX='', LIBS=libs3))
        Default (env.SharedLibrary (target='mkl'+EXT_SUFFIX, 
source='mkl'+OBJ_SUFFIX, SHLIBPREFIX='', LIBS=libs3, RPATH=RPATH))

That last line seems to trigger a call to hash(RPATH), which fails - it 
seems RPATH is list and not hashable.

The older version of scons on which my port is based doesn't seem to do 
this.  If I call hash(RPATH) my version will fail also, but if I don't 
intentionally write "hash(RPATH)", the code succeeds.

But it would seem then that Literal is broken.

Bill Deegan wrote:

> Neal,
> 
> Could you create a small SConstruct which demonstrates the issue?
> Or even.. a pull request with a fix.. ;)
> 
> -Bill
> 
> On Tue, Jun 13, 2017 at 10:25 AM, Neal Becker
> <ndbecker2 at gmail.com> wrote:
> 
>> Bill Deegan wrote:
>>
>> > Can you run with --debug=stacktrace and post the output?
>> >
>> > Thanks,
>> > -Bill
>> >
>> > On Tue, Jun 13, 2017 at 8:20 AM, Neal Becker
>> > <ndbecker2 at gmail.com> wrote:
>> >
>> >> This code is failing:
>> >>         RPATH = [Literal(':'.join([ORIGIN + x for x in
>> >> ':'.join([MKLPATH]).split(':')]))]
>> >>
>> >> with error:
>> >> scons: *** [mkl.cpython-35m-x86_64-linux-gnu.so] TypeError `unhashable
>> >> type:
>> >> 'Literal'' trying to evaluate `${_concat(RPATHPREFIX, RPATH,
>> RPATHSUFFIX,
>> >> __env__)}'
>> >>
>> >> But this code succeeds on my own (old) port of scons to python3
>> >>
>> >> _______________________________________________
>> >> Scons-dev mailing list
>> >> Scons-dev at scons.org
>> >> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>> >>
>> scons: *** [mkl.cpython-35m-x86_64-linux-gnu.so] TypeError `unhashable
>> type:
>> 'Literal'' trying to evaluate `${_concat(RPATHPREFIX, RPATH, RPATHSUFFIX,
>> __env__)}'
>> scons: internal stack trace:
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Job.py", line
>> 199, in start
>>     task.prepare()
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/
>> Script/Main.py",
>> line 175, in prepare
>>     return SCons.Taskmaster.OutOfDateTask.prepare(self)
>>   File
>>   "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Taskmaster.py",
>> line 176, in prepare
>>     self.exception_raise()
>>   File
>>   "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Taskmaster.py",
>> line 551, in _exception_raise
>>     exec("raise exc_value.with_traceback(exc_traceback)")
>>   File "<string>", line 1, in <module>
>>   File
>>   "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Taskmaster.py",
>> line 971, in next_task
>>     task.make_ready()
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/
>> Script/Main.py",
>> line 309, in make_ready
>>     SCons.Taskmaster.OutOfDateTask.make_ready(self)
>>   File
>>   "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Taskmaster.py",
>> line 406, in make_ready_current
>>     t.disambiguate().make_ready()
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Node/FS.py",
>> line
>> 3024, in make_ready
>>     self.get_binfo()
>>   File "/home/nbecker/scons-
>> dev/bootstrap/src/engine/SCons/Node/__init__.py", line 1136, in get_binfo
>>     binfo.bactsig = SCons.Util.MD5signature(executor.get_contents())
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Executor.py",
>> line 467, in get_contents
>>     for action in action_list])
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Executor.py",
>> line 467, in <listcomp>
>>     for action in action_list])
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Action.py",
>> line
>> 477, in get_contents
>>     result = self.get_presig(target, source, env)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Action.py",
>> line
>> 1213, in get_presig
>>     return b"".join([bytes(x.get_contents(target, source, env)) for x in
>> self.list])
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Action.py",
>> line
>> 1213, in <listcomp>
>>     return b"".join([bytes(x.get_contents(target, source, env)) for x in
>> self.list])
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Action.py",
>> line
>> 477, in get_contents
>>     result = self.get_presig(target, source, env)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Action.py",
>> line
>> 1054, in get_presig
>>     return c.get_presig(self, target, source, env)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Action.py",
>> line
>> 906, in get_presig
>>     return env.subst_target_source(cmd, SUBST_SIG, target, source)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/
>> Environment.py",
>> line 514, in subst
>>     return SCons.Subst.scons_subst(string, self, raw, target, source,
>> gvars,
>> lvars, conv)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 558, in scons_subst
>>     result = ss.substitute(strSubst, lvars)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 512, in substitute
>>     result = _dollar_exps.sub(sub_match, args)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 511, in sub_match
>>     return self.conv(self.expand(match.group(1), lvars))
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 477, in expand
>>     return self.substitute(s, lv)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 512, in substitute
>>     result = _dollar_exps.sub(sub_match, args)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 511, in sub_match
>>     return self.conv(self.expand(match.group(1), lvars))
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 477, in expand
>>     return self.substitute(s, lv)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 512, in substitute
>>     result = _dollar_exps.sub(sub_match, args)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 511, in sub_match
>>     return self.conv(self.expand(match.group(1), lvars))
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 477, in expand
>>     return self.substitute(s, lv)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 512, in substitute
>>     result = _dollar_exps.sub(sub_match, args)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 511, in sub_match
>>     return self.conv(self.expand(match.group(1), lvars))
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 451, in expand
>>     raise_exception(e, lvars['TARGETS'], s)
>>   File "/home/nbecker/scons-dev/bootstrap/src/engine/SCons/Subst.py",
>>   line
>> 55, in raise_exception
>>     raise SCons.Errors.BuildError(target[0], msg)
>>
>> _______________________________________________
>> Scons-dev mailing list
>> Scons-dev at scons.org
>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>




More information about the Scons-dev mailing list