📄 pgxs.mk
字号:
# PGXS: PostgreSQL extensions makefile# $PostgreSQL: pgsql/src/makefiles/pgxs.mk,v 1.9 2006/07/21 00:24:04 tgl Exp $ # This file contains generic rules to build many kinds of simple# extension modules. You only need to set a few variables and include# this file, the rest will be done here.## Use the following layout for your Makefile:## [variable assignments, see below]# [custom rules, rarely necessary]## PGXS := $(shell pg_config --pgxs)# include $(PGXS)## The following variables can be set:## MODULES -- list of shared objects to be build from source file with# same stem (do not include suffix in this list)# DATA -- random files to install into $PREFIX/share/contrib# DATA_built -- random files to install into $PREFIX/share/contrib,# which need to be built first# DOCS -- random files to install under $PREFIX/doc/contrib# SCRIPTS -- script files (not binaries) to install into $PREFIX/bin# SCRIPTS_built -- script files (not binaries) to install into $PREFIX/bin,# which need to be built first# REGRESS -- list of regression test cases (without suffix)## or at most one of these two:## PROGRAM -- a binary program to build (list objects files in OBJS)# MODULE_big -- a shared object to build (list object files in OBJS)## The following can also be set:## EXTRA_CLEAN -- extra files to remove in 'make clean'# PG_CPPFLAGS -- will be added to CPPFLAGS# PG_LIBS -- will be added to PROGRAM link line# SHLIB_LINK -- will be added to MODULE_big link line## Better look at some of the existing uses for examples...ifndef PGXSifndef NO_PGXS$(error pgxs error: makefile variable PGXS or NO_PGXS must be set)endifendififdef PGXS# We assume that we are in src/makefiles/, so top is ...top_builddir := $(dir $(PGXS))../..include $(top_builddir)/src/Makefile.globaltop_srcdir = $(top_builddir)srcdir = .VPATH =endifoverride CPPFLAGS := -I$(srcdir) $(CPPFLAGS)ifdef MODULESoverride CFLAGS += $(CFLAGS_SL)SHLIB_LINK += $(BE_DLLLIBS)endififdef PG_CPPFLAGSoverride CPPFLAGS := $(PG_CPPFLAGS) $(CPPFLAGS)endifall: $(PROGRAM) $(DATA_built) $(SCRIPTS_built) $(addsuffix $(DLSUFFIX), $(MODULES))ifdef MODULE_big# shared library parametersNAME = $(MODULE_big)SO_MAJOR_VERSION= 0SO_MINOR_VERSION= 0SHLIB_LINK += $(BE_DLLLIBS)include $(top_srcdir)/src/Makefile.shliball: all-libendif # MODULE_biginstall: all installdirsifneq (,$(DATA)$(DATA_built)) @for file in $(addprefix $(srcdir)/, $(DATA)) $(DATA_built); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/contrib'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/contrib'; \ doneendif # DATAifdef MODULES @for file in $(addsuffix $(DLSUFFIX), $(MODULES)); do \ echo "$(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'"; \ $(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'; \ doneendif # MODULESifdef DOCSifdef docdir @for file in $(addprefix $(srcdir)/, $(DOCS)); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/contrib'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/contrib'; \ doneendif # docdirendif # DOCSifdef PROGRAM $(INSTALL_PROGRAM) $(PROGRAM)$(X) '$(DESTDIR)$(bindir)'endif # PROGRAMifdef MODULE_big $(INSTALL_SHLIB) $(shlib) '$(DESTDIR)$(pkglibdir)/$(MODULE_big)$(DLSUFFIX)'endif # MODULE_bigifdef SCRIPTS @for file in $(addprefix $(srcdir)/, $(SCRIPTS)); do \ echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \ $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \ doneendif # SCRIPTSifdef SCRIPTS_built @for file in $(SCRIPTS_built); do \ echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \ $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \ doneendif # SCRIPTS_builtinstalldirs:ifneq (,$(DATA)$(DATA_built)) $(mkinstalldirs) '$(DESTDIR)$(datadir)/contrib'endififneq (,$(MODULES)$(MODULE_big)) $(mkinstalldirs) '$(DESTDIR)$(pkglibdir)'endififdef DOCSifdef docdir $(mkinstalldirs) '$(DESTDIR)$(docdir)/contrib'endif # docdirendif # DOCSifneq (,$(PROGRAM)$(SCRIPTS)$(SCRIPTS_built)) $(mkinstalldirs) '$(DESTDIR)$(bindir)'endifuninstall:ifneq (,$(DATA)$(DATA_built)) rm -f $(addprefix '$(DESTDIR)$(datadir)'/contrib/, $(notdir $(DATA) $(DATA_built)))endififdef MODULES rm -f $(addprefix '$(DESTDIR)$(pkglibdir)'/, $(addsuffix $(DLSUFFIX), $(MODULES)))endififdef DOCS rm -f $(addprefix '$(DESTDIR)$(docdir)'/contrib/, $(DOCS))endififdef PROGRAM rm -f '$(DESTDIR)$(bindir)/$(PROGRAM)$(X)'endififdef MODULE_big rm -f '$(DESTDIR)$(pkglibdir)/$(MODULE_big)$(DLSUFFIX)'endififdef SCRIPTS rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS))endififdef SCRIPTS_built rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS_built))endifclean:ifdef MODULES rm -f $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .o, $(MODULES))endififdef DATA_built rm -f $(DATA_built)endififdef SCRIPTS_built rm -f $(SCRIPTS_built)endififdef PROGRAM rm -f $(PROGRAM)$(X)endififdef OBJS rm -f $(OBJS)endififdef EXTRA_CLEAN rm -f $(EXTRA_CLEAN)endififdef REGRESS# things created by various check targets rm -rf results tmp_check log rm -f regression.diffs regression.out regress.out run_check.outifeq ($(PORTNAME), win) rm -f regress.defendifendif # REGRESSifdef MODULE_bigclean: clean-libendifdistclean maintainer-clean: cleanifdef REGRESS# Calling makefile can set REGRESS_OPTS, but this is the default:ifndef REGRESS_OPTSREGRESS_OPTS = --dbname=$(CONTRIB_TESTDB)endif# where to find psql for running the testsPSQLDIR = $(bindir)# When doing a VPATH build, must copy over the test .sql and .out# files so that the driver script can find them. We have to use an# absolute path for the targets, because otherwise make will try to# locate the missing files using VPATH, and will find them in# $(srcdir), but the point here is that we want to copy them from# $(srcdir) to the build directory.ifdef VPATHabs_builddir := $(shell pwd)test_files_src := $(wildcard $(srcdir)/sql/*.sql) $(wildcard $(srcdir)/expected/*.out) $(wildcard $(srcdir)/data/*.data)test_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(test_files_src))all: $(test_files_build)$(test_files_build): $(abs_builddir)/%: $(srcdir)/% ln -s $< $@endif # VPATH.PHONY: submakesubmake:ifndef PGXS $(MAKE) -C $(top_builddir)/src/test/regress pg_regress$(X)endif# against installed postmasterinstallcheck: submake $(top_builddir)/src/test/regress/pg_regress --psqldir=$(PSQLDIR) $(REGRESS_OPTS) $(REGRESS)# in-tree test doesn't work yet (no way to install my shared library)#check: all submake# $(top_builddir)/src/test/regress/pg_regress --temp-install \# --top-builddir=$(top_builddir) $(REGRESS_OPTS) $(REGRESS)check: @echo "'make check' is not supported." @echo "Do 'make install', then 'make installcheck' instead."endif # REGRESS# STANDARD RULESifneq (,$(MODULES)$(MODULE_big))%.sql: %.sql.in sed 's,MODULE_PATHNAME,$$libdir/$*,g' $< >$@endififdef PROGRAM$(PROGRAM): $(OBJS) $(CC) $(CFLAGS) $(OBJS) $(PG_LIBS) $(LDFLAGS) $(LIBS) -o $@endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -