1include ../upgradeable_versions.mk
2
3EXTENSION    = postgis_tiger_geocoder
4EXTVERSION    = @POSTGIS_LIB_VERSION@
5MINORVERSION  = 2011.@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@
6GREP = @GREP@
7PERL = @PERL@
8
9MICRO_NUMBER  = $(shell echo $(EXTVERSION) | \
10						$(PERL) -pe 's/\d.\d.(\d+)[a-zA-Z]*\d*/$1/'
11
12PREREL_NUMBER = $(shell echo $(EXTVERSION) | \
13                        $(PERL) -pe 's/\d\.\d\.(.*)/\1/' | \
14                        $(GREP) "[a-zA-Z]" | \
15                        $(PERL) -pe 's/\d+[a-zA-Z]+(\d+)/\1/'
16
17MICRO_PREV    = $(shell if test "$(MICRO_NUMBER)x" != "x"; then expr $(MICRO_NUMBER) - 1; fi)
18PREREL_PREV   = $(shell if test "$(PREREL_NUMBER)x" != "x"; then expr $(PREREL_NUMBER) - 1; fi)
19
20PREREL_PREFIX = $(shell echo $(EXTVERSION) | \
21                        $(PERL) -pe 's/\d\.\d\.(.*)/\1/' | \
22                        $(GREP) "[a-zA-Z]" | \
23                        $(PERL) -pe 's/(\d+[a-zA-Z]+)\d*/\1/'
24
25DATA_built = \
26	$(EXTENSION).control \
27	sql/$(EXTENSION)--$(EXTVERSION).sql \
28	sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql \
29	$(NULL)
30
31REGRESS = test-normalize_address test-upgrade
32REGRESS_OPTS = --load-extension=fuzzystrmatch --load-extension=postgis --load-extension=$(EXTENSION)
33
34PG_CONFIG    =  @PG_CONFIG@
35
36SQL_BITS     = $(wildcard sql_bits/*.sql)
37EXTRA_CLEAN += sql/*.sql ${SQL_BITS}
38
39#test address standardizer if also built
40ifeq (@ADDRESS_STANDARDIZER@,address_standardizer)
41	REGRESS +=  test-pagc_normalize_address
42	REGRESS_OPTS += --load-extension=address_standardizer
43endif
44
45all: sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql sql/$(EXTENSION)--ANY--$(EXTVERSION).sql sql/test-normalize_address.sql sql/test-pagc_normalize_address.sql expected/test-normalize_address.out expected/test-pagc_normalize_address.out sql/test-upgrade.sql expected/test-upgrade.out
46
47
48expected:
49	mkdir -p $@
50
51sql:
52	mkdir -p $@
53
54sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql | sql
55	cp $< $@
56
57expected/test-normalize_address.out: sql_bits/test_tuples_only_unaligned.sql.in ../../extras/tiger_geocoder/regress/normalize_address_regress | expected
58	cat $^ > $@
59
60expected/test-pagc_normalize_address.out: sql_bits/test_tuples_only_unaligned.sql.in ../../extras/tiger_geocoder/regress/pagc_normalize_address_regress | expected
61	cat $^ > $@
62
63## adding \t .. to force output to be the same as what get in regular regress in tiger folder
64sql/test-normalize_address.sql: sql_bits/test_tuples_only_unaligned.sql.in ../../extras/tiger_geocoder/regress/normalize_address_regress.sql | sql
65	cat $^ > $@
66
67sql/test-upgrade.sql: | sql
68	echo 'ALTER EXTENSION ${EXTENSION} UPDATE TO "$(EXTVERSION)next"' > $@
69
70%.control: %.control.in Makefile
71	cat $< \
72		| sed -e 's|@EXTVERSION@|$(EXTVERSION)|g' \
73		> $@
74
75expected/test-upgrade.out: sql/test-upgrade.sql | expected
76	cp $< $@
77
78sql/test-pagc_normalize_address.sql: sql_bits/test_tuples_only_unaligned.sql.in ../../extras/tiger_geocoder/regress/pagc_normalize_address_regress.sql | sql
79	cat $^ > $@
80
81sql/$(EXTENSION).sql: sql_bits/tiger_geocoder.sql  sql_bits/mark_editable_objects.sql.in sql_bits/tiger_geocoder_comments.sql | sql
82	cat $^ > $@
83
84sql/$(EXTENSION)--ANY--$(EXTVERSION).sql: ../postgis_extension_helper.sql sql_bits/remove_from_extension.sql.in sql/tiger_geocoder_upgrade_minor.sql sql_bits/mark_editable_objects.sql.in sql_bits/tiger_geocoder_comments.sql | sql
85	cat $^ > $@
86	echo "SELECT postgis_extension_drop_if_exists('${EXTENSION}', 'DROP SCHEMA tiger_data');" >> $@
87	cat ../postgis_extension_helper_uninstall.sql  >> $@
88
89sql/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql: sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql | sql
90	cp $< $@
91
92#strip BEGIN/COMMIT since these are not allowed in extensions
93#strip CREATE SCHEMA since we force extension
94# to create schema by setting schema to tiger_geocoder in control
95#also remove tiger_data from extension if it is part of it
96sql_bits/tiger_geocoder_minor.sql.in: ../../extras/tiger_geocoder/utility/set_search_path.sql \
97  sql_bits/upgrade_before.sql.in \
98  	../../extras/tiger_geocoder/geocode_settings.sql \
99  ../../extras/tiger_geocoder/tiger_loader_2017.sql \
100	../../extras/tiger_geocoder/utility/utmzone.sql \
101	../../extras/tiger_geocoder/utility/cull_null.sql \
102	../../extras/tiger_geocoder/utility/nullable_levenshtein.sql \
103	../../extras/tiger_geocoder/utility/levenshtein_ignore_case.sql \
104	../../extras/tiger_geocoder/normalize/end_soundex.sql \
105	../../extras/tiger_geocoder/normalize/count_words.sql \
106	../../extras/tiger_geocoder/normalize/state_extract.sql \
107	../../extras/tiger_geocoder/normalize/get_last_words.sql \
108	../../extras/tiger_geocoder/normalize/location_extract_countysub_exact.sql \
109	../../extras/tiger_geocoder/normalize/location_extract_countysub_fuzzy.sql \
110	../../extras/tiger_geocoder/normalize/location_extract_place_exact.sql \
111	../../extras/tiger_geocoder/normalize/location_extract_place_fuzzy.sql \
112	../../extras/tiger_geocoder/normalize/location_extract.sql \
113	../../extras/tiger_geocoder/normalize/normalize_address.sql \
114	../../extras/tiger_geocoder/normalize/pprint_addy.sql \
115	../../extras/tiger_geocoder/pagc_normalize/pagc_tables.sql \
116  ../../extras/tiger_geocoder/pagc_normalize/pagc_normalize_address.sql \
117	../../extras/tiger_geocoder/geocode/other_helper_functions.sql \
118	../../extras/tiger_geocoder/geocode/rate_attributes.sql \
119	../../extras/tiger_geocoder/geocode/includes_address.sql \
120	../../extras/tiger_geocoder/geocode/interpolate_from_address.sql \
121	../../extras/tiger_geocoder/geocode/geocode_address.sql \
122	../../extras/tiger_geocoder/geocode/geocode_location.sql \
123	../../extras/tiger_geocoder/geocode/geocode_intersection.sql \
124	../../extras/tiger_geocoder/geocode/geocode.sql \
125	../../extras/tiger_geocoder/geocode/reverse_geocode.sql \
126	../../extras/tiger_geocoder/geocode/census_tracts_functions.sql
127	mkdir -p sql_bits
128	cat $^ > $@
129
130#also remove tiger_data from extension if it is part of it so data gets backed up
131sql_bits/tiger_geocoder.sql.in: sql_bits/norm_addy_create.sql.in \
132	../../extras/tiger_geocoder/utility/set_search_path.sql \
133	../../extras/tiger_geocoder/geocode_settings.sql \
134	../../extras/tiger_geocoder/tables/lookup_tables_2011.sql \
135	../../extras/tiger_geocoder/tiger_loader_2017.sql \
136	../../extras/tiger_geocoder/utility/set_search_path.sql \
137	../../extras/tiger_geocoder/utility/utmzone.sql \
138	../../extras/tiger_geocoder/utility/cull_null.sql \
139	../../extras/tiger_geocoder/utility/nullable_levenshtein.sql \
140	../../extras/tiger_geocoder/utility/levenshtein_ignore_case.sql \
141	../../extras/tiger_geocoder/normalize/end_soundex.sql \
142	../../extras/tiger_geocoder/normalize/count_words.sql \
143	../../extras/tiger_geocoder/normalize/state_extract.sql \
144	../../extras/tiger_geocoder/normalize/get_last_words.sql \
145	../../extras/tiger_geocoder/normalize/location_extract_countysub_exact.sql \
146	../../extras/tiger_geocoder/normalize/location_extract_countysub_fuzzy.sql \
147	../../extras/tiger_geocoder/normalize/location_extract_place_exact.sql \
148	../../extras/tiger_geocoder/normalize/location_extract_place_fuzzy.sql \
149	../../extras/tiger_geocoder/normalize/location_extract.sql \
150	../../extras/tiger_geocoder/normalize/normalize_address.sql \
151	../../extras/tiger_geocoder/normalize/pprint_addy.sql \
152	../../extras/tiger_geocoder/pagc_normalize/pagc_tables.sql \
153    ../../extras/tiger_geocoder/pagc_normalize/pagc_normalize_address.sql \
154	../../extras/tiger_geocoder/geocode/other_helper_functions.sql \
155	../../extras/tiger_geocoder/geocode/rate_attributes.sql \
156	../../extras/tiger_geocoder/geocode/includes_address.sql \
157	../../extras/tiger_geocoder/geocode/interpolate_from_address.sql \
158	../../extras/tiger_geocoder/geocode/geocode_address.sql \
159	../../extras/tiger_geocoder/geocode/geocode_location.sql \
160	../../extras/tiger_geocoder/geocode/geocode_intersection.sql \
161	../../extras/tiger_geocoder/geocode/geocode.sql \
162	../../extras/tiger_geocoder/geocode/reverse_geocode.sql \
163	../../extras/tiger_geocoder/geocode/census_tracts_functions.sql \
164	../../extras/tiger_geocoder/topology/tiger_topology_loader.sql \
165	../postgis_extension_helper.sql \
166	sql_bits/add_search_path.sql
167	mkdir -p sql_bits
168	cat $^ > $@
169	echo "SELECT postgis_extension_drop_if_exists('${EXTENSION}', 'DROP SCHEMA tiger_data');" >> $@
170	cat ../postgis_extension_helper_uninstall.sql  >> $@
171
172sql_bits/tiger_geocoder.sql: sql_bits/tiger_geocoder.sql.in
173	mkdir -p sql_bits
174	sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' -e '/^CREATE SCHEMA/d;'  $< > $@
175	$(PERL) -pe 's/BEGIN\;//g ; s/COMMIT\;//g' $< > $@
176
177sql_bits/add_search_path.sql: sql_bits/add_search_path.sql.in
178	mkdir -p sql_bits
179	cp $< $@
180
181../../doc/tiger_geocoder_comments.sql:
182	$(MAKE) -C ../../doc comments
183
184sql_bits/tiger_geocoder_comments.sql: ../../doc/tiger_geocoder_comments.sql
185	mkdir -p sql_bits
186	cp $< $@
187
188#grep all lines that start with CREATE OR REPLACE FUNCTION, TRIGGER...
189#then replace CREATE OR REPLACE .. with ALTER EXTENSION..;
190#then remove default values and extra junk
191# sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql: ../../tiger_geocoder/tiger_geocoder.sql
192# 	sed -e '/^CREATE \(OR REPLACE\|TYPE\|TABLE\|VIEW\|CAST\)/!d;' \
193# 		-e 's/OR REPLACE//g' \
194# 		-e 's/CREATE\(.*\)/ALTER EXTENSION $(EXTENSION) ADD\1;/' \
195# 		-e 's/DEFAULT [\.0-9a-zA-Z]\+//g' \
196# 		-e 's/\(BEFORE\|WITH FUNCTION\)\(.*\)/;/' \
197# 		-e 's/[ \t]+;/;/' \
198# 		-e 's/(;/;/' \
199# 		-e 's/\\(;/;/' \
200# 		-e 's/;;/;/g' $< > $@
201
202#hardcode for now using
203#the extensions/make_unpackaged.sql script form an install
204sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql: sql_bits/tiger_geocoder--unpackaged.sql.in | sql
205	cp $< $@
206
207#upgrade script should have everything but table, schema, type creation/alter
208#NOTE: we assume all object definitions end in ;
209#first expression deletes all non-removable objects defined on same line
210#second deletes all non-removable defined on multiple lines
211#  the end of the body of object we assume ends in ;
212#aggregates are special
213#they can be dropped but we need to remove
214#them from the extension first
215sql/tiger_geocoder_upgrade_minor.sql:  sql_bits/tiger_geocoder_minor.sql.in | sql
216	sed -e '/^\(CREATE\|ALTER\) \(CAST\|TYPE\|TABLE\|SCHEMA\|DOMAIN\|TRIGGER\).*;/d' \
217	 	 -e '/^\(CREATE\|ALTER\) \(CAST\|TYPE\|TABLE\|SCHEMA\|DOMAIN\|TRIGGER\)/,/\;/d' \
218	 	 -e 's/BEGIN;//g' -e 's/COMMIT;//g' \
219	 	 $< > $@
220
221EXTDIR=$(DESTDIR)$(datadir)/$(datamoduledir)
222
223install: install-upgrade-paths
224
225# The "next" lines are a cludge to allow upgrading between different
226# revisions of the same version
227install-upgrade-paths:
228	tpl='$(EXTENSION)--ANY--$(EXTVERSION).sql'; \
229	$(INSTALL_DATA) sql/$${tpl} "$(EXTDIR)/$${tpl}"; \
230	ln -fs "$${tpl}" $(EXTDIR)/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql; \
231	ln -fs "$${tpl}" $(EXTDIR)/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql; \
232	for OLD_VERSION in $(UPGRADEABLE_VERSIONS); do \
233		ln -fs "$${tpl}" $(EXTDIR)/$(EXTENSION)--$$OLD_VERSION--$(EXTVERSION).sql; \
234	done
235
236uninstall: uninstall-upgrade-paths
237
238INSTALLED_UPGRADE_SCRIPTS = \
239	$(wildcard $(EXTDIR)/*$(EXTVERSION).sql) \
240	$(wildcard $(EXTDIR)/*$(EXTVERSION)next.sql) \
241	$(NULL)
242
243uninstall-upgrade-paths:
244	rm -f $(INSTALLED_UPGRADE_SCRIPTS)
245
246#only extension files
247EXTRA_CLEAN += $(wildcard expected/*--*.out)
248
249distclean: clean
250	rm Makefile
251
252PGXS := $(shell $(PG_CONFIG) --pgxs)
253include $(PGXS)
254PERL=@PERL@
255