diff options
author | Karl Berry <karl@freefriends.org> | 2022-12-05 21:42:22 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-12-05 21:42:22 +0000 |
commit | f1d5d3b19b4da2e78ec7473541f3cbc9d2d34664 (patch) | |
tree | b4df722f65ab129d9bceac2042adec4b610d4d8e | |
parent | 2777f1280916d66fc387772aa366124197d9252d (diff) |
digestif (3dec22)
git-svn-id: svn://tug.org/texlive/trunk@65210 c570f23f-e606-0410-a88d-b1316a301751
24 files changed, 461 insertions, 0 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/digestif/digestif.texlua b/Build/source/texk/texlive/linked_scripts/digestif/digestif.texlua new file mode 100755 index 00000000000..caf518071bc --- /dev/null +++ b/Build/source/texk/texlive/linked_scripts/digestif/digestif.texlua @@ -0,0 +1,25 @@ +#!/usr/bin/env texlua +-- Use an invalid directory name in order not to allow kpse to search +-- in the current directory. +os.setenv("TEXMFDOTDIR", package.config:find("^\\") and "NUL" or "/dev/null") +kpse.set_program_name("luatex") +local zip = require "zip" +local archive = kpse.find_file("digestif.zip") + or error("Can't find 'digestif.zip' archive") +local function digestif_searcher(modname) + local submod = modname:match("^digestif%.(.+)") + if not submod then return end + local zipfile = zip.open(archive) + local luafile = zipfile and zipfile:open(submod .. ".lua") + if not luafile then + return "\n\t[digestif] no file '"..submod..".lua' in '"..archive.."'" + end + local chunk = luafile:read("*a") + luafile:close(); zipfile:close() + return load(chunk, "="..archive.."#"..submod..".lua") +end +-- Search inside digestif.zip when requiring digestif.* modules. +table.insert(package.searchers, 2, digestif_searcher) +-- Search inside digestif.zip when loading the *.tags data files. +table.insert(require "digestif.config".data_dirs, archive) +require "digestif.langserver".main(arg) diff --git a/Master/bin/aarch64-linux/digestif b/Master/bin/aarch64-linux/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/aarch64-linux/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/amd64-freebsd/digestif b/Master/bin/amd64-freebsd/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/amd64-freebsd/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/amd64-netbsd/digestif b/Master/bin/amd64-netbsd/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/amd64-netbsd/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/armhf-linux/digestif b/Master/bin/armhf-linux/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/armhf-linux/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/i386-cygwin/digestif b/Master/bin/i386-cygwin/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/i386-cygwin/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/i386-freebsd/digestif b/Master/bin/i386-freebsd/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/i386-freebsd/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/i386-linux/digestif b/Master/bin/i386-linux/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/i386-linux/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/i386-netbsd/digestif b/Master/bin/i386-netbsd/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/i386-netbsd/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/i386-solaris/digestif b/Master/bin/i386-solaris/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/i386-solaris/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/universal-darwin/digestif b/Master/bin/universal-darwin/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/universal-darwin/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/win32/digestif.exe b/Master/bin/win32/digestif.exe Binary files differnew file mode 100755 index 00000000000..5777d90a17a --- /dev/null +++ b/Master/bin/win32/digestif.exe diff --git a/Master/bin/x86_64-cygwin/digestif b/Master/bin/x86_64-cygwin/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/x86_64-cygwin/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/x86_64-darwinlegacy/digestif b/Master/bin/x86_64-darwinlegacy/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/x86_64-darwinlegacy/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/x86_64-linux/digestif b/Master/bin/x86_64-linux/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/x86_64-linux/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/x86_64-linuxmusl/digestif b/Master/bin/x86_64-linuxmusl/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/x86_64-linuxmusl/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/bin/x86_64-solaris/digestif b/Master/bin/x86_64-solaris/digestif new file mode 120000 index 00000000000..3cc8057d1ab --- /dev/null +++ b/Master/bin/x86_64-solaris/digestif @@ -0,0 +1 @@ +../../texmf-dist/scripts/digestif/digestif.texlua
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/digestif/INSTALL.md b/Master/texmf-dist/doc/support/digestif/INSTALL.md new file mode 100644 index 00000000000..f99f4b286ae --- /dev/null +++ b/Master/texmf-dist/doc/support/digestif/INSTALL.md @@ -0,0 +1,80 @@ +Installation guide +================== + +This installation guide focuses on packaging for redistribution. For +the final user, it is recommended to install via LuaRocks or using the +self-installing script; see the [README](README.md) for details. + +Digestif has the following dependencies: + +* Lua version 5.3 or 5.4 +* LPeg (https://luarocks.org/modules/gvvaughan/lpeg) +* LuaFileSystem (https://luarocks.org/modules/hisham/luafilesystem) +* cjson (optional, https://luarocks.org/modules/openresty/lua-cjson) +* LuaZip (optional, https://luarocks.org/modules/mpeterv/luazip) + +If the cjson library is missing, Digestif uses its own LPeg-based JSON +serializer, which is slower but adequate. LuaZip is required only +when placing the data files in a zip archive. + +All shell commands and file name references assume that the directory +containing this file is the current directory. + +Standard packaging +------------------ + +For a regular installation of Digestif into, say, `PREFIX=/usr`, copy +the files as follows: + + install -Dt $PREFIX/bin bin/digestif + install -Dt $PREFIX/share/lua/$LUA_VERSION digestif + install -Dt $PREFIX/share/digestif data/*.tags + +Before doing so, however, consider the following: + +1. In order for the tags files to be found, add the following at the + top of the `bin/digestif` script: + + require "digestif.config".data_dirs = {"$PREFIX/share/digestif"} + +2. Make sure the `package.path` Lua variable includes the directory + into which the `digestif` directory is installed. + +3. It is recommended that the `package.path` and `package.cpath` Lua + variables do not include the default relative entries such as + `./?.lua`. This is especially important if any of the optional + dependencies are not installed. + +4. If LuaZip is available, the tags files may also be placed in a zip + file: + + zip -j data.zip data/*.tags + install -Dt $PREFIX/share/digestif data.zip + + In this case, add the following line at the top of `bin/digestif`: + + require "digestif.config".data_dirs = {"$PREFIX/share/digestif/data.zip"} + +Packaging for a TeX distribution +-------------------------------- + +For an installation depending only on the `texlua` interpreter from +LuaTeX (which already includes all other dependencies except cjson), +create a zip file containing `digestif/*.lua` and `data/*.tags` (no +subdirectories), place it anywhere kpathsearch will find it and use +the `bin/digestif.texlua` executable script. For instance: + + zip -j digestif.zip digestif/*.lua tags/*.tags + install -Dt $TEXMF/scripts digestif.zip + install bin/digestif.texlua $PREFIX/bin/digestif + +Unbundled installation +---------------------- + +To install Digestif on a directory of its own, say +`PREFIX=/opt/digestif`, copy the `bin`, `data` and `digestif` folders +and add a symlink of the executable script somewhere in the `PATH`. +For instance: + + install -Dt $PREFIX bin data digestif + ln -s $PREFIX/bin/digestif /opt/bin/digestif diff --git a/Master/texmf-dist/doc/support/digestif/LICENSE b/Master/texmf-dist/doc/support/digestif/LICENSE new file mode 100644 index 00000000000..b1f2360edce --- /dev/null +++ b/Master/texmf-dist/doc/support/digestif/LICENSE @@ -0,0 +1,152 @@ +With the exception of the files individually listed below, the +following applies: + +Copyright 2018-2022 Augusto Stoffel + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>. + +--- + +amsrefs.sty.tags: + + Copyright 2001-2004, 2007, 2008, 2010-2013 American Mathematical Society + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: LPPL-1.3c+ + + Adapted from the amsrefs package documentation, which can be found + at https://ctan.org/pkg/amsrefs. + +amssymb.sty.tags: + + Copyright 2006-2019 Will Robertson + Copyright 2010-2017 Philipp Stephani + Copyright 2011-2017 Joseph Wright + Copyright 2012-2015 Khaled Hosny + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: LPPL-1.3c+ + + Adapted from the file unicode-math-table.tex, part of the + unicode-math package, which can be found at + https://ctan.org/pkg/unicode-math. + +biblatex.sty.tags: + + Copyright 2006-2012 Philipp Lehman + Copyright 2012-2022 Philipp Lehman, Joseph Wright, Audrey Boruvka, + Philip Kime + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: LPPL-1.3c + + Adapted from the biblatex package documentation, which can be found + at https://github.com/plk/biblatex. + +csquotes.sty.tags: + + Copyright 2003-2011 Philipp Lehman + Copyright 2015-2019, 2021, 2022 Joseph Wright + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: LPPL-1.3c+ + + Adapted from the csquotes package documentation, which can be found + at https://ctan.org/pkg/csquotes. + +etoolbox.sty.tags: + + Copyright 2007-2011 Philipp Lehman + Copyright 2015-2020 Joseph Wright + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: LPPL-1.3c+ + + Adapted form the etoolbox package documentation, which can be found + at https://ctan.org/pkg/etoolbox. + +latex.tags: + + Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, + 2016, 2017, 2018, 2019, 2020, 2021, 2022 Karl Berry + Copyright 1988, 1994, 2007 Stephen Gilmore + Copyright 1994, 1995, 1996 Torsten Martinsen + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: GFDL + + Adapted from the LaTeX2e Unofficial Reference Manual, which can be + found at https://latexref.xyz/. + +pgf.tags: + + Copyright 2007-2013 Till Tantau + Copyright 2022 Augusto Stoffel, Jens Schneider + SPDX-License-Identifier: GFDL-1.2-or-later or LPPL-1.3c+ + + Adapted from the PGF manual, version 3.1.9a, which can be found at + https://github.com/pgf-tikz/pgf/. + +plain.tags: + + Copyright 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: GFDL-1.3-only + + Adapted from the book TeX for the Impatient, which can be found at + https://www.gnu.org/software/teximpatient. + +primitives.tags: + + Copyright 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: GFDL-1.3-only + + Adapted from the book TeX for the Impatient, which can be found at + https://www.gnu.org/software/teximpatient. + +teximpatient.tags: + + Copyright 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: GFDL-1.3-only + + Adapted from the book TeX for the Impatient, which can be found at + https://www.gnu.org/software/teximpatient. + +texinfo.tags: + + Copyright 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + Copyright 2019 Augusto Stoffel + SPDX-License-Identifier: GFDL-1.3-only + + Adapted from the GNU Texinfo manual, which can be found at + https://www.gnu.org/software/texinfo/manual/texinfo/. + +tikz.tags: + + Copyright 2007-2013 Till Tantau + Copyright 2022 Augusto Stoffel, Jens Schneider + SPDX-License-Identifier: GFDL-1.2-or-later or LPPL-1.3c+ + + Adapted from the PGF manual, version 3.1.9a, which can be found at + https://github.com/pgf-tikz/pgf/. + +unicode-math.sty.tags: + + Copyright 2006-2019 Will Robertson + Copyright 2010-2017 Philipp Stephani + Copyright 2011-2017 Joseph Wright + Copyright 2012-2015 Khaled Hosny + Copyright 2022 Augusto Stoffel + SPDX-License-Identifier: LPPL-1.3c+ + + Adapted from the file unicode-math-table.tex, part of + the unicode-math package, which can be found at + https://github.com/wspr/unicode-math/ + diff --git a/Master/texmf-dist/doc/support/digestif/README.md b/Master/texmf-dist/doc/support/digestif/README.md new file mode 100644 index 00000000000..c489d4fa6c8 --- /dev/null +++ b/Master/texmf-dist/doc/support/digestif/README.md @@ -0,0 +1,161 @@ +Digestif +======== + +<p align="center"> +<a href="https://luarocks.org/modules/astoff/digestif"><img src="https://img.shields.io/luarocks/v/astoff/digestif.svg" alt="LuaRocks" /></a> +<a href="https://app.travis-ci.com/astoff/digestif"><img src="https://app.travis-ci.com/astoff/digestif.svg?branch=master" alt="Build Status" /></a> +</p> + +Digestif is a code analyzer, and a [language server][lsp], for LaTeX, +ConTeXt et caterva. It provides context-sensitive completion, +documentation, code navigation, and related functionality to any text +editor that speaks the LSP protocol. + +![Mandatory GIF][gif] + +Features +-------- + +- Completion for commands, environments, key-value options (for + instance, TikZ options), cross-references and citations. + +- Popup help messages, including command signature and documentation. + For the best results, make sure you have the [LaTeX reference + manual][latexref] installed as an [info node][info-issues]. + +- Find definition and references to labels and citations. + +- Document outline. + +- Multi-file documents are supported via TeXShop-style magic comments. + Just add a comment like this near the top of each child document: + + ``` + % !TeX root = somefile.tex + ``` + +- Digestif is fuzzy! For citations, it tries an exact match against + the BibTeX identifier and a fuzzy match against author and title. + In the GIF above, the user types `groalhom`, which matches + **Gro**thendieck's “Sur quelques points d'**al**gébre + **hom**ologique”; selecting this inserts the BibTeX identifier + `Tohoku`. Similarly, for cross-references, Digestif tries an exact + match against the label and a fuzzy match against the text around + the label. + +- Support for LaTeX, ConTeXt, plain TeX, DocTeX (`.dtx` files) and + Texinfo. + +- Bibliography support via BibTeX, BibLaTeX and amsrefs. + +- Lua API, independent of the language server protocol, for use in + editors capable of loading Lua modules. See [API on the wiki][api] + for details. + +Installation +------------ + +Digestif has minimal dependencies and can run on LuaTeX or on a +standalone Lua interpreter. Correspondingly, there are two ways to +install it. + +### LuaTeX with the self-installing script ![easy] + +The only dependencies for this are git and a recent TeX installation. + +1. Download the [digestif][self-install-sh] wrapper script (or, on + Windows, [digestif.cmd][self-install-cmd]). +2. Place it in your `$PATH` (say, `~/.local/bin`). +3. Make it executable (`chmod +x ~/.local/bin/digestif`). + +In the first run, the script will automatically download the +package, by default to `~/.digestif`. To update or uninstall, +simply delete that folder. + +### Standalone Lua via LuaRocks + +Run `luarocks install digestif`. This should be done either as root +or with the `--local` option, in which case the executable script will +land in `~/.luarocks/bin/digestif`; make sure this is in your `$PATH` +or adapt your text editor configuration accordingly. + +Editor setup +------------ + +Next, you need to enable Digestif as a language server in your +favorite text editor. + +### Emacs with the [Eglot] package + +Digestif works out-of-the-box with Eglot. Just install the package +(`M-x package-install RET eglot RET`), open some TeX document and +enable Eglot (`M-x eglot`). Voilà! Some hints: + +- If you want automatic snippet insertion upon choosing a completion + candidate, make sure to activate `yas-minor-mode` *before* + starting up Eglot. + +- Try the [consult-eglot] package to access the index of a multifile + project (this is exposed via the the `workspace/symbols` LSP + method.) + +### Emacs with the [lsp-mode] package + +To ensure that Digestif is used, add the following to your init file: + + ``` emacs-lisp + (setq lsp-tex-server 'digestif) + ``` + +### Vim with the [Coc] plugin + +See instructions [here](https://github.com/neoclide/coc.nvim/wiki/Language-servers#latex). + +### Other editors + +It shouldn't be hard to set up other editors to use Digestif. Please +open an issue if you want to include additional instructions here. + +Supported TeX packages +---------------------- + +Digestif tries to learn about the commands provided by a package by +looking at its source code, but this has limitations, since the +typical TeX literate documentation is ostensibly not machine readable. + +For full support, a detailed “tags” file should be created for each +package. Among other things, this file lists all defined macros +together with their signatures and docstrings. To generate a stub +tags file from a `.sty`, `.cls` or `.dtx` file, use the command + +``` +digestif --generate FILES +``` + +After filling in the missing details, the resulting tags file can be +added to this repository (pull requests are welcome!). The format of +the tags files should be more or less self explanatory. See the data +folder for examples. + +License +------- + +Digestif is available under the [GNU General Public License][GPL], +version 3 or later. For some files in the [data](./data) directory, a +different license applies. See [LICENSE](./LICENSE) for details. + +[gif]: https://raw.githubusercontent.com/astoff/digestif/images/screenshot.gif +[info-issues]: https://github.com/astoff/digestif/wiki/Common-installation-issues#info-nodes +[installation-issues]: https://github.com/astoff/digestif/wiki/Common-installation-issues +[coc]: https://github.com/neoclide/coc.nvim +[eglot]: https://github.com/joaotavora/eglot +[latexref]: https://latexref.xyz/ +[lsp-mode]: https://github.com/emacs-lsp/lsp-mode +[lsp]: https://microsoft.github.io/language-server-protocol/ +[api]: https://github.com/astoff/digestif/wiki/API +[self-install-sh]: https://raw.githubusercontent.com/astoff/digestif/master/scripts/digestif +[self-install-cmd]: https://raw.githubusercontent.com/astoff/digestif/master/scripts/digestif.cmd +[easy]: https://raw.githubusercontent.com/astoff/digestif/images/easy.png +[GPL]: https://www.gnu.org/licenses/gpl-3.0.txt +[consult-eglot]: https://github.com/mohkale/consult-eglot/ +[Company mode]: https://company-mode.github.io/ diff --git a/Master/texmf-dist/doc/support/digestif/bin/digestif b/Master/texmf-dist/doc/support/digestif/bin/digestif new file mode 100755 index 00000000000..818d5b355ac --- /dev/null +++ b/Master/texmf-dist/doc/support/digestif/bin/digestif @@ -0,0 +1,2 @@ +#!/usr/bin/env lua +require "digestif.langserver".main(arg) diff --git a/Master/texmf-dist/scripts/digestif/digestif.texlua b/Master/texmf-dist/scripts/digestif/digestif.texlua new file mode 100755 index 00000000000..caf518071bc --- /dev/null +++ b/Master/texmf-dist/scripts/digestif/digestif.texlua @@ -0,0 +1,25 @@ +#!/usr/bin/env texlua +-- Use an invalid directory name in order not to allow kpse to search +-- in the current directory. +os.setenv("TEXMFDOTDIR", package.config:find("^\\") and "NUL" or "/dev/null") +kpse.set_program_name("luatex") +local zip = require "zip" +local archive = kpse.find_file("digestif.zip") + or error("Can't find 'digestif.zip' archive") +local function digestif_searcher(modname) + local submod = modname:match("^digestif%.(.+)") + if not submod then return end + local zipfile = zip.open(archive) + local luafile = zipfile and zipfile:open(submod .. ".lua") + if not luafile then + return "\n\t[digestif] no file '"..submod..".lua' in '"..archive.."'" + end + local chunk = luafile:read("*a") + luafile:close(); zipfile:close() + return load(chunk, "="..archive.."#"..submod..".lua") +end +-- Search inside digestif.zip when requiring digestif.* modules. +table.insert(package.searchers, 2, digestif_searcher) +-- Search inside digestif.zip when loading the *.tags data files. +table.insert(require "digestif.config".data_dirs, archive) +require "digestif.langserver".main(arg) diff --git a/Master/texmf-dist/scripts/digestif/digestif.zip b/Master/texmf-dist/scripts/digestif/digestif.zip Binary files differnew file mode 100644 index 00000000000..e10142227da --- /dev/null +++ b/Master/texmf-dist/scripts/digestif/digestif.zip diff --git a/Master/tlpkg/tlpsrc/digestif.tlpsrc b/Master/tlpkg/tlpsrc/digestif.tlpsrc new file mode 100644 index 00000000000..dca338c719c --- /dev/null +++ b/Master/tlpkg/tlpsrc/digestif.tlpsrc @@ -0,0 +1 @@ +binpattern f bin/${ARCH}/${PKGNAME} |