Fix and implement new API spec
[MonkeyD.git] / configure
blob400c97d95176465360d89361f0a8e96f26087098
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 cat > src/Makefile<<EOF
279 CC = $CC
280 CFLAGS = $CFLAGS
281 DEFS = $DEFS
282 INCDIR = ./include
283 LDFLAGS =
284 DESTDIR = ../bin/monkey
285 LIBS = -ldl -lpthread $mod_libs $MORE_LIBS
286 OBJ = monkey.o method.o mimetype.o request.o \\
287 header.o config.o logfile.o signals.o \\
288 user.o utils.o chars.o epoll.o scheduler.o \\
289 str.o memory.o connection.o iov.o http.o \\
290 file.o socket.o clock.o cache.o worker.o \\
291 server.o plugin.o \\
292 $add_obj_mod
294 all: ../bin/monkey
296 ../bin/monkey: \$(OBJ)
297 @echo
298 @echo "Compiling Monkey"
299 @echo "================"
300 \$(CC) \$(CFLAGS) \$(DEFS) \$(LIBS) \$(LDFLAGS) -o \$@ \$(OBJ) $mod_obj
301 @echo
302 @echo "Compiling Plugins"
303 @echo "================="
304 @(cd ../plugins && make all && cd ..)
306 clean:
307 rm -rf *.o
308 rm -rf ../bin/monkey
310 distclean:
311 rm -rf *.o ../bin/* Makefile \\
312 ../Makefile ../conf/monkey.conf \\
313 ../conf/sites/* include/info.h ../logs/*\\
315 .c.o:
316 \$(CC) -c \$(CFLAGS) \$(DEFS) -I\$(INCDIR) \$<
320 create_makefile_plugins()
322 cd plugins
323 cat > Makefile <<EOF
324 all:
326 dir=`pwd`
327 plugins_load="../conf/plugins.load"
328 echo -n > $plugins_load
329 echo "# Monkey Plugins Loader" >> $plugins_load
330 echo "# =====================" >> $plugins_load
331 echo "# Monkey plugins are extended functionalities for Monkey," >> $plugins_load
332 echo "# the main directive to load a plugin is LoadPlugin plus" >> $plugins_load
333 echo "# the absolute path for the desired plugin." >> $plugins_load
334 echo "#" >> $plugins_load
335 echo "# Please check the following list of available plugins:" >> $plugins_load
336 echo "" >> $plugins_load
338 for plugin_dir in `echo */ "" | sed "s/\/ /\n/g"`;
340 comment=""
341 if test -e $plugin_dir/DISABLED ; then
342 continue
345 if test -e $plugin_dir/MANDATORY ; then
346 comment=""
349 if test -e $plugin_dir/OPTIONAL ; then
350 comment="# "
353 echo " @(cd $plugin_dir && make && cd ..)" >> Makefile;
354 sed -e "s/\$CC/$CC/" -e "s/\$CFLAGS/$CFLAGS/" -e "s/\$DEFS/$DEFS/" $plugin_dir/Makefile.in > $plugin_dir/Makefile
356 if test -e $plugin_dir/ABOUT ; then
357 cat $plugin_dir/ABOUT | sed -e 's/^/# /' >> ../conf/plugins.load
358 echo "#" >> ../conf/plugins.load
359 else
360 echo "#" >> ../conf/plugins.load
363 if [ "$plugdir" != "" ]; then
364 echo "${comment}LoadPlugin $plugdir/monkey-$plugin_dir.so" >> ../conf/plugins.load
365 else
366 echo "${comment}LoadPlugin $dir/$plugin_dir/monkey-$plugin_dir.so" >> ../conf/plugins.load
369 echo "" >> ../conf/plugins.load
370 done
372 # Add 'install' option to make file if plugdir was specified
373 if [ "$plugdir" != "" ]; then
374 echo -e "\ninstall:" >> Makefile
375 echo -e "\tinstall -d $plugdir" >> Makefile
377 list=`echo */ "" | sed "s/\/ /\n/g"`
378 for i in $list;
380 echo -e "\tinstall -m 644 $dir/$i/monkey-$i.so $plugdir/" >> Makefile
381 done
383 cd ..
386 # Creando include/info.h
387 create_info()
389 cat > $INCDIR/info.h <<EOF
390 #define OS "$SYSNAME"
391 #define VERSION "$VERSION" /* Version de Monkey */
392 #define MONKEY_PATH_CONF "$sysconfdir"
396 create_conf()
398 cat > $INCDIR/config.path <<EOF
399 #!/bin/sh
400 prefix=$prefix
401 bindir=$bindir
402 cgibin=$cgibin
403 sysconfdir=$sysconfdir
404 datadir=$datadir
405 logdir=$logdir
409 create_banana_script()
411 cat > bin/banana << EOF
412 #!/bin/sh
414 # Monkey HTTP Daemon - Banana Script
415 # -----------------------------------
416 # This script allow you to control monkey. Written by Eduardo Silva
417 # ----------------------------
418 # Date : 2002/09/01.
419 # ----------------------------
421 # Use: ./banana OPTION
423 # Options available to banana:
425 # start -> start monkey
426 # restart -> restart monkey
427 # stop -> stop monkey if this is running
428 # help -> what do u think ?
430 PIDFILE="$logdir/monkey.pid"
431 BINMONKEY="$bindir/monkey"
433 for arg in \$*; do
434 case "\$arg" in
435 -*=*) optarg=\`echo "\$arg" | sed 's/[-_a-zA-Z0-9]*=//'\` ;;
436 *) optarg= ;;
437 esac
439 if ! test -f \$PIDFILE ; then
440 STATUS="no"
441 else
442 PIDMONKEY=\`cat \$PIDFILE\`
443 if ! kill -0 \$PIDMONKEY 2>/dev/null; then
444 STATUS="no"
445 else
446 STATUS="yes"
450 case "\$arg" in
451 start)
452 if [ "\$STATUS" = "yes" ] ; then
453 echo "Monkey is running... (PID=\$PIDMONKEY)"
454 exit 1
456 if ! test -x \$BINMONKEY ; then
457 echo "Error: I can't run binary file"
458 exit 1
459 else
460 if \$BINMONKEY -D 2>/dev/null ; then
461 echo "Running Monkey -> OK"
462 exit 0
466 stop)
467 if [ "\$STATUS" = "no" ]; then
468 echo "Monkey is not running."
469 exit 1
471 kill -9 \$PIDMONKEY
472 rm -rf \$PIDFILE > /dev/null
473 echo "Monkey stopped (\$PIDMONKEY)"
474 exit 0
476 restart)
477 if [ "\$STATUS" = "yes" ]; then
478 if ! kill \$PIDMONKEY > /dev/null ; then
479 killall -9 monkey
480 else
481 echo -n "Stopping Monkey... "
483 else
484 echo -n "Monkey is not running... "
486 if ! test -x \$BINMONKEY ; then
487 echo "Error: I can't run binary file"
488 exit 1
489 else
490 \$BINMONKEY -D > /dev/null
491 echo "Restarting -> OK"
492 exit 0
496 echo "Use : banana [start|stop|restart|help]"
497 exit 1
499 esac
500 done
501 echo "Use : banana [start|stop|restart|help]"
503 exit 0
505 chmod 755 bin/banana
508 #---------------------------#
509 # End Functions
510 #---------------------------#
513 #---------------------------#
514 # Starting configure
515 #---------------------------#
516 aux=`pwd`
518 prefix="$aux"
519 bindir="$aux/bin"
520 cgibin="$aux/cgi-bin"
521 sysconfdir="$aux/conf"
522 datadir="$aux/htdocs"
523 logdir="$aux/logs"
524 plugdir=""
526 for arg in $*; do
527 case "$arg" in
528 -*=*)
529 optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
530 *) optarg= ;;
531 esac
533 case "$arg" in
534 --prefix*)
535 prefix=$optarg
536 bindir="$optarg/bin"
537 cgibin="$optarg/cgi-bin"
538 sysconfdir="$optarg/conf"
539 datadir="$optarg/htdocs"
540 logdir="$optarg/logs"
541 plugdir="$optarg/plugins"
543 --bindir*)
544 bindir=$optarg
546 --cgibin*)
547 cgibin=$optarg
549 --sysconfdir*)
550 sysconfdir=$optarg
552 --datadir*)
553 datadir=$optarg
555 --logdir*)
556 logdir=$optarg
558 --plugdir*)
559 plugdir=$optarg
561 --debug*)
562 debug=1
564 --trace*)
565 trace=1
567 --version*)
568 echo "Monkey HTTP Daemon v$VERSION"
569 echo "-------------------------"
570 echo "Copyright 2001-2010"
571 echo "Developed by Eduardo Silva Pereira"
572 echo "Monkey Home : http://www.monkey-project.com"
573 echo "Contact Email : edsiper@gmail.com"
574 echo
575 exit 1
578 echo "Usage: configure [--prefix=PREFIXDIR] [ --bindir=BINDIR]"
579 echo " [--sysconfdir=SYSCONFDIR] [--datadir=DATADIR]"
580 echo " [--logdir=LOGDIR] [--plugdir=PLUGDIR]"
581 echo
582 echo "Options: "
583 echo " --help Display this help and exit"
584 echo " --version Display version information and exit"
585 echo " --debug Compile Monkey with debugging symbols"
586 echo " --trace Compile Monkey with trace messages (don't use in production)"
587 echo
588 echo " --prefix=PREFIX Install Monkey under PREFIX directory"
589 echo " --bindir=BINDIR Install Monkey binaries under BINDIR directory"
590 echo " --sysconfdir=SYSCONFDIR Install Monkey conf files under SYSCONFDIR dir"
591 echo " --datadir=DATADIR Install Monkey data dir files under DATADIR directory"
592 echo " --logdir=LOGDIR Install Monkey log files under LOGDIR directory"
593 echo " --plugdir=PLUGDIR Target directory for Monkey plugins"
594 echo
595 exit 1
597 esac
598 done
600 echo "********************************************"
601 echo " Monkey HTTP Daemon v$VERSION "
602 echo "* http://www.monkey-project.com *"
603 echo "* ---------------------------------------- *"
604 echo "* We need beta testers, developers and *"
605 echo "* translators!, if u want help to this *"
606 echo "* project, email us : *"
607 echo "* *"
608 echo "* monkeyd@googlegroups.com *"
609 echo "* *"
610 echo "* Thanks for use Monkey!!! *"
611 echo "* *"
612 echo "********************************************"
613 echo "System : $SYSINFO"
615 lang="en"
618 # Configure environment
619 if test -z "$CC" ; then
620 gcc_path=`which gcc`
621 if test -x "$gcc_path" ; then
622 CC="gcc"
623 else
624 echo "I'm a Monkey not a compiler! how do you suppose to compile me ? Install a compiler"
625 exit 1
629 if test -z "$STRIP" ; then
630 STRIP="strip"
633 if test -z "$debug" ; then
634 CFLAGS="-O2 -Wall"
635 else
636 CFLAGS="-g -Wall"
639 if [ $trace ] ; then
640 DEFS="-DTRACE"
643 # Starting main function
644 main prefix lang bindir cgibin sysconfdir datadir logdir plugdir modules SYSNAME VERSION
645 exit 0