File: ser_to_sr.sh

package info (click to toggle)
kamailio 4.2.0-2%2Bdeb8u3
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 56,276 kB
  • sloc: ansic: 552,836; xml: 166,484; sh: 8,659; makefile: 7,676; sql: 6,235; perl: 3,487; yacc: 3,428; python: 1,457; cpp: 1,219; php: 1,047; java: 449; pascal: 194; cs: 40; awk: 27
file content (107 lines) | stat: -rwxr-xr-x 3,387 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env sh
#
# This is a simple script which attempts to convert ser modules so that they
# can be used with the sip-router core. Most of the changes done by the script
# deal with the changes in the database abstraction layer in the sip-router
# source tree.
#
# Run this script in module directory to convert it from ser core to
# sip-router core. The root of the tree should be two levels up, otherwise
# relative paths to headers (../..) would not work and the module will not
# compile.
# 
# Some of the changes done by the script:
#
#  * Extra defines in the Makefile to make the module link with libsrdb2
#  * Path to database headers updated to point to lib/srdb2
#  * Database flag names renamed from DB_* to SRDB_* 
#    (DB_DISABLED -> SRDB_DISABLED)
#
# NOTE: There is no guarantee that the update module would compile or even
#       work. Make a backup before running the script. You have been warned!
# 
# Written by Jan Janak <jan@iptel.org>
#

if [ ! -f Makefile ] ; then
	echo "ERROR: Could not find module Makefile"
	echo "       Run this file in the module directory"
	exit 1
fi

if ! egrep "Makefile\.modules" Makefile >/dev/null ; then
	echo "ERROR: Doesn't look like a module..."
	exit 1
fi

if ! egrep '^#[ \t]*include[ \t]*".*\/db\/db(_(cmd|con|ctx|drv|fld|gen|pool|rec|res|uri))?\.h[ \t]*"' *.[ch] >/dev/null ; then
	echo "The module does not seem to include old database headers..."
	exit 0
fi

echo -n "Updating Makefile..."
cp Makefile Makefile.backup
cat Makefile.backup | gawk '
BEGIN {
    serlibpath_seen = 0
    libs_seen = 0
    defs_seen = 0
}

# If the define already exists then skip it, this ensures that
# we do not add the same line more than once.
/^[ \t]*DEFS[ \t]*\+?=.*SER_MOD_INTERFACE/ {
    defs_seen = 1
}

/^[ \t]*SER_LIBS[ \t]*\+?=.*srdb2\/srdb2/ {
    libs_seen = 1
}

/^[ \t]*SERLIBPATH[ \t]*=/ {
    serlibpath_seen = 1
}

# Write everything just before the line including Makefile.modules,
# this is most likely the last line in the Makefile
/^[ \t]*include[ \t]+.*\/Makefile\.modules[ \t]*$/ {
    if (serlibpath_seen == 0) print "SERLIBPATH=../../lib"
    if (defs_seen == 0) print "DEFS+=-DSER_MOD_INTERFACE"
    if (libs_seen == 0) print "SER_LIBS+=$(SERLIBPATH)/srdb2/srdb2"
}

{ print $0 }

' > Makefile
echo "done."

for file in *.[ch] ; do
	echo -n "Updating file $file..."
	cp $file $file.backup
	cat $file.backup | gawk '

/^#[ \t]*include[ \t]*".*\/db\/db(_(cmd|con|ctx|drv|fld|gen|pool|rec|res|uri))?\.h[ \t]*"/ {
    sub("/db/", "/lib/srdb2/", $0);
}

/(^|[^a-zA-Z0-9_])DB_(LOAD_SER|DISABLED|CANON|IS_(TO|FROM)|FOR_SERWEB|PENDING|((CALLER|CALLEE)_)?DELETED|MULTIVALUE|FILL_ON_REG|REQUIRED|DIR)([^a-zA-Z0-9_]|$)/ {
    gsub("DB_LOAD_SER", "SRDB_LOAD_SER", $0);
    gsub("DB_DISABLED", "SRDB_DISABLED", $0);
    gsub("DB_CANON", "SRDB_CANON", $0);
    gsub("DB_IS_TO", "SRDB_IS_TO", $0);
    gsub("DB_IS_FROM", "SRDB_IS_FROM", $0);
    gsub("DB_FOR_SERWEB", "SRDB_FOR_SERWEB", $0);
    gsub("DB_PENDING", "SRDB_PENDING", $0);
    gsub("DB_DELETED", "SRDB_DELETED", $0);
    gsub("DB_CALLER_DELETED", "SRDB_CALLER_DELETED", $0);
    gsub("DB_CALLEE_DELETED", "SRDB_CALLEE_DELETED", $0);
    gsub("DB_MULTIVALUE", "SRDB_MULTIVALUE", $0);
    gsub("DB_FILL_ON_REG", "SRDB_FILL_ON_REG", $0);
    gsub("DB_REQUIRED", "SRDB_REQUIRED", $0);
    gsub("DB_DIR", "SRDB_DIR", $0);
}

{ print $0 }
' >$file
	echo "done."
done