]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - configure
Minor code tweaks, tidyups
[user/henk/code/inspircd.git] / configure
1 #!/bin/sh
2 # InspIRCd Configuration Script
3 #
4 # Copyright 2003 The ChatSpike Development Team
5 # <brain@chatspike.net>
6 # <Craig@chatspike.net>
7 #
8 # $Id$
9 #
10 ########################################
11
12 echo "Configuring default values..."
13
14 ME=`pwd`
15 GCCVER=`gcc -dumpversion | cut -c 1`
16 CONFIG_DIR=$ME/conf
17 MODULE_DIR=$ME/modules
18 BINARY_DIR=$ME/bin
19 MAX_CLIENT_T=`ulimit -n`
20 NICK_LENGT=32
21 CHAN_LENGT=64
22 MAX_CHANNE=20
23 MAXI_MODES=20
24 OSNAME=`(uname -s) 2>/dev/null` || OSNAME="unknown"
25
26 if [ -z $MAX_CLIENT_T ] ; then
27         MAX_CLIENT_T=1024
28         SCAN_FAILED=1
29 fi
30
31
32 if [ "$1" = "-clean" -o "$2" = "-clean" ] ; then
33   `rm -rf .config.cache`
34 fi
35
36 if [ -e ".config.cache" -a -z "$CLEAN" ] ; then
37     . .config.cache 
38 fi
39
40 if [ "$1" = "-update" -o "$2" = "-update" ] ; then
41    # They wanna update their Makefile.. good for 'em
42    # Make sure .config.cache exists
43    if [ ! -e ".config.cache" ] ; then
44      echo "You have not run ./configure before. Please do this before trying to run the update script."
45      exit 0
46    fi
47    # Right, load the cache values
48    . .config.cache
49    # Check for modules
50
51    case "$OSNAME" in
52            (FreeBSD)
53                    LDLIBS="-Ldl"
54                    FLAGS="-fPIC -frtti -O3"
55                    MAKEPROG="gmake"
56                    ;;
57            (*)
58                    LDLIBS="-ldl"
59                    FLAGS="-fPIC -frtti -O3"
60                    MAKEPROG="make"
61                    ;;
62    esac
63
64    MODULES=""
65    for module in src/modules/*.cpp ; do
66            mod=`echo $module | sed 's/.cpp/.so/' | sed 's/src\/modules\///'`
67            MODULES="$MODULES $mod"
68    done
69
70    # Write the new makefile.
71    . .Makefile.inc
72    echo "Complete."
73    exit 1; 
74 fi
75
76
77 if [ -z $MAX_CLIENT ] ; then
78         MAX_CLIENT=$MAX_CLIENT_T
79 fi
80
81
82 c=""
83 n=""
84 if [ "`eval echo -n 'a'`" = "-n a" ] ; then
85         c="\c"
86 else
87         n="-n"
88 fi
89
90 exists () { # because some shells don't have test -e
91     if [ -f $1 -o -d $1 -o -p $1 -o -c $1 -o -b $1 ] ; then
92         return 0
93     else
94         return 1
95     fi
96 }
97
98 clear
99 echo -e "'\033[1;33m####\033[0;37m:'\033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m::'\033[1;33m######\033[0;37m::'\033[1;33m########\033[0;37m::'\033[1;33m####\033[0;37m:'\033[1;33m########\033[0;37m:::'\033[1;33m######\033[0;37m::'\033[1;33m########\033[0;37m::"
100 echo -e ". \033[1;33m##\033[0;37m:: \033[1;33m###\033[0;37m:: \033[1;33m##\033[0;37m:'\033[1;33m##\033[0;37m... \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m.... \033[1;33m##\033[0;37m:. \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m.... \033[1;33m##\033[0;37m:'\033[1;33m##\033[0;37m... \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m.... \033[1;33m##\033[0;37m:"
101 echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m####\033[0;37m: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m:::..:: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m:::..:: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:"
102 echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m \033[1;33m##\033[0;37m \033[1;33m##\033[0;37m:. \033[1;33m######\033[0;37m:: \033[1;33m########\033[0;37m::: \033[1;33m##\033[0;37m:: \033[1;33m########\033[0;37m:: \033[1;33m##\033[0;37m::::::: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:"
103 echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m. \033[1;33m####\033[0;37m::..... \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m.....:::: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m.. \033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m::::::: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:"
104 echo -e ": \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m:. \033[1;33m###\033[0;37m:'\033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m::::::::: \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m::. \033[1;33m##\033[0;37m:: \033[1;33m##\033[0;37m::: \033[1;33m##\033[0;37m: \033[1;33m##\033[0;37m:::: \033[1;33m##\033[0;37m:"
105 echo -e "'\033[1;33m####\033[0;37m: \033[1;33m##\033[0;37m::. \033[1;33m##\033[0;37m:. \033[1;33m######\033[0;37m:: \033[1;33m##\033[0;37m::::::::'\033[1;33m####\033[0;37m: \033[1;33m##\033[0;37m:::. \033[1;33m##\033[0;37m:. \033[1;33m######\033[0;37m:: \033[1;33m########\033[0;37m::"
106 echo -e "\033[0;37m\033[0;37m....::..::::..:::......:::..:::::::::....::..:::::..:::......:::........:::"
107 echo ""
108 echo -e "\033[1;37mWelcome to the InspIRCd Configuration program!"
109 echo ""
110 echo "*** If you are unsure of any of these values, leave it blank for    ***"
111 echo "*** standard settings that will work, and your server will run      ***"
112 echo "*** using them. If you are running this server as part of a         ***"
113 echo "*** larger network, you must consult with your network admins       ***"
114 echo "*** for the proper values to use, or server links will be unstable! ***"
115 echo -e "\033[0;37m"
116 echo -e "Press \033[1;37m<RETURN>\033[0;37m to accept the default for any option, or enter"
117 echo -e "a new value. Please note: You will \033[1;37mHAVE\033[0;37m to read the docs"
118 echo -e "dir, otherwise you won't have a config file!"
119 echo ""
120 echo -e "Your operating system is: \033[1;37m$OSNAME\033[0;37m (`uname -mnr`), fdmax: $MAX_CLIENT_T"
121 echo ""
122
123 #############################################################################
124
125     ok=0
126     asked=1
127     echo "In what directory are the configuration files?"
128     while [ $ok -eq 0 ] ; do
129         echo -e $n "[\033[1;32m$CONFIG_DIR\033[0;37m] -> $c"
130         if read INPUT ; then : ; else echo "" ; exit 1 ; fi
131         if [ ! "$INPUT" ] ; then
132             INPUT=$CONFIG_DIR
133             default=1
134         fi
135         if echo "$INPUT" | grep -q \[\'\"\\\] ; then
136             echo 'Please use a pathname without the characters: '\'' " \'
137         elif [ ! "$NO_DIR_CHECK" -a ! -d "$INPUT" ] ; then
138             if exists "$INPUT" ; then
139                 echo "$INPUT exists, but is not a directory!"
140             else
141                 echo "$INPUT does not exist.  Create it?"
142                 echo -e $n "[\033[1;32my\033[0;37m] $c"
143                 read YN
144                 if [ "$YN" != "n" ] ; then
145                     if mkdir -p "$INPUT" ; then
146                         ok=1
147                     fi
148                 fi
149             fi
150             else
151             ok=1
152         fi
153     done
154     CONFIG_DIR=$INPUT
155     echo ""
156
157
158 ##############################################################################
159
160     ok=0
161     asked=1
162     echo "In What directory are the modules to be compiled to?"
163     while [ $ok -eq 0 ] ; do
164         echo -e $n "[\033[1;32m$MODULE_DIR\033[0;37m] -> $c"
165         if read INPUT ; then : ; else echo "" ; exit 1 ; fi
166         if [ ! "$INPUT" ] ; then
167             INPUT=$MODULE_DIR
168             default=1
169         fi
170         if echo "$INPUT" | grep -q \[\'\"\\\] ; then
171             echo 'Please use a pathname without the characters: '\'' " \'
172         elif [ ! "$NO_DIR_CHECK" -a ! -d "$INPUT" ] ; then
173             if exists "$INPUT" ; then
174                 echo "$INPUT exists, but is not a directory!"
175             else
176                 echo "$INPUT does not exist.  Create it?"
177                 echo -e $n "[\033[1;32my\033[0;37m] $c"
178                 read YN
179                 if [ "$YN" != "n" ] ; then
180                     if mkdir -p "$INPUT" ; then
181                         ok=1
182                     fi
183                 fi
184             fi
185             else
186             ok=1
187         fi
188     done
189     MODULE_DIR=$INPUT
190     echo ""
191
192
193 ##############################################################################
194
195     ok=0
196     asked=1
197     echo "In what directory is the IRCd binary to be placed?"
198     while [ $ok -eq 0 ] ; do
199         echo -e $n "[\033[1;32m$BINARY_DIR\033[0;37m] -> $c"
200         if read INPUT ; then : ; else echo "" ; exit 1 ; fi
201         if [ ! "$INPUT" ] ; then
202             INPUT=$BINARY_DIR
203             default=1
204         fi
205         if echo "$INPUT" | grep -q \[\'\"\\\] ; then
206             echo 'Please use a pathname without the characters: '\'' " \'
207         elif [ ! "$NO_DIR_CHECK" -a ! -d "$INPUT" ] ; then
208             if exists "$INPUT" ; then
209                 echo "$INPUT exists, but is not a directory!"
210             else
211                 echo "$INPUT does not exist.  Create it?"
212                 echo -e $n "[\033[1;32my\033[0;37m] $c"
213                 read YN
214                 if [ "$YN" != "n" ] ; then
215                     if mkdir -p "$INPUT" ; then
216                         ok=1
217                     fi
218                 fi
219             fi
220             else
221             ok=1
222         fi
223     done
224     BINARY_DIR=$INPUT
225     echo ""
226
227 ###############################################################################
228 # Craigs Version 3 With slightly less Cheeze :p
229
230 cheeze=0
231 echo -e "Maximum number of clients at any one time (\033[1;32m1-$MAX_CLIENT_T\033[0;37m)?"
232 while [ "$cheeze" -eq "0" ] ; do
233         echo -e $n "[\033[1;32m$MAX_CLIENT\033[0;37m] -> $c"
234         read cc
235
236         if [ -z "$cc" ] ; then
237                 cc=$MAX_CLIENT
238         fi
239
240         case "$cc" in 
241                 [0-9]*)
242                         if [ "$cc" -gt "$MAX_CLIENT_T" -a -z "$SCAN_FAILED" ] ; then
243                                 echo -e "WARNING: Our scans have indicated that you are attempting"
244                                 echo -e "to use more sockets than there are avaliable. Are you sure"
245                                 echo -e "you wish to do this? It may cause the IRCd to malfunction [y/n]"
246                                 echo -e $n "[\033[1;32mn\033[0;37m] -> $c"
247                                 read YN
248                                 if [ "$YN" = "y" ] ; then
249                                         MAX_CLIENT=$cc
250                                         cheeze=1
251                                 else
252                                         echo ""
253                                         echo -e "Please enter the correct value (\033[1;32m1-$MAX_CLIENT_T\033[0;37m)"
254                                 fi
255                         else
256                                 echo $SCAN_FAILED
257                                 cheeze=1
258                                 MAX_CLIENT=$cc
259                         fi
260                         ;;
261                 *)
262                         echo ""
263                         echo "You must enter a number in this field. Please try again."
264                         ;;
265         esac
266 done
267 echo ""
268
269
270 ###############################################################################
271
272   cheeze=0
273   echo -e "What is the Maximum length of nicknames?"
274   while [ "$cheeze" -eq "0" ] ; do
275         echo -e $n "[\033[1;32m$NICK_LENGT\033[0;37m] -> $c"
276         read cc
277         if [ "$cc" ] ; then
278                 case "$cc" in
279                         [0-9]*)
280                         NICK_LENGT=$cc
281                         cheeze=1
282                         ;;
283                         *)
284                         echo ""
285                         echo "You Must Enter a Number in this field. Please Try Again."
286                         cheeze=0
287                         ;;
288                 esac
289         else
290                 cheeze=1
291         fi
292   done
293   echo ""
294
295 ###############################################################################
296
297   cheeze=0
298   echo -e "What is the Maximum length of channel names?"
299   while [ "$cheeze" -eq "0" ] ; do
300         echo -e $n "[\033[1;32m$MAX_CHANNE\033[0;37m] -> $c"
301         read cc
302         if [ "$cc" ] ; then
303                 case "$cc" in
304                         [0-9]*)
305                         MAX_CHANNE=$cc
306                         cheeze=1
307                         ;;
308                         *)
309                         echo ""
310                         echo "You Must Enter a Number in this field. Please Try Again."
311                         cheeze=0
312                         ;;
313                 esac
314         else
315                 cheeze=1
316         fi
317   done
318   echo ""
319
320 ###############################################################################
321
322   cheeze=0
323   echo -e "What is the Maximum number of mode changes in one line?"
324   while [ "$cheeze" -eq "0" ] ; do
325         echo -e $n "[\033[1;32m$MAXI_MODES\033[0;37m] -> $c"
326         read cc
327         if [ "$cc" ] ; then
328                 case "$cc" in
329                         [0-9]*)
330                         MAXI_MODES=$cc
331                         cheeze=1
332                         ;;
333                         *)
334                         echo ""
335                         echo "You Must Enter a Number in this field. Please Try Again."
336                         cheeze=0
337                         ;;
338                 esac
339         else
340                 cheeze=1
341         fi
342   done
343   echo ""
344
345 ###############################################################################
346
347
348 echo -e "\033[1;32mPre-build configuration is complete!\033[0;37m"
349 echo ""
350 echo -e "\033[0;37mConfig path:\033[1;32m\t\t\t$CONFIG_DIR"
351 echo -e "\033[0;37mModule path:\033[1;32m\t\t\t$MODULE_DIR"
352 echo -e "\033[0;37mMax connections:\033[1;32m\t\t$MAX_CLIENT"
353 echo -e "\033[0;37mMax User Channels\033[1;32m\t\t$MAX_CHANNE"
354 echo -e "\033[0;37mMax nickname length:\033[1;32m\t\t$NICK_LENGT"
355 echo -e "\033[0;37mMax channel length:\033[1;32m\t\t$CHAN_LENGT"
356 echo -e "\033[0;37mMax mode length:\033[1;32m\t\t$MAXI_MODES"
357 echo -e "\033[0;37mGCC Version Found:\033[1;32m\t\t$GCCVER"
358 echo -e "\033[0;37m"
359
360 echo "Writing cache file for future ./configures ..."
361 if [ -e ".config.cache" ] ; then
362         rm .config.cache
363 fi
364 echo "CONFIG_DIR=\"$CONFIG_DIR\"" >> .config.cache
365 echo "MODULE_DIR=\"$MODULE_DIR\"" >> .config.cache
366 echo "BINARY_DIR=\"$BINARY_DIR\"" >> .config.cache
367 echo "MAX_CLIENT=\"$MAX_CLIENT\"" >> .config.cache
368 echo "MAX_CHANNE=\"$MAX_CHANNE\"" >> .config.cache
369 echo "NICK_LENGT=\"$NICK_LENGT\"" >> .config.cache
370 echo "MAXI_MODES=\"$MAXI_MODES\"" >> .config.cache 
371
372
373
374 echo "Writing include/inspircd_config.h ..."
375
376 echo "/* Auto generated by configure, do not modify! */" >include/inspircd_config.h
377 echo "" >>include/inspircd_config.h
378 if [ "$GCCVER" -eq "3" ] ; then
379 echo "#define GCC3" >>include/inspircd_config.h
380 fi
381 echo "#define SYSLOG_FACILITY LOG_DAEMON" >>include/inspircd_config.h
382 echo "#define SYSLOG_LEVEL LOG_NOTICE" >>include/inspircd_config.h
383 echo "#define CONFIG_FILE \"$CONFIG_DIR/inspircd.conf\"" >>include/inspircd_config.h
384 echo "#define MOD_PATH \"$MODULE_DIR\"" >>include/inspircd_config.h
385 echo "#define VERSION \"`sh ./src/version.sh`\"" >>include/inspircd_config.h
386 echo "#define MAXCLIENTS $MAX_CLIENT" >>include/inspircd_config.h
387 echo "#define NICKMAX $NICK_LENGT" >>include/inspircd_config.h
388 echo "#define CHANMAX $CHAN_LENGT" >>include/inspircd_config.h
389 echo "#define MAXCHANS $MAX_CHANNE" >>include/inspircd_config.h
390 echo "#define MAXMODES $MAXI_MODES" >>include/inspircd_config.h
391 echo "#define SYSTEM \"`uname -n -s -r`\"" >>include/inspircd_config.h
392 echo "#define MAXBUF 514">>include/inspircd_config.h
393 touch include/inspircd_config.h
394
395 echo "Preparing Variables for the Makefile"
396
397 if [ "$CONFIG_DIR" != "$ME/conf" ] ; then
398     COPY_CONF=1
399 fi
400
401
402 case "$OSNAME" in
403         (FreeBSD)
404                 LDLIBS="-Ldl"
405                 FLAGS="-fPIC -frtti -O3"
406                 MAKEPROG="gmake"
407                 ;;
408         (*)
409                 LDLIBS="-ldl"
410                 FLAGS="-fPIC -frtti -O3"
411                 MAKEPROG="make"
412                 ;;
413 esac
414
415 MODULES=""
416 for module in src/modules/*.cpp ; do
417         mod=`echo $module | sed 's/.cpp/.so/' | sed 's/src\/modules\///'`
418         MODULES="$MODULES $mod" 
419 done
420
421 echo -e "Writing \033[1;37m$OSNAME\033[0;37m makefile"
422 echo ""
423
424 . .Makefile.inc
425
426 echo ""
427
428 echo ""
429 echo "Do you want to compile the IRCd binaries?"
430 echo -e $n "[\033[1;32my\033[0;37m] $c"
431 read YN
432 if [ "$YN" != "n" ] ; then
433         echo ""
434         echo -e "\033[1;32mCompiling...\033[0;37m"
435         echo ""
436         cd $ME
437         $MAKEPROG
438         echo ""
439         echo "Done!"
440         echo ""
441 else
442         echo ""
443         echo "Done!"
444         echo ""
445         echo -e "To build your server with these settings, please type '\033[1;32mmake\033[0;37m' now."
446         echo ""
447         echo -e "*** \033[1;32mRemember to edit your configuration files!!!\033[0;37m ***"
448         echo ""
449 fi
450
451
452 echo ""
453 echo "Do you want to run the config file maker?"
454 echo -e $n "[\033[1;32my\033[0;37m] $c"
455 read YN
456 if [ "$YN" != "n" ] ; then
457         sh makeconf
458 fi
459
460 echo -e "*** \033[1;32mRemember to edit your configuration files!!!\033[0;37m ***"
461 echo ""
462