d7482997 |
1 | # Halibut master makefile |
2 | |
73a05796 |
3 | # Currently depends on gcc, because: |
4 | # - the dependency tracking uses -MD in order to avoid needing an |
5 | # explicit `make depend' step |
6 | # - the definition of CFLAGS includes the gcc-specific flag |
7 | # `-Wall' |
8 | # |
9 | # Currently depends on GNU make, because: |
10 | # - the Makefile uses GNU ifdef / ifndef commands and GNU make `%' |
11 | # pattern rules |
d7482997 |
12 | |
a4d3c848 |
13 | prefix=/usr/local |
14 | exec_prefix=$(prefix) |
15 | bindir=$(exec_prefix)/bin |
16 | INSTALL=install -c |
17 | |
574825cf |
18 | ifdef RELEASE |
19 | ifndef VERSION |
20 | VERSION := $(RELEASE) |
21 | endif |
22 | else |
23 | CFLAGS += -g |
24 | endif |
25 | |
26 | ifeq (x$(VERSION)y,xy) |
27 | RELDIR := halibut |
28 | else |
29 | RELDIR := halibut-$(VERSION) |
30 | endif |
31 | |
d7482997 |
32 | # `make' from top level will build in directory `build' |
33 | # `make BUILDDIR=foo' from top level will build in directory foo |
34 | ifndef REALBUILD |
35 | ifndef BUILDDIR |
36 | ifdef TEST |
37 | BUILDDIR := test |
38 | else |
39 | BUILDDIR := build |
40 | endif |
41 | endif |
574825cf |
42 | |
a4d3c848 |
43 | all install: |
d7482997 |
44 | @test -d $(BUILDDIR) || mkdir $(BUILDDIR) |
a4d3c848 |
45 | @make -C $(BUILDDIR) -f ../Makefile $@ REALBUILD=yes |
574825cf |
46 | |
48f8f266 |
47 | spotless: topclean |
d7482997 |
48 | @test -d $(BUILDDIR) || mkdir $(BUILDDIR) |
49 | @make -C $(BUILDDIR) -f ../Makefile spotless REALBUILD=yes |
574825cf |
50 | |
48f8f266 |
51 | clean: topclean |
d7482997 |
52 | @test -d $(BUILDDIR) || mkdir $(BUILDDIR) |
53 | @make -C $(BUILDDIR) -f ../Makefile clean REALBUILD=yes |
574825cf |
54 | |
55 | # Remove Halibut output files in the source directory (may |
56 | # have been created by running, for example, `build/halibut |
57 | # inputs/test.but'). |
48f8f266 |
58 | topclean: |
574825cf |
59 | rm -f *.html output.* *.tar.gz |
60 | |
61 | # Make a release archive. If $(VERSION) is specified, this will |
62 | # also contain a `manifest' file which will be used to decide the |
63 | # version number automatically. |
64 | release: |
65 | find . -name CVS -prune -o -name build -prune -o -name reltmp -prune \ |
66 | -o -type d -exec mkdir -p reltmp/$(RELDIR)/{} \; |
67 | find . -name CVS -prune -o -name build -prune -o -name reltmp -prune \ |
68 | -o -name '*.orig' -prune -o -name '*.rej' -prune \ |
69 | -o -name '*.txt' -prune -o -name '*.html' -prune \ |
70 | -o -name '*.1' -prune -o -name '.cvsignore' -prune \ |
71 | -o -name '*.gz' -prune -o -name '.[^.]*' -prune \ |
72 | -o -type f -exec ln -s $(PWD)/{} reltmp/$(RELDIR)/{} \; |
73 | if test "x$(VERSION)y" != "xy"; then \ |
74 | (cd reltmp/$(RELDIR); \ |
75 | find . -name '*.[ch]' -exec md5sum {} \; \ |
76 | ) > reltmp/$(RELDIR)/manifest; \ |
77 | echo "-DVERSION=\"$(VERSION)\"" > reltmp/$(RELDIR)/version; \ |
78 | fi |
79 | tar chzvCf reltmp - $(RELDIR) > $(RELDIR).tar.gz |
80 | rm -rf reltmp |
81 | |
d7482997 |
82 | else |
83 | |
84 | # The `real' makefile part. |
85 | |
86 | CFLAGS += -Wall -W |
87 | |
88 | ifdef TEST |
89 | CFLAGS += -DLOGALLOC |
90 | LIBS += -lefence |
91 | endif |
92 | |
d7482997 |
93 | ifndef VER |
94 | ifdef VERSION |
95 | VER := $(VERSION) |
96 | endif |
97 | endif |
98 | ifdef VER |
574825cf |
99 | VDEF = -DVERSION=\"$(VER)\" |
100 | else |
101 | VDEF = `(cd $(SRC); md5sum -c manifest && cat version)` |
d7482997 |
102 | endif |
103 | |
a4d3c848 |
104 | all: halibut |
05a1519d |
105 | |
d7482997 |
106 | SRC := ../ |
107 | |
05a1519d |
108 | LIBCHARSET_SRCDIR = $(SRC)charset/ |
109 | LIBCHARSET_OBJDIR = ./# |
110 | LIBCHARSET_OBJPFX = cs-# |
111 | LIBCHARSET_GENPFX = charset-# |
112 | MD = -MD |
113 | CFLAGS += -I$(LIBCHARSET_SRCDIR) -I$(LIBCHARSET_OBJDIR) |
114 | include $(LIBCHARSET_SRCDIR)Makefile |
115 | |
d7482997 |
116 | MODULES := main malloc ustring error help licence version misc tree234 |
117 | MODULES += input keywords contents index style biblio |
78c73085 |
118 | MODULES += bk_text bk_html bk_whlp bk_man bk_info bk_paper bk_ps bk_pdf |
e5cd393f |
119 | MODULES += winhelp psdata wcwidth |
d7482997 |
120 | |
05a1519d |
121 | OBJECTS := $(addsuffix .o,$(MODULES)) $(LIBCHARSET_OBJS) |
d7482997 |
122 | DEPS := $(addsuffix .d,$(MODULES)) |
123 | |
124 | halibut: $(OBJECTS) |
125 | $(CC) $(LFLAGS) -o halibut $(OBJECTS) $(LIBS) |
126 | |
127 | %.o: $(SRC)%.c |
128 | $(CC) $(CFLAGS) -MD -c $< |
129 | |
130 | version.o: FORCE |
131 | $(CC) $(VDEF) -MD -c $(SRC)version.c |
132 | |
133 | spotless:: clean |
134 | rm -f *.d |
135 | |
136 | clean:: |
137 | rm -f *.o halibut core |
138 | |
a4d3c848 |
139 | install: |
140 | $(INSTALL) -m 755 halibut $(bindir)/halibut |
141 | $(MAKE) -C ../doc install prefix="$(prefix)" INSTALL="$(INSTALL)" |
142 | |
d7482997 |
143 | FORCE: # phony target to force version.o to be rebuilt every time |
144 | |
145 | -include $(DEPS) |
146 | |
147 | endif |