% language=uk % author : Hans Hagen % copyright : PRAGMA ADE & ConTeXt Development Team % license : Creative Commons Attribution ShareAlike 4.0 International % reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions % origin : the ConTeXt distribution % % comment : Because this manual is distributed with TeX distributions it comes with a rather % liberal license. We try to adapt these documents to upgrades in the (sub)systems % that they describe. Using parts of the content otherwise can therefore conflict % with existing functionality and we cannot be held responsible for that. Many of % the manuals contain characteristic graphics and personal notes or examples that % make no sense when used out-of-context. % % comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt % Group journal or otherwise. Thanks to the editors for corrections. Also thanks % to users for testing, feedback and corrections. \usemodule[art-01,abr-02] \definecolor [maincolor] [r=.4] \definecolor [extracolor] [g=.4] \setupbodyfont [11pt] \setuptype [color=maincolor] \setuptyping [color=maincolor] \definefontsynonym [TitlePageMono] [file:lmmonoproplt10-bold*default] \setuphead [color=maincolor] \usesymbols [cc] \setupinteraction [hidden] \loadfontgoodies[lm] \startdocument [metadata:author=Hans Hagen, metadata:title=Libraries in ConTeXt, author=Hans Hagen, affiliation=PRAGMA ADE, location=Hasselt NL, title=Libraries in \ConTeXt, support=www.contextgarden.net, website=www.pragma-ade.nl] \startluasetups[swiglib] context.nohyphens() for i=1,640 do context.definedfont { string.formatters["TitlePageMono at %p"](65536*(10+math.random(5))) } context("Libraries ") end context.removeunwantedspaces() \stopluasetups \startMPpage StartPage ; fill Page enlarged 1cm withcolor \MPcolor{extracolor} ; draw textext("\framed[loffset=2pt,roffset=2pt,frame=off,width=\paperwidth,align={normal,paragraph,verytolerant,stretch}]{\luasetup{swiglib}}") xysized (PaperWidth,PaperHeight) shifted center Page withcolor .8white ; draw textext.ulft("\definedfont[TitlePageMono]basics") xsized .75PaperWidth shifted lrcorner Page shifted (-1cm,2cm) withcolor \MPcolor{maincolor} ; % draw textext.ulft("\definedfont[TitlePageMono]in context mkiv") % xsized .6PaperWidth % shifted lrcorner Page % shifted (-1cm,6cm) % withcolor \MPcolor{maincolor} ; StopPage ; \stopMPpage \dontcomplain \startsubject[title=Contents] \placelist[section][alternative=a] \stopsubject \startsection[title=Introduction] Not long after we released \LUATEX\ 1.0, we started experimenting a bit more with so called foreign function interface: \FFI. Originally that interface to external libraries was only available in \LUAJITTEX, but a good and compatible alternative is now also available in the normal engine too. For users it is not that relevant to know how it works, as long as it works. It means that in addition to \SWIGLIB\ we have a method that doesn't demand compilation as it uses normal (public) libraries. Of course one needs to make sure that the right version of a library is used. And, as there is the danger of the \API\ having been changed in an incompatible way one can wonder if such a dependency is really what one wants. On the other hand one can expect \CONTEXT\ to keep up. Do you really need libraries? For instance does it really make sense to use curl, ghostscript or graphicmagic libraries while the command line version is (normally) just as efficient and avoids a dependency. This is even more true if you realizes that for instance a fetch or conversion only needs to happen once per run or in fact only when there is some change in the resource. On the other hand, when accessing databases one can avoid the often slower command line calls and save the hassle of intermediate files. Here efficiency wins. Also, when \CONTEXT\ is used in a high performance database backend application a distribution and the used libraries are not updated on a daily basis. \stopsection \startsection[title=Supported] Apart from some experiments we currently can use \FFI\ interfaced libraries in: \starttabulate[|l|l|l|l|l|] \FL \BC module \BC library \BC windows \BC unix \NC \NR \ML \NC util-crl \NC curl \NC libcurl \NC libcurl \NC \NR % todo: client and ffi \NC util-sql-imp-ffi \NC mysql \NC libmysql \NC libmysqlclient \NC \NR \NC util-sql-imp-sqlite \NC sqlite \NC sqlite3 \NC sqlite3 \NC \NR %NC font-phb-imp-library \NC harfbuzz \NC libharfbuzz \NC libharfbuzz \NC \NR % for testing uniscribe (idris fonts) %NC \NC ghostscript \NC \NC \NC \NR % only a few experiments %NC \NC graphicmagick \NC \NC \NC \NR % only a few experiments \LL \stoptabulate The profiler that we occasionally use to identify bottlenecks in the engine (for instance when we upgrade \LUA) uses \FFI\ to provide access to the high resolution timers but this is typically different per platform. One problem with libraries, especially on \WINDOWS\ is that the library is found on some system path and it can happen that multiple programs ship the same library but in different versions. You can try to play safe and put libraries in the \TEX\ tree, for instance on my system they are in: \starttyping c:/data/tex-context/tex/texmf-win64/bin/lib/luatex/lua/whatever/libwhatever.dll \stoptyping You can trace where libraries are looked for with: \starttyping \enabletrackers[resolvers.ffilib] \stoptyping or in \LUA\ with: \starttyping trackers.enable("resolvers.ffilib") \stoptyping The library is first located on one of the valid \TDS\ paths (these are sort of standardized in \TEX\ distributions) and then using the normal \FFI\ loader. As this is all still experimental in \LUATEX\ there is not much more to say about it now. Of course this kind of specialized support to a large degree depends on the need to use it. \stopsection \startsection[title=Colofon] \starttabulate[|B|p|] \NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR \NC version \NC \currentdate \NC \NR \NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR \NC comment \NC many thanks to Luigi Scarso for taking care of ffi support in the engines \NC \NR \stoptabulate \stopsection \stopdocument