Improved parallel make support

Replace for loops in makefiles with proper dependencies.  Parallel
make can now span across directories.  Also, make -k and make -q work
properly.

GNU make 3.80 or newer is now required.
This commit is contained in:
Peter Eisentraut 2010-11-12 22:15:16 +02:00
parent d6754f67b0
commit 19e231bbda
30 changed files with 156 additions and 179 deletions

View File

@ -8,57 +8,39 @@ subdir =
top_builddir = .
include $(top_builddir)/src/Makefile.global
$(call recurse,all install,src config)
all:
$(MAKE) -C src all
$(MAKE) -C config all
@echo "All of PostgreSQL successfully made. Ready to install."
+@echo "All of PostgreSQL successfully made. Ready to install."
docs:
$(MAKE) -C doc all
$(call recurse,world,doc src config contrib,all)
world:
$(MAKE) -C doc all
$(MAKE) -C src all
$(MAKE) -C config all
$(MAKE) -C contrib all
@echo "PostgreSQL, contrib, and documentation successfully made. Ready to install."
+@echo "PostgreSQL, contrib, and documentation successfully made. Ready to install."
html man:
$(MAKE) -C doc $@
install:
$(MAKE) -C src $@
$(MAKE) -C config $@
@echo "PostgreSQL installation complete."
+@echo "PostgreSQL installation complete."
install-docs:
$(MAKE) -C doc install
$(call recurse,install-world,doc src config contrib,install)
install-world:
$(MAKE) -C doc install
$(MAKE) -C src install
$(MAKE) -C config install
$(MAKE) -C contrib install
@echo "PostgreSQL, contrib, and documentation installation complete."
+@echo "PostgreSQL, contrib, and documentation installation complete."
installdirs uninstall coverage:
$(MAKE) -C doc $@
$(MAKE) -C src $@
$(MAKE) -C config $@
$(call recurse,installdirs uninstall coverage,doc src config)
distprep:
$(MAKE) -C doc $@
$(MAKE) -C src $@
$(MAKE) -C config $@
$(MAKE) -C contrib $@
$(call recurse,distprep,doc src config contrib)
# clean, distclean, etc should apply to contrib too, even though
# it's not built by default
$(call recurse,clean,doc contrib src config)
clean:
$(MAKE) -C doc $@
$(MAKE) -C contrib $@
$(MAKE) -C src $@
$(MAKE) -C config $@
# Garbage from autoconf:
@rm -rf autom4te.cache/
@ -78,11 +60,7 @@ check: all
check installcheck installcheck-parallel:
$(MAKE) -C src/test $@
installcheck-world:
$(MAKE) -C src/test installcheck
$(MAKE) -C src/pl installcheck
$(MAKE) -C src/interfaces/ecpg installcheck
$(MAKE) -C contrib installcheck
$(call recurse,installcheck-world,src/test src/pl src/interfaces/ecpg contrib,installcheck)
GNUmakefile: GNUmakefile.in $(top_builddir)/config.status
./config.status $@
@ -143,12 +121,4 @@ distcheck: dist
rm -rf $(distdir) $(dummy)
@echo "Distribution integrity checks out."
.PHONY: dist distdir distcheck docs install-docs
# Temporary measure to explore whether we can start requiring GNU make
# 3.80. That version also happens to be the version where the
# .VARIABLES variable was introduced, so this is a simple check.
ifndef .VARIABLES
$(warning warning: GNU make 3.80 or newer might become required soon. You are using version $(MAKE_VERSION).)
endif
.PHONY: dist distdir distcheck docs install-docs world install-world installcheck-world

View File

@ -63,14 +63,4 @@ endif
# start-scripts \ (does not have a makefile)
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || exit; \
done
# We'd like check operations to run all the subtests before failing.
check installcheck:
@CHECKERR=0; for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || CHECKERR=$$?; \
done; \
exit $$CHECKERR
$(recurse)

View File

