On 11/25/19 3:34 PM, Rob Boehne wrote:
I’m porting to SPARC  Solaris a project that uses Scons in Python3 – (we use it widely on Sparc & Intel Solaris with python 2.7) and I’m seeing what appears to be a Python3 porting problem when an Environment object is created:

(python-env-lhasa) robb@lhasa:/devlocal/robb/apdfl-18box/pdfl18_all/DevTests (sparc_stuff)$ scons BUILD_64_BIT=true STAGE=Debug TESTS=smoke

scons: Reading SConscript files ...

Building for Debug

TypeError: cannot use a string pattern on a bytes-like object:

  File "/devlocal/robb/apdfl-18box/pdfl18_all/DevTests/SConstruct", line 538:

     OS_LEVEL='')

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Environment.py", line 992:

     apply_tools(self, tools, toolpath)

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Environment.py", line 107:

     env.Tool(tool)

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Environment.py", line 1799:

     tool(self)

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Tool/__init__.py", line 303:

     self.generate(env, *args, **kw)

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Tool/default.py", line 40:

     for t in SCons.Tool.tool_list(env['PLATFORM'], env):

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Tool/__init__.py", line 1288:

     cxx_compiler = FindTool(cxx_compilers, env) or cxx_compilers[0]

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Tool/__init__.py", line 1174:

     if t.exists(env):

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Tool/suncxx.py", line 139:

     path, cxx, shcxx, version = get_cppc(env)

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Tool/suncxx.py", line 115:

     path, version = get_package_info(package, pkginfo, pkgchk)

  File "/devlocal/robb/apdfl-18box/python-env-lhasa/lib/python3.7/site-packages/scons/SCons/Tool/suncxx.py", line 79:

     version_match = version_re.search(pkginfo_contents)

(python-env-lhasa) robb@lhasa:/devlocal/robb/apdfl-18box/pdfl18_all/DevTests (sparc_stuff)$

I corrected this by specifying encoding=’utf-8’ to the two subprocess.Popen() calls in  SCons/Tool/suncxx.py

And I **think** that should be fine for Python 2.7 as well.

I haven’t done any SCons development in a long while, but here is a diff.  It should be fairly obvious if this is the right fix.

there's a similar fix that recently went in as commit b907ebd6, which is in master but not released.

I'd personally prefer to run subprocess.Popen with text=True (or for the brief period we still support Python 2.7, universal_newlines instead). Since we *know* we're going to talk to a command that's going to speak text to us - we're going to ask it to tell us the version number, only - it sounds better to let Python handle it rather than let the stdout pipe be opened in binary mode and then have to fuss with encodings.


_______________________________________________
Scons-dev mailing list
Scons-dev@scons.org
https://pairlist2.pair.net/mailman/listinfo/scons-dev

Reply via email to