Add support for compressed PDF streams, using Simon's new deflate library.
[sgt/halibut] / Makefile
1 # Halibut master makefile
2
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
12 # - we use .PHONY
13
14 prefix=/usr/local
15 exec_prefix=$(prefix)
16 bindir=$(exec_prefix)/bin
17 INSTALL=install -c
18
19 .PHONY: all install clean spotless topclean release
20
21 ifdef RELEASE
22 ifndef VERSION
23 VERSION := $(RELEASE)
24 endif
25 else
26 CFLAGS += -g
27 endif
28
29 ifeq (x$(VERSION)y,xy)
30 RELDIR := halibut
31 else
32 RELDIR := halibut-$(VERSION)
33 endif
34
35 # `make' from top level will build in directory `build'
36 # `make BUILDDIR=foo' from top level will build in directory foo
37 ifndef REALBUILD
38 ifndef BUILDDIR
39 ifdef TEST
40 BUILDDIR := test
41 else
42 BUILDDIR := build
43 endif
44 endif
45
46 all install:
47 @test -d $(BUILDDIR) || mkdir $(BUILDDIR)
48 @$(MAKE) -C $(BUILDDIR) -f ../Makefile $@ REALBUILD=yes
49
50 spotless: topclean
51 @test -d $(BUILDDIR) || mkdir $(BUILDDIR)
52 @$(MAKE) -C $(BUILDDIR) -f ../Makefile spotless REALBUILD=yes
53
54 clean: topclean
55 @test -d $(BUILDDIR) || mkdir $(BUILDDIR)
56 @$(MAKE) -C $(BUILDDIR) -f ../Makefile clean REALBUILD=yes
57
58 # Remove Halibut output files in the source directory (may
59 # have been created by running, for example, `build/halibut
60 # inputs/test.but').
61 topclean:
62 rm -f *.html output.* *.tar.gz
63
64 # Make a release archive. If $(VERSION) is specified, this will
65 # also contain a `manifest' file which will be used to decide the
66 # version number automatically.
67 release: release.sh
68 ./release.sh $(RELDIR) $(VERSION)
69
70 else
71
72 # The `real' makefile part.
73
74 CFLAGS += -Wall -W -ansi -pedantic
75 LIBS += -lm
76
77 ifdef TEST
78 CFLAGS += -DLOGALLOC
79 LIBS += -lefence
80 endif
81
82 ifndef VER
83 ifdef VERSION
84 VER := $(VERSION)
85 endif
86 endif
87 ifdef VER
88 VDEF = -DVERSION=\"$(VER)\"
89 else
90 VDEF = `(cd $(SRC); md5sum -c manifest >& /dev/null && cat version)`
91 endif
92
93 all: halibut
94
95 SRC := ../
96
97 ifeq ($(shell test -d $(SRC)charset && echo yes),yes)
98 LIBCHARSET_SRCDIR = $(SRC)charset/
99 else
100 LIBCHARSET_SRCDIR = $(SRC)../charset/
101 endif
102 LIBCHARSET_OBJDIR = ./#
103 LIBCHARSET_OBJPFX = cs-#
104 LIBCHARSET_GENPFX = charset-#
105 MD = -MD
106 CFLAGS += -I$(LIBCHARSET_SRCDIR) -I$(LIBCHARSET_OBJDIR)
107 include $(LIBCHARSET_SRCDIR)Makefile
108
109 MODULES := main malloc ustring error help licence version misc tree234
110 MODULES += input in_afm in_pf keywords contents index biblio
111 MODULES += bk_text bk_html bk_whlp bk_man bk_info bk_paper bk_ps bk_pdf
112 MODULES += winhelp deflate psdata wcwidth
113
114 OBJECTS := $(addsuffix .o,$(MODULES)) $(LIBCHARSET_OBJS)
115 DEPS := $(addsuffix .d,$(MODULES))
116
117 halibut: $(OBJECTS)
118 $(CC) $(LFLAGS) -o halibut $(OBJECTS) $(LIBS)
119
120 %.o: $(SRC)%.c
121 $(CC) $(CFLAGS) -MD -c $<
122
123 version.o: FORCE
124 $(CC) $(VDEF) -MD -c $(SRC)version.c
125
126 spotless:: clean
127 rm -f *.d
128
129 clean::
130 rm -f *.o halibut core
131
132 install:
133 $(INSTALL) -m 755 halibut $(bindir)/halibut
134 $(MAKE) -C ../doc install prefix="$(prefix)" INSTALL="$(INSTALL)"
135
136 FORCE: # phony target to force version.o to be rebuilt every time
137
138 -include $(DEPS)
139
140 endif