summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/tests/outputdir.test
blob: baa3674d0fe0dc87d0265874292973dbad268fcf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#! /bin/sh -vx
# qqq also check propagated to subprog
# $Id$
# outputdir.test - check that TEXMF_OUTPUT_DIRECTORY works.
# Public domain. Originally written by Karl Berry, 2023.

BinDir=${BinDir:-..} # ordinarily run from the web2c/tests subdir in build
ExeExt=${ExeExt:-}

# in case we're invoked standalone instead of from make.
test -z "$srcdir" && srcdir=`cd \`dirname $0\`/.. && pwd` # web2c/
TEXMFCNF=$srcdir/../kpathsea; export TEXMFCNF

(
# We have to cd so we can make an output directory
# that would normally be disallowed.
cd tests || exit 1
pwd

outdir=../outdirtest
TEXMF_OUTPUT_DIRECTORY=$outdir; export TEXMF_OUTPUT_DIRECTORY

outfile=outfile.tex
rm -rf $outdir $outfile  # don't let previous runs interfere
mkdir $outdir || exit 1

for engine in tex; do # luatex mpost
  _engine=$BinDir/$engine$ExeExt

  # The output file should be written to outdir (not .), because of the
  # envvar. Ordinarily a .. path would be rejected for writing.
  $_engine -ini '\immediate\openout1='$outfile'\end' || exit 3

  set -x
  ls -l $outdir/$outfile || exit 5      # ensure it got written,
  ls -l $outfile && exit 7              # and not to cwd.

  # Then we should be able to read it back in TeX, implicitly from outdir.
  $_engine -ini '\input '$outfile' \end' || exit 9
  
  # The log file should also have been written to outdir.
  ls -l $outdir/`basename $outfile .tex`.log || exit 11
done

) # end subshell in tests subdir
exit $? # must be the next line to propagate status

# We could test that it propagates to subprograms with something like
# tex -ini --shell-restricted '\catcode123=1 \catcode125=2 \immediate\write18{kpsewhich --var-value TEXMF_OUTPUT_DIRECTORY}\end'
# but since it requires so much config file stuff, let's not bother.

# In theory we should run this with all the tex engines + mf,
# but it just doesn't seem worth the time or trouble.  After it's
# implemented in LuaTeX and MetaPost, would be worth it there since it's
# independent code.

# BibTeX requires implementing the output directory stuff; see bibtex.ch.
# If that's ever done, a test invocation, within the subshell above,
# could look like:
#  TEXMFCNF=$srcdir/../kpathsea \
#    BSTINPUTS=$srcdir/tests \
#    BIBINPUTS=$srcdir/tests \
#  $_bibtex $srcdir/tests/exampl.aux || exit 1