From d9b2d2530b4ac09813cfba6d98bce38bde3b51dd Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 18 Dec 2018 01:40:49 +0000 Subject: restore -var-value behavior; new option -var-brace-value git-svn-id: svn://tug.org/texlive/trunk@49446 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/kpathsea/ChangeLog | 11 ++++ Build/source/texk/kpathsea/doc/kpathsea.info | 92 +++++++++++++++++----------- Build/source/texk/kpathsea/doc/kpathsea.texi | 31 ++++++++-- Build/source/texk/kpathsea/kpsewhich.c | 39 ++++++++---- 4 files changed, 123 insertions(+), 50 deletions(-) (limited to 'Build/source/texk/kpathsea') diff --git a/Build/source/texk/kpathsea/ChangeLog b/Build/source/texk/kpathsea/ChangeLog index abfa98aebba..1cd691d4e69 100644 --- a/Build/source/texk/kpathsea/ChangeLog +++ b/Build/source/texk/kpathsea/ChangeLog @@ -1,3 +1,14 @@ +2018-12-17 Karl Berry + + * kpsewhich.c (--var-brace-value, var_to_brace_value): new option + and corresponding option. + (main): new case for it. For --var-value, go back to just variable + (kpathsea_var_value) expansion. + * doc/kpathsea.texi (Auxiliary tasks): document the new option, + try to explain the difference. + Follow-up report from jbglaw, + https://github.com/TeX-Live/texlive-source/issues/3. + 2018-12-14 Karl Berry * c-pathch.h (IS_KPSE_SEP): check for both : and ; only on Unix. diff --git a/Build/source/texk/kpathsea/doc/kpathsea.info b/Build/source/texk/kpathsea/doc/kpathsea.info index ee5c11d3030..b6438df80ad 100644 --- a/Build/source/texk/kpathsea/doc/kpathsea.info +++ b/Build/source/texk/kpathsea/doc/kpathsea.info @@ -1469,12 +1469,33 @@ Kpsewhich provides some features in addition to path lookup as such: integer can be used, just as with '--format', described in the previous section. +'--var-brace-value=VARIABLE' + Like '--var-value' (next), but also expands '{...}' constructs. + (*note Brace expansion::). Thus, the value is assumed to possibly + be several path elements, and '~' is expanded at the beginning of + each. The path separator is changed to that of the current system + in the expansion. + + Example: 'FOO='.;~' kpsewhich --var-brace-value=FOO' outputs (on a + Unix-ish system) '.:/home/karl', supposing the latter is the + current user's home directory. Note that the ';' in the source + value, as commonly used in 'texmf.cnf', has changed to a ':', as + the normal path separator on the current system. (On a Windows-ish + system, the ';' would remain.) + '--var-value=VARIABLE' - Outputs the value of VARIABLE (a simple identifier like 'TEXMF', - with no '$' or other constructs), expanding '{...}' (*note Brace - expansion::), '$' (*note Variable expansion::) and '~' (*note Tilde - expansion::) constructs, considered as strings, but not looking on - the filesystem. + Outputs the value of VARIABLE (a simple identifier like + 'TEXMFDIST', with no '$' or other constructs), expanding '$' (*note + Variable expansion::) and '~' (*note Tilde expansion::) constructs + in the value. '~' expansion happens at the beginning of the + overall value and at the beginning of a variable expansion, but not + arbitrarily within the string. Braces are not expanded. + + Example: '--var-value=texmf_casefold_search' outputs (if the + default is not changed) '1'. + + Example to contrast with '--var-brace-value': 'FOO='.;~' kpsewhich + --var-value=FOO' outputs '.;~', i.e., the same as the input value.  File: kpathsea.info, Node: Standard options, Prev: Auxiliary tasks, Up: Invoking kpsewhich @@ -2975,7 +2996,8 @@ Index * --show-path=NAME: Auxiliary tasks. (line 51) * --subdir=STRING: Path searching options. (line 164) -* --var-value=VARIABLE: Auxiliary tasks. (line 57) +* --var-brace-value=VARIABLE: Auxiliary tasks. (line 57) +* --var-value=VARIABLE: Auxiliary tasks. (line 71) * --version: Standard options. (line 11) * --with-mktextex-default: mktex configuration. (line 12) * --without-mktexfmt-default: mktex configuration. (line 12) @@ -3871,34 +3893,34 @@ Node: Invoking kpsewhich48985 Node: Path searching options49940 Node: Specially-recognized files58459 Node: Auxiliary tasks59814 -Node: Standard options62282 -Node: TeX support62638 -Node: Supported file formats63992 -Node: File lookup71657 -Node: Glyph lookup73406 -Node: Basic glyph lookup74530 -Node: Fontmap75410 -Node: Fallback font77939 -Node: Suppressing warnings78851 -Node: mktex scripts79978 -Node: mktex configuration81193 -Node: mktex script names86996 -Node: mktex script arguments88382 -Node: Programming89261 -Node: Programming overview89834 -Node: Calling sequence92695 -Node: Program-specific files99227 -Node: Programming with config files100250 -Node: Reporting bugs101562 -Node: Bug checklist102240 -Node: Mailing lists105712 -Node: Debugging106387 -Node: Logging111464 -Node: Common problems113331 -Node: Unable to find files113808 -Node: Slow path searching116218 -Node: Unable to generate fonts117593 -Node: TeX or Metafont failing120064 -Node: Index121266 +Node: Standard options63353 +Node: TeX support63709 +Node: Supported file formats65063 +Node: File lookup72728 +Node: Glyph lookup74477 +Node: Basic glyph lookup75601 +Node: Fontmap76481 +Node: Fallback font79010 +Node: Suppressing warnings79922 +Node: mktex scripts81049 +Node: mktex configuration82264 +Node: mktex script names88067 +Node: mktex script arguments89453 +Node: Programming90332 +Node: Programming overview90905 +Node: Calling sequence93766 +Node: Program-specific files100298 +Node: Programming with config files101321 +Node: Reporting bugs102633 +Node: Bug checklist103311 +Node: Mailing lists106783 +Node: Debugging107458 +Node: Logging112535 +Node: Common problems114402 +Node: Unable to find files114879 +Node: Slow path searching117289 +Node: Unable to generate fonts118664 +Node: TeX or Metafont failing121135 +Node: Index122337  End Tag Table diff --git a/Build/source/texk/kpathsea/doc/kpathsea.texi b/Build/source/texk/kpathsea/doc/kpathsea.texi index 8bdf46be39f..449bd0e7489 100644 --- a/Build/source/texk/kpathsea/doc/kpathsea.texi +++ b/Build/source/texk/kpathsea/doc/kpathsea.texi @@ -1822,13 +1822,36 @@ Show the path that would be used for file lookups of file type or an integer can be used, just as with @samp{--format}, described in the previous section. +@item --var-brace-value=@var{variable} +@opindex --var-brace-value=@var{variable} +Like @samp{--var-value} (next), but also expands @samp{@{...@}} +constructs. (@pxref{Brace expansion}). Thus, the value is assumed to +possibly be several path elements, and @samp{~} is expanded at the +beginning of each. The path separator is changed to that of the +current system in the expansion. + +Example: @samp{FOO='.;~' kpsewhich --var-brace-value=FOO} outputs (on +a Unix-ish system) @samp{.:/home/karl}, supposing the latter is the +current user's home directory. Note that the @samp{;} in the source +value, as commonly used in @file{texmf.cnf}, has changed to a +@samp{:}, as the normal path separator on the current system. (On a +Windows-ish system, the @samp{;} would remain.) + @item --var-value=@var{variable} @opindex --var-value=@var{variable} Outputs the value of @var{variable} (a simple identifier like -@samp{TEXMF}, with no @samp{$} or other constructs), expanding -@samp{@{...@}} (@pxref{Brace expansion}), @samp{$} (@pxref{Variable -expansion}) and @samp{~} (@pxref{Tilde expansion}) constructs, -considered as strings, but not looking on the filesystem. +@samp{TEXMFDIST}, with no @samp{$} or other constructs), expanding +@samp{$} (@pxref{Variable expansion}) and @samp{~} (@pxref{Tilde +expansion}) constructs in the value. @samp{~} expansion happens at the +beginning of the overall value and at the beginning of a variable +expansion, but not arbitrarily within the string. Braces are not expanded. + +Example: @samp{--var-value=texmf_casefold_search} outputs (if the +default is not changed) @samp{1}. + +Example to contrast with @samp{--var-brace-value}: @samp{FOO='.;~' +kpsewhich --var-value=FOO} outputs @samp{.;~}, i.e., the same as the +input value. @end table diff --git a/Build/source/texk/kpathsea/kpsewhich.c b/Build/source/texk/kpathsea/kpsewhich.c index d170c454a4f..ead9af752f2 100644 --- a/Build/source/texk/kpathsea/kpsewhich.c +++ b/Build/source/texk/kpathsea/kpsewhich.c @@ -31,12 +31,13 @@ #include /* For variable and path expansion. (-expand-var, -expand-path, - -show-path) */ + -show-path, etc.) */ string var_to_expand = NULL; string braces_to_expand = NULL; string path_to_expand = NULL; string path_to_show = NULL; string var_to_value = NULL; +string var_to_brace_value = NULL; /* Base resolution. (-D, -dpi) */ unsigned dpi = 600; @@ -493,7 +494,8 @@ to also use -engine, or nothing will be returned; in particular,\n\ -show-path=TYPE output search path for file type TYPE\n\ (list shown by -help-formats).\n\ -subdir=STRING only output matches whose directory ends with STRING.\n\ --var-value=STRING output the expanded value of variable $STRING.\n\ +-var-brace-value=STRING output brace-expanded value of variable $STRING.\n\ +-var-value=STRING output variable-expanded value of variable $STRING.\n\ -version display version information number and exit.\n \ " @@ -607,6 +609,7 @@ static struct option long_options[] { "safe-out-name", 1, 0, 0 }, { "subdir", 1, 0, 0 }, { "show-path", 1, 0, 0 }, + { "var-brace-value", 1, 0, 0 }, { "var-value", 1, 0, 0 }, { "version", 0, 0, 0 }, { 0, 0, 0, 0 } }; @@ -694,6 +697,9 @@ read_command_line (kpathsea kpse, int argc, string *argv) } else if (ARGUMENT_IS ("subdir")) { str_list_add (&subdir_paths, optarg); + } else if (ARGUMENT_IS ("var-brace-value")) { + var_to_brace_value = optarg; + } else if (ARGUMENT_IS ("var-value")) { var_to_value = optarg; @@ -718,7 +724,7 @@ There is NO WARRANTY, to the extent permitted by law.\n"); if (optind == argc && !var_to_expand && !braces_to_expand && !path_to_expand - && !path_to_show && !var_to_value + && !path_to_show && !var_to_value && !var_to_brace_value && !safe_in_name && !safe_out_name) { fputs ("Missing argument. Try `kpsewhich --help' for more information.\n", stderr); @@ -829,21 +835,32 @@ main (int argc, string *argv) } } - /* Var to value. */ + /* Var to value. */ if (var_to_value) { const_string value = kpathsea_var_value (kpse, var_to_value); if (!value) { unfound++; value = ""; } + puts (value); + } - /* It is helpful for users to output the fully-expanded (as a - string, no filesystem checks) value. We can't call brace_expand - as part of kpathsea_var_value, though, because unfortunately it - is not reentrant. We use var_value in lots of places in the - source, and it clobbers the static buffer in the kpse structure. */ - value = kpathsea_brace_expand (kpse, value); - + /* Var to brace-expanded value. This is separate from --var-value for + compatibility; people use --var-value for non-path values, where + changing commas to colons, which brace expansion does, is not right. */ + if (var_to_brace_value) { + const_string value = kpathsea_var_value (kpse, var_to_brace_value); + if (!value) { + unfound++; + value = ""; + } else { + /* Sometimes users want the fully-expanded (as a string, no + filesystem checks) value. We can't call brace_expand as part of + kpathsea_var_value, though, because unfortunately it is not + reentrant. We use var_value in lots of places in the source, + and it clobbers the static buffer in the kpse structure. */ + value = kpathsea_brace_expand (kpse, value); + } puts (value); } -- cgit v1.2.3