1#
2#
3#
4
5# Kamailio database descriptions for modules
6TABLES := $(patsubst kamailio-%.xml,%,$(wildcard kamailio-*.xml))
7
8ROOTDIR=../../../..
9ROOTDOC=../../..
10STYLESHEETS=$(ROOTDIR)/doc/stylesheets/dbschema_k/xsl
11SCHEME=$(ROOTDIR)/utils/kamctl/
12
13#Stylesheet used to generate db_table nodes for pi_framework XML schema
14PI_FRAMEWORK_TABLE_XSL = $(STYLESHEETS)/pi_framework_table.xsl
15
16# Stylesheet used to generate mod nodes for pi_framework XML schema
17PI_FRAMEWORK_MOD_XSL = $(STYLESHEETS)/pi_framework_mod.xsl
18
19# Stylesheet used to generate MySQL database schema
20MYSQL_XSL = $(STYLESHEETS)/mysql.xsl
21
22# Stylesheet used to generate Postgres database schema
23POSTGRES_XSL = $(STYLESHEETS)/postgres.xsl
24
25# Stylesheet used to generate dbtext database schema
26DBTEXT_XSL = $(STYLESHEETS)/dbtext.xsl
27
28# Stylesheet used to generate berkeley database schema
29DB_BERKELEY_XSL = $(STYLESHEETS)/db_berkeley.xsl
30
31# Stylesheet used to generate sqlite database schema
32DB_SQLITE_XSL = $(STYLESHEETS)/db_sqlite.xsl
33
34# Stylesheet used to generate oracle database schema
35ORACLE_XSL = $(STYLESHEETS)/oracle.xsl
36
37# Stylesheet used to generate mongodb database schema
38MONGODB_XSL = $(STYLESHEETS)/mongodb.xsl
39
40# Stylesheet used to generate Redis database schema
41DB_REDIS_XSL = $(STYLESHEETS)/db_redis.xsl
42
43# Stylesheet used to generate docbook documentation
44DOCBOOK_XSL = $(STYLESHEETS)/docbook.xsl
45
46# Stylesheet used to generate modules templates header
47MODULES_H_XSL = $(STYLESHEETS)/modules_h.xsl
48
49# Stylesheet used to generate modules templates implementation
50MODULES_C_XSL = $(STYLESHEETS)/modules_c.xsl
51
52# Stylesheet used to generate modules documentation
53DBDOC_XSL = $(STYLESHEETS)/dbdoc.xsl
54
55# Enable/disable DTD validation
56VALIDATE = 0
57
58# Enable/disable verbose output (and DTD validation)
59VERBOSE = 0
60
61# XML Catalog used to resolve entities
62CATALOG = $(ROOTDIR)/doc/stylesheets/dbschema_k/catalog.xml
63
64XSLTPROC = /usr/bin/xsltproc
65XSLTPROC_FLAGS = --xinclude
66
67ifeq ($(VALIDATE), 0)
68	override XSLTPROC := $(XSLTPROC) --novalid
69endif
70
71ifeq ($(VERBOSE), 1)
72	override XSLTPROC := $(XSLTPROC) --verbose
73endif
74
75all: mysql postgres dbtext db_berkeley db_sqlite oracle mongodb db_redis pi_framework
76
77.PHONY: pi_framework pi_framework_clean
78pi_framework:
79	for FILE in $(TABLES); do \
80		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
81		--stringparam dir "$(SCHEME)/xhttp_pi" \
82		--stringparam prefix "$$FILE-" \
83		$(PI_FRAMEWORK_TABLE_XSL) kamailio-"$$FILE".xml ; \
84	done
85	for FILE in $(TABLES); do \
86		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
87		--stringparam dir "$(SCHEME)/xhttp_pi" \
88		--stringparam prefix "$$FILE-" \
89		$(PI_FRAMEWORK_MOD_XSL) kamailio-"$$FILE".xml ; \
90	done
91	cat $(SCHEME)/xhttp_pi/pi_framework-00 \
92		$(SCHEME)/xhttp_pi/*-table \
93		$(SCHEME)/xhttp_pi/pi_framework-01 \
94		$(SCHEME)/xhttp_pi/*-mod \
95		$(SCHEME)/xhttp_pi/pi_framework-02 > \
96		$(SCHEME)/xhttp_pi/pi_framework.xml
97
98pi_framework_clean:
99	-@rm -f $(ROOTDIR)/scripts/xhttp_pi/*-table
100	-@rm -f $(ROOTDIR)/scripts/xhttp_pi/*-mod
101
102.PHONY: mysql mysql_clean
103mysql:
104	for FILE in $(TABLES); do \
105		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
106		--stringparam dir "$(SCHEME)/mysql" \
107		--stringparam prefix "$$FILE-" \
108		--stringparam db "mysql" \
109		$(MYSQL_XSL) kamailio-"$$FILE".xml ; \
110	done
111
112mysql_clean:
113	-@rm -f $(SCHEME)/mysql/*
114
115.PHONY: postgres postgres_clean
116postgres:
117	for FILE in $(TABLES); do \
118		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
119		--stringparam dir "$(SCHEME)/postgres" \
120		--stringparam prefix "$$FILE-" \
121		--stringparam db "postgres" \
122		$(POSTGRES_XSL) kamailio-"$$FILE".xml ; \
123	done
124
125postgres_clean:
126	-@rm -f $(SCHEME)/postgres/*
127
128.PHONY: oracle oracle_clean
129oracle:
130	for FILE in $(TABLES); do \
131		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
132		--stringparam dir "$(SCHEME)/oracle" \
133		--stringparam prefix "$$FILE-" \
134		--stringparam db "oracle" \
135		$(ORACLE_XSL) kamailio-"$$FILE".xml ; \
136	done
137
138oracle_clean:
139	-@rm -f $(SCHEME)/oracle/*.sql
140
141.PHONY: dbtext dbtext_clean
142dbtext:
143	for FILE in $(TABLES); do \
144		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
145		--stringparam dir "$(SCHEME)/dbtext/kamailio" \
146		--stringparam prefix "" \
147		--stringparam db "dbtext" \
148		$(DBTEXT_XSL) kamailio-"$$FILE".xml ; \
149	done
150	TMPFILE=`mktemp -t kamailio-test.XXXXXXXXXX`
151	# small hack to create the version table entries, this is here easier as with XSL
152	for FILE in $(sort $(wildcard $(SCHEME)/dbtext/kamailio/*)) ; do \
153		if [ -f "$$FILE" ]; then \
154			if [  "$$FILE" != "$(SCHEME)/dbtext/kamailio/version" ]; then \
155				tail -n 1 "$$FILE" >> "$(SCHEME)/dbtext/kamailio/version" ; \
156 				head -n 1 "$$FILE" > $TMPFILE ; \
157				cp $TMPFILE "$$FILE" ; \
158			fi ; \
159		fi ; \
160	done ; \
161	rm -f $TMPFILE
162
163dbtext_clean:
164	-@rm -f $(SCHEME)/dbtext/kamailio/*
165
166.PHONY: db_berkeley db_berkeley_clean
167db_berkeley:
168	for FILE in $(TABLES); do \
169		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
170		--stringparam dir "$(SCHEME)/db_berkeley/kamailio" \
171		--stringparam prefix "" \
172		--stringparam db "db_berkeley" \
173		$(DB_BERKELEY_XSL) kamailio-"$$FILE".xml ; \
174	done
175	TMPFILE=`mktemp -t kamailio-test.XXXXXXXXXX`
176	# small hack to create the version table entries, this is here easier as with XSL
177	for FILE in $(sort $(wildcard $(SCHEME)/db_berkeley/kamailio/*)) ; do \
178		if [ -f "$$FILE" ]; then \
179			if [  "$$FILE" != "$(SCHEME)/db_berkeley/kamailio/version" ]; then \
180				tail -n 2 "$$FILE" >> "$(SCHEME)/db_berkeley/kamailio/version" ; \
181 				head -n 10 "$$FILE" > $TMPFILE ; \
182				cp $TMPFILE "$$FILE" ; \
183			fi ; \
184		fi ; \
185	done ; \
186	rm -f $TMPFILE
187
188db_berkeley_clean:
189	-@rm -f $(SCHEME)/db_berkeley/kamailio/*
190
191
192.PHONY: db_sqlite db_sqlite_clean
193db_sqlite:
194	for FILE in $(TABLES); do \
195		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
196		--stringparam dir "$(SCHEME)/db_sqlite" \
197		--stringparam prefix "$$FILE-" \
198		--stringparam db "db_sqlite" \
199		$(DB_SQLITE_XSL) kamailio-"$$FILE".xml ; \
200	done
201
202db_sqlite_clean:
203	-@rm -f $(SCHEME)/db_sqlite/*
204
205.PHONY: mongodb mongodb_clean
206mongodb:
207	for FILE in $(TABLES); do \
208		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
209		--stringparam dir "$(SCHEME)/mongodb/kamailio" \
210		--stringparam prefix "" \
211		--stringparam db "mongodb" \
212		$(MONGODB_XSL) kamailio-"$$FILE".xml ; \
213	done
214	@# small hack to create the version table entries, this is here easier as with XSL
215	@echo "use kamailio;" \
216		> "$(SCHEME)/mongodb/kamailio/version-create.mongo" ;
217	@echo "db.createCollection(\"version\");" \
218		>> "$(SCHEME)/mongodb/kamailio/version-create.mongo" ;
219	@for FILE in $(sort $(wildcard $(SCHEME)/mongodb/kamailio/*.json)) ; do \
220		if [ -f "$$FILE" ]; then \
221			if [  "$$FILE" != "$(SCHEME)/mongodb/kamailio/version.json" ]; then \
222				VN=`grep '"version":' "$$FILE" | grep -o -E '[0-9]+'` ; \
223				FN=`basename $$FILE .json` ;\
224				echo "db.getCollection(\"version\").insert({ table_name: \"$$FN\", table_version: NumberInt($$VN) });" \
225						>> "$(SCHEME)/mongodb/kamailio/version-create.mongo" ; \
226			fi ; \
227		fi ; \
228	done ; \
229
230mongodb_clean:
231	-@rm -f $(SCHEME)/mongodb/kamailio/*
232
233.PHONY: db_redis db_redis_clean
234db_redis:
235	for FILE in $(TABLES); do \
236		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
237		--stringparam dir "$(SCHEME)/db_redis/kamailio" \
238		--stringparam prefix "" \
239		--stringparam db "db_redis" \
240		$(DB_REDIS_XSL) kamailio-"$$FILE".xml ; \
241	done
242
243db_redis_clean:
244	-@rm -f $(SCHEME)/db_redis/*
245
246.PHONY: docbook-xml
247docbook-xml:
248	for FILE in $(TABLES); do \
249		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
250		--stringparam dir "$(ROOTDIR)/doc/databases/kamailio" \
251		--stringparam prefix "$$FILE-" \
252		$(DOCBOOK_XSL) kamailio-"$$FILE".xml ; \
253	done
254	# link all documents to one file, to get nicer output
255	echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" \
256		> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
257	echo "<!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook XML V4.4//EN\"" \
258		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
259	echo "        \"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd\" [" \
260		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
261	# include general documentation entities
262	echo "    <!ENTITY % docentities SYSTEM \"$(ROOTDOC)/doc/docbook/entities.xml\">" \
263		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
264	echo "    %docentities;" \
265		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
266	echo "]>" \
267		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
268	echo "<book xmlns:xi=\"http://www.w3.org/2001/XInclude\">" \
269		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
270	# add bookinfo
271	cat "$(ROOTDIR)/doc/stylesheets/dbschema_k/bookinfo.xml" | tail -n +2 \
272		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
273	# actually include the entities
274	for FILE in $(sort $(wildcard $(ROOTDIR)/doc/databases/kamailio/*-dbschema.xml)); do \
275		echo "    <xi:include href=\"$$(basename $$FILE)\" />" \
276			>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml" ; \
277	done
278	echo "</book>" \
279		>> "$(ROOTDIR)/doc/databases/kamailio/tables.xml"
280	# generate makefile
281	echo "docs = tables.xml" \
282		> "$(ROOTDIR)/doc/databases/kamailio/Makefile"
283	echo \
284		>> "$(ROOTDIR)/doc/databases/kamailio/Makefile"
285	echo "docbook_dir = $(ROOTDOC)/doc/docbook" \
286		>> "$(ROOTDIR)/doc/databases/kamailio/Makefile"
287	echo "include \$$(docbook_dir)/Makefile" \
288		>> "$(ROOTDIR)/doc/databases/kamailio/Makefile"
289
290.PHONY: docbook-sgml
291docbook-sgml:
292	for FILE in $(TABLES); do \
293		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
294		--stringparam dir "$(ROOTDIR)/doc/databases/kamailio" \
295		--stringparam prefix "$$FILE-" \
296		$(DOCBOOK_XSL) kamailio-"$$FILE".xml ; \
297	done ; \
298	# link all documents to one file, to get nicer output
299	printf "<!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook V4.4//EN\"" \
300		> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml"
301	echo " \"http://www.oasis-open.org/docbook/sgml/4.4/docbook.dtd\" [" \
302		>> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml"
303	# create entities, as xi:include is not available in sgml docbook
304	# substitute '-' for '_', docbook smgl don't like this
305	for FILE in $(sort $(wildcard $(ROOTDIR)/doc/databases/kamailio/*.xml)); do \
306		echo "  <!ENTITY `basename "$$FILE" | sed -e 's#_#-#g'` SYSTEM \"$$(basename $$FILE)\">" \
307			>> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml" ; \
308	done ; \
309	# include general documentation entities
310	echo "  <!ENTITY % docentities SYSTEM \"$(ROOTDOC)/doc/docbook/entities.xml\"> %docentities;" \
311		>> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml" ; \
312	echo "]>" >> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml"
313	# add bookinfo
314	cat "$(ROOTDIR)/doc/stylesheets/dbschema_k/bookinfo.xml" \
315		>> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml"
316	# actually include the entities
317	for FILE in $(wildcard $(ROOTDIR)/doc/databases/kamailio/*.xml); do \
318		echo "    &`basename "$$FILE" | sed -e 's#_#-#g'`;" \
319		>> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml" ; \
320	done ; \
321	echo "</book>" >> "$(ROOTDIR)/doc/databases/kamailio/tables.sgml"
322
323.PHONY: docbook docbook_clean
324docbook: docbook-xml
325
326docbook_clean:
327	-@rm -f $(ROOTDIR)/doc/databases/kamailio/*.xml
328	-@rm -f $(ROOTDIR)/doc/databases/kamailio/tables.sgml
329
330.PHONY: modules modules_clean
331modules:
332	for FILE in $(TABLES); do \
333		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
334		--stringparam dir "$(ROOTDIR)/modules_k/$$FILE/" \
335		--stringparam prefix "$$FILE" \
336		--stringparam db "modules" \
337		$(MODULES_H_XSL) kamailio-"$$FILE".xml ; \
338	done
339	for FILE in $(TABLES); do \
340		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
341		--stringparam dir "$(ROOTDIR)/modules_k/$$FILE/" \
342		--stringparam prefix "$$FILE" \
343		--stringparam db "modules" \
344		$(MODULES_C_XSL) kamailio-"$$FILE".xml ; \
345	done
346
347modules_clean:
348	for FILE in $(TABLES); do \
349		rm -f $(ROOTDIR)/modules/$$FILE/db_*.c; \
350		rm -f $(ROOTDIR)/modules/$$FILE/db_*.h; \
351	done
352
353dbdoc:
354	for FILE in $(TABLES); do \
355		XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \
356		--stringparam dir "$(ROOTDIR)/modules_k/$$FILE/doc/" \
357		--stringparam prefix "$$FILE" \
358		--stringparam db "modules" \
359		$(DBDOC_XSL) kamailio-"$$FILE".xml ; \
360	done
361
362dbdoc_clean:
363	for FILE in $(TABLES); do \
364		rm -f $(ROOTDIR)/modules/$$FILE/doc/*_db.xml; \
365	done
366
367.PHONY: clean
368clean: mysql_clean postgres_clean oracle_clean dbtext_clean db_berkeley_clean db_sqlite_clean mongodb_clean db_redis_clean pi_framework_clean docbook_clean # modules_clean dbdoc_clean
369