aboutsummaryrefslogtreecommitdiff
path: root/contrib/tsearch2/gendict/config.sh
blob: 2dc71fb73ef74c143cde9e8d9c7da0d9babd4a86 (plain)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/sh

usage () {
	echo Usage:
	echo $0 -n DICTNAME  \( [ -s [ -p PREFIX ] ] \| [ -c CFILES ] [ -h HFILES ] [ -i ] \) [ -v ] [ -d DIR ] [ -C COMMENT ]
	echo '    -v - be verbose'
	echo '    -d DIR - name of directory in PGSQL_SRL/contrib (default dict_DICTNAME)'
	echo '    -C COMMENT - dictionary comment' 
	echo Generate Snowball stemmer:
	echo $0 -n DICTNAME -s [ -p PREFIX ] [ -v ] [ -d DIR ] [ -C COMMENT ]
	echo '    -s - generate Snowball wrapper'
	echo "    -p - prefix of Snowball's function, (default DICTNAME)" 
	echo Generate template dictionary:
	echo $0 -n DICTNAME [ -c CFILES ] [ -h HFILES ] [ -i ] [ -v ] [ -d DIR ] [ -C COMMENT ]
	echo '    -c CFILES - source files, must be placed in contrib/tsearch2/gendict directory.'
	echo '                These files will be used in Makefile.'
	echo '    -h HFILES - header files, must be placed in contrib/tsearch2/gendict directory.'
	echo '                These files will be used in Makefile and subinclude.h'
	echo '    -i - dictionary has init method'
	exit 1;
}

dictname=
stemmode=no
verbose=no
cfile=
hfile=
dir= 
hasinit=no
comment=
prefix=

while getopts n:c:C:h:d:p:vis opt
do
	case "$opt" in
		v) verbose=yes;;
		s) stemmode=yes;;
		i) hasinit=yes;;
		n) dictname="$OPTARG";;
		c) cfile="$OPTARG";;
		h) hfile="$OPTARG";;
		d) dir="$OPTARG";;
		C) comment="$OPTARG";;
		p) prefix="$OPTARG";;
		\?) usage;;
	esac
done

