## texk/web2c/am/bootstrap.am: Makefile fragment for tangle and ctangle. ## ## Copyright (C) 2009 Peter Breitenlohner ## You may freely use, modify and/or distribute this file. # Bootstrapping tangle requires making it with itself. We use the opportunity # to create an up-to-date tangleboot.p as well. bin_PROGRAMS += tangle nodist_tangle_SOURCES = tangle.c tangle.h tangle.c tangle.h: tangle-web2c tangle-web2c: tangle.p $(web2c) tangle echo timestamp >$@ touch tangle.c tangle.h # tangle.p is a special case, since it is needed to compile itself. We # convert and compile the (distributed) tangleboot.p to make a tangle # which we use to make the other programs. We depend on tangleboot, even # though we might not use it. tangle.p: tangleboot$(EXEEXT) tangle.web tangle.ch WEBINPUTS=.:$(srcdir) $(tangleboot) tangle tangle tangle.web: @echo "You seem to be missing tangle.web, perhaps because you" >&2 @echo "didn't retrieve web.tar.gz, only web2c.tar.gz." >&2 @echo "You need both." >&2 @echo >&2 @echo "web.tar.gz should be available from the" >&2 @echo "same place that you got web2c.tar.gz." >&2 @echo "In any case, you can get it from" >&2 @echo "ftp://ftp.tug.org/tex/web.tar.gz." >&2 false EXTRA_DIST += tangle.web tangle.ch DISTCLEANFILES += tangle.c tangle.h tangle.p tangle-web2c noinst_PROGRAMS += tangleboot nodist_tangleboot_SOURCES = tangleboot.c tangleboot.h tangleboot.c tangleboot.h: stamp-tangle $(web2c_depend) $(web2c) tangleboot # tangleboot.p is in the distribution stamp-tangle: tangleboot.p date >stamp-tangle EXTRA_DIST += tangleboot.p # This is not run unless tangle.web or tangle.ch is changed. # Only try to run ./tangle if it actually exists, otherwise # just touch tangleboot.p and build tangle. tangleboot.p: tangle.web tangle.ch if [ -r $(TANGLE) ] || [ -r $(TANGLE).exe ]; then \ $(tangle) tangle tangle; \ mv tangle.p tangleboot.p; \ elif [ -r tangleboot.p ]; then \ touch tangleboot.p; \ else \ cp $(srcdir)/tangleboot.p .; \ fi date >stamp-tangle $(MAKE) $(AM_MAKEFLAGS) tangle$(EXEEXT) DISTCLEANFILES += stamp-tangle tangleboot.c tangleboot.h # Bootstrapping ctangle requires making it with itself. We use the opportunity # to create an up-to-date ctangleboot.c and cwebboot.c as well. bin_PROGRAMS += ctangle nodist_ctangle_SOURCES = ctangle.c cweb.c # ctangle.c is a special case, since it is needed to compile itself. # We depend on ctangleboot, even though we might not use it. ctangle.c: ctangleboot$(EXEEXT) cwebdir/ctangle.w cwebdir/ctang-w2c.ch CWEBINPUTS=$(srcdir)/cwebdir $(ctangleboot) ctangle ctang-w2c cweb.c: ctangleboot$(EXEEXT) cwebdir/common.w cwebdir/comm-w2c.ch CWEBINPUTS=$(srcdir)/cwebdir $(ctangleboot) common comm-w2c cweb.c EXTRA_DIST += cwebdir ## We install man/cweb.man, not cwebdir/cweb.1 ## nodist_man_MANS += cwebdir/cweb.1 DISTCLEANFILES += ctangle.c cweb.c noinst_PROGRAMS += ctangleboot nodist_ctangleboot_SOURCES = ctangleboot.c cwebboot.c # ctangleboot.c and cwebboot.c are in the distribution $(ctangleboot_OBJECTS): stamp-ctangle stamp-ctangle: ctangleboot.c cwebboot.c date >stamp-ctangle EXTRA_DIST += ctangleboot.c cwebboot.c # This is not run unless one of the cwebdir/* files is changed. # Only try to run ./ctangle if it actually exists, otherwise # just touch ctangleboot.c and/or cwebboot.c and build ctangle. # We must serialize this. ctangleboot.c: cwebboot.c cwebdir/ctangle.w cwebdir/ctang-w2c.ch if [ -r $(CTANGLE) ] || [ -r $(CTANGLE).exe ]; then \ CWEBINPUTS=$(srcdir)/cwebdir $(ctangle) ctangle ctang-w2c ctangleboot.c; \ elif [ -r ctangleboot.c ]; then \ touch ctangleboot.c; \ else \ cp $(srcdir)/ctangleboot.c .; \ fi date >stamp-ctangle $(MAKE) $(AM_MAKEFLAGS) ctangle$(EXEEXT) cwebboot.c: cwebdir/common.w cwebdir/comm-w2c.ch if [ -r $(CTANGLE) ] || [ -r $(CTANGLE).exe ]; then \ CWEBINPUTS=$(srcdir)/cwebdir $(ctangle) common comm-w2c cwebboot.c; \ elif [ -r cwebboot.c ]; then \ touch cwebboot.c; \ else \ cp $(srcdir)/cwebboot.c .; \ fi DISTCLEANFILES += stamp-ctangle ## Tests ## EXTRA_DIST += tangle.test TESTS += tangle.test DISTCLEANFILES += cftest.p