blob: beab55e08a2c3ce7c1b6747325375c14933a14dc (
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
64
65
66
67
|
#! @SHELL@
# web2c-sh: shell script to invoke ${srcdir}/web2c/convert.
#
# Copyright (C) 2009-2014 Peter Breitenlohner <tex-live@tug.org>
#
# This file is free software; the copyright holder
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
#
# Convert creates several files, e.g., FOO.c and FOO.h from FOO.p.
# The naive rule
# FOO.c FOO.h: FOO.p $(web2c_depend)
# srcdir=$(srcdir) $(SHELL) $(srcdir)/web2c/convert FOO
# could run 'convert FOO' twice in parallel and fail. To avoid this
# and yet recover from removal of FOO.c and/or FOO.h, we use an auxiliary
# stamp file FOO-web2c and the two rules
# FOO.c FOO.h: FOO-web2c
# $(SHELL) ./web2c-sh $@ FOO
# FOO-web2c: FOO.p $(web2c_depend)
# $(SHELL) ./web2c-sh $@ FOO
# Compare Automake manual (info Automake) 27.9: Multiple Outputs
#
srcdir=@srcdir@; export srcdir
target=$1
base=$2
do_convert () {
echo timestamp >$stamp.tmp
if $AM_V_P; then
echo "@SHELL@ $srcdir/web2c/convert $base"
@SHELL@ $srcdir/web2c/convert $base || exit 1
else
echo " WEB2C " $base
@SHELL@ $srcdir/web2c/convert $base >$base.out 2>&1; rc=$?
test $rc -eq 0 || { cat $base.out; exit $rc; }
rm -f $base.out
fi
mv -f $stamp.tmp $stamp
}
stamp=$base-web2c
case $target in
$stamp)
# Normal build.
rm -f $stamp.tmp
do_convert
;;
*)
# Recover from removal of $target
test -f $target && exit 0
trap "rm -rf $stamp $stamp.lock" 1 2 13 15
if mkdir $stamp.lock 2>/dev/null; then
# Code executed by the first process.
rm -f $stamp $stamp.tmp
do_convert
rmdir $stamp.lock
else
# Code executed by the follower processes.
# Wait until the first process is done.
while test -d $stamp.lock; do sleep 1; done
# Succeed if and only if the first process succeeded.
test -f $stamp; exit $?
fi
;;
esac
exit 0
|