@ -4,6 +4,7 @@ MODULE_big = dblink
PG_CPPFLAGS = -I$(libpq_srcdir)
OBJS = dblink.o
SHLIB_LINK = $(libpq)
SHLIB_PREREQS = submake-libpq
DATA_built = dblink.sql
DATA = uninstall_dblink.sql

View File

@ -68,8 +68,8 @@ su - postgres
<primary>make</primary>
</indexterm>
<acronym>GNU</> <application>make</> is required; other
<application>make</> programs will <emphasis>not</> work.
<acronym>GNU</> <application>make</> version 3.80 or newer is required; other
<application>make</> programs or older <acronym>GNU</> <application>make</> versions will <emphasis>not</> work.
<acronym>GNU</> <application>make</> is often installed under
the name <filename>gmake</filename>; this document will always
refer to it by that name. (On some systems
@ -79,7 +79,6 @@ su - postgres
<screen>
<userinput>gmake --version</userinput>
</screen>
It is recommended to use version 3.79.1 or later.
</para>
</listitem>

View File

@ -12,20 +12,21 @@ subdir = src
top_builddir = ..
include Makefile.global
SUBDIRS = \
port \
timezone \
backend \
backend/utils/mb/conversion_procs \
backend/snowball \
include \
interfaces \
backend/replication/libpqwalreceiver \
bin \
pl \
makefiles \
test/regress
all install installdirs uninstall distprep:
$(MAKE) -C port $@
$(MAKE) -C timezone $@
$(MAKE) -C backend $@
$(MAKE) -C backend/utils/mb/conversion_procs $@
$(MAKE) -C backend/snowball $@
$(MAKE) -C include $@
$(MAKE) -C interfaces $@
$(MAKE) -C backend/replication/libpqwalreceiver $@
$(MAKE) -C bin $@
$(MAKE) -C pl $@
$(MAKE) -C makefiles $@
$(MAKE) -C test/regress $@
$(recurse)
install: install-local
@ -46,31 +47,11 @@ uninstall-local:
rm -f $(addprefix '$(DESTDIR)$(pgxsdir)/$(subdir)'/, Makefile.global Makefile.port Makefile.shlib nls-global.mk)
clean:
$(MAKE) -C port $@
$(MAKE) -C timezone $@
$(MAKE) -C backend $@
$(MAKE) -C backend/snowball $@
$(MAKE) -C include $@
$(MAKE) -C interfaces $@
$(MAKE) -C backend/replication/libpqwalreceiver $@
$(MAKE) -C bin $@
$(MAKE) -C pl $@
$(MAKE) -C makefiles $@
$(MAKE) -C test $@
$(MAKE) -C tutorial NO_PGXS=1 $@
$(MAKE) -C test/thread $@
distclean maintainer-clean:
$(MAKE) -C port $@
$(MAKE) -C timezone $@
$(MAKE) -C backend $@
$(MAKE) -C backend/snowball $@
$(MAKE) -C include $@
$(MAKE) -C interfaces $@
$(MAKE) -C backend/replication/libpqwalreceiver $@
$(MAKE) -C bin $@
$(MAKE) -C pl $@
$(MAKE) -C makefiles $@
$(MAKE) -C test $@
$(MAKE) -C tutorial NO_PGXS=1 $@
$(MAKE) -C test/thread $@

View File

@ -18,7 +18,9 @@
#
# Meta configuration
.PHONY: all install install-strip installdirs uninstall clean distclean maintainer-clean distprep check installcheck maintainer-check coverage html man installcheck-parallel world install-world installcheck-world
standard_targets = all install installdirs uninstall distprep clean distclean maintainer-clean coverage check installcheck
.PHONY: $(standard_targets) install-strip maintainer-check html man installcheck-parallel
# make `all' the default target
all:
@ -538,6 +540,48 @@ install-strip:
install
##########################################################################
#
# Recursive make support
# ----------------------
# Instead of recursing through subdirectories with a for loop or
# repeated $(MAKE) -C whatever calls, this is a little smarter: it
# allows parallel make across directories and lets make -k and -q work
# correctly.
# This function is only for internal use below. It should be called
# with $(eval). It will set up a target so that it recurses into
# subdirectories.
# $1: target name, e.g., all
# $2: list of subdirs
# $3: target to run in subdir, usually same as $1
define _create_recursive_target
.PHONY: $(patsubst %,$(1)-%-recursive,$(2))
$(1): $(patsubst %,$(1)-%-recursive,$(2))
$(2:%=$(1)-%-recursive):
$$(MAKE) -C $$(patsubst $(1)-%-recursive,%,$$@) $(3)
endef
# Note that the use of $$ on the last line above is important; we want
# those variables/functions to be evaluated when the rule is run, not
# when the $(eval) is run to create the rule. In the case of
# $$(MAKE), this is necessary to get make -q working.
# Call this function in a makefile. In the normal case it doesn't
# need any arguments.
# $1: targets to make recursive (defaults to list of standard targets)
# $2: list of subdirs (defaults to SUBDIRS variable)
# $3: target to run in subdir (defaults to $1)
recurse = $(foreach target,$(if $1,$1,$(standard_targets)),$(eval $(call _create_recursive_target,$(target),$(if $2,$2,$(SUBDIRS)),$(if $3,$3,$(target)))))
# We need the $(eval) function and order-only prerequisites, which are
# available in GNU make 3.80. That also happens to be the version
# where the .VARIABLES variable was introduced, so this is a simple
# check.
ifndef .VARIABLES
$(error GNU make 3.80 or newer is required. You are using version $(MAKE_VERSION))
endif
##########################################################################
#
# Automatic dependency generation
@ -640,7 +684,6 @@ lcov.info: $(gcda_files)
$(GCOV) -b -f -p -o . $(GCOVFLAGS) $*.c >$*.c.gcov.out
coverage: $(gcda_files:.gcda=.c.gcov) lcov.info
$(if $(SUBDIRS),for dir in $(SUBDIRS); do $(MAKE) -C $$dir coverage || exit; done)
.PHONY: coverage-html
coverage-html: coverage

View File

@ -22,6 +22,7 @@
# OBJS List of object files to include in library
# SHLIB_LINK If shared library relies on other libraries,
# additional stuff to put in its link command
# SHLIB_PREREQS Order-only prerequisites for library build target
# SHLIB_EXPORTS (optional) Name of file containing list of symbols to
# export, in the format "function_name number"
#
@ -340,7 +341,7 @@ all-static-lib: $(stlib)
all-shared-lib: $(shlib)
ifndef haslibarule
$(stlib): $(OBJS)
$(stlib): $(OBJS) | $(SHLIB_PREREQS)
$(LINK.static) $@ $^
$(RANLIB) $@
endif #haslibarule
@ -351,7 +352,7 @@ ifeq (,$(filter cygwin win32,$(PORTNAME)))
ifneq ($(PORTNAME), aix)
# Normal case
$(shlib): $(OBJS)
$(shlib): $(OBJS) | $(SHLIB_PREREQS)
$(LINK.shared) -o $@ $(OBJS) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK)
ifdef shlib_major
# If we're using major and minor versions, then make a symlink to major-version-only.
@ -382,7 +383,7 @@ endif
else # PORTNAME == aix
# AIX case
$(shlib) $(stlib): $(OBJS)
$(shlib) $(stlib): $(OBJS) | $(SHLIB_PREREQS)
$(LINK.static) $(stlib) $^
$(RANLIB) $(stlib)
$(MKLDEXPORT) $(stlib) >$(exports_file)
@ -408,10 +409,10 @@ else
DLL_DEFFILE = lib$(NAME)dll.def
endif
$(shlib): $(OBJS) $(DLL_DEFFILE)
$(shlib): $(OBJS) $(DLL_DEFFILE) | $(SHLIB_PREREQS)
$(DLLWRAP) -o $@ --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(DLL_DEFFILE) $(OBJS) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK)
$(stlib): $(shlib) $(DLL_DEFFILE)
$(stlib): $(shlib) $(DLL_DEFFILE) | $(SHLIB_PREREQS)
$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(DLL_DEFFILE) --output-lib $@
endif # PORTNAME == cygwin || PORTNAME == win32

