diff options
author | Karl Berry <karl@freefriends.org> | 2017-06-25 21:51:46 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-06-25 21:51:46 +0000 |
commit | 0baef83f46e61ff1d06c181a1bd8e0df785ff73e (patch) | |
tree | af33845766e2b07b56e7cd98025bb29edb587a3a /Master/texmf-dist | |
parent | a32eb2dc2cb45c2d6d3713f1f17d183d9e1227a2 (diff) |
l3build (25jun17)
git-svn-id: svn://tug.org/texlive/trunk@44698 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/l3build/README.md | 25 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/l3build/l3build.pdf | bin | 626662 -> 627753 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/l3build/l3build.dtx | 359 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3build/l3build.lua | 221 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3build/regression-test.tex | 171 |
5 files changed, 362 insertions, 414 deletions
diff --git a/Master/texmf-dist/doc/latex/l3build/README.md b/Master/texmf-dist/doc/latex/l3build/README.md index d05d541855e..39b3e9ce2f5 100644 --- a/Master/texmf-dist/doc/latex/l3build/README.md +++ b/Master/texmf-dist/doc/latex/l3build/README.md @@ -1,7 +1,7 @@ l3build: a testing and building system for LaTeX3 ================================================= -Release 2017/05/29 +Release 2017/06/25 Overview -------- @@ -18,29 +18,11 @@ originally developed for supporting LaTeX3 development but are designed such that they can be readily used by others. Full documentation is provided. -Discussion ----------- - -Discussion concerning the approach, suggestions for improvements, -changes, additions, _etc._ should be addressed to the list -[LaTeX-L](http://news.gmane.org/group/gmane.comp.tex.latex.latex3). - -You can subscribe to this list by sending mail to - - listserv@urz.uni-heidelberg.de - -with the body containing - - subscribe LATEX-L <Your-First-Name> <Your-Second-Name> - Issues ------ The issue tracker for LaTeX3 is currently located -[on GitHub](https://github.com/latex3/latex3/issues). - -Please report specific issues with LaTeX3 code there; more general -discussion should be directed to the [LaTeX-L list](#Discussion). +[on GitHub](https://github.com/latex3/l3build/issues). The LaTeX3 Project ------------------ @@ -69,8 +51,7 @@ Former members of The LaTeX3 Project team were * Martin Schröder The development team can be contacted -by e-mail: <latex-team@latex-project.org>; for general LaTeX3 discussion -the [LaTeX-L list](#Discussion) should be used. +by e-mail: <latex-team@latex-project.org>. ----- diff --git a/Master/texmf-dist/doc/latex/l3build/l3build.pdf b/Master/texmf-dist/doc/latex/l3build/l3build.pdf Binary files differindex 4fe3f17adaa..2585333cf26 100644 --- a/Master/texmf-dist/doc/latex/l3build/l3build.pdf +++ b/Master/texmf-dist/doc/latex/l3build/l3build.pdf diff --git a/Master/texmf-dist/source/latex/l3build/l3build.dtx b/Master/texmf-dist/source/latex/l3build/l3build.dtx index 815d941b00b..ee9665618c1 100644 --- a/Master/texmf-dist/source/latex/l3build/l3build.dtx +++ b/Master/texmf-dist/source/latex/l3build/l3build.dtx @@ -71,27 +71,28 @@ \luavarset{tdsdir} {distribdir .. "/tds"} {Generated folder where files are organised for a TDS.} \luavarset{tdsroot} {"latex"}{Root directory of the TDS structure for the bundle/module to be installed into.} \luavarseparator -\luavarset{bibfiles} {\{"*.bib"\}}{\BibTeX{} database files.} -\luavarset{binaryfiles} {\{"*.pdf", "*.zip"\}} - {Files to be added in binary mode to zip files.} -\luavarset{bstfiles} {\{"*.bst"\}}{\BibTeX{} style files.} -\luavarset{checkfiles} {\{~\}}{Extra files unpacked purely for tests} -\luavarset{checksuppfiles} { }{Files needed for performing regression tests.} -\luavarset{cmdchkfiles} {\{~\}}{Files need to perform command checking (\cls{l3doc}-based documentation only).} -\luavarset{cleanfiles} {\{"*.log", "*.pdf", "*.zip"\}}{Files to delete when cleaning.} -\luavarset{demofiles} {\{~\}}{Files which show how to use a module.} -\luavarset{docfiles} {\{~\}}{Files which are part of the documentation but should not be typeset.} -\luavarset{excludefiles} {\{"*\string~"\}} {Files to ignore entirely (default for Emacs backup files).} -\luavarset{installfiles} {\{"*.sty"\}} {Files to install to the \TeX{} tree and similar tasks.} -\luavarset{makeindexfiles} {\{"*.ist"\}}{MakeIndex files to be included in a TDS-style zip} -\luavarset{sourcefiles} {\{"*.dtx", "*.ins"\}}{Files to copy for unpacking.} -\luavarset{textfiles} {\{"*.md", "*.txt"\}}{Plain text files to send to CTAN as-is.} -\luavarset{typesetdemofiles}{\{~\}} {Files to typeset before the documentation (as demos), but where the PDF results are not included in the release.} -\luavarset{typesetfiles} {\{"*.dtx"\}} {Files to typeset for documentation.} -\luavarset{typesetsuppfiles}{\{~\}} {Files needed to support typesetting when \enquote{sandboxed}.} -\luavarset{unpackfiles} {\{"*.ins"\}} {Files to run to perform unpacking.} -\luavarset{unpacksuppfiles} {\{~\}} {Files needed to support unpacking when \enquote{sandboxed}.} -\luavarset{versionfiles} {\{"*.dtx"\}} {Files for automatic version editing.} +\luavarset{bibfiles} {\{"*.bib"\}}{\BibTeX{} database files.} +\luavarset{binaryfiles} {\{"*.pdf", "*.zip"\}} + {Files to be added in binary mode to zip files.} +\luavarset{bstfiles} {\{"*.bst"\}}{\BibTeX{} style files.} +\luavarset{checkfiles} {\{~\}}{Extra files unpacked purely for tests} +\luavarset{checksuppfiles} { }{Files needed for performing regression tests.} +\luavarset{cmdchkfiles} {\{~\}}{Files need to perform command checking (\cls{l3doc}-based documentation only).} +\luavarset{cleanfiles} {\{"*.log", "*.pdf", "*.zip"\}}{Files to delete when cleaning.} +\luavarset{demofiles} {\{~\}}{Files which show how to use a module.} +\luavarset{docfiles} {\{~\}}{Files which are part of the documentation but should not be typeset.} +\luavarset{excludefiles} {\{"*\string~"\}} {Files to ignore entirely (default for Emacs backup files).} +\luavarset{installfiles} {\{"*.sty"\}} {Files to install to the \TeX{} tree and similar tasks.} +\luavarset{makeindexfiles} {\{"*.ist"\}}{MakeIndex files to be included in a TDS-style zip} +\luavarset{sourcefiles} {\{"*.dtx", "*.ins"\}}{Files to copy for unpacking.} +\luavarset{textfiles} {\{"*.md", "*.txt"\}}{Plain text files to send to CTAN as-is.} +\luavarset{typesetdemofiles} {\{~\}} {Files to typeset before the documentation (as demos), but where the PDF results are not included in the release.} +\luavarset{typesetfiles} {\{"*.dtx"\}} {Files to typeset for documentation.} +\luavarset{typesetsuppfiles} {\{~\}} {Files needed to support typesetting when \enquote{sandboxed}.} +\luavarset{typesetsourcefiles}{\{~\}} {Files to copy to unpacking when typesetting.} +\luavarset{unpackfiles} {\{"*.ins"\}} {Files to run to perform unpacking.} +\luavarset{unpacksuppfiles} {\{~\}} {Files needed to support unpacking when \enquote{sandboxed}.} +\luavarset{versionfiles} {\{"*.dtx"\}} {Files for automatic version editing.} \luavarseparator \luavarset{bakext} {".bak"} {Extension of backup files.} \luavarset{dviext} {".dvi"} {Extension of DVI files.} @@ -202,7 +203,7 @@ % }^^A % } % -% \date{Released 2017/05/29} +% \date{Released 2017/06/25} % % \maketitle % \tableofcontents @@ -440,7 +441,13 @@ % Files that match |typesetsuppfiles| in the |support| directory (|supportdir|) are copied into the |build/local| directory (|localdir|) for the typesetting compilation process. % Additional dependencies listed in the \var{typesetdeps} variable (empty by default) will also be installed. % +% Source files specified in \var{sourcefiles} and \var{typesetsourcefiles} +% are unpacked before the typesetting takes place. (In most cases +% \var{typesetsourcefiles} will be mepty, but may be used where there are +% files to unpack \emph{only} for typesetting.) +% % If \var{typesetsearch} is \code{true} (default), standard \texttt{texmf} search trees are used in the typesetting compilation. If set to false, \emph{all} necessary files for compilation must be included in the |build/local| sandbox. +% % \end{buildcmd} % % \begin{buildcmd}{doc \meta{name(s)}} @@ -673,9 +680,6 @@ % \end{itemize} % Modifications made in lines are: % \begin{itemize} -% \item Removal of the name of the test file itself. -% \item Removal of the |pdftex.map| load information given during -% first page shipout. % \item Removal spaces at the start of lines. % \item Removal of |./| at start of file names. % \item Standardisation of the list of units known to \TeX{} (\pdfTeX{} @@ -1157,11 +1161,20 @@ % \meta{target} directory. % \end{function} % +% \begin{function}{dirname()} +% \begin{syntax} +% |dirname(|\meta{file}|)| +% \end{syntax} +% Returns a string comprising the path to a \meta{file} with the name removed +% (\emph{i.e.}~up to the last |/|). Where the \meta{file} has no path data, +% |"."| is returned. +% \end{function} +% % \begin{function}{basename()} % \begin{syntax} % |basename(|\meta{file}|)| % \end{syntax} -% Returns a string comprising the full name of the file with the +% Returns a string comprising the full name of the \meta{file} with the % path removed (\emph{i.e.}~from the last |/| onward). % \end{function} % @@ -1243,6 +1256,14 @@ % error level. % \end{function} % +% \begin{function}{spltpath()} +% \begin{syntax} +% |splitpath(|\meta{file}|)| +% \end{syntax} +% Returns two strings split at the last |/|: the \texttt{dirname()} and +% the |basename()|. +% \end{function} +% % \begin{function}{unix_to_win()} % \begin{syntax} % |unix_to_win(|\meta{path}|)| @@ -1312,21 +1333,33 @@ % % \subsection{Preliminaries} % -% Unlike in the \LaTeXe{} regression test suite, reset catcodes: each test should set these -% as appropriate. There's also a quick test for Con\TeX{}t: it defines |\unprotect| -% which should be a reasonable marker (and is needed as some catcodes are otherwise -% wrong). +% We require \eTeX{}. +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname eTeXversion\endcsname\relax + \errmessage{e-TeX is required to use regression-test.tex}% + \expandafter\endinput +\fi +% \end{macrocode} +% +% \begin{macro}{\reset@catcodes} +% Unlike in the \LaTeXe{} regression test suite, reset catcodes: each test +% should set these as appropriate. There's also a quick test for Con\TeX{}t: +% it defines |\unprotect| which should be a reasonable marker (and is +% needed as some catcodes are otherwise wrong). % \begin{macrocode} \ifx\unprotect\undefined \expandafter\edef\csname reset\string @catcodes\endcsname{% \catcode`\noexpand\@=\the\catcode`\@\relax - } + }% \catcode`\@=11 % \else \unprotect \def\reset@catcodes{\protect}% \fi % \end{macrocode} +% \end{macro} +% % Put \TeX{} into scroll mode, and stop it showing the % implementation details of macros in error messages. % \begin{macrocode} @@ -1341,24 +1374,30 @@ \showboxdepth=\maxdimen % \end{macrocode} % -% The |\showoutput| command of \LaTeX{} calls |\loggingoutput| which in -% turn calls |\errorstopmode| but we want to continue running without -% any stops. +% \begin{macro}{\logginoutput} +% The |\showoutput| command of \LaTeX{} calls |\loggingoutput| which in turn +% calls |\errorstopmode| but we want to continue running without any stops. % \begin{macrocode} -\def\loggingoutput{\tracingoutput1 - \showboxbreadth\maxdimen\showboxdepth\maxdimen} +\def\loggingoutput{% + \tracingoutput=1 % + \showboxbreadth=\maxdimen + \showboxdepth=\maxdimen +} % \end{macrocode} +% \end{macro} % -% Set the newline character: \LaTeXe{} does this but plain-based formats -% do not. +% Set the newline character: \LaTeXe{} does this but plain-based formats do +% not. % \begin{macrocode} \newlinechar=`\^^J % \end{macrocode} % % \subsection{Commands in test files} % -% A long version of |\typeout|, because tests may contain |\par| tokens. -% Besides, with that |\TYPE|, we can do |\TYPE { ... \TRUE ... \NEWLINE ... }|. +% \begin{macro}{\LONGTYPEOUT, \TYPE} +% A long version of |\typeout|, because tests may contain |\par| tokens. +% Besides, with that |\TYPE|, we can do +% |\TYPE { ... \TRUE ... \NEWLINE ... }|. % \begin{macrocode} \long\def\LONGTYPEOUT#1{% \begingroup @@ -1369,48 +1408,24 @@ \let\TYPE\LONGTYPEOUT % \end{macrocode} % -% Start the test, after the optional |\documentclass| -% |\begin{document}| commands with |\START|. All lines in the |.log| file -% before this will be ignored. -% -% It also prints a DocStrip-style -% character table in the |.tlg| file. -% Is this necessary any more? Probably too late to remove it. +% \begin{macro}{\STARTMESSAGE, \START} +% Start the test, after the optional |\documentclass| +% |\begin{document}| commands with |\START|. All lines in the |.log| file +% before this will be ignored. % \begin{macrocode} \def\STARTMESSAGE{This is a generated file for the l3build validation system.} -\def\START{\LONGTYPEOUT{^^JSTART-TEST-LOG^^J^^J% - \STARTMESSAGE% -^^J^^JDon't change this file in any respect.% -^^J^^J}} -\begingroup -\catcode`\^^\=0 -\catcode`\^^A=\catcode`\% -^^\catcode`^^\ =11 -^^\catcode`^^\%=11 -^^\catcode`^^\#=11 -^^\catcode`^^\~=11 -^^\endlinechar=`^^\^^J -^^\catcode`^^\\=11^^A -^^\gdef^^\CTable{ -%% \CharacterTable -%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -%% Digits \0\1\2\3\4\5\6\7\8\9 -%% Exclamation \! Double quote \" Hash (number) \# -%% Dollar \$ Percent \% Ampersand \& -%% Acute accent \' Left paren \( Right paren \) -%% Asterisk \* Plus \+ Comma \, -%% Minus \- Point \. Solidus \/ -%% Colon \: Semicolon \; Less than \< -%% Equals \= Greater than \> Question mark \? -%% Commercial at \@ Left bracket \[ Backslash \\ -%% Right bracket \] Circumflex \^ Underscore \_ -%% Grave accent \` Left brace \{ Vertical bar \| -%% Right brace \} Tilde \~} -%% -}^^A -^^\endgroup{}% +\def\START{% + \LONGTYPEOUT{^^JSTART-TEST-LOG^^J}% + \LONGTYPEOUT{^^J% + \STARTMESSAGE% + ^^J^^JDon't change this file in any respect.% + ^^J^^J% + }% +} % \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@@end, \END} % The test should end with |\END| or |\end{document}| % or |\bye| in plain \TeX{}. % \begin{macrocode} @@ -1419,168 +1434,87 @@ \else \let\@@@end\@@end \fi -\def\END - {% - \ifx\currentiflevel\@undefined\else - \ifnum\currentgrouplevel>0 % - \LONGTYPEOUT{Bad grouping: \the\currentgrouplevel!}% - \fi - \ifnum\currentiflevel>2 % - \LONGTYPEOUT{Bad conditionals: \the\numexpr\currentiflevel-2!}% - \fi - \fi - \LONGTYPEOUT{^^JEND-TEST-LOG^^J}\@@@end - } +\def\END{% + \ifnum\currentgrouplevel>0 % + \LONGTYPEOUT{Bad grouping: \the\currentgrouplevel!}% + \fi + \ifnum\currentiflevel>2 % + \LONGTYPEOUT{Bad conditionals: \the\numexpr\currentiflevel-2!}% + \fi + \LONGTYPEOUT{^^JEND-TEST-LOG^^J}% + \@@@end +} \ifx\@@end\@undefined \let\end\END \else \let\@@end\END \fi % \end{macrocode} -% After the |\START| should come declarations of the format and style -% options being used. -% \begin{macrocode} -\def\FORMAT#1{\LONGTYPEOUT{Format: #1}% - \def\@tempa{#1}\ifx\@tempa\@EJ\else - \OMIT\TYPE{WARNING: Declared format #1,^^JActual format \@EJ}\TIMO\fi} -% \end{macrocode} -% The old version got this information from everyjob, -% but that does not work with \LaTeXe\ as |\everyjob| is cleared. -% \begin{macrocode} -\edef\@EJ{\fmtname <\fmtversion>} -% \end{macrocode} -% Some author info: -% \begin{macrocode} -\def\AUTHOR#1{\LONGTYPEOUT{Author: #1}} -% \end{macrocode} -% Surround commands which produce irrelevant lines in the .log file by -% |\OMIT|\dots|\TIMO| +% \end{macro} +% +% \begin{macro}{\OMIT, \TIMO} +% Surround commands which produce irrelevant lines in the |.log| file by +% |\OMIT|\dots|\TIMO| % \begin{macrocode} \def\OMIT{\LONGTYPEOUT{OMIT}} \def\TIMO{\LONGTYPEOUT{TIMO}} % \end{macrocode} -% Not all packages declare themselves to the log file, and we can not -% rely on TeX`s output as it includes full path names, and does not -% include version numbers etc. -% -% If the class or package is loaded with options, you may -% specify the options in the |\CLASS| (|\PACKAGE|) declaration. eg: -% \begin{verbatim} -% \CLASS[german,a4page]{article v2.0 1994/01/02} -% \PACKAGE{ifthen v2.2 1993/11/12} -% \PACKAGE[dvips]{graphics v 3.8 1994/02/02} -% \end{verbatim} -% \begin{macrocode} -\def\CLASS{\@ifnextchar[\OPTCLASS\XCLASS} -\def\OPTCLASS[#1]#2{% - \TYPE{Main Class: #2^^J\space\space\space\space Options: #1}} -\def\XCLASS#1{% - \TYPE{Main Class: #1}} -\def\PACKAGE{\@ifnextchar[\OPTPACKAGE\XPACKAGE} -\def\OPTPACKAGE[#1]#2{% - \TYPE{Package: #2^^J\space\space\space\space Options: #1}} -\def\XPACKAGE#1{% - \TYPE{Package: #1}} -% \end{macrocode} +% \end{macro} % -% The commands above require 2e's \verb|\@ifnextchar|, so copy that definition verbatim if necessary: -% \begin{macrocode} -\ifx\@ifnextchar\@undefined -\long\def\@ifnextchar#1#2#3{% - \let\reserved@d=#1% - \def\reserved@a{#2}% - \def\reserved@b{#3}% - \futurelet\@let@token\@ifnch} -\def\@ifnch{% - \ifx\@let@token\@sptoken - \let\reserved@c\@xifnch - \else - \ifx\@let@token\reserved@d - \let\reserved@c\reserved@a - \else - \let\reserved@c\reserved@b - \fi - \fi - \reserved@c} -\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token -\def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch} -\fi -% \end{macrocode} -% After the above declarations, and before the main tests, you may -% optionally declare' all the commands in the `module' that you are -% about to test. These commands will be registered as defined, -% undefined or relaxed (i.e.~|\let| to |\relax|). You may wish to declare -% commands not currently implemented, so that if they are added at a -% later stage, the test will fail, reminding someone to document the -% fact that the user interface has changed. -% \begin{macrocode} -\def\CHECKCOMMAND#1{% - \ifx#1\@undefined\LONGTYPEOUT{Undefined \string#1}\else - \ifx#1\relax\LONGTYPEOUT{Relaxed \space\space\string#1}\else - \LONGTYPEOUT{Defined \space\space\string#1}\fi\fi} -% \end{macrocode} % To allow testing of possible changes, we allow extra code to be read % in before the test starts. The necessary code should be placed in a % file |regression-test.cfg|. % \begin{macrocode} \ifx\InputIfFileExists\@undefined -\newread\@inputcheck -\long\def\InputIfFileExists#1#2#3{% - \openin\@inputcheck#1\relax - \ifeof\@inputcheck - \def\reserved@a{#3}% - \else - \def\reserved@a{#2\input #1\relax}% - \fi - \closein\@inputcheck - \reserved@a} + \newread\@inputcheck + \long\def\InputIfFileExists#1#2#3{% + \openin\@inputcheck#1\relax + \ifeof\@inputcheck + \def\reserved@a{#3}% + \else + \def\reserved@a{#2\input #1\relax}% + \fi + \closein\@inputcheck + \reserved@a + }% \fi \InputIfFileExists{regression-test.cfg} - {\LONGTYPEOUT{^^J***^^Jregression-test.cfg in operation^^J***^^J}}{} -% \end{macrocode} -% -% Load the map file early so it does not appear in the log. -% \begin{macrocode} -\ifdefined\pdfoutput - \ifnum\pdfoutput>0 % - \pdfmapfile{pdftex.map}% - \fi -\else - \ifdefined\outputmode - \ifnum\outputmode>0 % - \pdfextension mapfile{pdftex.map}% - \fi - \fi -\fi + {\LONGTYPEOUT{^^J***^^Jregression-test.cfg in operation^^J***^^J}}{} % \end{macrocode} % % \subsection{Formatting the \texttt{.log} file} % -% We are not starved for space in the log file output, so let's make it as -% verbose as is useful when reading the |.diff|'s. +% \begin{macro}{\gTESTint} +% For tracking the total number of tests. +% \begin{macrocode} +\newcount\gTESTint +% \end{macrocode} +% \end{macro} +% +% \begin{macro} +% {\SEPARATOR, \TEST, \TESTEXP, \TRUE, \FALSE, \YES, \NO, \NEWLINE} +% We are not starved for space in the log file output, so let's make it as +% verbose as is useful when reading the |.diff|'s. % \begin{macrocode} -\newcount \gTESTint \def\SEPARATOR{% \TYPE{% ============================================================% }% } -% \end{macrocode} -% \begin{macrocode} \long\def\TEST#1#2{% - \advance \gTESTint 1 % + \global\advance\gTESTint by 1 % \SEPARATOR - \LONGTYPEOUT{% - TEST \the\gTESTint: \detokenize{#1}}% + \LONGTYPEOUT{TEST \the\gTESTint: \detokenize{#1}}% \SEPARATOR \begingroup \let\TYPE\LONGTYPEOUT #2% \endgroup - \SEPARATOR \LONGTYPEOUT{}% + \SEPARATOR + \LONGTYPEOUT{}% } \long\def\TESTEXP#1#2{% - \advance \gTESTint 1 % + \global\advance\gTESTint by 1 % \SEPARATOR \LONGTYPEOUT{% TEST \the\gTESTint: \detokenize{#1}}% @@ -1598,9 +1532,26 @@ \def \NO {\TYPE{NO}} \def \NEWLINE {\TYPE{^^J}} % \end{macrocode} +% \end{macro} % % \subsection{Suppressing variable data in output} % +% Load the map file early so it does not appear in the log. +% \begin{macrocode} +\ifx\pdfoutput\@undefined + \ifx\outputmode\@undefined + \else + \ifnum\outputmode>0 % + \pdfextension mapfile{pdftex.map}% + \fi + \fi +\else + \ifnum\pdfoutput>0 % + \pdfmapfile{pdftex.map}% + \fi +\fi +% \end{macrocode} +% % To make any PDF file produced comparable we need to suppress various % pieces of data. This works in concert with setting the epoch from the % environment side (as not all output can be controlled here). We are diff --git a/Master/texmf-dist/tex/latex/l3build/l3build.lua b/Master/texmf-dist/tex/latex/l3build/l3build.lua index 44a4783727d..958c30e0d6c 100644 --- a/Master/texmf-dist/tex/latex/l3build/l3build.lua +++ b/Master/texmf-dist/tex/latex/l3build/l3build.lua @@ -23,7 +23,7 @@ for those people who are interested. --]] -- Version information -release_date = "2017/05/29" +release_date = "2017/06/25" -- "module" is a deprecated function in Lua 5.2: as we want the name -- for other purposes, and it should eventually be 'free', simply @@ -85,26 +85,27 @@ end -- File types for various operations -- Use Unix-style globs -- All of these may be set earlier, so a initialised conditionally -bibfiles = bibfiles or {"*.bib"} -binaryfiles = binaryfiles or {"*.pdf", "*.zip"} -bstfiles = bstfiles or {"*.bst"} -checkfiles = checkfiles or { } -checksuppfiles = checksuppfiles or { } -cmdchkfiles = cmdchkfiles or { } -cleanfiles = cleanfiles or {"*.log", "*.pdf", "*.zip"} -demofiles = demofiles or { } -docfiles = docfiles or { } -excludefiles = excludefiles or {"*~"} -installfiles = installfiles or {"*.sty"} -makeindexfiles = makeindexfiles or {"*.ist"} -sourcefiles = sourcefiles or {"*.dtx", "*.ins"} -textfiles = textfiles or {"*.md", "*.txt"} -typesetdemofiles = typesetdemofiles or { } -typesetfiles = typesetfiles or {"*.dtx"} -typesetsuppfiles = typesetsuppfiles or { } -unpackfiles = unpackfiles or {"*.ins"} -unpacksuppfiles = unpacksuppfiles or { } -versionfiles = versionfiles or {"*.dtx"} +bibfiles = bibfiles or {"*.bib"} +binaryfiles = binaryfiles or {"*.pdf", "*.zip"} +bstfiles = bstfiles or {"*.bst"} +checkfiles = checkfiles or { } +checksuppfiles = checksuppfiles or { } +cmdchkfiles = cmdchkfiles or { } +cleanfiles = cleanfiles or {"*.log", "*.pdf", "*.zip"} +demofiles = demofiles or { } +docfiles = docfiles or { } +excludefiles = excludefiles or {"*~"} +installfiles = installfiles or {"*.sty"} +makeindexfiles = makeindexfiles or {"*.ist"} +sourcefiles = sourcefiles or {"*.dtx", "*.ins"} +textfiles = textfiles or {"*.md", "*.txt"} +typesetdemofiles = typesetdemofiles or { } +typesetfiles = typesetfiles or {"*.dtx"} +typesetsuppfiles = typesetsuppfiles or { } +typesetsourcefiles = typesetsourcefiles or { } +unpackfiles = unpackfiles or {"*.ins"} +unpacksuppfiles = unpacksuppfiles or { } +versionfiles = versionfiles or {"*.dtx"} -- Roots which should be unpacked to support unpacking/testing/typesetting checkdeps = checkdeps or { } @@ -489,7 +490,7 @@ end -- Copy files 'quietly' function cp(glob, source, dest) local errorlevel - for _,i in ipairs(filelist(source, glob)) do + for i,_ in pairs(tree(source, glob)) do local source = source .. "/" .. i if os_type == "windows" then if lfs_attributes(source)["mode"] == "directory" then @@ -562,6 +563,58 @@ function filelist(path, glob) return files end +-- Does what filelist does, but can also glob subdirectories. In the returned +-- table, the keys are paths relative to the given starting path, the values +-- are their counterparts relative to the current working directory. +function tree(path, glob) + function cropdots(path) + return gsub(gsub(path, "^%./", ""), "/%./", "/") + end + function always_true() + return true + end + function is_dir(file) + return lfs.attributes(file)["mode"] == "directory" + end + local dirs = {["."]=cropdots(path)} + for pattern, critereon in gmatch(cropdots(glob), "([^/]+)(/?)") do + local critereon = critereon == "/" and is_dir or always_true + function fill(path, dir, table) + for _, file in ipairs(filelist(dir, pattern)) do + local fullpath = path .. "/" .. file + if file ~= "." and file ~= ".." and + fullpath ~= maindir .. "/build" and + (string.sub(pattern, 1, 1) == "." + or string.sub(file, 1, 1) ~= ".") + then + local fulldir = dir .. "/" .. file + if critereon(fulldir) then + table[fullpath] = fulldir + end + end + end + end + local newdirs = {} + if pattern == "**" then + while true do + path, dir = next(dirs) + if not path then + break + end + dirs[path] = nil + newdirs[path] = dir + fill(path, dir, dirs) + end + else + for path, dir in pairs(dirs) do + fill(path, dir, newdirs) + end + end + dirs = newdirs + end + return dirs +end + function mkdir(dir) if os_type == "windows" then -- Windows (with the extensions) will automatically make directory trees @@ -658,7 +711,7 @@ end -- Set up the check system files: needed for checking one or more tests and -- for saving the test files -local function checkinit() +function checkinit() cleandir(testdir) depinstall(checkdeps) -- Copy dependencies to the test directory itself: this makes the paths @@ -801,26 +854,17 @@ local function formatlog(logfile, newfile, engine) end local line = (lastline or "") .. line lastline = "" - -- Remove test file name from lines - -- This needs to extract the base name from the log name, - -- and one to allow for the case that there might be "-" chars - -- in the name (other cases are ignored) - line = gsub( - line, - gsub( - match("/" .. logfile, ".*/(.*)%" .. logext .. "$"), - "-", - "%%-" - ), - "" - ) -- Zap ./ at begin of filename line = gsub(line, "%(%.%/", "(") -- Zap paths if places other than 'here' are accessible if checksearch then - local pattern = "%w?:?/[^ ]*/([^/%(%)]*%.%w*)" + -- The pattern excludes < and > as the image part can have + -- several entries on one line + local pattern = "%w?:?/[^ %<%>]*/([^/%(%)]*%.%w*)" -- Files loaded from TeX: all start ( -- ) line = gsub(line, "%(" .. pattern, "(../%1") + -- Images + line = gsub(line, "<" .. pattern .. ">", "<../%1>") -- luaotfload files start with keywords line = gsub(line, "from " .. pattern .. "%(", "from. ./%1(") line = gsub(line, ": " .. pattern .. "%)", ": ../%1)") @@ -849,6 +893,7 @@ local function formatlog(logfile, newfile, engine) end -- Remove 'normal' direction information on boxes with (u)pTeX line = gsub(line, ",? yoko direction,?", "") + line = gsub(line, ",? yoko%(math%) direction,?", "") -- Remove the \special line that in DVI mode keeps PDFs comparable if match(line, "^%.*\\special%{pdf: docinfo << /Creator") then return "" @@ -1402,15 +1447,28 @@ function dvitopdf(name, dir, engine, hide) end end --- Strip the path from a file name (if present) +-- Split a path into file and directory component +function splitpath(file) + local path, name = match(file, "^(.*)/([^/]*)$") + if path then + return path, name + else + return ".", file + end +end + +-- Arguably clearer names function basename(file) - local name = match(file, "^.*/([^/]*)$") - return name or file + return(select(2, splitpath(file))) +end + +function dirname(file) + return(select(1, splitpath(file))) end -- Strip the extension from a file name (if present) function jobname(file) - local name = match(basename(file), "^(.*)%.") + local name = match(select(2, splitpath(file)), "^(.*)%.") return name or file end @@ -1424,12 +1482,14 @@ end -- -- An auxiliary used to set up the environmental variables -function runtool(envvar, command) +function runtool(subdir, dir, envvar, command) + dir = dir or "." return( run( - typesetdir, + typesetdir .. "/" .. subdir, os_setenv .. " " .. envvar .. "=." .. os_pathsep - .. abspath(localdir) + .. abspath(localdir) .. os_pathsep + .. abspath(dir .. "/" .. subdir) .. (typesetsearch and os_pathsep or "") .. os_concat .. command @@ -1437,16 +1497,17 @@ function runtool(envvar, command) ) end -function biber(name) +function biber(name, dir) if fileexists(typesetdir .. "/" .. name .. ".bcf") then + local path, name = splitpath(name) return( - runtool("BIBINPUTS", biberexe .. " " .. biberopts .. " " .. name) + runtool(path, dir, "BIBINPUTS", biberexe .. " " .. biberopts .. " " .. name) ) end return 0 end -function bibtex(name) +function bibtex(name, dir) if fileexists(typesetdir .. "/" .. name .. ".aux") then -- LaTeX always generates an .aux file, so there is a need to -- look inside it for a \citation line @@ -1456,6 +1517,7 @@ function bibtex(name) else grep = "\\\\\\\\" end + local path, name = splitpath(name) if run( typesetdir, os_grepexe .. " \"^" .. grep .. "citation{\" " .. name .. ".aux > " @@ -1468,6 +1530,7 @@ function bibtex(name) return( -- Cheat slightly as we need to set two variables runtool( + path, dir, "BIBINPUTS", os_setenv .. " BSTINPUTS=." .. os_pathsep .. abspath(localdir) @@ -1481,34 +1544,38 @@ function bibtex(name) return 0 end -function makeindex(name, inext, outext, logext, style) +function makeindex(name, dir, inext, outext, logext, style) if fileexists(typesetdir .. "/" .. name .. inext) then + local path, name = splitpath(name) return( runtool( + path, dir, "INDEXSTYLE", makeindexexe .. " " .. makeindexopts .. " " .. " -s " .. style .. " -o " .. name .. outext - .. " -t " .. name .. logext .. " " .. name .. inext + .. " -t " .. name .. " " .. name .. inext ) ) end return 0 end -function tex(file) +function tex(file, dir) + local path, name = splitpath(file) return( runtool( + path, dir, "TEXINPUTS", typesetexe .. " " .. typesetopts .. " \"" .. typesetcmds - .. "\\input " .. file .. "\"" + .. "\\input " .. name .. "\"" ) ) end -function typesetpdf(file) +function typesetpdf(file, dir) local name = jobname(file) print("Typesetting " .. name) - local errorlevel = typeset(file) + local errorlevel = typeset(file, dir) if errorlevel == 0 then os_remove(name .. ".pdf") cp(name .. ".pdf", typesetdir, ".") @@ -1518,24 +1585,25 @@ function typesetpdf(file) return errorlevel end -typeset = typeset or function(file) - local errorlevel = tex(file) +typeset = typeset or function(file, dir) + dir = dir or "." + local errorlevel = tex(file, dir) if errorlevel ~= 0 then return errorlevel else local name = jobname(file) - errorlevel = biber(name) + bibtex(name) + errorlevel = biber(name, dir) + bibtex(name, dir) if errorlevel == 0 then - local function cycle(name) + local function cycle(name, dir) return( - makeindex(name, ".glo", ".gls", ".glg", glossarystyle) + - makeindex(name, ".idx", ".ind", ".ilg", indexstyle) + - tex(file) + makeindex(name, dir, ".glo", ".gls", ".glg", glossarystyle) + + makeindex(name, dir, ".idx", ".ind", ".ilg", indexstyle) + + tex(file, dir) ) end - errorlevel = cycle(name) + errorlevel = cycle(name, dir) if errorlevel == 0 then - errorlevel = cycle(name) + errorlevel = cycle(name, dir) end end return errorlevel @@ -1859,12 +1927,12 @@ function doc(files) cp(i, supportdir, typesetdir) end depinstall(typesetdeps) - unpack() + unpack({sourcefiles, typesetsourcefiles}) -- Main loop for doc creation for _, typesetfiles in ipairs({typesetdemofiles, typesetfiles}) do for _,i in ipairs(typesetfiles) do for _, dir in ipairs({unpackdir, typesetdir}) do - for _,j in ipairs(filelist(dir, i)) do + for j,_ in pairs(tree(dir, i)) do -- Allow for command line selection of files local typeset = true if files and next(files) then @@ -1877,7 +1945,7 @@ function doc(files) end end if typeset then - local errorlevel = typesetpdf(abspath(dir) .. "/" .. j) + local errorlevel = typesetpdf(j, dir) if errorlevel ~= 0 then return errorlevel end @@ -2068,12 +2136,12 @@ end -- Unpack the package files using an 'isolated' system: this requires -- a copy of the 'basic' DocStrip program, which is used then removed -function unpack() +function unpack(sources) local errorlevel = depinstall(unpackdeps) if errorlevel ~= 0 then return errorlevel end - errorlevel = bundleunpack() + errorlevel = bundleunpack({"."}, sources) if errorlevel ~= 0 then return errorlevel end @@ -2088,7 +2156,7 @@ end -- Split off from the main unpack so it can be used on a bundle and not -- leave only one modules files -bundleunpack = bundleunpack or function(sourcedir) +bundleunpack = bundleunpack or function(sourcedir, sources) local errorlevel = mkdir(localdir) if errorlevel ~=0 then return errorlevel @@ -2098,10 +2166,12 @@ bundleunpack = bundleunpack or function(sourcedir) return errorlevel end for _,i in ipairs(sourcedir or {"."}) do - for _,j in ipairs(sourcefiles) do - errorlevel = cp(j, i, unpackdir) - if errorlevel ~=0 then - return errorlevel + for _,j in ipairs(sources or {sourcefiles}) do + for _,k in ipairs(j) do + errorlevel = cp(k, i, unpackdir) + if errorlevel ~=0 then + return errorlevel + end end end end @@ -2112,20 +2182,21 @@ bundleunpack = bundleunpack or function(sourcedir) end end for _,i in ipairs(unpackfiles) do - for _,j in ipairs(filelist(unpackdir, i)) do + for j,_ in pairs(tree(unpackdir, i)) do -- This 'yes' business is needed to pass a series of "y\n" to -- TeX if \askforoverwrite is true -- That is all done using a file as it's the only way on Windows and -- on Unix the "yes" command can't be used inside execute (it never -- stops, which confuses Lua) execute(os_yes .. ">>" .. localdir .. "/yes") + local path, name = splitpath(j) local localdir = abspath(localdir) errorlevel = run( - unpackdir, + unpackdir .. "/" .. path, os_setenv .. " TEXINPUTS=." .. os_pathsep .. localdir .. (unpacksearch and os_pathsep or "") .. os_concat .. - unpackexe .. " " .. unpackopts .. " " .. j .. " < " + unpackexe .. " " .. unpackopts .. " " .. name .. " < " .. localdir .. "/yes" .. (optquiet and (" > " .. os_null) or "") ) diff --git a/Master/texmf-dist/tex/latex/l3build/regression-test.tex b/Master/texmf-dist/tex/latex/l3build/regression-test.tex index b11581fae21..eae274e09f6 100644 --- a/Master/texmf-dist/tex/latex/l3build/regression-test.tex +++ b/Master/texmf-dist/tex/latex/l3build/regression-test.tex @@ -18,10 +18,15 @@ %% This file is part of the "l3build bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname eTeXversion\endcsname\relax + \errmessage{e-TeX is required to use regression-test.tex}% + \expandafter\endinput +\fi \ifx\unprotect\undefined \expandafter\edef\csname reset\string @catcodes\endcsname{% \catcode`\noexpand\@=\the\catcode`\@\relax - } + }% \catcode`\@=11 % \else \unprotect @@ -31,8 +36,11 @@ \errorcontextlines=-1 % \showboxbreadth=\maxdimen \showboxdepth=\maxdimen -\def\loggingoutput{\tracingoutput1 - \showboxbreadth\maxdimen\showboxdepth\maxdimen} +\def\loggingoutput{% + \tracingoutput=1 % + \showboxbreadth=\maxdimen + \showboxdepth=\maxdimen +} \newlinechar=`\^^J \long\def\LONGTYPEOUT#1{% \begingroup @@ -42,146 +50,71 @@ } \let\TYPE\LONGTYPEOUT \def\STARTMESSAGE{This is a generated file for the l3build validation system.} -\def\START{\LONGTYPEOUT{^^JSTART-TEST-LOG^^J^^J% - \STARTMESSAGE% -^^J^^JDon't change this file in any respect.% -^^J^^J}} -\begingroup -\catcode`\^^\=0 -\catcode`\^^A=\catcode`\% -^^\catcode`^^\ =11 -^^\catcode`^^\%=11 -^^\catcode`^^\#=11 -^^\catcode`^^\~=11 -^^\endlinechar=`^^\^^J -^^\catcode`^^\\=11^^A -^^\gdef^^\CTable{ -%% \CharacterTable -%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -%% Digits \0\1\2\3\4\5\6\7\8\9 -%% Exclamation \! Double quote \" Hash (number) \# -%% Dollar \$ Percent \% Ampersand \& -%% Acute accent \' Left paren \( Right paren \) -%% Asterisk \* Plus \+ Comma \, -%% Minus \- Point \. Solidus \/ -%% Colon \: Semicolon \; Less than \< -%% Equals \= Greater than \> Question mark \? -%% Commercial at \@ Left bracket \[ Backslash \\ -%% Right bracket \] Circumflex \^ Underscore \_ -%% Grave accent \` Left brace \{ Vertical bar \| -%% Right brace \} Tilde \~} -%% -}^^A -^^\endgroup{}% +\def\START{% + \LONGTYPEOUT{^^JSTART-TEST-LOG^^J}% + \LONGTYPEOUT{^^J% + \STARTMESSAGE% + ^^J^^JDon't change this file in any respect.% + ^^J^^J% + }% +} \ifx\@@end\@undefined \let\@@@end\end \else \let\@@@end\@@end \fi -\def\END - {% - \ifx\currentiflevel\@undefined\else - \ifnum\currentgrouplevel>0 % - \LONGTYPEOUT{Bad grouping: \the\currentgrouplevel!}% - \fi - \ifnum\currentiflevel>2 % - \LONGTYPEOUT{Bad conditionals: \the\numexpr\currentiflevel-2!}% - \fi - \fi - \LONGTYPEOUT{^^JEND-TEST-LOG^^J}\@@@end - } +\def\END{% + \ifnum\currentgrouplevel>0 % + \LONGTYPEOUT{Bad grouping: \the\currentgrouplevel!}% + \fi + \ifnum\currentiflevel>2 % + \LONGTYPEOUT{Bad conditionals: \the\numexpr\currentiflevel-2!}% + \fi + \LONGTYPEOUT{^^JEND-TEST-LOG^^J}% + \@@@end +} \ifx\@@end\@undefined \let\end\END \else \let\@@end\END \fi -\def\FORMAT#1{\LONGTYPEOUT{Format: #1}% - \def\@tempa{#1}\ifx\@tempa\@EJ\else - \OMIT\TYPE{WARNING: Declared format #1,^^JActual format \@EJ}\TIMO\fi} -\edef\@EJ{\fmtname <\fmtversion>} -\def\AUTHOR#1{\LONGTYPEOUT{Author: #1}} \def\OMIT{\LONGTYPEOUT{OMIT}} \def\TIMO{\LONGTYPEOUT{TIMO}} -\def\CLASS{\@ifnextchar[\OPTCLASS\XCLASS} -\def\OPTCLASS[#1]#2{% - \TYPE{Main Class: #2^^J\space\space\space\space Options: #1}} -\def\XCLASS#1{% - \TYPE{Main Class: #1}} -\def\PACKAGE{\@ifnextchar[\OPTPACKAGE\XPACKAGE} -\def\OPTPACKAGE[#1]#2{% - \TYPE{Package: #2^^J\space\space\space\space Options: #1}} -\def\XPACKAGE#1{% - \TYPE{Package: #1}} -\ifx\@ifnextchar\@undefined -\long\def\@ifnextchar#1#2#3{% - \let\reserved@d=#1% - \def\reserved@a{#2}% - \def\reserved@b{#3}% - \futurelet\@let@token\@ifnch} -\def\@ifnch{% - \ifx\@let@token\@sptoken - \let\reserved@c\@xifnch - \else - \ifx\@let@token\reserved@d - \let\reserved@c\reserved@a +\ifx\InputIfFileExists\@undefined + \newread\@inputcheck + \long\def\InputIfFileExists#1#2#3{% + \openin\@inputcheck#1\relax + \ifeof\@inputcheck + \def\reserved@a{#3}% \else - \let\reserved@c\reserved@b + \def\reserved@a{#2\input #1\relax}% \fi - \fi - \reserved@c} -\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token -\def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch} -\fi -\def\CHECKCOMMAND#1{% - \ifx#1\@undefined\LONGTYPEOUT{Undefined \string#1}\else - \ifx#1\relax\LONGTYPEOUT{Relaxed \space\space\string#1}\else - \LONGTYPEOUT{Defined \space\space\string#1}\fi\fi} -\ifx\InputIfFileExists\@undefined -\newread\@inputcheck -\long\def\InputIfFileExists#1#2#3{% - \openin\@inputcheck#1\relax - \ifeof\@inputcheck - \def\reserved@a{#3}% - \else - \def\reserved@a{#2\input #1\relax}% - \fi - \closein\@inputcheck - \reserved@a} + \closein\@inputcheck + \reserved@a + }% \fi \InputIfFileExists{regression-test.cfg} - {\LONGTYPEOUT{^^J***^^Jregression-test.cfg in operation^^J***^^J}}{} -\ifdefined\pdfoutput - \ifnum\pdfoutput>0 % - \pdfmapfile{pdftex.map}% - \fi -\else - \ifdefined\outputmode - \ifnum\outputmode>0 % - \pdfextension mapfile{pdftex.map}% - \fi - \fi -\fi -\newcount \gTESTint + {\LONGTYPEOUT{^^J***^^Jregression-test.cfg in operation^^J***^^J}}{} +\newcount\gTESTint \def\SEPARATOR{% \TYPE{% ============================================================% }% } \long\def\TEST#1#2{% - \advance \gTESTint 1 % + \global\advance\gTESTint by 1 % \SEPARATOR - \LONGTYPEOUT{% - TEST \the\gTESTint: \detokenize{#1}}% + \LONGTYPEOUT{TEST \the\gTESTint: \detokenize{#1}}% \SEPARATOR \begingroup \let\TYPE\LONGTYPEOUT #2% \endgroup - \SEPARATOR \LONGTYPEOUT{}% + \SEPARATOR + \LONGTYPEOUT{}% } \long\def\TESTEXP#1#2{% - \advance \gTESTint 1 % + \global\advance\gTESTint by 1 % \SEPARATOR \LONGTYPEOUT{% TEST \the\gTESTint: \detokenize{#1}}% @@ -198,6 +131,18 @@ \def \YES {\TYPE{YES}} \def \NO {\TYPE{NO}} \def \NEWLINE {\TYPE{^^J}} +\ifx\pdfoutput\@undefined + \ifx\outputmode\@undefined + \else + \ifnum\outputmode>0 % + \pdfextension mapfile{pdftex.map}% + \fi + \fi +\else + \ifnum\pdfoutput>0 % + \pdfmapfile{pdftex.map}% + \fi +\fi \ifnum 0% \ifx\pdfoutput\@undefined\else\ifnum\pdfoutput>0 1\fi\fi \ifx\outputmode\@undefined\else\ifnum\outputmode>0 1\fi\fi |