1#!/bin/bash
2# fontconfig/test/run-test.sh
3#
4# Copyright © 2000 Keith Packard
5#
6# Permission to use, copy, modify, distribute, and sell this software and its
7# documentation for any purpose is hereby granted without fee, provided that
8# the above copyright notice appear in all copies and that both that
9# copyright notice and this permission notice appear in supporting
10# documentation, and that the name of the author(s) not be used in
11# advertising or publicity pertaining to distribution of the software without
12# specific, written prior permission.  The authors make no
13# representations about the suitability of this software for any purpose.  It
14# is provided "as is" without express or implied warranty.
15#
16# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22# PERFORMANCE OF THIS SOFTWARE.
23set -e
24
25case "$OSTYPE" in
26    msys ) MyPWD=$(pwd -W) ;;  # On Msys/MinGW, returns a MS Windows style path.
27    *    ) MyPWD=$(pwd)    ;;  # On any other platforms, returns a Unix style path.
28esac
29
30TESTDIR=${srcdir-"$MyPWD"}
31BUILDTESTDIR=${builddir-"$MyPWD"}
32
33BASEDIR=$(mktemp -d --tmpdir fontconfig.XXXXXXXX)
34FONTDIR="$BASEDIR"/fonts
35CACHEDIR="$BASEDIR"/cache.dir
36EXPECTED=${EXPECTED-"out.expected"}
37
38FCLIST="$LOG_COMPILER ../fc-list/fc-list$EXEEXT"
39FCCACHE="$LOG_COMPILER ../fc-cache/fc-cache$EXEEXT"
40
41if [ -x "$(command -v bwrap)" ]; then
42    BWRAP="$(command -v bwrap)"
43fi
44
45FONT1=$TESTDIR/4x6.pcf
46FONT2=$TESTDIR/8x16.pcf
47TEST=""
48
49clean_exit() {
50    rc=$?
51    trap - INT TERM ABRT EXIT
52    if [ "x$TEST" != "x" ]; then
53        echo "Aborting from '$TEST' with the exit code $rc"
54    fi
55    exit $rc
56}
57trap clean_exit INT TERM ABRT EXIT
58
59check () {
60    {
61	$FCLIST - family pixelsize | sort;
62	echo "=";
63	$FCLIST - family pixelsize | sort;
64	echo "=";
65	$FCLIST - family pixelsize | sort;
66    } > out
67  tr -d '\015' <out >out.tmp; mv out.tmp out
68  if cmp out "$BUILDTESTDIR"/"$EXPECTED" > /dev/null ; then : ; else
69    echo "*** Test failed: $TEST"
70    echo "*** output is in 'out', expected output in '$EXPECTED'"
71    exit 1
72  fi
73  rm -f out
74}
75
76prep() {
77  rm -rf "$CACHEDIR"
78  rm -rf "$FONTDIR"
79  mkdir "$FONTDIR"
80}
81
82dotest () {
83  TEST=$1
84  test x"$VERBOSE" = x || echo "Running: $TEST"
85}
86
87sed "s!@FONTDIR@!$FONTDIR!
88s!@REMAPDIR@!!
89s!@CACHEDIR@!$CACHEDIR!" < "$TESTDIR"/fonts.conf.in > fonts.conf
90
91FONTCONFIG_FILE="$MyPWD"/fonts.conf
92export FONTCONFIG_FILE
93
94dotest "Basic check"
95prep
96cp "$FONT1" "$FONT2" "$FONTDIR"
97if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
98    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
99fi
100check
101
102dotest "With a subdir"
103prep
104cp "$FONT1" "$FONT2" "$FONTDIR"
105if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
106    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
107fi
108$FCCACHE "$FONTDIR"
109check
110
111dotest "Subdir with a cache file"
112prep
113mkdir "$FONTDIR"/a
114cp "$FONT1" "$FONT2" "$FONTDIR"/a
115if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
116    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"/a
117fi
118$FCCACHE "$FONTDIR"/a
119check
120
121dotest "Complicated directory structure"
122prep
123mkdir "$FONTDIR"/a
124mkdir "$FONTDIR"/a/a
125mkdir "$FONTDIR"/b
126mkdir "$FONTDIR"/b/a
127cp "$FONT1" "$FONTDIR"/a
128if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
129    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"/a
130fi
131cp "$FONT2" "$FONTDIR"/b/a
132if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
133    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"/b/a
134fi
135check
136
137dotest "Subdir with an out-of-date cache file"
138prep
139mkdir "$FONTDIR"/a
140$FCCACHE "$FONTDIR"/a
141sleep 1
142cp "$FONT1" "$FONT2" "$FONTDIR"/a
143check
144
145dotest "Dir with an out-of-date cache file"
146prep
147cp "$FONT1" "$FONTDIR"
148$FCCACHE "$FONTDIR"
149sleep 1
150mkdir "$FONTDIR"/a
151cp "$FONT2" "$FONTDIR"/a
152check
153
154dotest "Keep mtime of the font directory"
155prep
156cp "$FONT1" "$FONTDIR"
157touch -d @0 "$FONTDIR"
158stat -c '%y' "$FONTDIR" > out1
159$FCCACHE "$FONTDIR"
160stat -c '%y' "$FONTDIR" > out2
161if cmp out1 out2 > /dev/null ; then : ; else
162    echo "*** Test failed: $TEST"
163    echo "mtime was modified"
164    exit 1
165fi
166
167if [ x"$BWRAP" != "x" ] && [ "x$EXEEXT" = "x" ]; then
168dotest "Basic functionality with the bind-mounted cache dir"
169prep
170cp "$FONT1" "$FONT2" "$FONTDIR"
171if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
172    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
173fi
174$FCCACHE "$FONTDIR"
175sleep 1
176ls -l "$CACHEDIR" > out1
177TESTTMPDIR=$(mktemp -d /tmp/fontconfig.XXXXXXXX)
178sed "s!@FONTDIR@!$TESTTMPDIR/fonts!
179s!@REMAPDIR@!<remap-dir as-path="'"'"$FONTDIR"'"'">$TESTTMPDIR/fonts</remap-dir>!
180s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > bind-fonts.conf
181$BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-match/fc-match"$EXEEXT" -f "%{file}\n" ":foundry=Misc" > xxx
182$BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/test/test-bz106618"$EXEEXT" | sort > flist1
183$BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev find "$TESTTMPDIR"/fonts/ -type f -name '*.pcf' | sort > flist2
184ls -l "$CACHEDIR" > out2
185if cmp out1 out2 > /dev/null ; then : ; else
186  echo "*** Test failed: $TEST"
187  echo "cache was created/updated."
188  echo "Before:"
189  cat out1
190  echo "After:"
191  cat out2
192  exit 1
193fi
194if [ x"$(cat xxx)" != "x$TESTTMPDIR/fonts/4x6.pcf" ]; then
195  echo "*** Test failed: $TEST"
196  echo "file property doesn't point to the new place: $TESTTMPDIR/fonts/4x6.pcf"
197  exit 1
198fi
199if cmp flist1 flist2 > /dev/null ; then : ; else
200  echo "*** Test failed: $TEST"
201  echo "file properties doesn't point to the new places"
202  echo "Expected result:"
203  cat flist2
204  echo "Actual result:"
205  cat flist1
206  exit 1
207fi
208rm -rf "$TESTTMPDIR" out1 out2 xxx flist1 flist2 bind-fonts.conf
209
210dotest "Different directory content between host and sandbox"
211prep
212cp "$FONT1" "$FONTDIR"
213if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
214    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
215fi
216$FCCACHE "$FONTDIR"
217sleep 1
218ls -1 --color=no "$CACHEDIR"/*cache*> out1
219stat -c '%n %s %y %z' "$(cat out1)" > stat1
220TESTTMPDIR=$(mktemp -d /tmp/fontconfig.XXXXXXXX)
221TESTTMP2DIR=$(mktemp -d /tmp/fontconfig.XXXXXXXX)
222cp "$FONT2" "$TESTTMP2DIR"
223if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
224    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$TESTTMP2DIR"
225fi
226sed "s!@FONTDIR@!$TESTTMPDIR/fonts</dir><dir salt="'"'"salt-to-make-different"'"'">$FONTDIR!
227s!@REMAPDIR@!<remap-dir as-path="'"'"$FONTDIR"'"'">$TESTTMPDIR/fonts</remap-dir>!
228s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > bind-fonts.conf
229$BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$TESTTMP2DIR" "$FONTDIR" --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-match/fc-match"$EXEEXT" -f "%{file}\n" ":foundry=Misc" > xxx
230$BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$TESTTMP2DIR" "$FONTDIR" --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/test/test-bz106618"$EXEEXT" | sort > flist1
231$BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind "$TESTTMP2DIR" "$FONTDIR" --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev find "$TESTTMPDIR"/fonts/ -type f -name '*.pcf' | sort > flist2
232ls -1 --color=no "$CACHEDIR"/*cache* > out2
233stat -c '%n %s %y %z' "$(cat out1)" > stat2
234if cmp stat1 stat2 > /dev/null ; then : ; else
235  echo "*** Test failed: $TEST"
236  echo "cache was created/updated."
237  cat stat1 stat2
238  exit 1
239fi
240if grep -v -- "$(cat out1)" out2 > /dev/null ; then : ; else
241  echo "*** Test failed: $TEST"
242  echo "cache wasn't created for dir inside sandbox."
243  cat out1 out2
244  exit 1
245fi
246if [ x"$(cat xxx)" != "x$TESTTMPDIR/fonts/4x6.pcf" ]; then
247  echo "*** Test failed: $TEST"
248  echo "file property doesn't point to the new place: $TESTTMPDIR/fonts/4x6.pcf"
249  exit 1
250fi
251if cmp flist1 flist2 > /dev/null ; then
252  echo "*** Test failed: $TEST"
253  echo "Missing fonts should be available on sandbox"
254  echo "Expected result:"
255  cat flist2
256  echo "Actual result:"
257  cat flist1
258  exit 1
259fi
260rm -rf "$TESTTMPDIR" "$TESTTMP2DIR" out1 out2 xxx flist1 flist2 stat1 stat2 bind-fonts.conf
261
262dotest "Check consistency of MD5 in cache name"
263prep
264mkdir -p "$FONTDIR"/sub
265cp "$FONT1" "$FONTDIR"/sub
266if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
267    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"/sub
268fi
269$FCCACHE "$FONTDIR"
270sleep 1
271(cd "$CACHEDIR"; ls -1 --color=no ./*cache*) > out1
272TESTTMPDIR=$(mktemp -d /tmp/fontconfig.XXXXXXXX)
273mkdir -p "$TESTTMPDIR"/cache.dir
274sed "s!@FONTDIR@!$TESTTMPDIR/fonts!
275s!@REMAPDIR@!<remap-dir as-path="'"'"$FONTDIR"'"'">$TESTTMPDIR/fonts</remap-dir>!
276s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > bind-fonts.conf
277$BWRAP --bind / / --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-cache/fc-cache"$EXEEXT" "$TESTTMPDIR"/fonts
278(cd "$TESTTMPDIR"/cache.dir; ls -1 --color=no ./*cache*) > out2
279if cmp out1 out2 > /dev/null ; then : ; else
280    echo "*** Test failed: $TEST"
281    echo "cache was created unexpectedly."
282    echo "Before:"
283    cat out1
284    echo "After:"
285    cat out2
286    exit 1
287fi
288rm -rf "$TESTTMPDIR" out1 out2 bind-fonts.conf
289
290dotest "Fallback to uuid"
291prep
292cp "$FONT1" "$FONTDIR"
293if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
294    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
295fi
296touch -d @"$(stat -c %Y "$FONTDIR")" "$FONTDIR"
297$FCCACHE "$FONTDIR"
298sleep 1
299_cache=$(ls -1 --color=no "$CACHEDIR"/*cache*)
300_mtime=$(stat -c %Y "$FONTDIR")
301_uuid=$(uuidgen)
302_newcache=$(echo "$_cache" | sed "s/\([0-9a-f]*\)\(\-.*\)/$_uuid\2/")
303mv "$_cache" "$_newcache"
304echo "$_uuid" > "$FONTDIR"/.uuid
305touch -d @"$_mtime" "$FONTDIR"
306(cd "$CACHEDIR"; ls -1 --color=no ./*cache*) > out1
307TESTTMPDIR=$(mktemp -d /tmp/fontconfig.XXXXXXXX)
308mkdir -p "$TESTTMPDIR"/cache.dir
309sed "s!@FONTDIR@!$TESTTMPDIR/fonts!
310s!@REMAPDIR@!<remap-dir as-path="'"'"$FONTDIR"'"'">$TESTTMPDIR/fonts</remap-dir>!
311s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < "$TESTDIR"/fonts.conf.in > bind-fonts.conf
312$BWRAP --bind / / --bind "$CACHEDIR" "$TESTTMPDIR"/cache.dir --bind "$FONTDIR" "$TESTTMPDIR"/fonts --bind .. "$TESTTMPDIR"/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE "$TESTTMPDIR"/build/test/bind-fonts.conf "$TESTTMPDIR"/build/fc-match/fc-match"$EXEEXT" -f ""
313(cd "$CACHEDIR"; ls -1 --color=no ./*cache*) > out2
314if cmp out1 out2 > /dev/null ; then : ; else
315    echo "*** Test failed: $TEST"
316    echo "cache was created unexpectedly."
317    echo "Before:"
318    cat out1
319    echo "After:"
320    cat out2
321    exit 1
322fi
323rm -rf "$TESTTMPDIR" out1 out2 bind-fonts.conf
324
325else
326    echo "No bubblewrap installed. skipping..."
327fi # if [ x"$BWRAP" != "x" -a "x$EXEEXT" = "x" ]
328
329if [ "x$EXEEXT" = "x" ]; then
330dotest "sysroot option"
331prep
332mkdir -p "$MyPWD"/sysroot/"$FONTDIR"
333mkdir -p "$MyPWD"/sysroot/"$CACHEDIR"
334mkdir -p "$MyPWD"/sysroot/"$MyPWD"
335cp "$FONT1" "$MyPWD"/sysroot/"$FONTDIR"
336if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
337    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$MyPWD"/sysroot/"$FONTDIR"
338fi
339cp "$MyPWD"/fonts.conf "$MyPWD"/sysroot/"$MyPWD"/fonts.conf
340$FCCACHE -y "$MyPWD"/sysroot
341
342dotest "creating cache file on sysroot"
343md5=$(printf "%s" "$FONTDIR" | md5sum | sed 's/ .*$//')
344echo "checking for cache file $md5"
345if ! ls "$MyPWD/sysroot/$CACHEDIR/$md5"*; then
346  echo "*** Test failed: $TEST"
347  echo "No cache for $FONTDIR ($md5)"
348  ls "$MyPWD"/sysroot/"$CACHEDIR"
349  exit 1
350fi
351
352rm -rf "$MyPWD"/sysroot
353
354dotest "read newer caches when multiple places are allowed to store"
355prep
356cp "$FONT1" "$FONT2" "$FONTDIR"
357if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
358    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
359fi
360MYCACHEBASEDIR=$(mktemp -d /tmp/fontconfig.XXXXXXXX)
361MYCACHEDIR="$MYCACHEBASEDIR"/cache.dir
362MYOWNCACHEDIR="$MYCACHEBASEDIR"/owncache.dir
363MYCONFIG=$(mktemp /tmp/fontconfig.XXXXXXXX)
364
365mkdir -p "$MYCACHEDIR"
366mkdir -p "$MYOWNCACHEDIR"
367
368sed "s!@FONTDIR@!$FONTDIR!
369s!@REMAPDIR@!!
370s!@CACHEDIR@!$MYCACHEDIR!" < "$TESTDIR"/fonts.conf.in > my-fonts.conf
371
372FONTCONFIG_FILE="$MyPWD"/my-fonts.conf $FCCACHE "$FONTDIR"
373
374sleep 1
375cat<<EOF>"$MYCONFIG"
376<fontconfig>
377  <match target="scan">
378    <test name="file"><string>$FONTDIR/4x6.pcf</string></test>
379    <edit name="pixelsize"><int>8</int></edit>
380  </match>
381</fontconfig>
382EOF
383sed "s!@FONTDIR@!$FONTDIR!
384s!@REMAPDIR@!<include ignore_missing=\"yes\">$MYCONFIG</include>!
385s!@CACHEDIR@!$MYOWNCACHEDIR!" < "$TESTDIR"/fonts.conf.in > my-fonts.conf
386
387if [ -n "${SOURCE_DATE_EPOCH:-}" ]; then
388  old_epoch=${SOURCE_DATE_EPOCH}
389  SOURCE_DATE_EPOCH=$(("$SOURCE_DATE_EPOCH" + 1))
390fi
391FONTCONFIG_FILE="$MyPWD"/my-fonts.conf $FCCACHE -f "$FONTDIR"
392if [ -n "${SOURCE_DATE_EPOCH:-}" ]; then
393  SOURCE_DATE_EPOCH=${old_epoch}
394fi
395
396sed "s!@FONTDIR@!$FONTDIR!
397s!@REMAPDIR@!<include ignore_missing=\"yes\">$MYCONFIG</include>!
398s!@CACHEDIR@!$MYCACHEDIR</cachedir><cachedir>$MYOWNCACHEDIR!" < "$TESTDIR"/fonts.conf.in > my-fonts.conf
399
400{
401    FONTCONFIG_FILE="$MyPWD"/my-fonts.conf $FCLIST - family pixelsize | sort;
402    echo "=";
403    FONTCONFIG_FILE="$MyPWD"/my-fonts.conf $FCLIST - family pixelsize | sort;
404    echo "=";
405    FONTCONFIG_FILE="$MyPWD"/my-fonts.conf $FCLIST - family pixelsize | sort;
406} > my-out
407tr -d '\015' <my-out >my-out.tmp; mv my-out.tmp my-out
408sed -e 's/pixelsize=6/pixelsize=8/g' "$BUILDTESTDIR"/"$EXPECTED" > my-out.expected
409
410if cmp my-out my-out.expected > /dev/null ; then : ; else
411    echo "*** Test failed: $TEST"
412    echo "*** output is in 'my-out', expected output in 'my-out.expected'"
413    echo "Actual Result"
414    cat my-out
415    echo "Expected Result"
416    cat my-out.expected
417    exit 1
418fi
419
420rm -rf "$MYCACHEBASEDIR" "$MYCONFIG" my-fonts.conf my-out my-out.expected
421
422fi # if [ "x$EXEEXT" = "x" ]
423
424if [ -x "$BUILDTESTDIR"/test-crbug1004254 ]; then
425    dotest "MT-safe global config"
426    prep
427    curl -s -o "$FONTDIR"/noto.zip https://noto-website-2.storage.googleapis.com/pkgs/NotoSans-hinted.zip
428    (cd "$FONTDIR"; unzip noto.zip)
429    if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
430	touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
431    fi
432    "$BUILDTESTDIR"/test-crbug1004254
433else
434    echo "No test-crbug1004254: skipped"
435fi
436
437if [ "x$EXEEXT" = "x" ]; then
438
439dotest "empty XDG_CACHE_HOME"
440prep
441export XDG_CACHE_HOME=""
442export old_HOME="$HOME"
443export temp_HOME=$(mktemp -d --tmpdir fontconfig.XXXXXXXX)
444export HOME="$temp_HOME"
445cp "$FONT1" "$FONT2" "$FONTDIR"
446if [ -n "${SOURCE_DATE_EPOCH:-}" ] && [ ${#SOURCE_DATE_EPOCH} -gt 0 ]; then
447    touch -m -t "$(date -d @"${SOURCE_DATE_EPOCH}" +%y%m%d%H%M.%S)" "$FONTDIR"
448fi
449echo "<fontconfig><dir>$FONTDIR</dir><cachedir prefix=\"xdg\">fontconfig</cachedir></fontconfig>" > my-fonts.conf
450FONTCONFIG_FILE="$MyPWD"/my-fonts.conf $FCCACHE "$FONTDIR" || :
451if [ -d "$HOME"/.cache ] && [ -d "$HOME"/.cache/fontconfig ]; then : ; else
452  echo "*** Test failed: $TEST"
453  echo "No \$HOME/.cache/fontconfig directory"
454  ls -a "$HOME"
455  ls -a "$HOME"/.cache
456  exit 1
457fi
458
459export HOME="$old_HOME"
460rm -rf "$temp_HOME" my-fonts.conf
461unset XDG_CACHE_HOME
462unset old_HOME
463unset temp_HOME
464
465fi # if [ "x$EXEEXT" = "x" ]
466
467rm -rf "$FONTDIR" "$CACHEFILE" "$CACHEDIR" "$BASEDIR" "$FONTCONFIG_FILE" out
468
469TEST=""
470