View File

@ -122,7 +122,9 @@ submake-schemapg:
.PHONY: submake-schemapg
catalog/schemapg.h: submake-schemapg
catalog/schemapg.h: | submake-schemapg
$(top_builddir)/src/port/libpgport_srv.a: | submake-libpgport
# The postgres.o target is needed by the rule in Makefile.global that

View File

@ -34,15 +34,13 @@ objfiles.txt: Makefile $(SUBDIROBJS) $(OBJS)
expand_subsys = $(foreach file,$(1),$(if $(filter %/objfiles.txt,$(file)),$(patsubst ../../src/backend/%,%,$(addprefix $(top_builddir)/,$(shell cat $(file)))),$(file)))
# Parallel make trickery
$(SUBDIROBJS): $(SUBDIRS:%=%-recursive) ;
$(SUBDIROBJS): | $(SUBDIRS:%=%-recursive) ;
.PHONY: $(SUBDIRS:%=%-recursive)
$(SUBDIRS:%=%-recursive):
$(MAKE) -C $(subst -recursive,,$@) all
$(call recurse,clean)
clean: clean-local
clean-local:
ifdef SUBDIRS
for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean || exit; done
endif
rm -f $(subsysfilename) $(OBJS)

View File

@ -16,9 +16,10 @@ override CPPFLAGS := -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS)
OBJS = libpqwalreceiver.o
SHLIB_LINK = $(libpq)
SHLIB_PREREQS = submake-libpq
NAME = libpqwalreceiver
all: submake-libpq all-shared-lib
all: all-shared-lib
include $(top_srcdir)/src/Makefile.shlib

