39
39
# SCRIPTS_built -- script files (not binaries) to install into $PREFIX/bin,
40
40
# which need to be built first
41
41
# HEADERS -- files to install into $(includedir_server)/$MODULEDIR/$MODULE_big
42
+ # HEADERS_built -- as above but built first
42
43
# HEADERS_$(MODULE) -- files to install into
43
44
# $(includedir_server)/$MODULEDIR/$MODULE; the value of $MODULE must be
44
45
# listed in MODULES or MODULE_big
46
+ # HEADERS_built_$(MODULE) -- as above but built first
45
47
# REGRESS -- list of regression test cases (without suffix)
46
48
# REGRESS_OPTS -- additional switches to pass to pg_regress
47
49
# NO_INSTALLCHECK -- don't define an installcheck target, useful e.g. if
@@ -115,34 +117,62 @@ ifdef PG_CPPFLAGS
115
117
override CPPFLAGS := $(PG_CPPFLAGS ) $(CPPFLAGS )
116
118
endif
117
119
120
+ # get list of all names used with or without built_ prefix
121
+ # note that use of HEADERS_built_foo will get both "foo" and "built_foo",
122
+ # we cope with that later when filtering this list against MODULES.
123
+ # If someone wants to name a module "built_foo", they can do that and it
124
+ # works, but if they have MODULES = foo built_foo then they will need to
125
+ # force building of all headers and use HEADERS_built_foo and
126
+ # HEADERS_built_built_foo.
118
127
HEADER_alldirs := $(patsubst HEADERS_% ,% ,$(filter HEADERS_% , $(.VARIABLES ) ) )
128
+ HEADER_alldirs += $(patsubst HEADERS_built_% ,% ,$(filter HEADERS_built_% , $(.VARIABLES ) ) )
129
+
130
+ # collect all names of built headers to use as a dependency
131
+ HEADER_allbuilt =
119
132
120
133
# HEADERS is an error in the absence of MODULE_big to provide a dir name
121
134
ifdef MODULE_big
122
135
ifdef HEADERS
123
136
HEADER_dirs := $(MODULE_big )
124
- HEADERS_$(MODULE_big) = $(HEADERS )
137
+ HEADER_unbuilt_$(MODULE_big) = $(HEADERS )
138
+ HEADER_built_$(MODULE_big) = $(HEADERS_built )
139
+ HEADER_allbuilt += $(HEADERS_built )
140
+ else ifdef HEADERS_built
141
+ HEADER_dirs := $(MODULE_big )
142
+ HEADER_built_$(MODULE_big) = $(HEADERS_built )
143
+ HEADER_allbuilt += $(HEADERS_built )
125
144
else
126
- HEADER_dirs := $(filter $(MODULE_big ) ,$(HEADER_alldirs ) )
145
+ # file might have used HEADERS_foo or HEADERS_built_foo, so check for those
146
+ HEADER_dirs := $(if $(filter $(MODULE_big ) built_$(MODULE_big ) ,$(HEADER_alldirs ) ) ,$(MODULE_big ) )
147
+ HEADER_unbuilt_$(MODULE_big) = $(HEADERS_$(MODULE_big ) )
148
+ HEADER_built_$(MODULE_big) = $(HEADERS_built_$(MODULE_big ) )
149
+ HEADER_allbuilt += $(HEADERS_built_$(MODULE_big ) )
127
150
endif
128
151
else
129
152
ifdef HEADERS
130
153
$(error HEADERS requires MODULE_big to be set)
131
154
endif
132
- HEADER_dirs := $(filter $(MODULES ) ,$(HEADER_alldirs ) )
155
+ # make list of modules that have either HEADERS_foo or HEADERS_built_foo
156
+ HEADER_dirs := $(foreach m,$(MODULES ) ,$(if $(filter $(m ) built_$(m ) ,$(HEADER_alldirs ) ) ,$(m ) ) )
157
+ # assign HEADER_unbuilt_foo and HEADER_built_foo, but make sure
158
+ # that "built" takes precedence in the case of conflict, by removing
159
+ # conflicting module names when matching the unbuilt name
160
+ $(foreach m,$(filter-out $(addprefix built_,$(MODULES)),$(MODULES)),$(eval HEADER_unbuilt_$(m) = $$(HEADERS_$(m))))
161
+ $(foreach m,$(MODULES),$(eval HEADER_built_$(m) = $$(HEADERS_built_$(m))))
162
+ $(foreach m,$(MODULES),$(eval HEADER_allbuilt += $$(HEADERS_built_$(m))))
133
163
endif
134
164
135
165
# HEADERS_foo requires that "foo" is in MODULES as a sanity check
136
- ifneq ($(filter-out $(HEADER_dirs ) ,$(HEADER_alldirs ) ) ,)
137
- $(error $(patsubst %,HEADERS_%,$(filter-out $(HEADER_dirs),$(HEADER_alldirs))) defined with no module)
166
+ ifneq ($(filter-out $(HEADER_dirs ) $( addprefix built_, $( HEADER_dirs ) ) ,$(HEADER_alldirs ) ) ,)
167
+ $(error $(patsubst %,HEADERS_%,$(filter-out $(HEADER_dirs) $(addprefix built_,$(HEADER_dirs)) ,$(HEADER_alldirs))) defined with no module)
138
168
endif
139
169
140
170
# Functions for generating install/uninstall commands; the blank lines
141
171
# before the "endef" are required, don't lose them
142
172
# $(call install_headers,dir,headers)
143
173
define install_headers
144
174
$(MKDIR_P ) '$(DESTDIR )$(includedir_server ) /$(incmoduledir ) /$(1 ) /'
145
- $(INSTALL_DATA ) $(addprefix $( srcdir ) /, $( 2 ) ) '$(DESTDIR )$(includedir_server ) /$(incmoduledir ) /$(1 ) /'
175
+ $(INSTALL_DATA ) $(2 ) '$(DESTDIR )$(includedir_server ) /$(incmoduledir ) /$(1 ) /'
146
176
147
177
endef
148
178
# $(call uninstall_headers,dir,headers)
@@ -152,7 +182,7 @@ rm -f $(addprefix '$(DESTDIR)$(includedir_server)/$(incmoduledir)/$(1)'/, $(notd
152
182
endef
153
183
154
184
155
- all : $(PROGRAM ) $(DATA_built ) $(SCRIPTS_built ) $(addsuffix $(DLSUFFIX ) , $(MODULES ) ) $(addsuffix .control, $(EXTENSION ) )
185
+ all : $(PROGRAM ) $(DATA_built ) $(HEADER_allbuilt ) $( SCRIPTS_built ) $(addsuffix $(DLSUFFIX ) , $(MODULES ) ) $(addsuffix .control, $(EXTENSION ) )
156
186
157
187
ifeq ($(with_llvm ) , yes)
158
188
all : $(addsuffix .bc, $(MODULES ) ) $(patsubst % .o,% .bc, $(OBJS ) )
@@ -199,7 +229,8 @@ ifdef SCRIPTS_built
199
229
$(INSTALL_SCRIPT) $(SCRIPTS_built) '$(DESTDIR)$(bindir)/'
200
230
endif # SCRIPTS_built
201
231
ifneq ($(strip $(HEADER_dirs ) ) ,)
202
- $(foreach dir,$(HEADER_dirs),$(if $(HEADERS_$(dir)),$(call install_headers,$(dir),$(HEADERS_$(dir)))))
232
+ $(foreach dir,$(HEADER_dirs),$(if $(HEADER_unbuilt_$(dir)),$(call install_headers,$(dir),$(addprefix $(srcdir)/, $(HEADER_unbuilt_$(dir))))))
233
+ $(foreach dir,$(HEADER_dirs),$(if $(HEADER_built_$(dir)),$(call install_headers,$(dir),$(HEADER_built_$(dir)))))
203
234
endif # HEADERS
204
235
ifdef MODULE_big
205
236
ifeq ($(with_llvm ) , yes)
@@ -266,7 +297,7 @@ ifdef SCRIPTS_built
266
297
rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS_built))
267
298
endif
268
299
ifneq ($(strip $(HEADER_dirs ) ) ,)
269
- $(foreach dir,$(HEADER_dirs),$(if $(HEADERS_$( dir)) ,$(call uninstall_headers, $(dir),$(HEADERS_ $(dir) ))))
300
+ $(foreach dir,$(HEADER_dirs),$(call uninstall_headers,$( dir),$(HEADER_unbuilt_ $(dir)) $(HEADER_built_ $(dir))))
270
301
endif # HEADERS
271
302
272
303
ifdef MODULE_big
0 commit comments