NETCFG: make basic parsing
[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 #include "serv_extensions.h"
78
79
80
81 void upgrade_modules (void)
82 {
83     const char *pMod;
84
85     MODM_syslog(LOG_INFO, "Upgrade modules.\n");
86
87 EOF
88
89 # start the c file
90 cat <<EOF  >$C_FILE
91 /*
92  * $C_FILE
93  * Auto generated by mk_modules_init.sh DO NOT EDIT THIS FILE
94  */
95
96
97
98 #include "sysdep.h"
99 #include <stdlib.h>
100 #include <time.h>
101 #include <ctype.h>
102 #include <stdio.h>
103 #include <sys/types.h>
104 #include <unistd.h>
105 #include <libcitadel.h>
106 #include "citadel.h"
107 #include "modules_init.h"
108 #include "sysdep_decls.h"
109 #include "serv_extensions.h"
110
111
112 void LogPrintMessages(long err);
113 extern long DetailErrorFlags;
114
115 void initialise_modules (int threading)
116 {
117     long filter;
118     const char *pMod;
119
120     if (threading) {
121         MODM_syslog(LOG_DEBUG, "Initializing, CtdlThreads enabled.\n");
122     }
123     else {
124         MODM_syslog(LOG_INFO, "Initializing. CtdlThreads not yet enabled.\n");
125     }
126 /* static server initialization: */
127         pMod = CTDL_INIT_CALL(citserver);
128         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
129
130         pMod = CTDL_INIT_CALL(control);
131         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
132
133         pMod = CTDL_INIT_CALL(euidindex);
134         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
135
136         pMod = CTDL_INIT_CALL(file_ops);
137         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
138
139         pMod = CTDL_INIT_CALL(msgbase);
140         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
141
142         pMod = CTDL_INIT_CALL(room_ops);
143         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
144
145         pMod = CTDL_INIT_CALL(user_ops);
146         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
147 /* dynamic modules: */
148
149 EOF
150
151
152 #start the header file
153 cat <<EOF > $H_FILE
154 /* 
155  * $H_FILE
156  * Auto generated by mk_modules_init.sh DO NOT EDIT THIS FILE
157  */
158
159
160 #ifndef MODULES_INIT_H
161 #define MODULES_INIT_H
162 #include "ctdl_module.h"
163 extern size_t nSizErrmsg;
164 void initialise_modules (int threading);
165 void upgrade_modules(void);
166
167         CTDL_MODULE_INIT(citserver);
168         CTDL_MODULE_INIT(control);
169         CTDL_MODULE_INIT(euidindex);
170         CTDL_MODULE_INIT(file_ops);
171         CTDL_MODULE_INIT(msgbase);
172         CTDL_MODULE_INIT(room_ops);
173         CTDL_MODULE_INIT(user_ops);
174         CTDL_MODULE_INIT(netconfig);
175 EOF
176
177 for i in serv_*.c
178 do
179         RES=X`grep CTDL_MODULE_INIT $i | cut -f2 -d\( | cut -f1 -d\)`
180         if [ $RES != "X" ] ; then
181                 RES_OUT=`echo $RES | cut -b2-`
182                 /usr/bin/printf "Found entry point in file $i\n"
183 cat <<EOF  >> $C_FILE
184         pMod = CTDL_INIT_CALL($RES_OUT);
185         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
186
187 EOF
188 cat <<EOF >>$H_FILE
189 CTDL_MODULE_INIT($RES_OUT);
190 EOF
191         fi
192         RES=X`grep CTDL_MODULE_UPGRADE $i | cut -f2 -d\( | cut -f1 -d\)`
193         if [ $RES != "X" ] ; then
194                 RES_OUT=`echo $RES | cut -b2-`
195                 /usr/bin/printf "Found upgrade point in file $i\n"
196 cat <<EOF  >> $U_FILE
197         pMod = CTDL_UPGRADE_CALL($RES_OUT);
198         MOD_syslog(LOG_INFO, "%s\n", pMod);
199
200 EOF
201 cat <<EOF >>$H_FILE
202 CTDL_MODULE_UPGRADE($RES_OUT);
203 EOF
204         fi
205 done
206
207
208 if [ -d "modules" ] ; then
209         cd modules
210         for j in *
211         do
212                 if [ -d $j ] ; then
213                         cd $j
214                         for k in *.c
215                         do
216                                 if [ -f "$k" ] ; then
217 # Add this .c file to the Makefile included list of SOURCES
218 cat <<EOF >> $SRC_FILE
219 SOURCES += modules/$j/$k
220 EOF
221
222 # Generate a .o file name
223 O_FILE=`basename $k .c`
224 O_FILE="$O_FILE.o"
225 # Add this .o file to the Makefile included list of SERV_MODULES
226 cat <<EOF >> $MOD_FILE
227 SERV_MODULES += modules/$j/$O_FILE
228 EOF
229         
230                                         RES=X`grep CTDL_MODULE_INIT $k | cut -f2 -d\( | cut -f1 -d\)`
231                                         if [ $RES != "X" ] ; then
232                                                 RES_OUT=`echo $RES | cut -b2-`
233                                                 /usr/bin/printf "Found entry point in file modules/$j/$k\n"
234 # Add this entry point to the .c file
235 cat <<EOF >> $C_FILE
236         pMod = CTDL_INIT_CALL($RES_OUT);
237         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
238 EOF
239 # Add this entry point to the .h file
240 cat <<EOF >> $H_FILE
241         CTDL_MODULE_INIT($RES_OUT);
242 EOF
243                                         fi
244                                         RES=X`grep CTDL_MODULE_UPGRADE $k | cut -f2 -d\( | cut -f1 -d\)`
245                                         if [ $RES != "X" ] ; then
246                                                 RES_OUT=`echo $RES | cut -b2-`
247                                                 /usr/bin/printf "Found upgrade point in file modules/$j/$k\n"
248 # Add this entry point to the .c file
249 cat <<EOF >> $U_FILE
250         pMod = CTDL_UPGRADE_CALL($RES_OUT);
251         MOD_syslog(LOG_INFO, "%s\n", pMod);
252 EOF
253 # Add this entry point to the .h file
254 cat <<EOF >> $H_FILE
255         CTDL_MODULE_UPGRADE($RES_OUT);
256 EOF
257                                         fi
258                                 fi
259                         done
260                         cd ..
261                 fi
262         done
263 fi
264
265 cd $CUR_DIR
266
267 if [ -d "user_modules" ] ; then
268         cd user_modules
269         for j in *
270         do
271                 if [ -d $j ] ; then
272                         cd $j
273                         for k in *.c
274                         do
275                                 if [ -f "$k" ] ; then
276 # Add this .c file to the Makefile included list of SOURCES
277 cat <<EOF >> $SRC_FILE
278 SOURCES += user_modules/$j/$k
279 EOF
280
281 # Generate a .o file name
282 O_FILE=`basename $k .c`
283 O_FILE="$O_FILE.o"
284 # Add this .o file to the Makefile included list of SERV_MODULES
285 cat <<EOF >> $MOD_FILE
286 SERV_MODULES += user_modules/$j/$O_FILE
287 EOF
288         
289                                         RES=X`grep CTDL_MODULE_INIT $k | cut -f2 -d\( | cut -f1 -d\)`
290                                         if [ $RES != "X" ] ; then
291                                                 RES_OUT=`echo $RES | cut -b2-`
292                                                 /usr/bin/printf "Found entry point in file user_modules/$j/$k\n"
293 cat <<EOF >> $C_FILE
294         pMod = CTDL_INIT_CALL($RES_OUT);
295         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
296 EOF
297 cat <<EOF >> $H_FILE
298 CTDL_MODULE_INIT($RES_OUT);
299 EOF
300                                         fi
301                                         RES=X`grep CTDL_MODULE_UPGRADE $k | cut -f2 -d\( | cut -f1 -d\)`
302                                         if [ $RES != "X" ] ; then
303                                                 RES_OUT=`echo $RES | cut -b2-`
304                                                 /usr/bin/printf "Found upgrade point in file user_modules/$j/$k\n"
305 cat <<EOF >> $U_FILE
306         pMod = CTDL_UPGRADE_CALL($RES_OUT);
307         MOD_syslog(LOG_INFO, "%s\n", pMod);
308 EOF
309 cat <<EOF >> $H_FILE
310 CTDL_MODULE_UPGRADE($RES_OUT);
311 EOF
312                                         fi
313                                 fi
314                         done
315                         cd ..
316                 fi
317         done
318 fi
319
320 cd $CUR_DIR
321
322 # this one has to be called last, else it will not find all hooks registered.
323 cat <<EOF >> $C_FILE
324         pMod = CTDL_INIT_CALL(netconfig);
325         MOD_syslog(LOG_DEBUG, "Loaded module: %s\n", pMod);
326 EOF
327 /usr/bin/printf "\n\n" >> $C_FILE
328 /usr/bin/printf "\tfor (filter = 1; filter != 0; filter = filter << 1)\n" >> $C_FILE
329 /usr/bin/printf "\t\tif ((filter & DetailErrorFlags) != 0)\n" >> $C_FILE
330 /usr/bin/printf "\t\t\tLogPrintMessages(filter);\n" >> $C_FILE
331 /usr/bin/printf "}\n" >> $C_FILE
332
333 #close the upgrade file
334 /usr/bin/printf "}\n" >> $U_FILE
335
336 /usr/bin/printf "\n#endif /* MODULES_INIT_H */\n" >> $H_FILE