Hi Jordan
On Sat, Jan 20, 2024 at 01:47:58AM -0800, Jordan Justen wrote:
> On 2024-01-19 12:24:24, Stefan Dirsch wrote:
> > Hi Jordan
> >
> > Thanks for digging into this!
> >
> > On Fri, Jan 19, 2024 at 12:10:37PM -0800, Jordan Justen wrote:
> > > On 2024-01-18 04:37:52, Stefan Dirsch wrote:
> > > > Hi
> > > >
> > > > I noticed that with version 23.3.x Mesa no longer can be built with
> > > > python
> > > > 2.6. It still worked with Mesa 23.2.1.
> > >
> > > As mentioned in other emails, this was typo where 3.6 was intended.
> > >
> > > >
> > > > It fails with
> > > >
> > > > [ 95s] Traceback (most recent call last):
> > > > [ 95s] File "../src/intel/genxml/gen_bits_header.py", line 23, in
> > > > <module>
> > > > [ 95s] import intel_genxml
> > > > [ 95s] File
> > > > "/home/abuild/rpmbuild/BUILD/mesa-23.3.3/src/intel/genxml/intel_
> > > > genxml.py", line 5
> > > > [ 95s] from __future__ import annotations
> > > > [ 95s] ^
> > > > [ 95s] SyntaxError: future feature annotations is not defined
> > > >
> > >
> > > I guess this code first appeared in Dylan's:
> > >
> > > 4fd2e15855d ("intel/genxml: add type annotations to gen_sort_tags.py")
> > >
> > > and then became part of the standard tests a few commits later in:
> > >
> > > 1f0a0a46d97 ("meson: run genxml sort tests")
> > >
> > > back in Oct 2022. So, I guess at that point 'ninja test' would have
> > > failed with Python 3.6.
> > >
> > > Then, I suppose I propagated this to being used on every build in:
> > >
> > > 0495f952d48 ("intel/genxml: Add genxml_import.py script")
> > >
> > > in Sept 2023.
> >
> > Thanks. This explains why I've found this code already in older releases,
> > but
> > it didn't fail for me yet. You said tests. Is this just a test, I could
> > disable (as dirty hack)? I was assuming it would generate code ...
>
> In 0495f952d48, I moved in to a common file, and essentially, now it's
> used by our script that runs during the build in addition to the test.
>
> It was "fun" finding a way to get python 3.6 :), but after that, I
> think I found a way to make Python 3.6 work. I guess you can try it
> out:
>
> https://gitlab.freedesktop.org/jljusten/mesa/-/commits/intel-genxml-python3.6
>
> In my light testing, Python 3.6 through 3.13 seemed to work. Python
> 3.5 did *not* work.
Wow! Thanks a lot! Indeed these two patches fix this build issue for me! :-)
In addition I needed to add the attached patch to fix some more errors I saw
with a python 3.6 build. With that I can build again Mesa 23.3.3.
Thanks,
Stefan
Public Key available
------------------------------------------------------
Stefan Dirsch (Res. & Dev.) SUSE Software Solutions Germany GmbH
Tel: 0911-740 53 0 Frankenstraße 146
FAX: 0911-740 53 479 D-90461 Nürnberg
http://www.suse.de Germany
----------------------------------------------------------------
Geschäftsführer: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
(HRB 36809, AG Nürnberg)
----------------------------------------------------------------
--- mesa-23.3.3/src/nouveau/nvidia-headers/class_parser.py.orig 2024-01-20 12:47:36.464476669 +0100
+++ mesa-23.3.3/src/nouveau/nvidia-headers/class_parser.py 2024-01-20 13:04:30.212851443 +0100
@@ -9,6 +9,16 @@
from mako.template import Template
+def removeprefix(s, prefix):
+ if s.startswith(prefix):
+ return s[len(prefix):]
+ return s
+
+def removesuffix(s, suffix):
+ if s.endswith(suffix):
+ return s[:-len(suffix)]
+ return s
+
METHOD_ARRAY_SIZES = {
'BIND_GROUP_CONSTANT_BUFFER' : 16,
'CALL_MME_DATA' : 256,
@@ -273,7 +283,7 @@
if ":" in list[2]:
state = 1
elif teststr in list[1]:
- curmthd.field_defs[curfield][list[1].removeprefix(teststr)] = list[2]
+ curmthd.field_defs[curfield][removeprefix(list[1], teststr)] = list[2]
else:
state = 1
@@ -283,7 +293,7 @@
if ("0x" in list[2]):
state = 1
else:
- field = list[1].removeprefix(teststr)
+ field = removeprefix(list[1], teststr)
bitfield = list[2].split(":")
curmthd.field_name_start[field] = bitfield[1]
curmthd.field_name_end[field] = bitfield[0]
@@ -304,13 +314,13 @@
is_array = 0
if (':' in list[2]):
continue
- name = list[1].removeprefix(teststr)
+ name = removeprefix(list[1], teststr)
if name.endswith("(i)"):
is_array = 1
- name = name.removesuffix("(i)")
+ name = removesuffix(name, "(i)")
if name.endswith("(j)"):
is_array = 1
- name = name.removesuffix("(j)")
+ name = removesuffix(name, "(j)")
x = method()
x.name = name
x.addr = list[2]
@@ -336,8 +346,8 @@
clheader = os.path.basename(args.in_h)
nvcl = clheader
- nvcl = nvcl.removeprefix("cl")
- nvcl = nvcl.removesuffix(".h")
+ nvcl = removeprefix(nvcl, "cl")
+ nvcl = removesuffix(nvcl, ".h")
nvcl = nvcl.upper()
nvcl = "NV" + nvcl
--- mesa-23.3.3/src/freedreno/registers/gen_header.py.orig 2024-01-20 14:01:30.261999839 +0100
+++ mesa-23.3.3/src/freedreno/registers/gen_header.py 2024-01-20 14:01:57.678558692 +0100
@@ -781,7 +781,7 @@ def main():
parser.add_argument('--rnn', type=str, required=True)
parser.add_argument('--xml', type=str, required=True)
- subparsers = parser.add_subparsers(required=True)
+ subparsers = parser.add_subparsers()
parser_c_defines = subparsers.add_parser('c-defines')
parser_c_defines.set_defaults(func=dump_c_defines)