circular dependency when building LaTeX?

Joseph Wright joseph.wright at
Wed Jun 23 16:21:27 CEST 2021

On 23/06/2021 14:51, Jonathan Fine wrote:
> Phelype Oleinik wrote:
>> Usually |.ins| files should be run with plain TeX, so |tex| or |pdftex|.
>> In fact, LaTeX has its own |format.ins|, which would be a LaTeX->LaTeX
>> circular dependency, so you need plain for that.
> The original poster wrote
>> I’m trying to update the TeX Live version in Guix¹ to 2021.
> This sounds like there was something that worked for the 2020 TeX Live
> sources, but doesn't work for the 2021 TeX Live sources.
> Does anyone know, is there a publicly viewable automated build from the
> 2021 TeX Live sources? I have in mind  for example continuous integration
> or github actions.

TeX Live and MiKTeX don't build LaTeX from sources, rather from the 
TDS-style material the team upload to CTAN. That already has the 
extraction done. However, of course we have to build those in the first 
place, and that is done routinely as the test suite for LaTeX runs in an 
isolated setup that doesn't pull in the standard TeX tree. We don't 
extract the expl3 code at the same time, but rather use a pre-extracted 
static version, such that the testing for LaTeX2e and for expl3 is 
independent. You can take a look at all of this if wish: it's all part 
of the setup in the GitHub repos for LaTeX (we use Travis-CI rather than 
GitHub Actions, but the idea is much the same).

Not that DocStrip, which ultimately does the extraction of .dtx sources, 
doesn't even need plain TeX: you can use docstrip.dtx with IniTeX to 
extract everything. If starting from scratch, you could extract both 
latex.ltx and expl3-code.tex (etc.) using

     pdftex <name>.ins

then add these together to build. However, it's a *lot* easier to use 
l3build to extract and install everything in whatever tree you wish - 
the build scripts 'know' which files to copy. Even that is likely 
overkill as, as I say, there are ready-to-install TDS-style zip files on 

(We of course have worried about the bootstrapping question, which is 
why DocStrip works with IniTeX and l3build doesn't rely on a .dtx for 
the Lua code, so l3build can be used directly to install DocStrip, then 
DocStrip can extract LaTeX and expl3, then a working system can be 
sorted out.)


More information about the tex-live mailing list.