ex_termbox
ex_termbox copied to clipboard
'mix compile' fails when using Python 3.11
macOS 14.2
$ elixir -v
Erlang/OTP 26 [erts-14.2] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns]
Elixir 1.15.7 (compiled with Erlang/OTP 26)
$ python --version
Python 3.11.6
When running 'mix compile' on a new Elixir project including ratatouille (which depends on ex_termbox):
$ mix compile
==> ex_termbox
cd c_src/termbox && CFLAGS=-fPIC ./waf configure --prefix=. && ./waf
Waf: The wscript in '/Users/tomhead/projects/nrat/deps/ex_termbox/c_src/termbox' is unreadable
Traceback (most recent call last):
File "/Users/tomhead/projects/nrat/deps/ex_termbox/c_src/termbox/.waf3-2.0.14-e67604cd8962dbdaf7c93e0d7470ef5b/waflib/Scripting.py", line 102, in waf_entry_point
set_main_module(wscript)
File "/Users/tomhead/projects/nrat/deps/ex_termbox/c_src/termbox/.waf3-2.0.14-e67604cd8962dbdaf7c93e0d7470ef5b/waflib/Scripting.py", line 142, in set_main_module
Context.g_module=Context.load_module(file_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/tomhead/projects/nrat/deps/ex_termbox/c_src/termbox/.waf3-2.0.14-e67604cd8962dbdaf7c93e0d7470ef5b/waflib/Context.py", line 349, in load_module
code=Utils.readf(path,m='rU',encoding=encoding)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/tomhead/projects/nrat/deps/ex_termbox/c_src/termbox/.waf3-2.0.14-e67604cd8962dbdaf7c93e0d7470ef5b/waflib/Utils.py", line 146, in readf
with open(fname,m)as f:
^^^^^^^^^^^^^
ValueError: invalid mode: 'rUb'
make: *** [c_src/termbox/build/src/libtermbox.a] Error 2
Downgrading Python to 3.10 allows 'mix compile' to complete successfully.
I think this is related to the following issue, which mentions that support for the deprecated 'U' flag was removed in v3.11:
@zetetic same issue here. My team can repro the issue ondemand as well with Python v3.11 +, and remediated with python v3.10
Still happening with 3.12.2
NB it also fails for 3.12.4 but for a different reason: here, the imp
module is missing, which is deprecated. So this would be another thing that needs to be fixed.
Looks like this is an error from Termbox itself. This repo is just the bindings for Termbox in Elixir. The last update to Termbox was 6 years ago. Likely the issue should be raised there, but I doubt they will update it for the newer versions of Python. Link to Termbox repo https://github.com/nsf/termbox
The issue is that Termbox is using waf version 2.0.14. It looks like this issue has been fixed in waf 2.1.2: https://gitlab.com/ita1024/waf/blob/master/ChangeLog
I've opened an issue in termbox: https://github.com/nsf/termbox/issues/136