#! @SHELL@ # $Id$ # ctangleboot-sh: shell script to invoke ctangleboot and, if required, # update c{tangle,web}boot.[ch]in from c{tangle,web}.[ch]. # For details see tangle-sh[.in]. # # Copyright 2015-2022 Karl Berry # Copyright 2009-2012 Peter Breitenlohner # # 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. # prg=`basename $0` target=$1; shift base=$1 case $base in common) file=cweb; exts=c;; ctangle) file=ctangle; exts=c;; *) echo "Usage: $0 TARGET common|ctangle [CHANGEFILE] [OUTFILE]" >&2 exit 1;; esac TEXMFCNF=@srcdir@/../kpathsea; export TEXMFCNF CWEBINPUTS=@srcdir@/cwebdir; export CWEBINPUTS do_ctangleboot () { echo timestamp >$stamp.tmp if $AM_V_P; then echo "$prg: @CTANGLEBOOT@ $@" @CTANGLEBOOT@ "$@" || exit 1 test -s $file.$exts \ || { echo "$prg: $file.$exts empty." >&2; rm -f $file.$exts; exit 1; } else echo " CTANGLE " $base @CTANGLEBOOT@ "$@" >$base.out 2>&1; rc=$? # succeed and generate nonempty file (test $rc -eq 0 && test -s $file.$exts) \ || { cat $base.out; rm -f $file.$exts exit $rc; } rm -f $base.out fi mv -f $stamp.tmp $stamp } stamp=$base-ctangle case $target in $stamp) # Normal build. rm -f $stamp.tmp do_ctangleboot "$@" ;; *) # Recover from removal of $target if necessary. if test -f $target; then $AM_V_P && echo "$prg: checking for $target ... ok" exit 0 else $AM_V_P && echo "$prg: recovering $target" fi # 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_ctangleboot "$@" 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 for ext in $exts; do src=$file.$ext dst=@srcdir@/${file}boot.${ext}in sed -e 's,@srcdir@/cwebdir,cwebdir,' \ $src >$stamp.tmp if cmp -s $stamp.tmp $dst; then rm -f $stamp.tmp else if $AM_V_P; then echo "Updating $src => $dst" else echo " UPD " ${file}boot.${ext}in fi mv -f $stamp.tmp $dst || exit 1 fi done exit 0