summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/am/bootstrap.am
blob: e7191ae311a32d5163f224fa8c3628ba87bed862 (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
## texk/web2c/am/bootstrap.am: Makefile fragment for tangle and ctangle.
##
## Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
## 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