blob: 97debc86bba5599d56fc6dc3bd588b3aebd2697a (
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
129
130
131
132
133
134
135
136
137
138
|
# 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
halibut:
SRC := ../
LIBCHARSET_SRCDIR = $(SRC)charset/
LIBCHARSET_OBJDIR = ./#
LIBCHARSET_OBJPFX = cs-#
LIBCHARSET_GENPFX = charset-#
MD = -MD
CFLAGS += -I$(LIBCHARSET_SRCDIR) -I$(LIBCHARSET_OBJDIR)
include $(LIBCHARSET_SRCDIR)Makefile
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)) $(LIBCHARSET_OBJS)
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
|