Add an error check for correct formatting in Deflate uncompressed
[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
76 ifdef TEST
77 CFLAGS += -DLOGALLOC
78 LIBS += -lefence
79 endif
80
81 ifndef VER
82 ifdef VERSION
83 VER := $(VERSION)
84 endif
85 endif
86 ifdef VER
87 VDEF = -DVERSION=\"$(VER)\"
88 else
89 VDEF = `(cd $(SRC); md5sum -c manifest >/dev/null 2>&1 && cat version)`
90 endif
91
92 all: halibut
93
94 SRC := ../
95
96 ifeq ($(shell test -d $(SRC)charset && echo yes),yes)
97 LIBCHARSET_SRCDIR = $(SRC)charset/
98 else
99 LIBCHARSET_SRCDIR = $(SRC)../charset/
100 endif
101 LIBCHARSET_OBJDIR = ./#
102 LIBCHARSET_OBJPFX = cs-#
103 LIBCHARSET_GENPFX = charset-#
104 MD = -MD
105 CFLAGS += -I$(LIBCHARSET_SRCDIR) -I$(LIBCHARSET_OBJDIR)
106 include $(LIBCHARSET_SRCDIR)Makefile
107
108 MODULES := main malloc ustring error help licence version misc tree234
109 MODULES += input in_afm in_pf in_sfnt keywords contents index biblio
110 MODULES += bk_text bk_html bk_whlp bk_man bk_info bk_paper bk_ps bk_pdf
111 MODULES += winhelp deflate psdata wcwidth
112
113 OBJECTS := $(addsuffix .o,$(MODULES)) $(LIBCHARSET_OBJS)
114 DEPS := $(addsuffix .d,$(MODULES))
115
116 halibut: $(OBJECTS)
117 $(CC) $(LFLAGS) -o halibut $(OBJECTS) $(LIBS)
118
119 %.o: $(SRC)%.c
120 $(CC) $(CFLAGS) -MD -c $<
121
122 version.o: FORCE
123 $(CC) $(VDEF) -MD -c $(SRC)version.c
124
125 spotless:: clean
126 rm -f *.d
127
128 clean::
129 rm -f *.o halibut core
130
131 install:
132 $(INSTALL) -m 755 halibut $(bindir)/halibut
133 $(MAKE) -C ../doc install prefix="$(prefix)" INSTALL="$(INSTALL)"
134
135 FORCE: # phony target to force version.o to be rebuilt every time
136
137 -include $(DEPS)
138
139 endif