[ ${#dictname} -eq 0 ] && usage

dictname=`echo $dictname | tr '[:upper:]' '[:lower:]'`

if [ $stemmode = "yes" ] ; then 
	[ ${#prefix} -eq 0 ] && prefix=$dictname
	hasinit=yes
	cfile="stem.c"
	hfile="stem.h"
fi 

[ ${#dir}   -eq 0 ] && dir="dict_$dictname"

if [ ${#comment} -eq 0 ]; then
	comment=null
else
	comment="'$comment'"
fi

ofile=
for f in $cfile
do
	f=` echo $f | sed 's#c$#o#'`
	ofile="$ofile $f"
done

if [ $stemmode = "yes" ] ; then
	ofile="$ofile dict_snowball.o"
else
	ofile="$ofile dict_tmpl.o"
fi

if [ $verbose = "yes" ]; then
	echo Dictname: "'"$dictname"'"
	echo Snowball stemmer: $stemmode
	echo Has init method: $hasinit
	[ $stemmode = "yes" ] && echo Function prefix: $prefix 
	echo Source files: $cfile
	echo Header files: $hfile
	echo Object files: $ofile
	echo Comment: $comment
	echo Directory: ../../$dir
fi


[ $verbose = "yes" ] && echo -n 'Build directory...  '
if [ ! -d ../../$dir ]; then
	if ! mkdir ../../$dir ; then 
		echo "Can't create directory ../../$dir"
		exit 1
	fi 
fi
[ $verbose = "yes" ] && echo ok


[ $verbose = "yes" ] && echo -n 'Build Makefile...  '
sed s#CFG_DIR#$dir# < Makefile.IN | sed s#CFG_MODNAME#$dictname# | sed "s#CFG_OFILE#$ofile#" > ../../$dir/Makefile.tmp
if [ $stemmode = "yes" ] ; then
	sed "s#^PG_CPPFLAGS.*\$#PG_CPPFLAGS = -I../tsearch2/snowball -I../tsearch2#" < ../../$dir/Makefile.tmp >  ../../$dir/Makefile 
else
	sed "s#^PG_CPPFLAGS.*\$#PG_CPPFLAGS = -I../tsearch2#" < ../../$dir/Makefile.tmp >  ../../$dir/Makefile 
fi
rm ../../$dir/Makefile.tmp
[ $verbose = "yes" ] && echo ok


[ $verbose = "yes" ] && echo -n Build dict_$dictname'.sql.in...  '
if [ $hasinit = "yes" ]; then
	sed s#CFG_MODNAME#$dictname# < sql.IN | sed "s#CFG_COMMENT#$comment#" | sed s#^HASINIT## | sed 's#^NOINIT.*$##' > ../../$dir/dict_$dictname.sql.in.tmp
	if [ $stemmode = "yes" ] ; then
		sed s#^ISSNOWBALL## < ../../$dir/dict_$dictname.sql.in.tmp | sed s#^NOSNOWBALL.*\$## > ../../$dir/dict_$dictname.sql.in
	else
		sed s#^NOSNOWBALL## < ../../$dir/dict_$dictname.sql.in.tmp | sed s#^ISSNOWBALL.*\$## > ../../$dir/dict_$dictname.sql.in
	fi
	rm ../../$dir/dict_$dictname.sql.in.tmp	
else 
	sed s#CFG_MODNAME#$dictname# < sql.IN | sed "s#CFG_COMMENT#$comment#" | sed s#^NOINIT## | sed 's#^HASINIT.*$##' | sed s#^NOSNOWBALL## | sed s#^ISSNOWBALL.*\$## > ../../$dir/dict_$dictname.sql.in
fi
[ $verbose = "yes" ] && echo ok



if [ ${#cfile} -ne 0 ] || [ ${#hfile} -ne 0 ] ; then
	[ $verbose = "yes" ] && echo -n 'Copy source and header files...  '
	if [ ${#cfile} -ne 0 ] ; then
		if [ $stemmode = "yes" ] ; then
			for cfn in $cfile
			do
				sed s#../runtime/## < $cfn > ../../$dir/$cfn
			done
		else
			if ! cp $cfile ../../$dir ; then 
				echo "Can't cp all or one of files: $cfile"
				exit 1
			fi
		fi
	fi
	if [ ${#hfile} -ne 0 ] ; then 
		if ! cp $hfile ../../$dir ; then 
   			echo "Cant cp all or one of files: $hfile"
			exit 1
		fi
	fi
	[ $verbose = "yes" ] && echo ok
fi


[ $verbose = "yes" ] && echo -n 'Build sub-include header...  '
echo -n > ../../$dir/subinclude.h 
for i in $hfile
do
	echo "#include \"$i\"" >> ../../$dir/subinclude.h
done
[ $verbose = "yes" ] && echo ok


if  [ $stemmode = "yes" ] ; then 
	[ $verbose = "yes" ] && echo -n 'Build Snowball stemmer...  '
	sed s#CFG_MODNAME#$dictname#g < dict_snowball.c.IN | sed s#CFG_PREFIX#$prefix#g > ../../$dir/dict_snowball.c
else
	[ $verbose = "yes" ] && echo -n 'Build dictinonary...  '
	sed s#CFG_MODNAME#$dictname#g < dict_tmpl.c.IN > ../../$dir/dict_tmpl.c.tmp
	if [ $hasinit = "yes" ]; then
		sed s#^HASINIT## <  ../../$dir/dict_tmpl.c.tmp | sed 's#^NOINIT.*$##' > ../../$dir/dict_tmpl.c
	else 
		sed s#^HASINIT.*\$## <  ../../$dir/dict_tmpl.c.tmp | sed 's#^NOINIT##' > ../../$dir/dict_tmpl.c
	fi
	rm ../../$dir/dict_tmpl.c.tmp
fi 
[ $verbose = "yes" ] && echo ok


[ $verbose = "yes" ] && echo -n "Build README.$dictname...  "
if  [ $stemmode = "yes" ] ; then
	echo "Autogenerated Snowball's wrapper for $prefix" > ../../$dir/README.$dictname
else
	echo "Autogenerated template for $dictname" > ../../$dir/README.$dictname
fi
[ $verbose = "yes" ] && echo ok

echo All is done