postgres/contrib/contrib-global.mk
Peter Eisentraut 264f8f2b6c Install dynamically loadable modules into a private subdirectory
under libdir, for a cleaner separation in the installation layout
and compatibility with binary packaging standards.  Point backend's
default search location there.  The contrib modules are also
installed in the said location, giving them the benefit of the
default search path as well.  No changes in user interface
nevertheless.
2001-09-16 16:11:11 +00:00

203 lines
5.2 KiB
Makefile

# $Header: /cvsroot/pgsql/contrib/contrib-global.mk,v 1.2 2001/09/16 16:11:08 petere Exp $
# This file contains generic rules to build many kinds of simple
# contrib 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:
#
# subdir = contrib/xxx
# top_builddir = ../..
# include $(top_builddir)/src/Makefile.global
#
# [variable assignments, see below]
# [custom rules, rarely necessary]
#
# include $(top_srcdir)/contrib/contrib-global.mk
#
# 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
# 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...
override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
ifdef MODULES
override CFLAGS += $(CFLAGS_SL)
override DLLLIBS := $(BE_DLLLIBS) $(DLLLIBS)
endif
ifdef PG_CPPFLAGS
override CPPFLAGS := $(PG_CPPFLAGS) $(CPPFLAGS)
endif
all: $(PROGRAM) $(DATA_built) $(addsuffix $(DLSUFFIX), $(MODULES))
ifdef MODULE_big
# shared library parameters
NAME = $(MODULE_big)
SO_MAJOR_VERSION= 0
SO_MINOR_VERSION= 0
rpath =
override DLLLIBS := $(BE_DLLLIBS) $(DLLLIBS)
include $(top_srcdir)/src/Makefile.shlib
all: all-lib
endif # MODULE_big
install: all installdirs
ifneq (,$(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; \
done
endif # DATA
ifdef MODULES
@for file in $(addsuffix $(DLSUFFIX), $(MODULES)); do \
echo "$(INSTALL_SHLIB) $$file $(DESTDIR)$(pkglibdir)"; \
$(INSTALL_SHLIB) $$file $(DESTDIR)$(pkglibdir); \
done
endif # MODULES
ifdef DOCS
@for file in $(addprefix $(srcdir)/, $(DOCS)); do \
echo "$(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/contrib"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/contrib; \
done
endif # DOCS
ifdef PROGRAM
$(INSTALL_PROGRAM) $(PROGRAM)$(X) $(DESTDIR)$(bindir)
endif # PROGRAM
ifdef MODULE_big
$(INSTALL_SHLIB) $(shlib) $(DESTDIR)$(pkglibdir)/$(MODULE_big)$(DLSUFFIX)
endif # MODULE_big
ifdef SCRIPTS
@for file in $(addprefix $(srcdir)/, $(SCRIPTS)); do \
echo "$(INSTALL_SCRIPT) $$file $(DESTDIR)$(bindir)"; \
$(INSTALL_SCRIPT) $$file $(DESTDIR)$(bindir); \
done
endif # SCRIPTS
installdirs:
ifneq (,$(DATA)$(DATA_built))
$(mkinstalldirs) $(DESTDIR)$(datadir)/contrib
endif
ifneq (,$(MODULES)$(MODULE_big))
$(mkinstalldirs) $(DESTDIR)$(pkglibdir)
endif
ifdef DOCS
$(mkinstalldirs) $(DESTDIR)$(docdir)/contrib
endif
ifneq (,$(PROGRAM)$(SCRIPTS))
$(mkinstalldirs) $(DESTDIR)$(bindir)
endif
uninstall:
ifneq (,$(DATA)$(DATA_built))
rm -f $(addprefix $(DESTDIR)$(datadir)/contrib/, $(DATA) $(DATA_built))
endif
ifdef MODULES
rm -f $(addprefix $(DESTDIR)$(pkglibdir)/, $(addsuffix $(DLSUFFIX), $(MODULES)))
endif
ifdef DOCS
rm -f $(addprefix $(DESTDIR)$(docdir)/contrib/, $(DOCS))
endif
ifdef PROGRAM
rm -f $(DESTDIR)$(bindir)/$(PROGRAM)$(X)
endif
ifdef MODULE_big
rm -f $(DESTDIR)$(pkglibdir)/$(MODULE_big)$(DLSUFFIX)
endif
ifdef SCRIPTS
rm -f $(addprefix $(DESTDIR)$(bindir)/, $(SCRIPTS))
endif
clean:
ifdef MODULES
rm -f $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .o, $(MODULES))
endif
ifdef DATA_built
rm -f $(DATA_built)
endif
ifdef PROGRAM
rm -f $(PROGRAM)$(X)
endif
ifdef OBJS
rm -f $(OBJS)
endif
ifdef EXTRA_CLEAN
rm -f $(EXTRA_CLEAN)
endif
ifdef REGRESS
# things created by various check targets
rm -rf results tmp_check log
rm -f regression.diffs regression.out regress.out run_check.out
ifeq ($(PORTNAME), win)
rm -f regress.def
endif
endif # REGRESS
ifdef MODULE_big
clean: clean-lib
endif
distclean maintainer-clean: clean
ifdef REGRESS
.PHONY: submake
submake:
$(MAKE) -C $(top_builddir)/src/test/regress pg_regress
# against installed postmaster
installcheck: submake
$(top_builddir)/src/test/regress/pg_regress $(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)
check:
@echo "'make check' is not supported."
@echo "Do 'make install', then 'make installcheck' instead."
endif # REGRESS
# STANDARD RULES
ifneq (,$(MODULES)$(MODULE_big))
%.sql: %.sql.in
sed 's,MODULE_PATHNAME,$$libdir/$*,g' $< >$@
endif
ifdef PROGRAM
$(PROGRAM): $(OBJS)
$(CC) $(CFLAGS) $(OBJS) $(PG_LIBS) $(LDFLAGS) $(LIBS) -o $@
endif