Re: [PATCH v3 0/2] Don't create Python bytecode when building the kernel

Mauro Carvalho Chehab
2025-04-24T07:44:57Z

Em Thu, 24 Apr 2025 15:26:48 +0800
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> escreveu:

> Em Thu, 24 Apr 2025 11:07:05 +0900
> Akira Yokosawa <akiyks@gmail.com> escreveu:
>
> > On Wed, 23 Apr 2025 19:31:36 +0300, Andy Shevchenko wrote:
> > > On Wed, Apr 23, 2025 at 06:30:48PM +0900, Akira Yokosawa wrote:
> > >> On Tue, 22 Apr 2025 10:57:33 +0300, Andy Shevchenko wrote:
> > >>> On Mon, Apr 21, 2025 at 10:35:29AM -0600, Jonathan Corbet wrote:
> > >>>> Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> writes:
> > >
> > > [...]
> > >
> > >>>>> Would it be possible to properly support O= and create pyc / pycache
> > >>>>> inside the object/output dir?
> > >>>>
> > >>>> I have to confess, I've been wondering if we should be treating the .pyc
> > >>>> files like we treat .o files or other intermediate products. Rather
> > >>>> than trying to avoid their creation entirely, perhaps we should just be
> > >>>> sure they end up in the right place and are properly cleaned up...?
> > >>>>
> > >>>> To answer Dmitry's question, it seems that setting PYTHONPYCACHEPREFIX
> > >>>> should do the trick?
> > >>>
> > >>> It's not so easy. The Python is written in a way that it thinks it will never
> > >>> runs object files separately from the source. Hence that variable sets only
> > >>> the folder per script as _home_ for the cache. It's completely unusable. They
> > >>> took it wrong. It still can be _painfully_ used, but it will make Makefiles
> > >>> uglier.
> > >>
> > >> But, PYTHONPYCACHEPREFIX can be set as an environment variable.
> > >>
> > >> For example, try:
> > >>
> > >> export PYTHONPYCACHEPREFIX="$HOME/.cache/__pycache__"
> > >>
> > >> Wouldn't it be good enough for you?
> > >
> > > Of course not. We have _many_ scripts in python in kernel and having a cache
> > > there for _all_ of them is simply WRONG. You never know what clashes can be
> > > there with two complicated enough scripts which may have same module names,
> > > etc.
> > >
> >
> > Interesting...
> >
> > I'm suspecting you replied without having tried the setting...
> >
> > FYI, this is an excerpt from list of .pyc files under __pycache__ after
> > building defconfig kernel and "make htmldocs"; and running
> >
> > $ find . -name *.pyc" -print" under ~/.cache/__pycache__
> > ---------------------------------------------------------------------
> > ./home/.../git/linux/scripts/lib/kdoc/kdoc_files.cpython-312.pyc
> > ./home/.../git/linux/scripts/lib/kdoc/kdoc_parser.cpython-312.pyc
> > ./home/.../git/linux/scripts/lib/kdoc/kdoc_re.cpython-312.pyc
> > ./home/.../git/linux/scripts/lib/kdoc/kdoc_output.cpython-312.pyc
> > [...]
> > ./usr/lib/python3.12/xml/__init__.cpython-312.pyc
> > ./usr/lib/python3.12/xml/parsers/expat.cpython-312.pyc
> > ./usr/lib/python3.12/xml/parsers/__init__.cpython-312.pyc
> > ./usr/lib/python3.12/xml/etree/ElementPath.cpython-312.pyc
> > ./usr/lib/python3.12/xml/etree/__init__.cpython-312.pyc
> > ./usr/lib/python3.12/xml/etree/cElementTree.cpython-312.pyc
> > ./usr/lib/python3.12/xml/etree/ElementTree.cpython-312.pyc
> > ./usr/lib/python3.12/mimetypes.cpython-312.pyc
> > [...]
> > ./usr/lib/python3/dist-packages/sphinx/deprecation.cpython-312.pyc
> > ./usr/lib/python3/dist-packages/sphinx/highlighting.cpython-312.pyc
> > ./usr/lib/python3/dist-packages/sphinx/pycode/ast.cpython-312.pyc
> > ./usr/lib/python3/dist-packages/sphinx/pycode/__init__.cpython-312.pyc
> > ./usr/lib/python3/dist-packages/sphinx/pycode/parser.cpython-312.pyc
> > ./usr/lib/python3/dist-packages/sphinx/config.cpython-312.pyc
> > [...]
> > ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/deprecation.cpython-312.pyc
> > ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/highlighting.cpython-312.pyc
> > ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/pycode/ast.cpython-312.pyc
> > ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/pycode/__init__.cpython-312.pyc
> > ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/pycode/parser.cpython-312.pyc
> > ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/config.cpython-312.pyc
> > [...]
> > -------------------------------------------------------------------------
> >
> > As you see, each of them are stored at a path corresponding to its original
> > .py file. The final part of the excerpt came from me running in-development
> > Sphinx in a python venv with the same PYTHONPYCACHEPREFIX setting.
> >
> > I don't see any possibility of clashes as you mentioned above,
>
> I didn't test it, but it sounds good enough for me. Could you please send
> us a patch on the top of:
>
> https://lore.kernel.org/linux-doc/cover.1745453655.git.mchehab+huawei@kernel.org/T/#t
>
> for us to test it? The idea is to set PYTHONPYCACHEPREFIX only when O=
> is used.

Heh, I did a quick test here with Sphinx build. It Worked!

Patch is after my patch series, and it is just for Sphinx build.

We need something similar for the other places where the script is
used.

Regards,
Mauro

---

[PATCH] docs: Makefile: store __pycache__ at the output directory

Instead of blocking creation of *.pyc cache, store python
cache under Documentation/output/__pycache__

Documentation/output/__pycache__/
├── new_devel
│   └── v4l
│   └── docs
│   ├── Documentation
│   │   └── sphinx
│   │   ├── automarkup.cpython-313.pyc
│   │   ├── kernel_abi.cpython-313.pyc
│   │   ├── kerneldoc.cpython-313.pyc
│   │   ├── kernel_feat.cpython-313.pyc
│   │   ├── kernel_include.cpython-313.pyc
│   │   ├── kfigure.cpython-313.pyc
│   │   ├── load_config.cpython-313.pyc
│   │   ├── maintainers_include.cpython-313.pyc
│   │   ├── rstFlatTable.cpython-313.pyc
│   │   └── translations.cpython-313.pyc
│   └── scripts
│   └── lib
│   ├── abi
│   │   ├── abi_parser.cpython-313.pyc
│   │   └── helpers.cpython-313.pyc
│   └── kdoc
│   ├── kdoc_files.cpython-313.pyc
│   ├── kdoc_output.cpython-313.pyc
│   ├── kdoc_parser.cpython-313.pyc
│   └── kdoc_re.cpython-313.pyc
└── usr
├── lib
│   └── python3.13
│   └── site-packages
│   ├── abrt_exception_handler3.cpython-313.pyc
│   ├── alabaster
│   │   └── __init__.cpython-313.pyc
│   ├── babel
│   │   ├── core.cpython-313.pyc
│   │   ├── dates.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── localedata.cpython-313.pyc
│   │   ├── localtime
│   │   │   ├── _fallback.cpython-313.pyc
│   │   │   ├── _helpers.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   └── _unix.cpython-313.pyc
│   │   ├── messages
│   │   │   ├── catalog.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── mofile.cpython-313.pyc
│   │   │   ├── plurals.cpython-313.pyc
│   │   │   └── pofile.cpython-313.pyc
│   │   ├── plural.cpython-313.pyc
│   │   └── util.cpython-313.pyc
│   ├── chardet
│   │   ├── big5freq.cpython-313.pyc
│   │   ├── big5prober.cpython-313.pyc
│   │   ├── chardistribution.cpython-313.pyc
│   │   ├── charsetgroupprober.cpython-313.pyc
│   │   ├── charsetprober.cpython-313.pyc
│   │   ├── codingstatemachine.cpython-313.pyc
│   │   ├── codingstatemachinedict.cpython-313.pyc
│   │   ├── cp949prober.cpython-313.pyc
│   │   ├── enums.cpython-313.pyc
│   │   ├── escprober.cpython-313.pyc
│   │   ├── escsm.cpython-313.pyc
│   │   ├── eucjpprober.cpython-313.pyc
│   │   ├── euckrfreq.cpython-313.pyc
│   │   ├── euckrprober.cpython-313.pyc
│   │   ├── euctwfreq.cpython-313.pyc
│   │   ├── euctwprober.cpython-313.pyc
│   │   ├── gb2312freq.cpython-313.pyc
│   │   ├── gb2312prober.cpython-313.pyc
│   │   ├── hebrewprober.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── jisfreq.cpython-313.pyc
│   │   ├── johabfreq.cpython-313.pyc
│   │   ├── johabprober.cpython-313.pyc
│   │   ├── jpcntx.cpython-313.pyc
│   │   ├── langbulgarianmodel.cpython-313.pyc
│   │   ├── langgreekmodel.cpython-313.pyc
│   │   ├── langhebrewmodel.cpython-313.pyc
│   │   ├── langrussianmodel.cpython-313.pyc
│   │   ├── langthaimodel.cpython-313.pyc
│   │   ├── langturkishmodel.cpython-313.pyc
│   │   ├── latin1prober.cpython-313.pyc
│   │   ├── macromanprober.cpython-313.pyc
│   │   ├── mbcharsetprober.cpython-313.pyc
│   │   ├── mbcsgroupprober.cpython-313.pyc
│   │   ├── mbcssm.cpython-313.pyc
│   │   ├── resultdict.cpython-313.pyc
│   │   ├── sbcharsetprober.cpython-313.pyc
│   │   ├── sbcsgroupprober.cpython-313.pyc
│   │   ├── sjisprober.cpython-313.pyc
│   │   ├── universaldetector.cpython-313.pyc
│   │   ├── utf1632prober.cpython-313.pyc
│   │   ├── utf8prober.cpython-313.pyc
│   │   └── version.cpython-313.pyc
│   ├── charset_normalizer
│   │   ├── api.cpython-313.pyc
│   │   ├── cd.cpython-313.pyc
│   │   ├── constant.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── legacy.cpython-313.pyc
│   │   ├── md.cpython-313.pyc
│   │   ├── models.cpython-313.pyc
│   │   ├── utils.cpython-313.pyc
│   │   └── version.cpython-313.pyc
│   ├── defusedxml
│   │   ├── common.cpython-313.pyc
│   │   ├── ElementTree.cpython-313.pyc
│   │   └── __init__.cpython-313.pyc
│   ├── _distutils_hack
│   │   └── __init__.cpython-313.pyc
│   ├── docutils
│   │   ├── core.cpython-313.pyc
│   │   ├── frontend.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── io.cpython-313.pyc
│   │   ├── languages
│   │   │   ├── en.cpython-313.pyc
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── nodes.cpython-313.pyc
│   │   ├── parsers
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   └── rst
│   │   │   ├── directives
│   │   │   │   ├── admonitions.cpython-313.pyc
│   │   │   │   ├── body.cpython-313.pyc
│   │   │   │   ├── images.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   ├── misc.cpython-313.pyc
│   │   │   │   ├── parts.cpython-313.pyc
│   │   │   │   └── tables.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── languages
│   │   │   │   ├── en.cpython-313.pyc
│   │   │   │   └── __init__.cpython-313.pyc
│   │   │   ├── roles.cpython-313.pyc
│   │   │   ├── states.cpython-313.pyc
│   │   │   └── tableparser.cpython-313.pyc
│   │   ├── readers
│   │   │   ├── doctree.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   └── standalone.cpython-313.pyc
│   │   ├── statemachine.cpython-313.pyc
│   │   ├── transforms
│   │   │   ├── frontmatter.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── misc.cpython-313.pyc
│   │   │   ├── parts.cpython-313.pyc
│   │   │   ├── references.cpython-313.pyc
│   │   │   ├── universal.cpython-313.pyc
│   │   │   └── writer_aux.cpython-313.pyc
│   │   ├── utils
│   │   │   ├── code_analyzer.cpython-313.pyc
│   │   │   ├── error_reporting.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── math
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   ├── latex2mathml.cpython-313.pyc
│   │   │   │   ├── math2html.cpython-313.pyc
│   │   │   │   ├── tex2mathml_extern.cpython-313.pyc
│   │   │   │   ├── tex2unichar.cpython-313.pyc
│   │   │   │   └── unichar2tex.cpython-313.pyc
│   │   │   ├── punctuation_chars.cpython-313.pyc
│   │   │   ├── roman.cpython-313.pyc
│   │   │   ├── smartquotes.cpython-313.pyc
│   │   │   └── urischemes.cpython-313.pyc
│   │   └── writers
│   │   ├── docutils_xml.cpython-313.pyc
│   │   ├── html4css1
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── html5_polyglot
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── _html_base.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── latex2e
│   │   │   └── __init__.cpython-313.pyc
│   │   └── manpage.cpython-313.pyc
│   ├── idna
│   │   ├── core.cpython-313.pyc
│   │   ├── idnadata.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── intranges.cpython-313.pyc
│   │   └── package_data.cpython-313.pyc
│   ├── imagesize
│   │   ├── imagesize.cpython-313.pyc
│   │   └── __init__.cpython-313.pyc
│   ├── jinja2
│   │   ├── async_utils.cpython-313.pyc
│   │   ├── bccache.cpython-313.pyc
│   │   ├── compiler.cpython-313.pyc
│   │   ├── defaults.cpython-313.pyc
│   │   ├── environment.cpython-313.pyc
│   │   ├── exceptions.cpython-313.pyc
│   │   ├── ext.cpython-313.pyc
│   │   ├── filters.cpython-313.pyc
│   │   ├── _identifier.cpython-313.pyc
│   │   ├── idtracking.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── lexer.cpython-313.pyc
│   │   ├── loaders.cpython-313.pyc
│   │   ├── nodes.cpython-313.pyc
│   │   ├── optimizer.cpython-313.pyc
│   │   ├── parser.cpython-313.pyc
│   │   ├── runtime.cpython-313.pyc
│   │   ├── sandbox.cpython-313.pyc
│   │   ├── tests.cpython-313.pyc
│   │   ├── utils.cpython-313.pyc
│   │   └── visitor.cpython-313.pyc
│   ├── packaging
│   │   ├── _elffile.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── _manylinux.cpython-313.pyc
│   │   ├── _musllinux.cpython-313.pyc
│   │   ├── specifiers.cpython-313.pyc
│   │   ├── _structures.cpython-313.pyc
│   │   ├── tags.cpython-313.pyc
│   │   ├── utils.cpython-313.pyc
│   │   └── version.cpython-313.pyc
│   ├── pygments
│   │   ├── filter.cpython-313.pyc
│   │   ├── filters
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── formatter.cpython-313.pyc
│   │   ├── formatters
│   │   │   ├── html.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── latex.cpython-313.pyc
│   │   │   └── _mapping.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── lexer.cpython-313.pyc
│   │   ├── lexers
│   │   │   ├── c_cpp.cpython-313.pyc
│   │   │   ├── _css_builtins.cpython-313.pyc
│   │   │   ├── css.cpython-313.pyc
│   │   │   ├── data.cpython-313.pyc
│   │   │   ├── html.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── javascript.cpython-313.pyc
│   │   │   ├── jvm.cpython-313.pyc
│   │   │   ├── _lilypond_builtins.cpython-313.pyc
│   │   │   ├── lilypond.cpython-313.pyc
│   │   │   ├── lisp.cpython-313.pyc
│   │   │   ├── _mapping.cpython-313.pyc
│   │   │   ├── markup.cpython-313.pyc
│   │   │   ├── python.cpython-313.pyc
│   │   │   ├── ruby.cpython-313.pyc
│   │   │   ├── _scheme_builtins.cpython-313.pyc
│   │   │   └── special.cpython-313.pyc
│   │   ├── modeline.cpython-313.pyc
│   │   ├── plugin.cpython-313.pyc
│   │   ├── regexopt.cpython-313.pyc
│   │   ├── style.cpython-313.pyc
│   │   ├── styles
│   │   │   ├── friendly.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   └── _mapping.cpython-313.pyc
│   │   ├── token.cpython-313.pyc
│   │   ├── unistring.cpython-313.pyc
│   │   └── util.cpython-313.pyc
│   ├── pytz
│   │   ├── exceptions.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── lazy.cpython-313.pyc
│   │   ├── tzfile.cpython-313.pyc
│   │   └── tzinfo.cpython-313.pyc
│   ├── requests
│   │   ├── adapters.cpython-313.pyc
│   │   ├── api.cpython-313.pyc
│   │   ├── auth.cpython-313.pyc
│   │   ├── certs.cpython-313.pyc
│   │   ├── compat.cpython-313.pyc
│   │   ├── cookies.cpython-313.pyc
│   │   ├── exceptions.cpython-313.pyc
│   │   ├── hooks.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── _internal_utils.cpython-313.pyc
│   │   ├── models.cpython-313.pyc
│   │   ├── packages.cpython-313.pyc
│   │   ├── sessions.cpython-313.pyc
│   │   ├── status_codes.cpython-313.pyc
│   │   ├── structures.cpython-313.pyc
│   │   ├── utils.cpython-313.pyc
│   │   └── __version__.cpython-313.pyc
│   ├── snowballstemmer
│   │   ├── among.cpython-313.pyc
│   │   ├── arabic_stemmer.cpython-313.pyc
│   │   ├── armenian_stemmer.cpython-313.pyc
│   │   ├── basestemmer.cpython-313.pyc
│   │   ├── basque_stemmer.cpython-313.pyc
│   │   ├── catalan_stemmer.cpython-313.pyc
│   │   ├── danish_stemmer.cpython-313.pyc
│   │   ├── dutch_stemmer.cpython-313.pyc
│   │   ├── english_stemmer.cpython-313.pyc
│   │   ├── finnish_stemmer.cpython-313.pyc
│   │   ├── french_stemmer.cpython-313.pyc
│   │   ├── german_stemmer.cpython-313.pyc
│   │   ├── greek_stemmer.cpython-313.pyc
│   │   ├── hindi_stemmer.cpython-313.pyc
│   │   ├── hungarian_stemmer.cpython-313.pyc
│   │   ├── indonesian_stemmer.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── irish_stemmer.cpython-313.pyc
│   │   ├── italian_stemmer.cpython-313.pyc
│   │   ├── lithuanian_stemmer.cpython-313.pyc
│   │   ├── nepali_stemmer.cpython-313.pyc
│   │   ├── norwegian_stemmer.cpython-313.pyc
│   │   ├── porter_stemmer.cpython-313.pyc
│   │   ├── portuguese_stemmer.cpython-313.pyc
│   │   ├── romanian_stemmer.cpython-313.pyc
│   │   ├── russian_stemmer.cpython-313.pyc
│   │   ├── serbian_stemmer.cpython-313.pyc
│   │   ├── spanish_stemmer.cpython-313.pyc
│   │   ├── swedish_stemmer.cpython-313.pyc
│   │   ├── tamil_stemmer.cpython-313.pyc
│   │   ├── turkish_stemmer.cpython-313.pyc
│   │   └── yiddish_stemmer.cpython-313.pyc
│   ├── socks.cpython-313.pyc
│   ├── sphinx
│   │   ├── addnodes.cpython-313.pyc
│   │   ├── application.cpython-313.pyc
│   │   ├── builders
│   │   │   ├── changes.cpython-313.pyc
│   │   │   ├── dirhtml.cpython-313.pyc
│   │   │   ├── dummy.cpython-313.pyc
│   │   │   ├── epub3.cpython-313.pyc
│   │   │   ├── _epub_base.cpython-313.pyc
│   │   │   ├── gettext.cpython-313.pyc
│   │   │   ├── html
│   │   │   │   ├── _assets.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   └── transforms.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── latex
│   │   │   │   ├── constants.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   ├── nodes.cpython-313.pyc
│   │   │   │   ├── theming.cpython-313.pyc
│   │   │   │   ├── transforms.cpython-313.pyc
│   │   │   │   └── util.cpython-313.pyc
│   │   │   ├── linkcheck.cpython-313.pyc
│   │   │   ├── manpage.cpython-313.pyc
│   │   │   ├── singlehtml.cpython-313.pyc
│   │   │   ├── texinfo.cpython-313.pyc
│   │   │   ├── text.cpython-313.pyc
│   │   │   └── xml.cpython-313.pyc
│   │   ├── cmd
│   │   │   ├── build.cpython-313.pyc
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── config.cpython-313.pyc
│   │   ├── deprecation.cpython-313.pyc
│   │   ├── directives
│   │   │   ├── code.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── other.cpython-313.pyc
│   │   │   └── patches.cpython-313.pyc
│   │   ├── domains
│   │   │   ├── c
│   │   │   │   ├── _ast.cpython-313.pyc
│   │   │   │   ├── _ids.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   ├── _parser.cpython-313.pyc
│   │   │   │   └── _symbol.cpython-313.pyc
│   │   │   ├── changeset.cpython-313.pyc
│   │   │   ├── citation.cpython-313.pyc
│   │   │   ├── cpp
│   │   │   │   ├── _ast.cpython-313.pyc
│   │   │   │   ├── _ids.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   ├── _parser.cpython-313.pyc
│   │   │   │   └── _symbol.cpython-313.pyc
│   │   │   ├── index.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── javascript.cpython-313.pyc
│   │   │   ├── math.cpython-313.pyc
│   │   │   ├── python
│   │   │   │   ├── _annotations.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   └── _object.cpython-313.pyc
│   │   │   ├── rst.cpython-313.pyc
│   │   │   └── std
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── environment
│   │   │   ├── adapters
│   │   │   │   ├── asset.cpython-313.pyc
│   │   │   │   ├── indexentries.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   └── toctree.cpython-313.pyc
│   │   │   ├── collectors
│   │   │   │   ├── asset.cpython-313.pyc
│   │   │   │   ├── dependencies.cpython-313.pyc
│   │   │   │   ├── __init__.cpython-313.pyc
│   │   │   │   ├── metadata.cpython-313.pyc
│   │   │   │   ├── title.cpython-313.pyc
│   │   │   │   └── toctree.cpython-313.pyc
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── errors.cpython-313.pyc
│   │   ├── events.cpython-313.pyc
│   │   ├── ext
│   │   │   ├── autosectionlabel.cpython-313.pyc
│   │   │   ├── doctest.cpython-313.pyc
│   │   │   ├── ifconfig.cpython-313.pyc
│   │   │   ├── imgmath.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   └── mathjax.cpython-313.pyc
│   │   ├── extension.cpython-313.pyc
│   │   ├── highlighting.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── io.cpython-313.pyc
│   │   ├── jinja2glue.cpython-313.pyc
│   │   ├── locale
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── parsers.cpython-313.pyc
│   │   ├── project.cpython-313.pyc
│   │   ├── pycode
│   │   │   ├── ast.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   └── parser.cpython-313.pyc
│   │   ├── pygments_styles.cpython-313.pyc
│   │   ├── registry.cpython-313.pyc
│   │   ├── roles.cpython-313.pyc
│   │   ├── search
│   │   │   ├── en.cpython-313.pyc
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── theming.cpython-313.pyc
│   │   ├── transforms
│   │   │   ├── compact_bullet_list.cpython-313.pyc
│   │   │   ├── i18n.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── post_transforms
│   │   │   │   ├── code.cpython-313.pyc
│   │   │   │   ├── images.cpython-313.pyc
│   │   │   │   └── __init__.cpython-313.pyc
│   │   │   └── references.cpython-313.pyc
│   │   ├── util
│   │   │   ├── build_phase.cpython-313.pyc
│   │   │   ├── cfamily.cpython-313.pyc
│   │   │   ├── console.cpython-313.pyc
│   │   │   ├── display.cpython-313.pyc
│   │   │   ├── docfields.cpython-313.pyc
│   │   │   ├── docutils.cpython-313.pyc
│   │   │   ├── exceptions.cpython-313.pyc
│   │   │   ├── fileutil.cpython-313.pyc
│   │   │   ├── http_date.cpython-313.pyc
│   │   │   ├── i18n.cpython-313.pyc
│   │   │   ├── images.cpython-313.pyc
│   │   │   ├── index_entries.cpython-313.pyc
│   │   │   ├── __init__.cpython-313.pyc
│   │   │   ├── inspect.cpython-313.pyc
│   │   │   ├── inventory.cpython-313.pyc
│   │   │   ├── _io.cpython-313.pyc
│   │   │   ├── logging.cpython-313.pyc
│   │   │   ├── matching.cpython-313.pyc
│   │   │   ├── math.cpython-313.pyc
│   │   │   ├── nodes.cpython-313.pyc
│   │   │   ├── osutil.cpython-313.pyc
│   │   │   ├── parallel.cpython-313.pyc
│   │   │   ├── _pathlib.cpython-313.pyc
│   │   │   ├── png.cpython-313.pyc
│   │   │   ├── requests.cpython-313.pyc
│   │   │   ├── rst.cpython-313.pyc
│   │   │   ├── tags.cpython-313.pyc
│   │   │   ├── template.cpython-313.pyc
│   │   │   ├── texescape.cpython-313.pyc
│   │   │   └── typing.cpython-313.pyc
│   │   ├── versioning.cpython-313.pyc
│   │   └── writers
│   │   ├── html5.cpython-313.pyc
│   │   ├── html.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── latex.cpython-313.pyc
│   │   ├── manpage.cpython-313.pyc
│   │   ├── texinfo.cpython-313.pyc
│   │   ├── text.cpython-313.pyc
│   │   └── xml.cpython-313.pyc
│   ├── sphinxcontrib
│   │   ├── devhelp
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── htmlhelp
│   │   │   └── __init__.cpython-313.pyc
│   │   ├── qthelp
│   │   │   └── __init__.cpython-313.pyc
│   │   └── serializinghtml
│   │   ├── __init__.cpython-313.pyc
│   │   └── jsonimpl.cpython-313.pyc
│   └── urllib3
│   ├── _collections.cpython-313.pyc
│   ├── connection.cpython-313.pyc
│   ├── connectionpool.cpython-313.pyc
│   ├── contrib
│   │   ├── _appengine_environ.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   └── socks.cpython-313.pyc
│   ├── exceptions.cpython-313.pyc
│   ├── fields.cpython-313.pyc
│   ├── filepost.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── packages
│   │   ├── __init__.cpython-313.pyc
│   │   └── six.cpython-313.pyc
│   ├── poolmanager.cpython-313.pyc
│   ├── request.cpython-313.pyc
│   ├── response.cpython-313.pyc
│   ├── util
│   │   ├── connection.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── proxy.cpython-313.pyc
│   │   ├── queue.cpython-313.pyc
│   │   ├── request.cpython-313.pyc
│   │   ├── response.cpython-313.pyc
│   │   ├── retry.cpython-313.pyc
│   │   ├── ssl_.cpython-313.pyc
│   │   ├── ssl_match_hostname.cpython-313.pyc
│   │   ├── ssltransport.cpython-313.pyc
│   │   ├── timeout.cpython-313.pyc
│   │   ├── url.cpython-313.pyc
│   │   └── wait.cpython-313.pyc
│   └── _version.cpython-313.pyc
└── lib64
└── python3.13
├── argparse.cpython-313.pyc
├── ast.cpython-313.pyc
├── base64.cpython-313.pyc
├── bdb.cpython-313.pyc
├── bisect.cpython-313.pyc
├── bz2.cpython-313.pyc
├── calendar.cpython-313.pyc
├── cmd.cpython-313.pyc
├── code.cpython-313.pyc
├── codeop.cpython-313.pyc
├── collections
│   └── __init__.cpython-313.pyc
├── _colorize.cpython-313.pyc
├── _compat_pickle.cpython-313.pyc
├── _compression.cpython-313.pyc
├── configparser.cpython-313.pyc
├── contextlib.cpython-313.pyc
├── contextvars.cpython-313.pyc
├── copy.cpython-313.pyc
├── copyreg.cpython-313.pyc
├── csv.cpython-313.pyc
├── dataclasses.cpython-313.pyc
├── datetime.cpython-313.pyc
├── decimal.cpython-313.pyc
├── difflib.cpython-313.pyc
├── dis.cpython-313.pyc
├── doctest.cpython-313.pyc
├── email
│   ├── base64mime.cpython-313.pyc
│   ├── charset.cpython-313.pyc
│   ├── _encoded_words.cpython-313.pyc
│   ├── encoders.cpython-313.pyc
│   ├── errors.cpython-313.pyc
│   ├── feedparser.cpython-313.pyc
│   ├── header.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── iterators.cpython-313.pyc
│   ├── message.cpython-313.pyc
│   ├── _parseaddr.cpython-313.pyc
│   ├── parser.cpython-313.pyc
│   ├── _policybase.cpython-313.pyc
│   ├── quoprimime.cpython-313.pyc
│   └── utils.cpython-313.pyc
├── encodings
│   ├── aliases.cpython-313.pyc
│   ├── idna.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── unicode_escape.cpython-313.pyc
│   ├── utf_8.cpython-313.pyc
│   └── utf_8_sig.cpython-313.pyc
├── enum.cpython-313.pyc
├── filecmp.cpython-313.pyc
├── fnmatch.cpython-313.pyc
├── functools.cpython-313.pyc
├── __future__.cpython-313.pyc
├── gettext.cpython-313.pyc
├── glob.cpython-313.pyc
├── gzip.cpython-313.pyc
├── hashlib.cpython-313.pyc
├── heapq.cpython-313.pyc
├── hmac.cpython-313.pyc
├── html
│   ├── entities.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   └── parser.cpython-313.pyc
├── http
│   ├── client.cpython-313.pyc
│   ├── cookiejar.cpython-313.pyc
│   ├── cookies.cpython-313.pyc
│   └── __init__.cpython-313.pyc
├── importlib
│   ├── _abc.cpython-313.pyc
│   ├── abc.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── metadata
│   │   ├── _collections.cpython-313.pyc
│   │   ├── _functools.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── _itertools.cpython-313.pyc
│   │   └── _meta.cpython-313.pyc
│   └── resources
│   ├── abc.cpython-313.pyc
│   ├── _common.cpython-313.pyc
│   ├── _functional.cpython-313.pyc
│   └── __init__.cpython-313.pyc
├── inspect.cpython-313.pyc
├── ipaddress.cpython-313.pyc
├── json
│   ├── decoder.cpython-313.pyc
│   ├── encoder.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   └── scanner.cpython-313.pyc
├── keyword.cpython-313.pyc
├── linecache.cpython-313.pyc
├── locale.cpython-313.pyc
├── logging
│   ├── handlers.cpython-313.pyc
│   └── __init__.cpython-313.pyc
├── lzma.cpython-313.pyc
├── _markupbase.cpython-313.pyc
├── mimetypes.cpython-313.pyc
├── multiprocessing
│   ├── connection.cpython-313.pyc
│   ├── context.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── popen_fork.cpython-313.pyc
│   ├── process.cpython-313.pyc
│   ├── reduction.cpython-313.pyc
│   └── util.cpython-313.pyc
├── numbers.cpython-313.pyc
├── opcode.cpython-313.pyc
├── _opcode_metadata.cpython-313.pyc
├── operator.cpython-313.pyc
├── optparse.cpython-313.pyc
├── pathlib
│   ├── _abc.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   └── _local.cpython-313.pyc
├── pdb.cpython-313.pyc
├── pickle.cpython-313.pyc
├── platform.cpython-313.pyc
├── pprint.cpython-313.pyc
├── queue.cpython-313.pyc
├── quopri.cpython-313.pyc
├── random.cpython-313.pyc
├── re
│   ├── _casefix.cpython-313.pyc
│   ├── _compiler.cpython-313.pyc
│   ├── _constants.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   └── _parser.cpython-313.pyc
├── reprlib.cpython-313.pyc
├── rlcompleter.cpython-313.pyc
├── selectors.cpython-313.pyc
├── shutil.cpython-313.pyc
├── signal.cpython-313.pyc
├── site-packages
│   ├── markupsafe
│   │   └── __init__.cpython-313.pyc
│   └── PIL
│   ├── _binary.cpython-313.pyc
│   ├── _deprecate.cpython-313.pyc
│   ├── ExifTags.cpython-313.pyc
│   ├── Image.cpython-313.pyc
│   ├── ImageMode.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── TiffTags.cpython-313.pyc
│   ├── _typing.cpython-313.pyc
│   ├── _util.cpython-313.pyc
│   └── _version.cpython-313.pyc
├── socket.cpython-313.pyc
├── ssl.cpython-313.pyc
├── string.cpython-313.pyc
├── stringprep.cpython-313.pyc
├── struct.cpython-313.pyc
├── subprocess.cpython-313.pyc
├── sysconfig
│   └── __init__.cpython-313.pyc
├── _sysconfigdata__linux_x86_64-linux-gnu.cpython-313.pyc
├── tempfile.cpython-313.pyc
├── textwrap.cpython-313.pyc
├── threading.cpython-313.pyc
├── token.cpython-313.pyc
├── tokenize.cpython-313.pyc
├── tomllib
│   ├── __init__.cpython-313.pyc
│   ├── _parser.cpython-313.pyc
│   ├── _re.cpython-313.pyc
│   └── _types.cpython-313.pyc
├── traceback.cpython-313.pyc
├── types.cpython-313.pyc
├── typing.cpython-313.pyc
├── unittest
│   ├── case.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── loader.cpython-313.pyc
│   ├── main.cpython-313.pyc
│   ├── result.cpython-313.pyc
│   ├── runner.cpython-313.pyc
│   ├── signals.cpython-313.pyc
│   ├── suite.cpython-313.pyc
│   └── util.cpython-313.pyc
├── urllib
│   ├── error.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── parse.cpython-313.pyc
│   ├── request.cpython-313.pyc
│   └── response.cpython-313.pyc
├── uuid.cpython-313.pyc
├── warnings.cpython-313.pyc
├── weakref.cpython-313.pyc
├── _weakrefset.cpython-313.pyc
├── xml
│   ├── dom
│   │   ├── domreg.cpython-313.pyc
│   │   ├── __init__.cpython-313.pyc
│   │   ├── minicompat.cpython-313.pyc
│   │   ├── minidom.cpython-313.pyc
│   │   ├── NodeFilter.cpython-313.pyc
│   │   └── xmlbuilder.cpython-313.pyc
│   ├── etree
│   │   ├── ElementPath.cpython-313.pyc
│   │   ├── ElementTree.cpython-313.pyc
│   │   └── __init__.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── parsers
│   │   ├── expat.cpython-313.pyc
│   │   └── __init__.cpython-313.pyc
│   └── sax
│   ├── _exceptions.cpython-313.pyc
│   ├── expatreader.cpython-313.pyc
│   ├── handler.cpython-313.pyc
│   ├── __init__.cpython-313.pyc
│   ├── saxutils.cpython-313.pyc
│   └── xmlreader.cpython-313.pyc
├── zipfile
│   ├── __init__.cpython-313.pyc
│   └── _path
│   ├── glob.cpython-313.pyc
│   └── __init__.cpython-313.pyc
└── zoneinfo
├── _common.cpython-313.pyc
├── __init__.cpython-313.pyc
└── _tzpath.cpython-313.pyc

109 directories, 634 files

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

diff --git a/Documentation/Makefile b/Documentation/Makefile
index 8c1f6a3dfc44..59e95ebae786 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -84,7 +84,7 @@ loop_cmd = $(echo-cmd) $(cmd_$(1)) || exit;

quiet_cmd_sphinx = SPHINX $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
cmd_sphinx = $(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/userspace-api/media $2 && \
- PYTHONDONTWRITEBYTECODE=1 \
+ PYTHONPYCACHEPREFIX=$(abspath $(BUILDDIR)/__pycache__) \
BUILDDIR=$(abspath $(BUILDDIR)) SPHINX_CONF=$(abspath $(src)/$5/$(SPHINX_CONF)) \
$(PYTHON3) $(srctree)/scripts/jobserver-exec \
$(CONFIG_SHELL) $(srctree)/Documentation/sphinx/parallel-wrapper.sh \