View File

@ -26,6 +26,8 @@ SUBDIRS = \
utf8_and_sjis utf8_and_win utf8_and_uhc \
utf8_and_euc2004 utf8_and_sjis2004 euc2004_sjis2004
$(recurse)
# conversion_name source_encoding destination_encoding function object
CONVERSIONS = \
ascii_to_mic SQL_ASCII MULE_INTERNAL ascii_to_mic ascii_and_mic \
@ -162,7 +164,6 @@ CONVERSIONS = \
shift_jis_2004_to_euc_jis_2004 SHIFT_JIS_2004 EUC_JIS_2004 shift_jis_2004_to_euc_jis_2004 euc2004_sjis2004
all: $(SQLSCRIPT)
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
$(SQLSCRIPT): Makefile
ifeq ($(enable_shared), yes)
@ -205,15 +206,12 @@ $(REGRESSION_SCRIPT): Makefile
install: $(SQLSCRIPT) installdirs
$(INSTALL_DATA) $(SQLSCRIPT) '$(DESTDIR)$(datadir)'
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
installdirs:
$(MKDIR_P) '$(DESTDIR)$(datadir)' '$(DESTDIR)$(pkglibdir)'
uninstall:
rm -f '$(DESTDIR)$(datadir)/$(SQLSCRIPT)'
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
clean distclean maintainer-clean:
rm -f $(SQLSCRIPT)
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done

View File

@ -19,5 +19,4 @@ ifeq ($(PORTNAME), win32)
SUBDIRS+=pgevent
endif
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
$(recurse)

View File

@ -20,9 +20,9 @@ override CPPFLAGS := -DFRONTEND -I$(libpq_srcdir) $(CPPFLAGS)
OBJS= initdb.o encnames.o pqsignal.o $(WIN32RES)
all: submake-libpgport initdb
all: initdb
initdb: $(OBJS)
initdb: $(OBJS) | submake-libpgport
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
# We used to pull in all of libpq to get encnames and pqsignal, but that

