/[cvs]/eggdrop1.8/doc/COMPILE-GUIDE
ViewVC logotype

Contents of /eggdrop1.8/doc/COMPILE-GUIDE

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.5 - (show annotations) (download)
Thu Feb 3 15:44:11 2011 UTC (8 years, 1 month ago) by pseudo
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +7 -1 lines
Check for pending data on SSL sockets even when select reports the descriptor's not readable.
Allow moving write buffers for SSL sockets.

1 $Id: COMPILE-GUIDE,v 1.4 2011/01/21 02:33:41 thommey Exp $
2
3 Eggdrop Compile Guide and FAQ
4 Last revised: October 25, 2010
5 _____________________________________________________________________
6
7 Eggdrop Compile Guide and FAQ
8
9
10 This guide may help you successfully compile Eggdrop. Suggestions are by
11 various contributors. If you think something should be added, please send
12 an e-mail to bugs@eggheads.org. Note that in this document, text between
13 a '<' and a '>' should be replaced (without the '<' and '>').
14
15 NOTE: This is not a 'quick install' guide. See the INSTALL file for basic
16 setup information. This is intended to help you compile the bot on uncommon
17 operating systems, or work past problems encountered during compile.
18
19
20 Contents:
21 Compile Guide:
22 A. Standard compile process (Linux, FreeBSD, NetBSD, OpenBSD, etc)
23 B. HP-UX B.11.*
24 C. Ultrix
25 D. Mac OS X
26 E. AIX
27 F. IRIX
28 G. Solaris / SunOS
29 H. Cygwin / Windows
30 I. Tcl Detection and Installation
31
32 Frequently Asked Questions:
33 1. I get a lot of warnings.
34 2. I get a 'strip terminated with signal 6' error during compile/install,
35 or another error related to 'strip'.
36 3. 'DIR' undeclared (and a whole bunch of others) (AIX 4)
37 4. 'fd_set' undeclared (and a whole bunch of others) (AIX 4)
38 5. Unresolved or undefined symbols: ldclose, ldopen, ldnshread (AIX 3)
39 6. Unsatisfied symbols 'shl_findsym' and 'shl_load' (HP-UX 9)
40 7. Compile stops at the last minute with "ld fatal signal 11"! (Linux)
41 8. Undefined references in net.o (Sun OS)
42 9. I experience problems starting the configure script (AIX/various)
43 10. I get a 'make: Permission denied' error when I type 'make config'
44 or 'make' (FreeBSD / *BSD)
45
46
47 Compile Guide
48 This will tell you how to compile Eggdrop on various operating systems.
49 If you have gotten Eggdrop to compile on an operating system not listed
50 here, please let the development team know how, at eggdev@eggheads.org.
51 Please tell us what, if any, special steps were required to compile the
52 bot. Also, any compiler warnings/etc, and the 'config.log' and 'config.h'
53 files would be helpful. The development team does not have access to the
54 resources needed to test portability on uncommon operating systems, so
55 your help is greatly appreciated.
56
57 A. Standard compile process (32-bit Linux, FreeBSD, NetBSD, OpenBSD, etc.)
58 B. HP-UX B.11.*
59 C. Ultrix
60 D. Mac OS X
61 E. AIX
62 F. IRIX
63 G. Solaris / SunOS
64 H. Cygwin / Windows
65 I. Tcl Detection and Installation
66
67 A. Standard compile process (32-bit Linux, FreeBSD, NetBSD, OpenBSD, etc.)
68 1. Type './configure' from the Eggdrop directory. Some of the options
69 that can be given to ./configure are explained below.
70
71 --enable-strip
72 If you want to create a smaller binary, you can use this option.
73 HOWEVER, this will remove debugging symbols and make bug reports
74 almost completely useless, and is not recommended. If disk space
75 is very limited, however, it might help to enable this.
76
77 --with-tcllib
78 --with-tclinc
79 See 'I. Tcl Detection and Installation' below (at the end of this
80 compile guide).
81
82 --with-handlen=
83 Configure the handle length of the bot. Allowed values are
84 numbers from 9 to 32 inclusive.
85
86 --disable-tls
87 --with-sslinc=
88 --with-ssllib=
89 You can disable TLS or specify the paths to the header and
90 library files. Look at doc/TLS for more information.
91
92 2. Type either 'make config', or 'make iconfig' to determine which
93 modules will be compiled.
94
95 3. Type 'make' from the Eggdrop directory, or to force a statically
96 linked module bot, type 'make static'. Otherwise, the Makefile will
97 use whatever type of compile the configure script determined your
98 system will support. Dynamic is always the better way to go if
99 possible. You can force a dynamic build with 'make eggdrop'. There
100 are also the 'debug' and 'sdebug' (static-debug) options, which will
101 give more detailed output on a crash. This will help the development
102 team track down the crash and fix the bug. Debug and sdebug will take
103 a little longer to compile and will enlarge the binary a bit, but
104 it's worth it if you want to support Eggdrop development.
105
106 4. Eggdrop must be installed in a directory somewhere. This is
107 accomplished by typing 'make install'.
108
109 This will install the Eggdrop in your home directory in a directory
110 called 'eggdrop' (i.e. /home/user/eggdrop).
111
112 If you want to install to a different directory, use:
113
114 make install DEST=<directory>
115
116 For example:
117
118 make install DEST=/home/user/otherdir
119
120 B. HP-UX B.11.*
121 Follow the standard compile process in Section A. To compile dynamically
122 (with module support), use 'make eggdrop' instead of 'make'.
123
124 During a linking in a dynamic build, you may experience an error such as:
125
126 gcc -pipe -fPIC -shared -o ../eggdrop bg.o botcmd.o botmsg.o botnet.o
127 chanprog.o cmds.o dcc.o dccutil.o dns.o flags.o language.o match.o
128 main.o mem.o misc.o misc_file.o modules.o net.o rfc1459.o tcl.o
129 tcldcc.o tclhash.o tclmisc.o tcluser.o userent.o userrec.o users.o
130 -L/usr/local/lib -ltcl8.4 -lm -ldld -lnsl md5/md5c.o compat/*.o `cat
131 mod/mod.xlibs`
132 /usr/ccs/bin/ld: DP relative code in file bg.o - shared library must be
133 position independent. Use +z or +Z to recompile.
134 collect2: ld returned 1 exit status
135 *** Error exit code 1
136
137 If you know the cause of this error, please contact the Eggheads
138 Development Team at eggdev@eggheads.org.
139
140 Note that on HP-UX, the SHLIB_PATH environment variable should be used
141 instead of LD_LIBRARY_PATH.
142
143
144 C. Ultrix
145 There are some known problems with 'make' and Eggdrop on Ultrix systems.
146 We recommend using 'gmake' (GNU make) for this reason, as in the steps
147 below.
148
149 If your system does not have 'gmake', you can download it from:
150
151 http://ftp.gnu.org/pub/gnu/make/
152
153 It can be installed in your home directory, as with Tcl, but that is
154 beyond the scope of this document. Read the INSTALL file that comes with
155 gmake.
156
157 Following these steps should work:
158
159 1. Depending on what shell your using:
160
161 bash/ksh:
162 export LD_LIBRARY_PATH=<path to DIRECTORY containing Tcl library>:${LD_LIBRARY_PATH}
163
164 csh/tcsh/tclsh:
165 setenv LD_LIBRARY_PATH <path to DIRECTORY containing Tcl library>:${LD_LIBRARY_PATH}
166
167 2. Run the following command from your Eggdrop compilation directory
168 (this is all one command):
169
170 sh5 ./configure --with-tclinc='<full path to tcl.h>'
171 --with-tcllib='<full path to Tcl library>'
172
173 3. Type 'gmake config' or 'gmake iconfig' to configure modules.
174
175 4. Type 'gmake'. If you experience problems during linking, or while
176 building modules, try using 'gmake static', for a static build,
177 instead.
178
179 5. To install Eggdrop, type 'gmake install'.
180
181 This will install the Eggdrop in your home directory in a
182 directory called 'eggdrop' (i.e. /home/user/eggdrop).
183
184 If you want to install to a different directory, use:
185
186 gmake install DEST=<directory>
187
188 For example:
189
190 gmake install DEST=/home/user/otherdir
191
192
193 D. Mac OS X
194 Follow the standard compile process in Section A. To compile dynamically
195 (with module support), use 'make eggdrop' instead of 'make'.
196
197 To get third-party modules to compile, you may need to edit the module's
198 Makefile and add "$(XLIBS) $(MODULE_XLIBS)" to the end of the
199 ../../../MODULE.$(MOD_EXT) target's $(LD) line.
200
201 For example:
202
203 ../../../mymodule.$(MOD_EXT): ../mymodule.o
204 $(LD) -o ../../../mymodule.$(MOD_EXT) ../mymodule.o
205 $(STRIP) ../../../mymodule.$(MOD_EXT)
206
207 Would become:
208
209 ../../../mymodule.$(MOD_EXT): ../mymodule.o
210 $(LD) -o ../../../mymodule.$(MOD_EXT) ../mymodule.o $(XLIBS) $(MODULE_XLIBS)
211 $(STRIP) ../../../mymodule.$(MOD_EXT)
212
213 If you notice a module that requires these changes, it would probably be
214 a good idea to let the module's developer know, so it can be fixed.
215
216
217 Note that on Mac OS X, the DYLD_LIBRARY_PATH environment variable should
218 be used instead of LD_LIBRARY_PATH.
219
220
221 E. AIX
222 Follow the standard compile process in Section A. To compile dynamically
223 (with module support), use 'make eggdrop' instead of 'make'.
224
225 Note that on AIX, the LIBPATH environment variable should be used instead
226 of LD_LIBRARY_PATH.
227
228
229 F. IRIX
230 Follow the standard compile process in Section A. To compile dynamically
231 (with module support), use 'make eggdrop' instead of 'make'.
232
233 Note that on IRIX, the LD_LIBRARYN32_PATH and LD_LIBRARY64_PATH environment
234 variables should be used instead of LD_LIBRARY_PATH.
235
236
237 G. Solaris / SunOS
238 Follow the standard compile process in Section A. To compile dynamically
239 (with module support), use 'make eggdrop' instead of 'make'.
240
241 Note that on Solaris / SunOS, the LD_LIBRARY_PATH_32 and LD_LIBRARY_PATH_64
242 environment variables may need to be set instead of (or in addition to, to
243 be safe) LD_LIBRARY_PATH.
244
245
246 H. Cygwin / Windows
247 To compile and install Eggdrop on windows, perform the steps listed
248 below.
249
250 1. Download and install Cygwin (www.cygwin.com). Make sure to install
251 things like GCC, zlib, minires, autoconf, and automake. DO NOT
252 install the Tcl provided by Cygwin's installer. After installing,
253 open the Cygwin bash prompt.
254
255 2. Download and install TCL 8.5.9. You can get Tcl for Cygwin at
256 http://prdownloads.sourceforge.net/windrop/tcl-8.5.9.tar.gz.
257 http://prdownloads.sourceforge.net/windrop/tcl-8.4.1.tar.gz.
258 Extract this to the Cygwin root directory:
259
260 cd /
261 tar -zxf tcl-8.5.9.tar.gz
262
263 3. Download Eggdrop from geteggdrop.com to your home directory.
264 This is usually something like 'C:\cygwin\home\<username>\'. After
265 downloading, extract the Eggdrop tarball:
266
267 tar -zxf eggdrop1.8.0.tar.gz
268
269 4. Run './configure --enable-strip'. Debugging information under
270 Windows is basically useless to the development team, and this will
271 reduce the size of your Eggdrop binary.
272
273 5. Type either 'make config', or 'make iconfig' to determine which
274 modules will be compiled.
275
276 6. Compile the bot using 'make eggdrop'.
277
278 7. Install the bot by typing 'make install DEST=<install path>'.
279 For example:
280
281 make install DEST='C:/eggdrop/'
282
283 Make sure to enclose the destination directory/folder in single
284 quotes (''), especially if it contains spaces.
285
286 8. Perform the following commands:
287
288 cd 'C:/<install path>/' (example: cd 'C:/eggdrop')
289 rm modules
290 rm eggdrop.exe
291 mv eggdrop.exe-1.8.0 eggdrop.exe
292 mv modules-1.8.0 modules
293
294 9. Create a 'lib' directory and copy needed libraries using the
295 following commands. This assumes that you installed your Eggdrop in
296 'C:\eggdrop'. If you chose a different installation path, replace
297 'C:/eggdrop' in the following steps with your installation
298 directory, replacing all '\'s with '/'s.
299
300 cp /bin/cygwin1.dll 'C:/eggdrop'
301 cp /usr/local/bin/libtcl8.5.dll 'C:/eggdrop'
302 cp /usr/local/bin/tclpip84.dll 'C:/eggdrop'
303 cp /bin/cyggcc_s-1.dll 'C:/eggdrop'
304
305 cp /bin/cygcrypto-0.9.8.dll 'C:/eggdrop' (if compiled with ssl)
306 cp /bin/cygssl-0.9.8.dll 'C:/eggdrop' (if compiled with ssl)
307
308 mkdir C:/eggdrop/lib
309 cp -r /usr/local/lib/tcl 'C:/eggdrop/lib'
310 cp -r /usr/local/lib/tcl8.5 'C:/eggdrop/lib'
311
312 cp /bin/cygz.dll 'C:/eggdrop' (if you selected compress.mod)
313
314
315 I. Tcl Detection and Installation
316 If ./configure does not correctly detect the location of your Tcl
317 library and header file, or if you experience errors related to Tcl
318 during linking, perform these steps:
319
320 1. Depending on what shell your using:
321
322 bash/ksh:
323 export LD_LIBRARY_PATH=<path to DIRECTORY containing Tcl library>:${LD_LIBRARY_PATH}
324
325 csh/tcsh/tclsh:
326 setenv LD_LIBRARY_PATH <path to DIRECTORY containing Tcl library>:${LD_LIBRARY_PATH}
327
328 Note that some OS's use a different environment variable to tell
329 ld where to look for a library. See the notes for your specific OS
330 above (if applicable).
331
332 2. Run the following command from your Eggdrop compilation directory
333 (this is all one command):
334
335 ./configure --with-tclinc='<full path to tcl.h>'
336 --with-tcllib='<full path to Tcl library>'
337
338 3. Continue compiling the bot as outlined in Section A., starting
339 with 'make config'.
340
341 If you do not have Tcl installed on your system, you can compile it in
342 your /home directory. Download Tcl from Tcl's SourceForge project page
343 at http://www.sourceforge.net/projects/tcl/, or from ActiveState at
344 ftp://tcl.activestate.com/pub/tcl/tcl8_4/. Read Tcl's README file for
345 help with compiling and installing it. After you compile Tcl, follow
346 the steps above to allow Eggdrop to detect Tcl.
347
348
349 Frequently Asked Questions
350 1. I get a lot of warnings.
351
352 Warnings do not necessarily mean anything bad. As long as the compile
353 completes, there is really nothing to worry about. Generally, we try to
354 avoid warnings. We try to fix the warnings we are aware of. If you
355 experience warnings, you can let us know by e-mailing bugs@eggheads.org.
356 If you feel like fixing them yourself, please do so and send us a patch
357 (as described in doc/PATCH_HOWTO). Thanks.
358
359
360 2. I get a 'strip terminated with signal 6' error during compile/install,
361 or another error related to 'strip'.
362
363 collect2: strip terminated with signal 6 [IOT/Abort trap]
364 *** Exit 1
365 Stop.
366 *** Exit 1
367 Stop.
368
369 Don't use the --enable-strip ./configure option.
370
371
372 3. 'DIR' undeclared (and a whole bunch of others) (AIX 4)
373
374 gcc -c -O2 -fno-strength-reduce -I.. -DHAVE_CONFIG_H filedb.c
375 filedb.c: In function `filedb_update':
376 filedb.c:209: `DIR' undeclared (first use this function)
377 filedb.c:209: (Each undeclared identifier is reported only once
378 filedb.c:209: for each function it appears in.)
379 filedb.c:209: `dir' undeclared (first use this function)
380 filedb.c:209: parse error before `*'
381 filedb.c:217: warning: assignment makes pointer from integer without a cast
382 filedb.c:218: `name' undeclared (first use this function)
383 filedb.c:218: dereferencing pointer to incomplete type
384 filedb.c:220: dereferencing pointer to incomplete type
385 filedb.c:220: dereferencing pointer to incomplete type
386 filedb.c:224: dereferencing pointer to incomplete type
387 filedb.c:224: dereferencing pointer to incomplete type
388 filedb.c:225: dereferencing pointer to incomplete type
389 filedb.c:230: `s' undeclared (first use this function)
390 filedb.c:231: `st' undeclared (first use this function)
391 filedb.c:232: `fdb' undeclared (first use this function)
392 filedb.c:232: `where' undeclared (first use this function)
393 filedb.c:237: `fdb1' undeclared (first use this function)
394 filedb.c:253: warning: assignment makes pointer from integer without a cast
395 make: The error code from the last command is 1.
396
397 The configure script didn't detect that this particular system had dirent.h
398 and sys/dir.h. The solution is to add -DHAVE_DIRENT_H -DHAVE_SYS_DIR_H to
399 the Makefile's CFLGS line:
400
401 CFLGS = -DHAVE_DIRENT_H -DHAVE_SYS_DIR_H
402
403
404 4. 'fd_set' undeclared (and a whole bunch of others) (AIX 4)
405
406 gcc -c -O2 -fno-strength-reduce -I.. -DHAVE_CONFIG_H -DHAVE_DIRENT_H -DHAVE_SYS_DIR_H net.c
407 net.c: In function `sockread':
408 net.c:390: `fd_set' undeclared (first use this function)
409 net.c:390: (Each undeclared identifier is reported only once
410 net.c:390: for each function it appears in.)
411 net.c:390: parse error before `fd'
412 net.c:396: `fd' undeclared (first use this function)
413 make: The error code from the last command is 1.
414
415 Again, this seems that one of configure's components (sed, awk,
416 or something along those lines) is broken, and configure failed to
417 detect that this system needed sys/select.h. The solution is to add
418 -DHAVE_SYS_SELECT_H to the Makefile's CFLGS line:
419
420 CFLGS = -DHAVE_DIRENT_H -DHAVE_SYS_DIR_H -DHAVE_SYS_SELECT_H
421
422
423 5. Unresolved or undefined symbols: ldclose, ldopen, ldnshread (AIX 3)
424
425 cc -s -o eggdrop chan.o chanprog.o chanset.o cmds.o dcc.o dccutil.o
426 filedb.o fileq.o files.o gotdcc.o hash.o main.o match.o mem.o misc.o
427 mode.o msgcmds.o msgnotice.o net.o tandcmd.o tandem.o tcl.o tclhash.o
428 userrec.o users.o -L/home2/f/foster/lib -ltcl7.5 -lm
429 0706-317 ERROR: Unresolved or undefined symbols detected:
430 Symbols in error (followed by references) are dumped to the load map.
431 The -bloadmap:<filename> option will create a load map.
432 .ldclose
433 .ldopen
434 .ldnshread
435 make: 1254-004 The error code from the last command is 8.
436
437 Apparently, what is happening is a library called ld is required. Either
438 configure doesn't know it is needed, it simply can't find it, or maybe
439 this is a unique case. The solution is to have ld linked in with the final
440 binary.
441
442 Edit your Makefile and find the line that looks something like this:
443
444 GMAKE = ${MAKE} 'CC=cc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
445 'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/home2/f/foster/lib -ltcl7.5 -lm'\
446 'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s'
447
448 Add in -lld into the XLIBS assignment, like this:
449
450 GMAKE = ${MAKE} 'CC=cc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
451 'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-lld -L/home2/f/foster/lib -ltcl7.5 -lm'\
452 'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s'
453
454
455 6. Unsatisfied symbols 'shl_findsym' and 'shl_load' (HP-UX 9)
456
457 gcc -s -o eggdrop chan.o chanprog.o chanset.o cmds.o dcc.o
458 dccutil.o filedb.o fileq.o files.o gotdcc.o hash.o main.o match.o
459 mem.o misc.o mode.o msgcmds.o msgnotice.o net.o tandcmd.o tandem.o
460 tcl.o tclhash.o userrec.o users.o -L/home/hltran/tcl/lib -ltcl7.5 -lm
461 /bin/ld: Unsatisfied symbols:
462 shl_findsym (code)
463 shl_load (code)
464 collect2: ld returned 1 exit status
465 *** Error code 1
466 Stop.
467
468 Upgrade to a later version of Tcl. The following should also work.
469
470 Edit your Makefile and find the line that looks something like this:
471
472 GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
473 'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib -ltcl7.5 -lm'\
474 'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
475
476 Add in -ldl into the XLIBS assignment, like this:
477
478 GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
479 'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-ldl -L/usr/local/lib -ltcl7.5 -lm'\
480 'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
481
482
483 7. Compile stops at the last minute with "ld fatal signal 11"! (Linux)
484
485 This seems to be caused by a non-ELF Tcl library binary, and the compiler
486 doesn't seem to like it. Download and install Tcl in your home directory
487 using the steps in 'E. Tcl Detection and Installation' in the Compile
488 Guide above.
489
490
491 8. Undefined references in net.o (SunOS)
492
493 First
494 Undefined Referenced
495 Symbol In file
496
497 socket net.o
498 gethostbyname net.o
499 accept net.o
500 bind net.o
501 setsockopt net.o
502 gethostbyaddr net.o
503 getsockname net.o
504 gethostname net.o
505 listen net.o
506 connect net.o
507 ld: fatal: Symbol referencing errors. No output written to eggdrop
508
509 This seems to be caused by a few libraries not being detected by the
510 auto-configure script; it is relatively easy to fix. Edit your Makefile.
511 Note that yours may be slightly different than this one when it comes to
512 the Tcl library, but here is the way it probably is:
513
514 GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\
515 'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib -ltcl -lm'\
516 'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
517
518 Here is what you need to change it to:
519
520 GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\
521 'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-lsocket -ldl -lnsl -L/usr/local/lib -ltcl -lm'\
522 'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
523
524 You are adding three libraries to be linked in: socket, dl, and nsl. This
525 will resolve the net.o errors.
526
527
528 9. I experience problems starting the configure script (AIX/various)
529
530 If you receive file descriptor or bad interpreter errors when attempting
531 to run the configure script, try running 'sh configure' or 'bash configure'
532 instead of './configure'. This problem seems to show up on many AIX
533 machines.
534
535
536 10. I get a 'make: Permission denied' error when I type 'make config' or
537 'make' (FreeBSD / *BSD)
538
539 This is caused by a bug in FreeBSD (and possibly other BSDs as well).
540 A simple 'cd .', or changing to a different directory and then changing
541 back, usually fixes this.
542 _____________________________________________________________________
543
544 Copyright (C) 1997 Robey Pointer
545 Copyright (C) 1999 - 2010 Eggheads Development Team

webmaster@eggheads.org
ViewVC Help
Powered by ViewVC 1.1.23