aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile27
-rw-r--r--src/Makefile.global.in14
-rw-r--r--src/bin/pg_config/Makefile3
-rw-r--r--src/bin/pg_config/pg_config.sh9
-rw-r--r--src/makefiles/Makefile15
-rw-r--r--src/makefiles/pgxs.mk250
-rw-r--r--src/utils/Makefile16
7 files changed, 327 insertions, 7 deletions
diff --git a/src/Makefile b/src/Makefile
index a42b0620e01..1221c332a32 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -4,7 +4,7 @@
#
# Copyright (c) 1994, Regents of the University of California
#
-# $PostgreSQL: pgsql/src/Makefile,v 1.32 2004/04/30 04:31:52 momjian Exp $
+# $PostgreSQL: pgsql/src/Makefile,v 1.33 2004/07/30 12:26:40 petere Exp $
#
#-------------------------------------------------------------------------
@@ -22,10 +22,30 @@ all install installdirs uninstall dep depend distprep:
$(MAKE) -C interfaces $@
$(MAKE) -C bin $@
$(MAKE) -C pl $@
+ $(MAKE) -C makefiles $@
+ $(MAKE) -C utils $@
+
+install: install-local
+
+install-local: installdirs-local
+ $(INSTALL_DATA) Makefile.global $(DESTDIR)$(pgxsdir)/$(subdir)/Makefile.global
+ $(INSTALL_DATA) Makefile.port $(DESTDIR)$(pgxsdir)/$(subdir)/Makefile.port
+ $(INSTALL_DATA) $(srcdir)/Makefile.shlib $(DESTDIR)$(pgxsdir)/$(subdir)/Makefile.shlib
+ $(INSTALL_DATA) $(srcdir)/nls-global.mk $(DESTDIR)$(pgxsdir)/$(subdir)/nls-global.mk
install-all-headers:
$(MAKE) -C include $@
+installdirs: installdirs-local
+
+installdirs-local:
+ $(mkinstalldirs) $(DESTDIR)$(pgxsdir)/$(subdir)
+
+uninstall: uninstall-local
+
+uninstall-local:
+ rm -f $(addprefix $(DESTDIR)$(pgxsdir)/$(subdir), Makefile.global Makefile.port Makefile.shlib nls-global.mk)
+
clean:
$(MAKE) -C port $@
$(MAKE) -C timezone $@
@@ -34,6 +54,7 @@ clean:
$(MAKE) -C interfaces $@
$(MAKE) -C bin $@
$(MAKE) -C pl $@
+ $(MAKE) -C makefiles $@
$(MAKE) -C test $@
$(MAKE) -C tutorial $@
$(MAKE) -C utils $@
@@ -47,8 +68,12 @@ distclean maintainer-clean:
-$(MAKE) -C interfaces $@
-$(MAKE) -C bin $@
-$(MAKE) -C pl $@
+ -$(MAKE) -C makefiles $@
-$(MAKE) -C test $@
-$(MAKE) -C tutorial $@
-$(MAKE) -C utils $@
-$(MAKE) -C tools/thread $@
rm -f Makefile.port Makefile.global
+
+
+.PHONY: install-local installdirs-local uninstall-local
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 7a56b9ba461..7ccf9b00efa 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -1,5 +1,5 @@
# -*-makefile-*-
-# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.189 2004/06/02 21:05:52 momjian Exp $
+# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.190 2004/07/30 12:26:40 petere Exp $
#------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets,
@@ -116,6 +116,8 @@ endif
localedir := @localedir@
+pgxsdir = $(pkglibdir)/pgxs
+
##########################################################################
#
@@ -166,10 +168,15 @@ COLLATEINDEX = @COLLATEINDEX@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+
+ifdef PGXS
+override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)
+else # not PGXS
override CPPFLAGS := -I$(top_srcdir)/src/include $(CPPFLAGS)
ifdef VPATH
override CPPFLAGS := -I$(top_builddir)/src/include $(CPPFLAGS)
endif
+endif # not PGXS
CC = @CC@
GCC = @GCC@
@@ -366,6 +373,9 @@ TAS = @TAS@
%.bz2: %
$(BZIP2) -f $<
+
+ifndef PGXS
+
# Remake Makefile.global from Makefile.global.in if the latter
# changed. In order to trigger this rule, the including file must
# write `include $(top_builddir)/src/Makefile.global', not some
@@ -393,6 +403,8 @@ $(top_builddir)/src/include/stamp-h: $(top_srcdir)/src/include/pg_config.h.in $(
$(top_builddir)/config.status: $(top_srcdir)/configure
cd $(top_builddir) && ./config.status --recheck
+endif # not PGXS
+
install-strip:
@$(MAKE) INSTALL_PROGRAM_ENV="STRIPPROG='$(STRIP)'" \
diff --git a/src/bin/pg_config/Makefile b/src/bin/pg_config/Makefile
index 134a80372dc..8fa0f94a7e9 100644
--- a/src/bin/pg_config/Makefile
+++ b/src/bin/pg_config/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/src/bin/pg_config/Makefile,v 1.6 2003/11/29 19:52:04 pgsql Exp $
+# $PostgreSQL: pgsql/src/bin/pg_config/Makefile,v 1.7 2004/07/30 12:26:40 petere Exp $
subdir = src/bin/pg_config
top_builddir = ../../..
@@ -12,6 +12,7 @@ pg_config: pg_config.sh $(top_builddir)/src/Makefile.global Makefile
-e 's,@includedir_server@,$(includedir_server),g' \
-e 's,@libdir@,$(libdir),g' \
-e 's,@pkglibdir@,$(pkglibdir),g' \
+ -e 's,@pgxsdir@,$(pgxsdir),g' \
-e "s|@configure@|$(configure_args)|g" \
-e 's,@version@,$(VERSION),g' \
$< >$@
diff --git a/src/bin/pg_config/pg_config.sh b/src/bin/pg_config/pg_config.sh
index e6d1824f20f..673462d2afb 100644
--- a/src/bin/pg_config/pg_config.sh
+++ b/src/bin/pg_config/pg_config.sh
@@ -7,7 +7,7 @@
# Author: Peter Eisentraut <peter_e@gmx.net>
# Public domain
-# $PostgreSQL: pgsql/src/bin/pg_config/pg_config.sh,v 1.9 2003/11/29 19:52:04 pgsql Exp $
+# $PostgreSQL: pgsql/src/bin/pg_config/pg_config.sh,v 1.10 2004/07/30 12:26:40 petere Exp $
me=`basename $0`
@@ -17,6 +17,7 @@ val_includedir='@includedir@'
val_includedir_server='@includedir_server@'
val_libdir='@libdir@'
val_pkglibdir='@pkglibdir@'
+val_pgxsdir='@pgxsdir@'
val_configure="@configure@"
val_version='@version@'
@@ -33,6 +34,7 @@ Options:
--includedir-server show location of C header files for the server
--libdir show location of object code libraries
--pkglibdir show location of dynamically loadable modules
+ --pgxs show location of extension makefile
--configure show options given to 'configure' script when
PostgreSQL was built
--version show the PostgreSQL version, then exit
@@ -60,11 +62,12 @@ do
show="$show \$val_includedir_server";;
--libdir) show="$show \$val_libdir";;
--pkglibdir) show="$show \$val_pkglibdir";;
+ --pgxs) show="$show \$val_pgxsdir/src/makefiles/pgxs.mk";;
--configure) show="$show \$val_configure";;
- --version) echo "PostgreSQL $val_version"
+ --version) echo "PostgreSQL $val_version"
exit 0;;
- --help|-\?) echo "$help"
+ --help|-\?) echo "$help"
exit 0;;
*) echo "$me: invalid argument: $opt" 1>&2
echo "$advice" 1>&2
diff --git a/src/makefiles/Makefile b/src/makefiles/Makefile
new file mode 100644
index 00000000000..a33d6df7abb
--- /dev/null
+++ b/src/makefiles/Makefile
@@ -0,0 +1,15 @@
+# $PostgreSQL: pgsql/src/makefiles/Makefile,v 1.1 2004/07/30 12:26:40 petere Exp $
+
+subdir = src/makefiles
+top_builddir = ../..
+include $(top_builddir)/src/Makefile.global
+
+
+install: all installdirs
+ $(INSTALL_DATA) $(srcdir)/pgxs.mk $(DESTDIR)$(pgxsdir)/$(subdir)/
+
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(pgxsdir)/$(subdir)
+
+uninstall:
+ rm -f $(DESTDIR)$(pgxsdir)/$(subdir)/pgxs.mk
diff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mk
new file mode 100644
index 00000000000..1ca974c3ed4
--- /dev/null
+++ b/src/makefiles/pgxs.mk
@@ -0,0 +1,250 @@
+# PGXS: PostgreSQL extensions makefile
+
+# $PostgreSQL: pgsql/src/makefiles/pgxs.mk,v 1.1 2004/07/30 12:26:40 petere 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 PGXS
+ifndef NO_PGXS
+$(error pgxs error: makefile variable PGXS or NO_PGXS must be set)
+endif
+endif
+
+
+ifdef PGXS
+# We assume that we are in src/makefiles/, so top is ...
+top_builddir := $(dir $(PGXS))/../..
+include $(top_builddir)/src/Makefile.global
+
+top_srcdir = $(top_builddir)
+srcdir = .
+VPATH =
+endif
+
+
+override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
+
+ifdef MODULES
+override CFLAGS += $(CFLAGS_SL)
+SHLIB_LINK += $(BE_DLLLIBS)
+endif
+
+ifdef PG_CPPFLAGS
+override CPPFLAGS := $(PG_CPPFLAGS) $(CPPFLAGS)
+endif
+
+all: $(PROGRAM) $(DATA_built) $(SCRIPTS_built) $(addsuffix $(DLSUFFIX), $(MODULES))
+
+ifdef MODULE_big
+# shared library parameters
+NAME = $(MODULE_big)
+SO_MAJOR_VERSION= 0
+SO_MINOR_VERSION= 0
+rpath =
+
+SHLIB_LINK += $(BE_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
+ifdef SCRIPTS_built
+ @for file in $(SCRIPTS_built); do \
+ echo "$(INSTALL_SCRIPT) $$file $(DESTDIR)$(bindir)"; \
+ $(INSTALL_SCRIPT) $$file $(DESTDIR)$(bindir); \
+ done
+endif # SCRIPTS_built
+
+
+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)$(SCRIPTS_built))
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+endif
+
+
+uninstall:
+ifneq (,$(DATA)$(DATA_built))
+ rm -f $(addprefix $(DESTDIR)$(datadir)/contrib/, $(notdir $(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
+ifdef SCRIPTS_built
+ rm -f $(addprefix $(DESTDIR)$(bindir)/, $(SCRIPTS_built))
+endif
+
+
+clean:
+ifdef MODULES
+ rm -f $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .o, $(MODULES))
+endif
+ifdef DATA_built
+ rm -f $(DATA_built)
+endif
+ifdef SCRIPTS_built
+ rm -f $(SCRIPTS_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
+
+# 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 VPATH
+abs_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: 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
diff --git a/src/utils/Makefile b/src/utils/Makefile
index 5a98b17aa13..77261445107 100644
--- a/src/utils/Makefile
+++ b/src/utils/Makefile
@@ -2,7 +2,7 @@
#
# Makefile for utils
#
-# $PostgreSQL: pgsql/src/utils/Makefile,v 1.20 2003/11/29 19:52:15 pgsql Exp $
+# $PostgreSQL: pgsql/src/utils/Makefile,v 1.21 2004/07/30 12:26:40 petere Exp $
#
# dllinit.o is only built on Win32 platform.
#
@@ -12,7 +12,21 @@ subdir = src/utils
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
+
+ifdef DLLINIT
+
all:
+install: all installdirs
+ $(INSTALL_DATA) dllinit.o $(DESTDIR)$(pgxsdir)/$(subdir)/
+
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(pgxsdir)/$(subdir)
+
+uninstall:
+ rm -f $(DESTDIR)$(pgxsdir)/$(subdir)/dllinit.o
+
clean distclean maintainer-clean:
rm -f dllinit.o
+
+endif # not DLLINIT