[NTG-context] How can I make a Gentoo Linux package for ConTeXt LMTX?

amano.kenji amano.kenji at proton.me
Mon Aug 22 11:41:44 CEST 2022

Wuh. That's a bit complex.

For distribution packages that depend on context for generation of PDF documents, having context as a system package is essential.

And, distribution maintainers can make things work if they understand TeX directory structure and texmfcnf.lua.

It comes down to care. If they care and they have installation guide, they will make it work.

------- Original Message -------
On Sunday, August 21st, 2022 at 7:13 PM, Michal Vlasák <lahcim8 at gmail.com> wrote:

> On Mon Aug 15, 2022 at 2:03 PM CEST, amano.kenji via ntg-context wrote:
> > TexLive has texmfcnf.lua that doesn't really work with texlive-context installed by linux distributions.
> > 
> > Arch Linux has its own patched version of texmfcnf.lua.
> > 
> > It seems I'd be better off with a linux package for ConTeXt LMTX.
> > 
> > How can I build and install ConTeXt LMTX on Gentoo Linux or any linux distribution?
> > 
> > I wish it was as simple as ./configure, make, and make install.
> Some of the problems were mentioned in previous discussions. Like:
> - you would need to maintain your own "snapshots" of the current
> ConTeXt (or make use of the public git mirror)
> - you currently can't build luametatex binary from source, you would
> have to download it prebuilt (and also keep snapshots of it)
> - different directory structure expected by Linux distributions (FHS,
> "file hierarchy standard") vs TeX (TDS, "TeX directory structure")
> In addition, there are still many uncertain things, like how you want to
> handle fonts:
> - install some with ConTeXt? (In that case you might distribute fonts
> already available in your Linux distribution)
> - use system ones? (Then your documents may be subject to breakages
> from uncoordinated updates - ConTeXt has goodie files tuned to
> particular versions of fonts)
> Also, AFAIK, packages are diligent with keeping license information and
> documentation, you would have to decide how that information would be
> kept (this is mostly the directory structure problem).
> With that said, taking Hans' instructions as a start:
> On Fri Aug 19, 2022 at 3:11 PM CEST, Hans Hagen via ntg-context wrote:
> > Not sure what you mean here but basically a (future) installation is:
> > 
> > - unzip the main zip file
> > - goto the source subtree
> > - run build.sh (assumes compiler and cmake installed)
> > - move the binary file to the relevant bin location
> > - set symlinks from luametatex to mtsrun and context
> > - copy mtxrun.lua and context.lue there too
> > - adapt your path
> > - maybe add texmf-fonts and texmf-projects
> > - and you're done
> You need two things from ConTeXt: texmf directories (there are two
> provided by ConTeXt "texmf-context" - what you really need, "texmf" -
> mostly fonts) and the luametatex binary.
> For simplicity let's only include "texmf-context":
> In that case you need to extract "mtxrun" (rename to "luametatex") from
> http://lmtx.pragma-ade.nl/install-lmtx/context-linux-64.zip and download
> the "texmf-context" texmf tree from
> http://lmtx.pragma-ade.nl/install-lmtx/texmf-context.zip.
> This is how you get luametatex to execute script like mtxrun or context:
> - luametatex binary gets executed with name (argv[0]) <script>
> - <script>.lua from the same directory gets executed
> If you setup paths correctly, you can run all ConTeXt scripts with
> mtxrun --script <script>
> E.g.
> mtxrun --script context
> Is equivalent to `context`. So having mtxrun is enough.
> But you need to tell it how to find the files from texmf. `texmfcnf.lua`
> configuration file is used for that. ConTeXt has a few hardcoded
> directories where it looks for these files [1], but you can use the
> `TEXMFCNF` environment variable to override this (usually variables can
> be also looked up from config files, but there is a bit of bootstrapping
> problem here - ConTeXt allows setting of TEXMFCNF also in config files,
> but then it gets a bit hairy and I didn't investigate that). I may have
> got the wrong impression, but I didn't get multiple configuration files
> working. In the config file, you can see the settings of some special
> variables like TEXINPUTS (this one tells TeX where to look for .tex
> files). You should keep them like they are, since they implement
> the TDS. They all refer to the TEXMF variable, where I advise changing
> things. You can structure TEXMF trees in any way you like and would
> probably have to decide what is the best way for Gentoo.
> [1]: https://github.com/vlasakm/context/blob/419cacd966ab0adcb9451b60c9fd98790cce77b7/texmf/scripts/context/lua/mtxrun.lua#L22280-L22285
> It seems that getting file finding to work is everything you need.
> ConTeXt automatically generates the file finding caches, format files,
> etc.
> I prepared a proof of concept, that I am ready to take down immediately
> at Hans' request, since I don't handle license information properly, and
> texmf-context is stripped down (just so that the downloads are not too
> big for proof of concept).
> https://github.com/vlasakm/context
> There is documentation about how it can be used. I hope its obvious how
> I got "texmf" (texmf-context.zip, unzip, delete some files I didn't want
> to take up space), "luametatex" (copy the binary from installation zip or
> download from build farm) and texmcnf.lua (copy of the fallback
> contextcnf.lua where I made modifications to leverage TEXMFDOTDIR and
> TEXMF even as a user interface).
> The rest is the `mtxrun` shell script which is what the user runs. This
> is what runs luametatex with the name `mtxrun` (using "exec -a").
> Normally you would just symlink mtxrun to luametatex, but I also had
> some trouble setting TEXMFCNF otherwise, so I just put both things in
> this one script. After this, mtxrun.lua is executed, which is symlinked
> by the Makefile - the last thing in the repository.
> This is essentially what you wanted, a possibility to `make install`
> ConTeXt. I didn't script the downloading and unzipping part. The install
> target just copies things to /bin and /share and symlinks mtxrun.lua
> from /bin to /share. Standard `PREFIX` and `DESTDIR` variables are used (I
> believe they originate from the "GNU coding standards", if you are not
> familiar with them).
> I pushed a release, so you can download a tarball from a convenient
> address:
> https://github.com/vlasakm/context/releases/tag/v20220821
> I am not really familiar with ebuild, but I am sure you can get it
> working. Though the crucial parts for you mtxrun, and partly
> texmfcnf.lua, you still have to do (and mainly decide) things yourself.
> I got it working with Debian, RPM and Arch Linux packaging tools /
> formats:
> https://build.opensuse.org/package/show/home:lahcim8/context
> Essentially the following needs to run somewhere in the build scripts:
> make DESTDIR=... PREFIX=... install
> Downloads for a couple of distros are available here:
> https://software.opensuse.org/download.html?project=home%3Alahcim8&package=context
> Although from brief testing only Arch Linux works correctly, Debian
> can't find system fonts and on Fedora even file finding doesn't work.
> A bit of a disclaimer: I don't really recommend pursuing this further.
> Some time ago I was also that foolish to try to package TeX for Linux
> distributions. Unfortunately I think that the result will never by
> optimal - as demonstrated by the previous discussions, the usual
> purposes of packages (to integrate software into the system) don't apply
> much to TeX / ConTeXt - there one wants something more or less self
> contained (so that updates are under control, no random non-essential
> libraries brake things, etc.).
> Good luck.
> Michal Vlasák

More information about the ntg-context mailing list