View File

@ -31,9 +31,9 @@ override CPPFLAGS += -DVAL_LDFLAGS_EX="\"$(LDFLAGS_EX)\""
override CPPFLAGS += -DVAL_LDFLAGS_SL="\"$(LDFLAGS_SL)\""
override CPPFLAGS += -DVAL_LIBS="\"$(LIBS)\""
all: submake-libpgport pg_config
all: pg_config
pg_config: $(OBJS)
pg_config: $(OBJS) | submake-libpgport
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
install: all installdirs

View File

@ -17,9 +17,9 @@ include $(top_builddir)/src/Makefile.global
OBJS= pg_controldata.o pg_crc.o $(WIN32RES)
all: submake-libpgport pg_controldata
all: pg_controldata
pg_controldata: $(OBJS)
pg_controldata: $(OBJS) | submake-libpgport
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
pg_crc.c: $(top_srcdir)/src/backend/utils/hash/pg_crc.c

View File

@ -20,9 +20,9 @@ override CPPFLAGS := -DDEF_PGPORT=$(DEF_PGPORT) -I$(libpq_srcdir) $(CPPFLAGS)
OBJS= pg_ctl.o $(WIN32RES)
all: submake-libpq submake-libpgport pg_ctl
all: pg_ctl
pg_ctl: $(OBJS) $(libpq_builddir)/libpq.a
pg_ctl: $(OBJS) | submake-libpq submake-libpgport
$(CC) $(CFLAGS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
install: all installdirs

View File

@ -27,15 +27,15 @@ KEYWRDOBJS = keywords.o kwlookup.o
kwlookup.c: % : $(top_srcdir)/src/backend/parser/%
rm -f $@ && $(LN_S) $< .
all: submake-libpq submake-libpgport pg_dump pg_restore pg_dumpall
all: pg_dump pg_restore pg_dumpall
pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(KEYWRDOBJS) $(libpq_builddir)/libpq.a
pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(KEYWRDOBJS) | submake-libpq submake-libpgport
$(CC) $(CFLAGS) pg_dump.o common.o pg_dump_sort.o $(KEYWRDOBJS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
pg_restore: pg_restore.o $(OBJS) $(KEYWRDOBJS) $(libpq_builddir)/libpq.a
pg_restore: pg_restore.o $(OBJS) $(KEYWRDOBJS) | submake-libpq submake-libpgport
$(CC) $(CFLAGS) pg_restore.o $(KEYWRDOBJS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
pg_dumpall: pg_dumpall.o dumputils.o $(KEYWRDOBJS) $(libpq_builddir)/libpq.a
pg_dumpall: pg_dumpall.o dumputils.o $(KEYWRDOBJS) | submake-libpq submake-libpgport
$(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(KEYWRDOBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
install: all installdirs

View File

@ -17,9 +17,9 @@ include $(top_builddir)/src/Makefile.global
OBJS= pg_resetxlog.o pg_crc.o $(WIN32RES)
all: submake-libpgport pg_resetxlog
all: pg_resetxlog
pg_resetxlog: $(OBJS)
pg_resetxlog: $(OBJS) | submake-libpgport
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
pg_crc.c: $(top_srcdir)/src/backend/utils/hash/pg_crc.c

View File

@ -29,9 +29,9 @@ OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \
FLEXFLAGS = -Cfe
all: submake-libpq submake-libpgport psql
all: psql
psql: $(OBJS) $(libpq_builddir)/libpq.a
psql: $(OBJS) | submake-libpq submake-libpgport
$(CC) $(CFLAGS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
help.o: sql_help.h

View File

@ -20,20 +20,20 @@ PROGRAMS = createdb createlang createuser dropdb droplang dropuser clusterdb vac
override CPPFLAGS := -I$(top_srcdir)/src/bin/pg_dump -I$(top_srcdir)/src/bin/psql -I$(libpq_srcdir) $(CPPFLAGS)
all: submake-libpq $(PROGRAMS)
all: $(PROGRAMS)
%: %.o $(WIN32RES)
$(CC) $(CFLAGS) $^ $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
createdb: createdb.o common.o dumputils.o kwlookup.o keywords.o
createlang: createlang.o common.o print.o mbprint.o
createuser: createuser.o common.o dumputils.o kwlookup.o keywords.o
dropdb: dropdb.o common.o dumputils.o kwlookup.o keywords.o
droplang: droplang.o common.o print.o mbprint.o
dropuser: dropuser.o common.o dumputils.o kwlookup.o keywords.o
clusterdb: clusterdb.o common.o dumputils.o kwlookup.o keywords.o
vacuumdb: vacuumdb.o common.o
reindexdb: reindexdb.o common.o dumputils.o kwlookup.o keywords.o
createdb: createdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
createlang: createlang.o common.o print.o mbprint.o | submake-libpq
createuser: createuser.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
dropdb: dropdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
droplang: droplang.o common.o print.o mbprint.o | submake-libpq
dropuser: dropuser.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
clusterdb: clusterdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
vacuumdb: vacuumdb.o common.o | submake-libpq
reindexdb: reindexdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
dumputils.c keywords.c: % : $(top_srcdir)/src/bin/pg_dump/%
rm -f $@ && $(LN_S) $< .

View File

@ -14,5 +14,4 @@ include $(top_builddir)/src/Makefile.global
SUBDIRS = libpq ecpg
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
$(recurse)

View File

@ -2,19 +2,13 @@ subdir = src/interfaces/ecpg
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
all install installdirs uninstall distprep:
$(MAKE) -C include $@
$(MAKE) -C pgtypeslib $@
$(MAKE) -C ecpglib $@
$(MAKE) -C compatlib $@
$(MAKE) -C preproc $@
SUBDIRS = include pgtypeslib ecpglib compatlib preproc
$(recurse)
all-compatlib-recursive: all-ecpglib-recursive
clean distclean maintainer-clean:
$(MAKE) -C include $@
$(MAKE) -C pgtypeslib $@
$(MAKE) -C ecpglib $@
$(MAKE) -C compatlib $@
$(MAKE) -C preproc $@
$(MAKE) -C test clean
check checktcp installcheck: all

View File

@ -23,6 +23,7 @@ override CFLAGS += $(PTHREAD_CFLAGS)
SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) \
$(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS)
SHLIB_PREREQS = submake-ecpglib submake-pgtypeslib
SHLIB_EXPORTS = exports.txt
@ -33,6 +34,14 @@ OBJS= informix.o $(filter snprintf.o, $(LIBOBJS))
all: all-lib
.PHONY: submake-ecpglib submake-pgtypeslib
submake-ecpglib:
$(MAKE) -C $(top_builddir)/src/interfaces/ecpg/ecpglib all
submake-pgtypeslib:
$(MAKE) -C $(top_builddir)/src/interfaces/ecpg/pgtypeslib all
# Shared library stuff
include $(top_srcdir)/src/Makefile.shlib

View File

@ -34,6 +34,7 @@ OBJS += thread.o
endif
SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq) $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS)
SHLIB_PREREQS = submake-libpq submake-pgtypeslib
SHLIB_EXPORTS = exports.txt
@ -42,12 +43,10 @@ ifeq ($(PORTNAME), win32)
SHLIB_LINK += -lshfolder
endif
all: libpq pgtypeslib all-lib
all: all-lib
libpq:
$(MAKE) -C $(top_builddir)/src/interfaces/libpq all
pgtypeslib:
.PHONY: submake-pgtypeslib
submake-pgtypeslib:
$(MAKE) -C $(top_builddir)/src/interfaces/ecpg/pgtypeslib all
# Shared library stuff

View File

@ -30,11 +30,14 @@ OBJS= preproc.o type.o ecpg.o output.o parser.o \
keywords.o c_keywords.o ecpg_keywords.o kwlookup.o ../ecpglib/typename.o descriptor.o variable.o \
$(WIN32RES)
all: submake-libpgport ecpg
all: ecpg
ecpg: $(OBJS)
ecpg: $(OBJS) | submake-libpgport
$(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) $^ $(LIBS) $(PTHREAD_LIBS) -o $@$(X)
../ecpglib/typename.o: ../ecpglib/typename.c
$(MAKE) -C $(dir $@) $(notdir $@)
# pgc is compiled as part of preproc
preproc.o: pgc.c

View File

@ -26,12 +26,4 @@ ifeq ($(with_tcl), yes)
SUBDIRS += tcl
endif
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
# We'd like check operations to run all the subtests before failing.
check installcheck:
@CHECKERR=0; for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || CHECKERR=$$?; \
done; \
exit $$CHECKERR
$(recurse)

View File

@ -50,9 +50,9 @@ EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
# Build regression test driver
all: submake-libpgport pg_regress$(X)
all: pg_regress$(X)
pg_regress$(X): pg_regress.o pg_regress_main.o
pg_regress$(X): pg_regress.o pg_regress_main.o | submake-libpgport
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
# dependencies ensure that path changes propagate
@ -131,8 +131,6 @@ $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX): $(top_builddir
# Tablespace setup
all: tablespace-setup
.PHONY: tablespace-setup
tablespace-setup:
rm -rf ./testtablespace
@ -145,13 +143,13 @@ tablespace-setup:
pg_regress_call = ./pg_regress --inputdir=$(srcdir) --dlpath=. --multibyte=$(MULTIBYTE) $(NOLOCALE)
check: all
check: all tablespace-setup
$(pg_regress_call) --temp-install=./tmp_check --top-builddir=$(top_builddir) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(TEMP_CONF)
installcheck: all
installcheck: all tablespace-setup
$(pg_regress_call) --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule
installcheck-parallel: all
installcheck-parallel: all tablespace-setup
$(pg_regress_call) --psqldir=$(PSQLDIR) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT)
standbycheck: all
@ -163,10 +161,10 @@ runcheck: check
runtest: installcheck
runtest-parallel: installcheck-parallel
bigtest: all
bigtest: all tablespace-setup
$(pg_regress_call) --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule numeric_big
bigcheck: all
bigcheck: all tablespace-setup
$(pg_regress_call) --temp-install=./tmp_check --top-builddir=$(top_builddir) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) numeric_big

View File

@ -35,7 +35,7 @@ endif
include $(top_srcdir)/src/backend/common.mk
ifeq (,$(with_system_tzdata))
all: submake-libpgport zic
all: zic
endif
# We could do this test in the action section:
@ -46,7 +46,7 @@ ifeq (,$(ZIC))
ZIC= ./zic
endif
zic: $(ZICOBJS)
zic: $(ZICOBJS) | submake-libpgport
$(CC) $(CFLAGS) $(ZICOBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
install: all installdirs

View File

@ -16,9 +16,9 @@ override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
OBJS= findoidjoins.o
all: submake-libpq submake-libpgport findoidjoins
all: findoidjoins
findoidjoins: findoidjoins.o $(libpq_builddir)/libpq.a
findoidjoins: findoidjoins.o | submake-libpq submake-libpgport
$(CC) $(CFLAGS) findoidjoins.o $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
clean distclean maintainer-clean:

View File

@ -16,9 +16,9 @@ override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
OBJS= test_fsync.o
all: submake-libpq submake-libpgport test_fsync
all: test_fsync
test_fsync: test_fsync.o $(libpq_builddir)/libpq.a
test_fsync: test_fsync.o | submake-libpq submake-libpgport
$(CC) $(CFLAGS) test_fsync.o $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
clean distclean maintainer-clean: