Add plugin handlers for events
[MonkeyD.git] / configure
blob18a6a83984e9c464e0717829104e6f69fbb7441d
1 #!/bin/bash
3 # Monkey HTTP Daemon
4 # ------------------
5 # Copyright (C) 2001-2009, Eduardo Silva P.
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU Library General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 VERSION="0.11.0-dev"
22 SYSNAME=`uname -s`
23 SYSINFO=`uname -sr`
25 INCDIR="src/include/"
27 messages_en()
29 case "$*" in
30 "1")
31 echo "+ Creating conf/monkey.conf"
33 "2")
34 echo "+ Creating Makefile"
36 "3")
37 echo "+ Creating src/Makefile"
39 "4")
40 echo "+ Creating src/include/info.h"
42 "5")
43 echo "+ Creating banana script"
45 "6")
46 echo -n "Configuration done, just type 'make"
48 "7")
49 echo -n "+ Checking for Pthreads lib.........."
51 esac
54 # Create configuration files under 'conf/'
55 make_conf()
57 cat $INCDIR/config.path lang/"$*"/mconf lang/"$*"/sites/default > makeconf.sh
58 chmod 755 makeconf.sh
59 ./makeconf.sh
60 rm makeconf.sh
61 rm $INCDIR/config.path
64 local_dirs()
66 bin="bin"
67 logs="logs"
68 sites="conf/sites"
70 if [ ! -d $bin ]; then
71 mkdir $bin
74 if [ ! -d $logs ]; then
75 mkdir $logs
78 if [ ! -d $sites ]; then
79 mkdir $sites
84 main()
86 local_dirs
87 dir=0
88 actual_path=`pwd`
90 if [ "$prefix" != "$actual_path" ]; then
91 dir=1
94 if [ "$bindir" != "$actual_path/bin" ]; then
95 dir=1
98 if [ "$cgibin" != "$actual_path/cgi-bin" ]; then
99 dir=1
102 if [ "$sysconfdir" != "$actual_path/conf" ]; then
103 dir=1
106 if [ "$datadir" != "$actual_path/htdocs" ]; then
107 dir=1
110 if [ "$logdir" != "$actual_path/logs" ]; then
111 dir=1
114 echo
115 echo "Checking dependencies"
116 echo "====================="
117 echo
118 messages_$lang "7"
119 check_lib lang
121 echo
122 echo "Creating Makefiles and scripts"
123 echo "=============================="
124 echo
126 messages_$lang "1"
127 create_conf prefix bindir cgibin sysconfdir datadir logdir
129 make_conf $lang
130 messages_$lang "2"
132 if [ "$dir" = 0 ]; then
133 create_makefile1 bindir
134 else
135 create_makefile1_install prefix bindir cgibin sysconfdir datadir logdir
138 messages_$lang "3"
139 create_makefile2 mod_libs mod_obj make_script add_obj_mod cheetah_obj
141 messages_$lang "4"
142 create_info sysconfdir SYSNAME VERSION
144 messages_$lang "5"
145 create_banana_script bindir logdir
146 echo
147 messages_$lang "6"
149 if [ "$dir" = 1 ]; then
150 echo -n " && make install' "
151 else
152 echo "' "
154 echo
156 create_makefile_plugins $plugdir
158 echo "#define CC \"${CC}\"" > src/include/env.h
161 # Check pthreads lib
162 check_lib()
164 cat > check.c <<EOF
165 #include <pthread.h>
166 int main(){ return 0;}
169 libtest=`gcc check.c -lpthread &>configure.log`
170 libstatus=`cat configure.log`
171 if test -n "$libstatus" ; then
172 echo "no"
173 rm -fr check* configure.log
174 exit 1
176 echo "yes"
177 rm -fr check* configure.log a.out
181 # Create Makefile
182 create_makefile1()
184 cat > Makefile << EOF
185 # Monkey HTTP Daemon: Makefile
186 # ============================
187 default:
188 @(cd src; make all)
190 plugins:
191 @(cd plugins; make all)
193 clean:
194 @(cd src; make clean)
195 distclean:
196 @(cd src; make distclean)
200 create_makefile1_install()
202 # Look for plugins and create list
203 for entry in plugins/*
205 if [ -d $entry ]; then
206 echo -e "\tinstall -s -m 644 $entry/*.so \${PLUGINDIR}" >> plugins.list
208 done;
209 plglist=`cat plugins.list`
210 rm -rf plugins.list
212 # Look for plugins configuration
213 for entry in conf/plugins/*
215 if [ -d $entry ]; then
216 echo -e "\tcp -r $entry \${SYSCONFDIR}/plugins/" >> plugins.conf
218 done;
219 plgconf=`cat plugins.conf`
220 rm -rf plugins.conf
222 cat > Makefile <<EOF
223 # Monkey HTTP Daemon: Makefile
224 # ============================
225 PREFIX=\$(DESTDIR)${prefix}
226 BINDIR=\$(DESTDIR)${bindir}
227 CGIBIN=\$(DESTDIR)${cgibin}
228 SYSCONFDIR=\$(DESTDIR)${sysconfdir}
229 DATADIR=\$(DESTDIR)${datadir}
230 LOGDIR=\$(DESTDIR)${logdir}
231 PLUGINDIR=\$(DESTDIR)${plugdir}
233 default:
234 @(cd src; make all)
235 clean:
236 @(cd src; make clean)
237 distclean:
238 @(cd src; make distclean)
240 install:
241 make -C src all
242 install -d \$(BINDIR)
243 install -d \$(CGIBIN)
244 install -d \$(SYSCONFDIR)
245 install -d \${SYSCONFDIR}/sites
246 install -d \${SYSCONFDIR}/plugins
247 install -d \$(DATADIR)
248 install -d \${DATADIR}/imgs
249 install -d \${DATADIR}/php
250 install -d \${DATADIR}/docs
251 install -d \${LOGDIR}
252 install -d \${PLUGINDIR}
253 install -m 755 bin/monkey \$(BINDIR)
254 $STRIP \$(BINDIR)/monkey
255 install -m 755 bin/banana \$(BINDIR)
256 install -m 644 ./conf/*.* \$(SYSCONFDIR)
257 $plgconf
258 install -m 644 ./conf/sites/* \${SYSCONFDIR}/sites
259 $plglist
260 install -m 644 ./htdocs/*.* \$(DATADIR)
261 install -m 644 ./htdocs/imgs/*.* \${DATADIR}/imgs
262 @echo
263 @echo " Running Monkey :"
264 @echo " ----------------"
265 @echo
266 @echo " # $bindir/monkey"
267 @echo
268 @echo " For more help use '-h' option"
269 @echo
274 # Create monkey/src/Makefile
275 create_makefile2()
278 ##### Internal options ####
279 # just for remember that one time we support this :_(
280 # ---------------------------------------------------
281 #if [ "$disable_sendfile" = "on" ]; then
282 # internal_options="-DDISABLE_SENDFILE_SYSCALL"
285 cat > src/Makefile<<EOF
286 CC = $CC
287 CFLAGS = $CFLAGS
288 DEFS = $DEFS
289 INCDIR = ./include
290 LDFLAGS =
291 DESTDIR = ../bin/monkey
292 LIBS = -ldl -lpthread $mod_libs $MORE_LIBS
293 OBJ = monkey.o method.o mimetype.o request.o \\
294 header.o config.o logfile.o signals.o \\
295 user.o utils.o chars.o epoll.o scheduler.o \\
296 str.o memory.o connection.o iov.o http.o \\
297 file.o socket.o clock.o cache.o worker.o \\
298 server.o plugin.o \\
299 $add_obj_mod
301 all: ../bin/monkey
303 ../bin/monkey: \$(OBJ)
304 @echo
305 @echo "Compiling Monkey"
306 @echo "================"
307 \$(CC) \$(CFLAGS) \$(DEFS) \$(LIBS) \$(LDFLAGS) -o \$@ \$(OBJ) $mod_obj
308 @echo
309 @echo "Compiling Plugins"
310 @echo "================="
311 @(cd ../plugins && make all && cd ..)
313 clean:
314 rm -rf *.o
315 rm -rf ../bin/monkey
317 distclean:
318 rm -rf *.o ../bin/* Makefile \\
319 ../Makefile ../conf/monkey.conf \\
320 ../conf/sites/* include/info.h ../logs/*\\
322 .c.o:
323 \$(CC) -c \$(CFLAGS) \$(DEFS) -I\$(INCDIR) \$<
327 create_makefile_plugins()
329 cd plugins
330 cat > Makefile <<EOF
331 all:
333 dir=`pwd`
334 plugins_load="../conf/plugins.load"
335 echo -n > $plugins_load
336 echo "# Monkey plugins are loaded on run, by default all " >> $plugins_load
337 echo "# plugins are disabled, if you want to enable" >> $plugins_load
338 echo "# one, just remove the comment character for each line" >> $plugins_load
339 echo "" >> $plugins_load
341 list=`echo */ "" | sed "s/\/ /\n/g"`
342 for i in $list;
344 if test -e $i/DISABLED ; then
345 continue
348 comment="#"
349 if test -e $i/ENABLED ; then
350 comment=""
353 echo " @(cd $i && make && cd ..)" >> Makefile;
355 if [ "$plugdir" != "" ]; then
356 echo "${comment}LoadPlugin $plugdir/monkey-$i.so" >> ../conf/plugins.load
357 else
358 echo "${comment}LoadPlugin $dir/$i/monkey-$i.so" >> ../conf/plugins.load
360 done
362 # Add 'install' option to make file if plugdir was specified
363 if [ "$plugdir" != "" ]; then
364 echo -e "\ninstall:" >> Makefile
365 echo -e "\tinstall -d $plugdir" >> Makefile
367 list=`echo */ "" | sed "s/\/ /\n/g"`
368 for i in $list;
370 echo -e "\tinstall -m 644 $dir/$i/monkey-$i.so $plugdir/" >> Makefile
371 done
373 cd ..
376 # Creando include/info.h
377 create_info()
379 cat > $INCDIR/info.h <<EOF
380 #define OS "$SYSNAME"
381 #define VERSION "$VERSION" /* Version de Monkey */
382 #define MONKEY_PATH_CONF "$sysconfdir"
386 create_conf()
388 cat > $INCDIR/config.path <<EOF
389 #!/bin/sh
390 prefix=$prefix
391 bindir=$bindir
392 cgibin=$cgibin
393 sysconfdir=$sysconfdir
394 datadir=$datadir
395 logdir=$logdir
399 create_banana_script()
401 cat > bin/banana << EOF
402 #!/bin/sh
404 # Monkey HTTP Daemon - Banana Script
405 # -----------------------------------
406 # This script allow you to control monkey. Written by Eduardo Silva
407 # ----------------------------
408 # Date : 2002/09/01.
409 # ----------------------------
411 # Use: ./banana OPTION
413 # Options available to banana:
415 # start -> start monkey
416 # restart -> restart monkey
417 # stop -> stop monkey if this is running
418 # help -> what do u think ?
420 PIDFILE="$logdir/monkey.pid"
421 BINMONKEY="$bindir/monkey"
423 for arg in \$*; do
424 case "\$arg" in
425 -*=*) optarg=\`echo "\$arg" | sed 's/[-_a-zA-Z0-9]*=//'\` ;;
426 *) optarg= ;;
427 esac
429 if ! test -f \$PIDFILE ; then
430 STATUS="no"
431 else
432 PIDMONKEY=\`cat \$PIDFILE\`
433 if ! kill -0 \$PIDMONKEY 2>/dev/null; then
434 STATUS="no"
435 else
436 STATUS="yes"
440 case "\$arg" in
441 start)
442 if [ "\$STATUS" = "yes" ] ; then
443 echo "Monkey is running... (PID=\$PIDMONKEY)"
444 exit 1
446 if ! test -x \$BINMONKEY ; then
447 echo "Error: I can't run binary file"
448 exit 1
449 else
450 if \$BINMONKEY -D 2>/dev/null ; then
451 echo "Running Monkey -> OK"
452 exit 0
456 stop)
457 if [ "\$STATUS" = "no" ]; then
458 echo "Monkey is not running."
459 exit 1
461 kill -9 \$PIDMONKEY
462 rm -rf \$PIDFILE > /dev/null
463 echo "Monkey stopped (\$PIDMONKEY)"
464 exit 0
466 restart)
467 if [ "\$STATUS" = "yes" ]; then
468 if ! kill \$PIDMONKEY > /dev/null ; then
469 killall -9 monkey
470 else
471 echo -n "Stopping Monkey... "
473 else
474 echo -n "Monkey is not running... "
476 if ! test -x \$BINMONKEY ; then
477 echo "Error: I can't run binary file"
478 exit 1
479 else
480 \$BINMONKEY -D > /dev/null
481 echo "Restarting -> OK"
482 exit 0
486 echo "Use : banana [start|stop|restart|help]"
487 exit 1
489 esac
490 done
491 echo "Use : banana [start|stop|restart|help]"
493 exit 0
495 chmod 755 bin/banana
498 #---------------------------#
499 # End Functions
500 #---------------------------#
503 #---------------------------#
504 # Starting configure
505 #---------------------------#
506 aux=`pwd`
508 prefix="$aux"
509 bindir="$aux/bin"
510 cgibin="$aux/cgi-bin"
511 sysconfdir="$aux/conf"
512 datadir="$aux/htdocs"
513 logdir="$aux/logs"
514 plugdir=""
516 for arg in $*; do
517 case "$arg" in
518 -*=*)
519 optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
520 *) optarg= ;;
521 esac
523 case "$arg" in
524 --prefix*)
525 prefix=$optarg
526 bindir="$optarg/bin"
527 cgibin="$optarg/cgi-bin"
528 sysconfdir="$optarg/conf"
529 datadir="$optarg/htdocs"
530 logdir="$optarg/logs"
531 plugdir="$optarg/plugins"
533 --bindir*)
534 bindir=$optarg
536 --cgibin*)
537 cgibin=$optarg
539 --sysconfdir*)
540 sysconfdir=$optarg
542 --datadir*)
543 datadir=$optarg
545 --logdir*)
546 logdir=$optarg
548 --plugdir*)
549 plugdir=$optarg
551 --debug*)
552 debug=1
554 --trace*)
555 trace=1
557 --version*)
558 echo "Monkey HTTP Daemon v$VERSION"
559 echo "-------------------------"
560 echo "Copyright 2001-2010"
561 echo "Developed by Eduardo Silva Pereira"
562 echo "Monkey Home : http://www.monkey-project.com"
563 echo "Contact Email : edsiper@gmail.com"
564 echo
565 exit 1
568 echo "Usage: configure [--prefix=PREFIXDIR] [ --bindir=BINDIR]"
569 echo " [--sysconfdir=SYSCONFDIR] [--datadir=DATADIR]"
570 echo " [--logdir=LOGDIR] [--plugdir=PLUGDIR]"
571 echo
572 echo "Options: "
573 echo " --help Display this help and exit"
574 echo " --version Display version information and exit"
575 echo " --debug Compile Monkey with debugging symbols"
576 echo " --trace Compile Monkey with trace messages (don't use in production)"
577 echo
578 echo " --prefix=PREFIX Install Monkey under PREFIX directory"
579 echo " --bindir=BINDIR Install Monkey binaries under BINDIR directory"
580 echo " --sysconfdir=SYSCONFDIR Install Monkey conf files under SYSCONFDIR dir"
581 echo " --datadir=DATADIR Install Monkey data dir files under DATADIR directory"
582 echo " --logdir=LOGDIR Install Monkey log files under LOGDIR directory"
583 echo " --plugdir=PLUGDIR Target directory for Monkey plugins"
584 echo
585 exit 1
587 esac
588 done
590 echo "********************************************"
591 echo " Monkey HTTP Daemon v$VERSION "
592 echo "* http://www.monkey-project.com *"
593 echo "* ---------------------------------------- *"
594 echo "* We need beta testers, developers and *"
595 echo "* translators!, if u want help to this *"
596 echo "* project, email us : *"
597 echo "* *"
598 echo "* monkeyd@googlegroups.com *"
599 echo "* *"
600 echo "* Thanks for use Monkey!!! *"
601 echo "* *"
602 echo "********************************************"
603 echo "System : $SYSINFO"
605 lang="en"
608 # Configure environment
609 if test -z "$CC" ; then
610 CC="gcc"
613 if test -z "$STRIP" ; then
614 STRIP="strip"
617 if test -z "$debug" ; then
618 CFLAGS="-O2 -Wall"
619 else
620 CFLAGS="-g -Wall"
623 if [ $trace ] ; then
624 DEFS="-DTRACE"
627 # Starting main function
628 main prefix lang bindir cgibin sysconfdir datadir logdir plugdir modules SYSNAME VERSION
629 exit 0