OSDN Git Service

db89546b0376996b3f1c2fd33faa6863e15094a5
[pg-rex/syncrep.git] / src / makefiles / pgxs.mk
1 # PGXS: PostgreSQL extensions makefile
2
3 # $PostgreSQL: pgsql/src/makefiles/pgxs.mk,v 1.18 2010/01/04 16:34:11 tgl Exp $ 
4
5 # This file contains generic rules to build many kinds of simple
6 # extension modules.  You only need to set a few variables and include
7 # this file, the rest will be done here.
8 #
9 # Use the following layout for your Makefile:
10 #
11 #   [variable assignments, see below]
12 #   [custom rules, rarely necessary]
13 #
14 #   PG_CONFIG = pg_config
15 #   PGXS := $(shell $(PG_CONFIG) --pgxs)
16 #   include $(PGXS)
17 #
18 # Set one of these three variables to specify what is built:
19 #
20 #   MODULES -- list of shared objects to be built from source files with
21 #     same stem (do not include suffix in this list)
22 #   MODULE_big -- a shared object to build from multiple source files
23 #     (list object files in OBJS)
24 #   PROGRAM -- a binary program to build (list object files in OBJS)
25 #
26 # The following variables can also be set:
27 #
28 #   MODULEDIR -- subdirectory into which DATA and DOCS files should be
29 #     installed (if not set, default is "contrib")
30 #   DATA -- random files to install into $PREFIX/share/$MODULEDIR
31 #   DATA_built -- random files to install into $PREFIX/share/$MODULEDIR,
32 #     which need to be built first
33 #   DATA_TSEARCH -- random files to install into $PREFIX/share/tsearch_data
34 #   DOCS -- random files to install under $PREFIX/doc/$MODULEDIR
35 #   SCRIPTS -- script files (not binaries) to install into $PREFIX/bin
36 #   SCRIPTS_built -- script files (not binaries) to install into $PREFIX/bin,
37 #     which need to be built first
38 #   REGRESS -- list of regression test cases (without suffix)
39 #   EXTRA_CLEAN -- extra files to remove in 'make clean'
40 #   PG_CPPFLAGS -- will be added to CPPFLAGS
41 #   PG_LIBS -- will be added to PROGRAM link line
42 #   SHLIB_LINK -- will be added to MODULE_big link line
43 #   PG_CONFIG -- path to pg_config program for the PostgreSQL installation
44 #     to build against (typically just "pg_config" to use the first one in
45 #     your PATH)
46 #
47 # Better look at some of the existing uses for examples...
48
49 ifndef PGXS
50 ifndef NO_PGXS
51 $(error pgxs error: makefile variable PGXS or NO_PGXS must be set)
52 endif
53 endif
54
55
56 ifdef PGXS
57 # We assume that we are in src/makefiles/, so top is ...
58 top_builddir := $(dir $(PGXS))../..
59 include $(top_builddir)/src/Makefile.global
60
61 top_srcdir = $(top_builddir)
62 srcdir = .
63 VPATH =
64 endif
65
66
67 override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
68
69 ifdef MODULES
70 override CFLAGS += $(CFLAGS_SL)
71 SHLIB_LINK += $(BE_DLLLIBS)
72 endif
73
74 ifdef MODULEDIR
75 datamoduledir = $(MODULEDIR)
76 docmoduledir = $(MODULEDIR)
77 else
78 datamoduledir = contrib
79 docmoduledir = contrib
80 endif
81
82 ifdef PG_CPPFLAGS
83 override CPPFLAGS := $(PG_CPPFLAGS) $(CPPFLAGS)
84 endif
85
86 all: $(PROGRAM) $(DATA_built) $(SCRIPTS_built) $(addsuffix $(DLSUFFIX), $(MODULES))
87
88 ifdef MODULE_big
89 # shared library parameters
90 NAME = $(MODULE_big)
91
92 include $(top_srcdir)/src/Makefile.shlib
93
94 all: all-lib
95 endif # MODULE_big
96
97
98 install: all installdirs
99 ifneq (,$(DATA)$(DATA_built))
100         @for file in $(addprefix $(srcdir)/, $(DATA)) $(DATA_built); do \
101           echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'"; \
102           $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'; \
103         done
104 endif # DATA
105 ifneq (,$(DATA_TSEARCH))
106         @for file in $(addprefix $(srcdir)/, $(DATA_TSEARCH)); do \
107           echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/tsearch_data'"; \
108           $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/tsearch_data'; \
109         done
110 endif # DATA_TSEARCH
111 ifdef MODULES
112         @for file in $(addsuffix $(DLSUFFIX), $(MODULES)); do \
113           echo "$(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'"; \
114           $(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'; \
115         done
116 endif # MODULES
117 ifdef DOCS
118 ifdef docdir
119         @for file in $(addprefix $(srcdir)/, $(DOCS)); do \
120           echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'"; \
121           $(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'; \
122         done
123 endif # docdir
124 endif # DOCS
125 ifdef PROGRAM
126         $(INSTALL_PROGRAM) $(PROGRAM)$(X) '$(DESTDIR)$(bindir)'
127 endif # PROGRAM
128 ifdef SCRIPTS
129         @for file in $(addprefix $(srcdir)/, $(SCRIPTS)); do \
130           echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \
131           $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \
132         done
133 endif # SCRIPTS
134 ifdef SCRIPTS_built
135         @for file in $(SCRIPTS_built); do \
136           echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \
137           $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \
138         done
139 endif # SCRIPTS_built
140
141 ifdef MODULE_big
142 install: install-lib
143 endif # MODULE_big
144
145
146 installdirs:
147 ifneq (,$(DATA)$(DATA_built))
148         $(MKDIR_P) '$(DESTDIR)$(datadir)/$(datamoduledir)'
149 endif
150 ifneq (,$(DATA_TSEARCH))
151         $(MKDIR_P) '$(DESTDIR)$(datadir)/tsearch_data'
152 endif
153 ifneq (,$(MODULES))
154         $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'
155 endif
156 ifdef DOCS
157 ifdef docdir
158         $(MKDIR_P) '$(DESTDIR)$(docdir)/$(docmoduledir)'
159 endif # docdir
160 endif # DOCS
161 ifneq (,$(PROGRAM)$(SCRIPTS)$(SCRIPTS_built))
162         $(MKDIR_P) '$(DESTDIR)$(bindir)'
163 endif
164
165 ifdef MODULE_big
166 installdirs: installdirs-lib
167 endif # MODULE_big
168
169
170 uninstall:
171 ifneq (,$(DATA)$(DATA_built))
172         rm -f $(addprefix '$(DESTDIR)$(datadir)/$(datamoduledir)'/, $(notdir $(DATA) $(DATA_built)))
173 endif
174 ifneq (,$(DATA_TSEARCH))
175         rm -f $(addprefix '$(DESTDIR)$(datadir)/tsearch_data'/, $(notdir $(DATA_TSEARCH)))
176 endif
177 ifdef MODULES
178         rm -f $(addprefix '$(DESTDIR)$(pkglibdir)'/, $(addsuffix $(DLSUFFIX), $(MODULES)))
179 endif
180 ifdef DOCS
181         rm -f $(addprefix '$(DESTDIR)$(docdir)/$(docmoduledir)'/, $(DOCS))
182 endif
183 ifdef PROGRAM
184         rm -f '$(DESTDIR)$(bindir)/$(PROGRAM)$(X)'
185 endif
186 ifdef SCRIPTS
187         rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS))
188 endif
189 ifdef SCRIPTS_built
190         rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS_built))
191 endif
192
193 ifdef MODULE_big
194 uninstall: uninstall-lib
195 endif # MODULE_big
196
197
198 clean:
199 ifdef MODULES
200         rm -f $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .o, $(MODULES))
201 endif
202 ifdef DATA_built
203         rm -f $(DATA_built)
204 endif
205 ifdef SCRIPTS_built
206         rm -f $(SCRIPTS_built)
207 endif
208 ifdef PROGRAM
209         rm -f $(PROGRAM)$(X)
210 endif
211 ifdef OBJS
212         rm -f $(OBJS)
213 endif
214 ifdef EXTRA_CLEAN
215         rm -f $(EXTRA_CLEAN)
216 endif
217 ifdef REGRESS
218 # things created by various check targets
219         rm -rf results tmp_check log
220         rm -f regression.diffs regression.out regress.out run_check.out
221 ifeq ($(PORTNAME), win)
222         rm -f regress.def
223 endif
224 endif # REGRESS
225
226 ifdef MODULE_big
227 clean: clean-lib
228 endif
229
230 distclean maintainer-clean: clean
231
232
233 ifdef REGRESS
234
235 # Calling makefile can set REGRESS_OPTS, but this is the default:
236 ifndef REGRESS_OPTS
237 REGRESS_OPTS = --dbname=$(CONTRIB_TESTDB)
238 endif
239
240 # where to find psql for running the tests
241 PSQLDIR = $(bindir)
242
243 # When doing a VPATH build, must copy over the data files so that the
244 # driver script can find them.  We have to use an absolute path for
245 # the targets, because otherwise make will try to locate the missing
246 # files using VPATH, and will find them in $(srcdir), but the point
247 # here is that we want to copy them from $(srcdir) to the build
248 # directory.
249
250 ifdef VPATH
251 abs_builddir := $(shell pwd)
252 test_files_src := $(wildcard $(srcdir)/data/*.data)
253 test_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(test_files_src))
254
255 all: $(test_files_build)
256 $(test_files_build): $(abs_builddir)/%: $(srcdir)/%
257         ln -s $< $@
258 endif # VPATH
259
260 .PHONY: submake
261 submake:
262 ifndef PGXS
263         $(MAKE) -C $(top_builddir)/src/test/regress pg_regress$(X)
264 endif
265
266 # against installed postmaster
267 installcheck: submake
268         $(top_builddir)/src/test/regress/pg_regress --inputdir=$(srcdir) --psqldir=$(PSQLDIR) $(REGRESS_OPTS) $(REGRESS)
269
270 # in-tree test doesn't work yet (no way to install my shared library)
271 #check: all submake
272 #       $(top_builddir)/src/test/regress/pg_regress --temp-install \
273 #         --top-builddir=$(top_builddir) $(REGRESS_OPTS) $(REGRESS)
274 check:
275         @echo "'make check' is not supported."
276         @echo "Do 'make install', then 'make installcheck' instead."
277         @exit 1
278 endif # REGRESS
279
280
281 # STANDARD RULES
282
283 ifneq (,$(MODULES)$(MODULE_big))
284 %.sql: %.sql.in
285         sed 's,MODULE_PATHNAME,$$libdir/$*,g' $< >$@
286 endif
287
288 ifdef PROGRAM
289 $(PROGRAM): $(OBJS)
290         $(CC) $(CFLAGS) $(OBJS) $(PG_LIBS) $(LDFLAGS) $(LIBS) -o $@
291 endif