blob: 22fa715af7cb46ebbff13d551bf53212418b670d (
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# Halibut master makefile
# Currently depends on gcc, because:
# - the dependency tracking uses -MD in order to avoid needing an
# explicit `make depend' step
# - the definition of CFLAGS includes the gcc-specific flag
# `-Wall'
#
# Currently depends on GNU make, because:
# - the Makefile uses GNU ifdef / ifndef commands and GNU make `%'
# pattern rules
ifdef RELEASE
ifndef VERSION
VERSION := $(RELEASE)
endif
else
CFLAGS += -g
endif
ifeq (x$(VERSION)y,xy)
RELDIR := halibut
else
RELDIR := halibut-$(VERSION)
endif
# `make' from top level will build in directory `build'
# `make BUILDDIR=foo' from top level will build in directory foo
ifndef REALBUILD
ifndef BUILDDIR
ifdef TEST
BUILDDIR := test
else
BUILDDIR := build
endif
endif
all:
@test -d $(BUILDDIR) || mkdir $(BUILDDIR)
@make -C $(BUILDDIR) -f ../Makefile REALBUILD=yes
spotless: topclean
@test -d $(BUILDDIR) || mkdir $(BUILDDIR)
@make -C $(BUILDDIR) -f ../Makefile spotless REALBUILD=yes
clean: topclean
@test -d $(BUILDDIR) || mkdir $(BUILDDIR)
@make -C $(BUILDDIR) -f ../Makefile clean REALBUILD=yes
# Remove Halibut output files in the source directory (may
# have been created by running, for example, `build/halibut
# inputs/test.but').
topclean:
rm -f *.html output.* *.tar.gz
# Make a release archive. If $(VERSION) is specified, this will
# also contain a `manifest' file which will be used to decide the
# version number automatically.
release:
find . -name CVS -prune -o -name build -prune -o -name reltmp -prune \
-o -type d -exec mkdir -p reltmp/$(RELDIR)/{} \;
find . -name CVS -prune -o -name build -prune -o -name reltmp -prune \
-o -name '*.orig' -prune -o -name '*.rej' -prune \
-o -name '*.txt' -prune -o -name '*.html' -prune \
-o -name '*.1' -prune -o -name '.cvsignore' -prune \
-o -name '*.gz' -prune -o -name '.[^.]*' -prune \
-o -type f -exec ln -s $(PWD)/{} reltmp/$(RELDIR)/{} \;
if test "x$(VERSION)y" != "xy"; then \
(cd reltmp/$(RELDIR); \
find . -name '*.[ch]' -exec md5sum {} \; \
) > reltmp/$(RELDIR)/manifest; \
echo "-DVERSION=\"$(VERSION)\"" > reltmp/$(RELDIR)/version; \
fi
tar chzvCf reltmp - $(RELDIR) > $(RELDIR).tar.gz
rm -rf reltmp
else
# The `real' makefile part.
CFLAGS += -Wall -W
ifdef TEST
CFLAGS += -DLOGALLOC
LIBS += -lefence
endif
ifndef VER
ifdef VERSION
VER := $(VERSION)
endif
endif
ifdef VER
VDEF = -DVERSION=\"$(VER)\"
else
VDEF = `(cd $(SRC); md5sum -c manifest && cat version)`
endif
SRC := ../
MODULES := main malloc ustring error help licence version misc tree234
MODULES += input keywords contents index style biblio
MODULES += bk_text bk_xhtml bk_whlp bk_man bk_info bk_paper bk_ps bk_pdf
MODULES += winhelp psdata
OBJECTS := $(addsuffix .o,$(MODULES))
DEPS := $(addsuffix .d,$(MODULES))
halibut: $(OBJECTS)
$(CC) $(LFLAGS) -o halibut $(OBJECTS) $(LIBS)
%.o: $(SRC)%.c
$(CC) $(CFLAGS) -MD -c $<
version.o: FORCE
$(CC) $(VDEF) -MD -c $(SRC)version.c
spotless:: clean
rm -f *.d
clean::
rm -f *.o halibut core
FORCE: # phony target to force version.o to be rebuilt every time
-include $(DEPS)
endif
|