diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/makefiles/pgxs.mk | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mk index 8deb356958a..fe7d899c5cd 100644 --- a/src/makefiles/pgxs.mk +++ b/src/makefiles/pgxs.mk @@ -39,9 +39,11 @@ # SCRIPTS_built -- script files (not binaries) to install into $PREFIX/bin, # which need to be built first # HEADERS -- files to install into $(includedir_server)/$MODULEDIR/$MODULE_big +# HEADERS_built -- as above but built first # HEADERS_$(MODULE) -- files to install into # $(includedir_server)/$MODULEDIR/$MODULE; the value of $MODULE must be # listed in MODULES or MODULE_big +# HEADERS_built_$(MODULE) -- as above but built first # REGRESS -- list of regression test cases (without suffix) # REGRESS_OPTS -- additional switches to pass to pg_regress # NO_INSTALLCHECK -- don't define an installcheck target, useful e.g. if @@ -115,26 +117,54 @@ ifdef PG_CPPFLAGS override CPPFLAGS := $(PG_CPPFLAGS) $(CPPFLAGS) endif +# get list of all names used with or without built_ prefix +# note that use of HEADERS_built_foo will get both "foo" and "built_foo", +# we cope with that later when filtering this list against MODULES. +# If someone wants to name a module "built_foo", they can do that and it +# works, but if they have MODULES = foo built_foo then they will need to +# force building of all headers and use HEADERS_built_foo and +# HEADERS_built_built_foo. HEADER_alldirs := $(patsubst HEADERS_%,%,$(filter HEADERS_%, $(.VARIABLES))) +HEADER_alldirs += $(patsubst HEADERS_built_%,%,$(filter HEADERS_built_%, $(.VARIABLES))) + +# collect all names of built headers to use as a dependency +HEADER_allbuilt = # HEADERS is an error in the absence of MODULE_big to provide a dir name ifdef MODULE_big ifdef HEADERS HEADER_dirs := $(MODULE_big) -HEADERS_$(MODULE_big) = $(HEADERS) +HEADER_unbuilt_$(MODULE_big) = $(HEADERS) +HEADER_built_$(MODULE_big) = $(HEADERS_built) +HEADER_allbuilt += $(HEADERS_built) +else ifdef HEADERS_built +HEADER_dirs := $(MODULE_big) +HEADER_built_$(MODULE_big) = $(HEADERS_built) +HEADER_allbuilt += $(HEADERS_built) else -HEADER_dirs := $(filter $(MODULE_big),$(HEADER_alldirs)) +# file might have used HEADERS_foo or HEADERS_built_foo, so check for those +HEADER_dirs := $(if $(filter $(MODULE_big) built_$(MODULE_big),$(HEADER_alldirs)),$(MODULE_big)) +HEADER_unbuilt_$(MODULE_big) = $(HEADERS_$(MODULE_big)) +HEADER_built_$(MODULE_big) = $(HEADERS_built_$(MODULE_big)) +HEADER_allbuilt += $(HEADERS_built_$(MODULE_big)) endif else ifdef HEADERS $(error HEADERS requires MODULE_big to be set) endif -HEADER_dirs := $(filter $(MODULES),$(HEADER_alldirs)) +# make list of modules that have either HEADERS_foo or HEADERS_built_foo +HEADER_dirs := $(foreach m,$(MODULES),$(if $(filter $(m) built_$(m),$(HEADER_alldirs)),$(m))) +# assign HEADER_unbuilt_foo and HEADER_built_foo, but make sure +# that "built" takes precedence in the case of conflict, by removing +# conflicting module names when matching the unbuilt name +$(foreach m,$(filter-out $(addprefix built_,$(MODULES)),$(MODULES)),$(eval HEADER_unbuilt_$(m) = $$(HEADERS_$(m)))) +$(foreach m,$(MODULES),$(eval HEADER_built_$(m) = $$(HEADERS_built_$(m)))) +$(foreach m,$(MODULES),$(eval HEADER_allbuilt += $$(HEADERS_built_$(m)))) endif # HEADERS_foo requires that "foo" is in MODULES as a sanity check -ifneq ($(filter-out $(HEADER_dirs),$(HEADER_alldirs)),) -$(error $(patsubst %,HEADERS_%,$(filter-out $(HEADER_dirs),$(HEADER_alldirs))) defined with no module) +ifneq ($(filter-out $(HEADER_dirs) $(addprefix built_,$(HEADER_dirs)),$(HEADER_alldirs)),) +$(error $(patsubst %,HEADERS_%,$(filter-out $(HEADER_dirs) $(addprefix built_,$(HEADER_dirs)),$(HEADER_alldirs))) defined with no module) endif # Functions for generating install/uninstall commands; the blank lines @@ -142,7 +172,7 @@ endif # $(call install_headers,dir,headers) define install_headers $(MKDIR_P) '$(DESTDIR)$(includedir_server)/$(incmoduledir)/$(1)/' -$(INSTALL_DATA) $(addprefix $(srcdir)/, $(2)) '$(DESTDIR)$(includedir_server)/$(incmoduledir)/$(1)/' +$(INSTALL_DATA) $(2) '$(DESTDIR)$(includedir_server)/$(incmoduledir)/$(1)/' endef # $(call uninstall_headers,dir,headers) @@ -152,7 +182,7 @@ rm -f $(addprefix '$(DESTDIR)$(includedir_server)/$(incmoduledir)/$(1)'/, $(notd endef -all: $(PROGRAM) $(DATA_built) $(SCRIPTS_built) $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .control, $(EXTENSION)) +all: $(PROGRAM) $(DATA_built) $(HEADER_allbuilt) $(SCRIPTS_built) $(addsuffix $(DLSUFFIX), $(MODULES)) $(addsuffix .control, $(EXTENSION)) ifeq ($(with_llvm), yes) all: $(addsuffix .bc, $(MODULES)) $(patsubst %.o,%.bc, $(OBJS)) @@ -199,7 +229,8 @@ ifdef SCRIPTS_built $(INSTALL_SCRIPT) $(SCRIPTS_built) '$(DESTDIR)$(bindir)/' endif # SCRIPTS_built ifneq ($(strip $(HEADER_dirs)),) - $(foreach dir,$(HEADER_dirs),$(if $(HEADERS_$(dir)),$(call install_headers,$(dir),$(HEADERS_$(dir))))) + $(foreach dir,$(HEADER_dirs),$(if $(HEADER_unbuilt_$(dir)),$(call install_headers,$(dir),$(addprefix $(srcdir)/, $(HEADER_unbuilt_$(dir)))))) + $(foreach dir,$(HEADER_dirs),$(if $(HEADER_built_$(dir)),$(call install_headers,$(dir),$(HEADER_built_$(dir))))) endif # HEADERS ifdef MODULE_big ifeq ($(with_llvm), yes) @@ -266,7 +297,7 @@ ifdef SCRIPTS_built rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS_built)) endif ifneq ($(strip $(HEADER_dirs)),) - $(foreach dir,$(HEADER_dirs),$(if $(HEADERS_$(dir)),$(call uninstall_headers,$(dir),$(HEADERS_$(dir))))) + $(foreach dir,$(HEADER_dirs),$(call uninstall_headers,$(dir),$(HEADER_unbuilt_$(dir)) $(HEADER_built_$(dir)))) endif # HEADERS ifdef MODULE_big |