summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/am/bootstrap.am
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/am/bootstrap.am')
-rw-r--r--Build/source/texk/web2c/am/bootstrap.am110
1 files changed, 110 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/am/bootstrap.am b/Build/source/texk/web2c/am/bootstrap.am
new file mode 100644
index 00000000000..ad01159d6f1
--- /dev/null
+++ b/Build/source/texk/web2c/am/bootstrap.am
@@ -0,0 +1,110 @@
+## texk/web2c/am/bootstrap.am: Makefile fragment for tangle and ctangle.
+
+## Bootstrapping tangle requires making it with itself. We use the opportunity
+## to create an up-to-date tangleboot 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.
+EXTRA_DIST += tangle.web tangle.ch
+tangle.p: tangleboot 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
+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_programs) $(web2c_common)
+ $(web2c) tangleboot
+## tangleboot.p is in the distribution
+EXTRA_DIST += tangleboot.p
+stamp-tangle: tangleboot.p
+ date >stamp-tangle
+## 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
+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 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.
+EXTRA_DIST += cwebdir
+## We install man/cweb.man, not cwebdir/cweb.1
+## nodist_man_MANS += cwebdir/cweb.1
+ctangle.c: ctangleboot cwebdir/ctangle.w cwebdir/ctang-w2c.ch
+ CWEBINPUTS=$(srcdir)/cwebdir $(ctangleboot) ctangle ctang-w2c
+cweb.c: ctangleboot cwebdir/common.w cwebdir/comm-w2c.ch
+ CWEBINPUTS=$(srcdir)/cwebdir $(ctangleboot) common comm-w2c cweb.c
+DISTCLEANFILES += ctangle.c cweb.c
+
+noinst_PROGRAMS += ctangleboot
+nodist_ctangleboot_SOURCES = ctangleboot.c cwebboot.c
+## ctangleboot.c and cwebboot.c are in the distribution
+EXTRA_DIST += ctangleboot.c cwebboot.c
+stamp-ctangle: ctangleboot.c cwebboot.c
+ date >stamp-ctangle
+## 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.
+ctangleboot.c: cwebdir/ctangle.w cwebdir/ctang-w2c.ch
+ if [ -r $(CTANGLE) ] || [ -r $(CTANGLE).exe ]; then \
+ CWEBINPUTS=$(srcdir)/cwebdir $(ctangle) ctangle ctang-w2c; \
+ mv ctangle.c ctangleboot.c; \
+ elif [ -r ctangleboot.c ]; then \
+ touch ctangleboot.c; \
+ else \
+ cp $(srcdir)/ctangleboot.c .; \
+ fi
+ date >stamp-ctangle
+ $(MAKE) $(AM_MAKEFLAGS) ctangle
+cwebboot.c: cwebdir/common.w cwebdir/comm-w2c.ch
+ if [ -r $(CTANGLE) ] || [ -r $(CTANGLE).exe ]; then \
+ CWEBINPUTS=$(srcdir)/cwebdir $(ctangle) common comm-w2c cweb.c; \
+ mv cweb.c cwebboot.c; \
+ elif [ -r cwebboot.c ]; then \
+ touch cwebboot.c; \
+ else \
+ cp $(srcdir)/cwebboot.c .; \
+ fi
+ date >stamp-ctangle
+ $(MAKE) $(AM_MAKEFLAGS) ctangle
+DISTCLEANFILES += stamp-ctangle
+
+## Tests
+
+dist_check_SCRIPTS += tangle.test
+
+TESTS += tangle.test
+
+DISTCLEANFILES += cftest.p
+