use StrBuf to create startup failure messages.
[citadel.git] / citadel / scripts / mk_module_init.sh
1 #!/bin/sh
2 #
3 # Script to generate $C_FILE
4 #
5
6 ECHO=/usr/bin/printf
7
8 #MINUS_e=X`$ECHO -n -e`
9 #if [ $MINUS_e != "X" ] ; then
10 #       MINUS_e=""
11 #else
12 #       MINUS_e="-e"
13 #fi
14
15 #MINUS_E=X`$ECHO -n -E`
16 #if [ $MINUS_E != "X" ] ; then
17 #       MINUS_E=""
18 #else
19 #       MINUS_E="-E"
20 #fi
21
22
23 CUR_DIR=`pwd`
24 C_FILE="$CUR_DIR/modules_init.c"
25 H_FILE="$CUR_DIR/modules_init.h"
26 MOD_FILE="$CUR_DIR/Make_modules"
27 SRC_FILE="$CUR_DIR/Make_sources"
28 U_FILE="$CUR_DIR/modules_upgrade.c"
29
30 /usr/bin/printf "Scanning extension modules for entry points.\n"
31
32
33 #start of the files which inturn removes any existing file
34 #
35
36 # start the Makefile included file for $SERV_MODULES
37 cat <<EOF  >$MOD_FILE
38 #
39 # Make_modules
40 # This file is to be included by Makefile to dynamically add modules to the build process
41 # THIS FILE WAS AUTO GENERATED BY mk_modules_init.sh DO NOT EDIT THIS FILE
42 #
43
44 EOF
45
46 # start the Makefile included file for $SOURCES
47 cat <<EOF  >$SRC_FILE
48 #
49 # Make_sources
50 # This file is to be included by Makefile to dynamically add modules to the build process
51 # THIS FILE WAS AUTO GENERATED BY mk_modules_init.sh DO NOT EDIT THIS FILE
52 #
53
54 EOF
55
56 # start the upgrade file
57 cat <<EOF  >$U_FILE
58 /*
59  * $U_FILE
60  * Auto generated by mk_modules_init.sh DO NOT EDIT THIS FILE
61  */
62
63
64
65 #include "sysdep.h"
66 #include <stdlib.h>
67 #include <unistd.h>
68 #include <time.h>
69 #include <ctype.h>
70 #include <stdio.h>
71 #include <sys/types.h>
72 #include <unistd.h>
73 #include <libcitadel.h>
74 #include "citadel.h"
75 #include "modules_init.h"
76 #include "sysdep_decls.h"
77
78
79
80
81 void upgrade_modules (void)
82 {
83
84     syslog(LOG_INFO, "Upgrade modules.\n");
85
86 EOF
87
88 # start the c file
89 cat <<EOF  >$C_FILE
90 /*
91  * $C_FILE
92  * Auto generated by mk_modules_init.sh DO NOT EDIT THIS FILE
93  */
94
95
96
97 #include "sysdep.h"
98 #include <stdlib.h>
99 #include <time.h>
100 #include <ctype.h>
101 #include <stdio.h>
102 #include <sys/types.h>
103 #include <unistd.h>
104 #include <libcitadel.h>
105 #include "citadel.h"
106 #include "modules_init.h"
107 #include "sysdep_decls.h"
108
109
110 void LogPrintMessages(long err);
111 extern long DetailErrorFlags;
112
113
114
115 void initialise_modules (int threading)
116 {
117     long filter;
118
119     if (threading)
120         syslog(LOG_INFO, "Initialize modules, CtdlThreads enabled.\n");
121     else
122         syslog(LOG_INFO, "Initialize modules, CtdlThreads not yet enabled.\n");
123 /* static server initialization: */
124         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL(citserver));
125         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL(control));
126         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL(euidindex));
127         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL(file_ops));
128         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL(msgbase));
129         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL(room_ops));
130         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL(user_ops));
131 /* dynamic modules: */
132
133 EOF
134
135
136 #start the header file
137 cat <<EOF > $H_FILE
138 /* 
139  * $H_FILE
140  * Auto generated by mk_modules_init.sh DO NOT EDIT THIS FILE
141  */
142
143
144 #ifndef MODULES_INIT_H
145 #define MODULES_INIT_H
146 #include "ctdl_module.h"
147 extern size_t nSizErrmsg;
148 void initialise_modules (int threading);
149 void upgrade_modules(void);
150
151         CTDL_MODULE_INIT(citserver);
152         CTDL_MODULE_INIT(control);
153         CTDL_MODULE_INIT(euidindex);
154         CTDL_MODULE_INIT(file_ops);
155         CTDL_MODULE_INIT(msgbase);
156         CTDL_MODULE_INIT(room_ops);
157         CTDL_MODULE_INIT(user_ops);
158 EOF
159
160 for i in serv_*.c
161 do
162         RES=X`grep CTDL_MODULE_INIT $i | cut -f2 -d\( | cut -f1 -d\)`
163         if [ $RES != "X" ] ; then
164                 RES_OUT=`echo $RES | cut -b2-`
165                 /usr/bin/printf "Found entry point in file $i\n"
166 cat <<EOF  >> $C_FILE
167         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL($RES_OUT));
168
169 EOF
170 cat <<EOF >>$H_FILE
171 CTDL_MODULE_INIT($RES_OUT);
172 EOF
173         fi
174         RES=X`grep CTDL_MODULE_UPGRADE $i | cut -f2 -d\( | cut -f1 -d\)`
175         if [ $RES != "X" ] ; then
176                 RES_OUT=`echo $RES | cut -b2-`
177                 /usr/bin/printf "Found upgrade point in file $i\n"
178 cat <<EOF  >> $U_FILE
179         syslog(LOG_INFO, "%s\n", CTDL_UPGRADE_CALL($RES_OUT));
180
181 EOF
182 cat <<EOF >>$H_FILE
183 CTDL_MODULE_UPGRADE($RES_OUT);
184 EOF
185         fi
186 done
187
188
189 if [ -d "modules" ] ; then
190         cd modules
191         for j in *
192         do
193                 if [ -d $j ] ; then
194                         cd $j
195                         for k in *.c
196                         do
197                                 if [ -f "$k" ] ; then
198 # Add this .c file to the Makefile included list of SOURCES
199 cat <<EOF >> $SRC_FILE
200 SOURCES += modules/$j/$k
201 EOF
202
203 # Generate a .o file name
204 O_FILE=`basename $k .c`
205 O_FILE="$O_FILE.o"
206 # Add this .o file to the Makefile included list of SERV_MODULES
207 cat <<EOF >> $MOD_FILE
208 SERV_MODULES += modules/$j/$O_FILE
209 EOF
210         
211                                         RES=X`grep CTDL_MODULE_INIT $k | cut -f2 -d\( | cut -f1 -d\)`
212                                         if [ $RES != "X" ] ; then
213                                                 RES_OUT=`echo $RES | cut -b2-`
214                                                 /usr/bin/printf "Found entry point in file modules/$j/$k\n"
215 # Add this entry point to the .c file
216 cat <<EOF >> $C_FILE
217         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL($RES_OUT));
218 EOF
219 # Add this entry point to the .h file
220 cat <<EOF >> $H_FILE
221         CTDL_MODULE_INIT($RES_OUT);
222 EOF
223                                         fi
224                                         RES=X`grep CTDL_MODULE_UPGRADE $k | cut -f2 -d\( | cut -f1 -d\)`
225                                         if [ $RES != "X" ] ; then
226                                                 RES_OUT=`echo $RES | cut -b2-`
227                                                 /usr/bin/printf "Found upgrade point in file modules/$j/$k\n"
228 # Add this entry point to the .c file
229 cat <<EOF >> $U_FILE
230         syslog(LOG_INFO, "%s\n", CTDL_UPGRADE_CALL($RES_OUT));
231 EOF
232 # Add this entry point to the .h file
233 cat <<EOF >> $H_FILE
234         CTDL_MODULE_UPGRADE($RES_OUT);
235 EOF
236                                         fi
237                                 fi
238                         done
239                         cd ..
240                 fi
241         done
242 fi
243
244 cd $CUR_DIR
245
246 if [ -d "user_modules" ] ; then
247         cd user_modules
248         for j in *
249         do
250                 if [ -d $j ] ; then
251                         cd $j
252                         for k in *.c
253                         do
254                                 if [ -f "$k" ] ; then
255 # Add this .c file to the Makefile included list of SOURCES
256 cat <<EOF >> $SRC_FILE
257 SOURCES += user_modules/$j/$k
258 EOF
259
260 # Generate a .o file name
261 O_FILE=`basename $k .c`
262 O_FILE="$O_FILE.o"
263 # Add this .o file to the Makefile included list of SERV_MODULES
264 cat <<EOF >> $MOD_FILE
265 SERV_MODULES += user_modules/$j/$O_FILE
266 EOF
267         
268                                         RES=X`grep CTDL_MODULE_INIT $k | cut -f2 -d\( | cut -f1 -d\)`
269                                         if [ $RES != "X" ] ; then
270                                                 RES_OUT=`echo $RES | cut -b2-`
271                                                 /usr/bin/printf "Found entry point in file user_modules/$j/$k\n"
272 cat <<EOF >> $C_FILE
273         syslog(LOG_INFO, "Loaded module: %s\n", CTDL_INIT_CALL($RES_OUT));
274 EOF
275 cat <<EOF >> $H_FILE
276 CTDL_MODULE_INIT($RES_OUT);
277 EOF
278                                         fi
279                                         RES=X`grep CTDL_MODULE_UPGRADE $k | cut -f2 -d\( | cut -f1 -d\)`
280                                         if [ $RES != "X" ] ; then
281                                                 RES_OUT=`echo $RES | cut -b2-`
282                                                 /usr/bin/printf "Found upgrade point in file user_modules/$j/$k\n"
283 cat <<EOF >> $U_FILE
284         syslog(LOG_INFO, "%s\n", CTDL_UPGRADE_CALL($RES_OUT));
285 EOF
286 cat <<EOF >> $H_FILE
287 CTDL_MODULE_UPGRADE($RES_OUT);
288 EOF
289                                         fi
290                                 fi
291                         done
292                         cd ..
293                 fi
294         done
295 fi
296
297 cd $CUR_DIR
298
299 /usr/bin/printf "\n\n" >> $C_FILE
300 /usr/bin/printf "\tfor (filter = 1; filter != 0; filter = filter << 1)\n" >> $C_FILE
301 /usr/bin/printf "\t\tif ((filter & DetailErrorFlags) != 0)\n" >> $C_FILE
302 /usr/bin/printf "\t\t\tLogPrintMessages(filter);\n" >> $C_FILE
303 /usr/bin/printf "}\n" >> $C_FILE
304
305 #close the upgrade file
306 /usr/bin/printf "}\n" >> $U_FILE
307
308 /usr/bin/printf "\n#endif /* MODULES_INIT_H */\n" >> $H_FILE