]> granicus.if.org Git - pgbouncer/blob - Makefile
win32: errno fixes
[pgbouncer] / Makefile
1
2 # sources
3 SRCS = client.c loader.c objects.c pooler.c proto.c sbuf.c server.c util.c \
4        admin.c stats.c takeover.c md5.c janitor.c pktbuf.c system.c main.c \
5        varcache.c aatree.c hash.c slab.c
6 HDRS = client.h loader.h objects.h pooler.h proto.h sbuf.h server.h util.h \
7        admin.h stats.h takeover.h md5.h janitor.h pktbuf.h system.h bouncer.h \
8        list.h mbuf.h varcache.h aatree.h hash.h slab.h iobuf.h
9
10 # data & dirs to include in tgz
11 DOCS = doc/overview.txt doc/usage.txt doc/config.txt doc/todo.txt
12 MANPAGES = doc/pgbouncer.1 doc/pgbouncer.5
13 DATA = README NEWS AUTHORS etc/pgbouncer.ini etc/userlist.txt Makefile \
14        config.mak.in include/config.h.in \
15        configure configure.ac debian/packages debian/changelog doc/Makefile \
16        test/Makefile test/asynctest.c test/conntest.sh test/ctest6000.ini \
17        test/ctest7000.ini test/run-conntest.sh test/stress.py test/test.ini \
18        test/test.sh test/userlist.txt etc/example.debian.init.sh doc/fixman.py \
19        win32/wbnmsgevent.mc win32/wbnmsgevent.rc win32/MSG00001.bin
20 DIRS = doc etc include src debian test
21
22 # keep autoconf stuff separate
23 -include config.mak
24
25 # fill values for unconfigured tree
26 srcdir ?= .
27 builddir ?= .
28
29 # calculate full-path values
30 OBJS = $(SRCS:.c=.o)
31 hdrs = $(addprefix $(srcdir)/include/, $(HDRS))
32 srcs = $(addprefix $(srcdir)/src/, $(SRCS))
33 objs = $(addprefix $(builddir)/lib/, $(OBJS))
34 FULL = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
35 DISTFILES = $(DIRS) $(DATA) $(DOCS) $(srcs) $(hdrs) $(MANPAGES) $(WINPORT)
36 exe = $(builddir)/pgbouncer$(EXT)
37
38 CPPCFLAGS += -I$(srcdir)/include
39
40 ifneq ($(builddir),$(srcdir))
41 CPPCFLAGS += -I$(builddir)/include
42 endif
43
44 ifeq ($(enable_debug),yes)
45 CPPCFLAGS += -DDBGVER="\"compiled by <$${USER}@`hostname`> at `date '+%Y-%m-%d %H:%M:%S'`\""
46 endif
47
48 ifeq ($(PORTNAME),win32)
49
50 EXT = .exe
51
52 CPPFLAGS += -I$(srcdir)/win32
53 WSRCS = win32service.c
54 WOBJS = $(WSRCS:.c=.o)
55 WHDRS = win32service.h compat_win32.h
56 srcs += $(addprefix $(srcdir)/win32/, $(WSRCS))
57 hdrs += $(addprefix $(srcdir)/win32/, $(WHDRS))
58 objs += $(addprefix $(builddir)/lib/, $(WOBJS))
59
60 dll = $(builddir)/pgbevent.dll
61 dlldef = $(builddir)/lib/pgbevent.def
62 dllobjs = $(builddir)/lib/eventmsg.o $(builddir)/lib/pgbevent.o
63
64 endif
65
66 # Quiet by default, 'make V=1' shows commands
67 V=0
68 ifeq ($(V), 0)
69 Q = @
70 E = @echo
71 else
72 Q = 
73 E = @true
74 endif
75
76 ## actual targets now ##
77
78 # default target
79 all: $(exe) $(dll) doc-all
80
81 # final executable
82 $(exe): $(builddir)/config.mak $(objs)
83         $(E) "  LD" $@
84         $(Q) $(CC) -o $@ $(LDFLAGS) $(objs) $(LIBS)
85
86 # objects depend on all the headers
87 $(builddir)/lib/%.o: $(srcdir)/src/%.c $(builddir)/config.mak $(hdrs)
88         @mkdir -p $(builddir)/lib
89         $(E) "  CC" $<
90         $(Q) $(CC) -c -o $@ $< $(DEFS) $(CFLAGS) $(CPPFLAGS)
91
92 $(builddir)/lib/%.o: $(srcdir)/win32/%.c $(builddir)/config.mak $(hdrs)
93         @mkdir -p $(builddir)/lib
94         $(E) "  CC" $<
95         $(Q) $(CC) -c -o $@ $< $(DEFS) $(CFLAGS) $(CPPFLAGS)
96
97 # install binary and other stuff
98 install: $(exe) doc-install
99         mkdir -p $(DESTDIR)$(bindir)
100         mkdir -p $(DESTDIR)$(docdir)
101         $(BININSTALL) -m 755 $(exe) $(DESTDIR)$(bindir)
102         $(INSTALL) -m 644 $(srcdir)/etc/pgbouncer.ini  $(DESTDIR)$(docdir)
103 ifeq ($(PORTNAME),win32)
104         $(BININSTALL) -m 755 $(dll) $(DESTDIR)$(bindir)
105 endif
106
107 # create tarfile
108 tgz: config.mak $(DISTFILES) $(MANPAGES)
109         rm -rf $(FULL) $(FULL).tgz
110         mkdir $(FULL)
111         (for f in $(DISTFILES); do echo $$f; done) | cpio -pm $(FULL)
112         tar czf $(FULL).tgz $(FULL)
113         rm -rf $(FULL)
114
115 doc/pgbouncer.1:
116         $(MAKE) -C doc pgbouncer.1
117
118 doc/pgbouncer.5:
119         $(MAKE) -C doc pgbouncer.5
120
121 # create debian package
122 deb: configure
123         yada rebuild
124         debuild -uc -us -b
125
126 # clean object files
127 clean: doc-clean
128         rm -f $(objs) $(exe) $(dll) $(dlldef) $(dllobjs)
129
130 # clean configure results
131 distclean: clean doc-distclean
132         rm -f include/config.h include/config.h.in~ config.log config.status config.mak
133         rm -rf lib autom4te*
134
135 # clean autoconf results
136 realclean: distclean doc-realclean
137         rm -f aclocal* include/config.h.in configure depcomp install-sh missing
138         rm -f tags
139
140 # generate configure script and config.h.in
141 boot:
142         autoreconf -i -f
143         rm -rf autom4te* include/config.h.in~
144
145 # targets can depend on this to force ./configure
146 $(builddir)/config.mak::
147         @test -f $(srcdir)/configure || { \
148                  echo "Please run 'make boot && ./configure' first.";exit 1;}
149         @test -f $@ || { echo "Please run ./configure first.";exit 1;}
150
151 doc-all doc-install doc-clean doc-distclean doc-realclean:
152         @if test -d doc; then $(MAKE) -C doc $(subst doc-,,$@) DESTDIR=$(DESTDIR) ;\
153         else true; fi
154
155
156 # targets can depend on this to force 'make boot'
157 configure::
158         @test -f $@ || { echo "Please run 'make boot' first.";exit 1;}
159
160 # create tags file
161 tags: $(srcs) $(hdrs)
162         if test -f ../libevent/event.h; then \
163           ctags $(srcs) $(hdrs) ../libevent/*.[ch]; \
164         else \
165           ctags $(srcs) $(hdrs); \
166         fi
167
168 # run sparse over code
169 check: config.mak
170         REAL_CC="$(CC)" \
171         $(MAKE) clean pgbouncer CC=cgcc
172
173 # profiled exe
174 pgbouncer.pg:
175         $(CC) -pg $(DEFS) -g -O2 $(CPPFLAGS) $(LDFLAGS) -o $@ $(srcs) $(LIBS)
176
177 pg: pgbouncer.pg
178
179 # asm hacks
180 $(builddir)/lib/%.s: $(srcdir)/src/%.c config.mak $(hdrs)
181         @mkdir -p $(builddir)/lib
182         $(E) "  CC -S" $<
183         $(Q) $(CC) -S -fverbose-asm -o $@ $< $(DEFS) $(CFLAGS) $(CPPFLAGS)
184 asms = $(objs:.o=.s)
185 asm: $(asms)
186
187 ifeq ($(PORTNAME),win32)
188
189 $(builddir)/lib/eventmsg.o: $(srcdir)/win32/eventmsg.rc
190         $(E) "  WINDRES" $<
191         $(Q) $(WINDRES) $< -o $@ --include-dir=$(srcdir)/win32
192
193 $(dlldef): $(dllobjs)
194         $(E) "  DLLTOOL" $@
195         $(Q) $(DLLTOOL) --output-def $@ $(dllobjs)
196
197 # final executable
198 $(dll): $(builddir)/config.mak $(dllobjs) $(dlldef)
199         $(E) "  DLLWRAP" $@
200         $(Q) $(DLLWRAP) --def $(dlldef) -o $@ $(dllobjs)
201
202 endif
203
204 stripped: $(exe) $(dll)
205         $(STRIP) $(exe) $(dll)
206