# @configure_input@
#
# By Carlo Wood (carlo@runaway.xs4all.nl)
#
# For a description of the syntax of this configuration file,
# see the config/Configure script.
#
# TO CONFIGURE THE SERVER, TYPE: 'make config' in the top level directory !
#

#### Start of system configuration section. ####

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
mandir=@mandir@
CC_DEFAULT="@CC@"
CFLAGS_DEFAULT="@CFLAGS@"
CPPFLAGS_DEFAULT="@CPPFLAGS@"
LDFLAGS_DEFAULT="@LDFLAGS@"
LIBS="@LIBS@"
ac_cv_header_poll_h=@ac_cv_header_poll_h@
unet_cv_func_poll_syscall=@unet_cv_func_poll_syscall@
ac_cv_header_syslog_h=@ac_cv_header_syslog_h@

#### End of system configuration section. ####

if [ -z "$CONFIG_BATCH" ]; then
  echo "**************************************************************************"
  echo "Error: Please run 'make config' that resides in the top level directory!"
  echo "**************************************************************************"
  exit -1
fi

mainmenu_name "Undernet IRC Daemon Configuration"
mainmenu_option next_comment
  if [ "$CONFIG_BATCH" = "n" ]; then
    echo "* Welcome to the Undernet IRC Daemon Configuration script."
    echo "* You can restart this configuration at any time by typing 'make config'."
    echo "* If you need help with your decision on any question, type a '?'"
    echo "*"
    USE_DEFAULT=n
  else
    USE_DEFAULT=C
  fi
  CHANGE_CONFIG=n
  if [ "$DEFAULTS" != "none" ]; then
    bool 'Do you want to change your previous configuration' CHANGE_CONFIG
    if [ "$CHANGE_CONFIG" = "n" ]; then
      echo "Ok, I will only prompt you for NEW parameters."
      USE_DEFAULT=C
    else
      USE_DEFAULT=n
    fi
  else
    USE_DEFAULT=n
  fi
endmenu

mainmenu_option next_comment
comment 'Debugging (do not define this on production servers)'
  bool 'Do you want to enable debugging output' DEBUGMODE
  bool 'Do you want to enable asserts and memory allocation checking' CONFIG_NDEBUG
  EXTRA_CPPFLAGS=""
  if [ "$CONFIG_NDEBUG" = "n" ]; then
    if [ -z "$EXTRA_CPPFLAGS" ]; then
      EXTRA_CPPFLAGS="-DNDEBUG"
    else
      EXTRA_CPPFLAGS="-DNDEBUG $EXTRA_CPPFLAGS"
    fi
  fi
  bool 'Are you testing on a host without DNS' NODNS
endmenu

mainmenu_option next_comment
comment 'Compile stuff'
  if [ "$prefix" = "NONE" ]; then
    prefix=/usr/local
  fi
  if [ "$exec_prefix" = "NONE" ]; then
    eval exec_prefix="$prefix"
  fi
  string 'Which compiler do you want to use' CC "$CC_DEFAULT"
  echo "* For the following four questions, specify 'none' when you want it to be empty."
  if [ -z "$cflags_O3_remark" -a -n "$CFLAGS" ]; then
    CFLAGS_DEFAULT=`echo "$CFLAGS" | sed -e 's%-O2%-O3%'`
    if [ "$CFLAGS_DEFAULT" != "$CFLAGS" ]; then
      echo "You are highly advised to use -O3 instead of -O2 if you're short in cpu cycles!"
      echo "Please read documentation (press '?'):"
      CFLAGS=
    fi
  fi
  eval string "'What flags should I pass to $CC [none]'" CFLAGS "'$CFLAGS_DEFAULT'"
  define_macro cflags_O3_remark done
  string 'Do you need extra include directories [none]' EXTRA_INCLUDEDIRS none
  if [ -z "$LDFLAGS_DEFAULT" ]; then
    LDFLAGS_DEFAULT=none
  else
    eval LDFLAGS_DEFAULT="$LDFLAGS_DEFAULT"
  fi
  string 'Which linker flags do you need [none]' LDFLAGS "$LDFLAGS_DEFAULT"
  if [ -z "$LIBS" ]; then
    LIBS=none
  fi
  string 'Which extra libraries do you need [none]' IRCDLIBS "$LIBS"
  eval bindir="$bindir"
  string 'In which directory should I install the ircd binary' BINDIR $bindir
  if [ ! -d "$BINDIR" ]; then
    echo "$BINDIR : No such directory"
  fi
  string 'What should the name of the installed symbolic link to the exectuable be' SYMLINK ircd
  string 'Which permissions do you want the binary to have' IRCDMODE 711
  string 'Which owner do you want the binary to have' IRCDOWN "`id | sed -e 's/.*uid=[0-9]*(//' -e 's/).*//' 2> /dev/null`"
  string 'Which group do you want the binary to have' IRCDGRP "`id | sed -e 's/.*gid=[0-9]*(//' -e 's/).*//' 2> /dev/null`"
  eval mandir=$mandir
  string 'Where should I install the man page' MANDIR $mandir
  if [ "$CFLAGS" = "none" ]; then
    CFLAGS=""
  fi
  if [ "$EXTRA_INCLUDEDIRS" = "none" ]; then
    EXTRA_INCLUDEDIRS=""
  fi
  if [ "$LDFLAGS" = "none" ]; then
    LDFLAGS=""
  fi
  if [ "$IRCDLIBS" = "none" ]; then
    IRCDLIBS=""
  fi
  if [ -n "$EXTRA_INCLUDEDIRS" ]; then
    for i in $EXTRA_INCLUDEDIRS; do
      if [ -z "$EXTRA_CPPFLAGS" ]; then
	EXTRA_CPPFLAGS=-I$i
      else
	EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS -I$i"
      fi
    done
  fi
  if [ -z "$EXTRA_CPPFLAGS" ]; then
    CPPFLAGS="-I../include -I../config"
  else
    CPPFLAGS="-I../include -I../config $EXTRA_CPPFLAGS"
  fi
  echo "EXTRA_CPPFLAGS=\"$EXTRA_CPPFLAGS\"" >>$CONFIG
  echo "CPPFLAGS=\"$CPPFLAGS\"" >>$CONFIG
  bool 'Use inlining for a few crucial functions' FORCEINLINE y
endmenu

if [ "$ac_cv_header_poll_h" = "yes" ]; then
  if [ "$unet_cv_func_poll_syscall" = "yes" ]; then
    define_bool USE_POLL y
  else
    mainmenu_option next_comment
    comment 'Operating System specific defines.'
      bool 'You have poll(), but do you want to use it' USE_POLL n
    endmenu
  fi
fi

mainmenu_option next_comment
comment 'Host specific defines'
  if [ -f /etc/resolv.conf ]; then
    DOMAINNAME_DEFAULT="`awk '/^domain/ { print $2; exit }' /etc/resolv.conf`"
  fi
  string 'What is the domain name of your network' DOMAINNAME $DOMAINNAME_DEFAULT
  if [ -z "$DOMAINNAME" ]; then
    DOMAINNAME=none
  fi
  string 'Please give a random seed of eight characters' RANDOM_SEED 12345678
  bool 'Does your host have a reliable clock' RELIABLE_CLOCK
endmenu

mainmenu_option next_comment
comment 'General defines'
  bool 'Change root ('/') after start of daemon' CHROOTDIR
  bool 'Do you want the daemon set its own uid/gid' CONFIG_SETUGID
  if [ "$CONFIG_SETUGID" = "y" ]; then
    int '   UID of irc daemon' IRC_UID
    int '   GID of irc daemon' IRC_GID
  else
    define_int IRC_UID $IRC_UID
    define_int IRC_GID $IRC_GID
    bool 'Allow to specify configuration file on command line' CMDLINE_CONFIG
    if [ "$CMDLINE_CONFIG" = "y" ]; then
      echo "   SECURITY: Then don't install the daemon SUID or SGID !"
    fi
  fi
  bool 'Do you need virtual hosting' VIRTUAL_HOST
  PREV_HUB=$HUB
  bool 'Will you connect to more then one server at a time' HUB
  if [ "$PREV_HUB" != "$HUB" ]; then
    BUFFERPOOL=
  fi
endmenu


mainmenu_option next_comment
comment 'Paths and files'
  eval DPATH_DEFAULT="${prefix}/lib/ircd"
  string 'Directory where all ircd stuff resides' DPATH $DPATH_DEFAULT
  define_string SPATH "$BINDIR/$SYMLINK"
  echo "The following filenames are either full paths or files within DPATH"
  string 'Server configuration file' CPATH 'ircd.conf'
  string 'Server MOTD file' MPATH 'ircd.motd'
  string 'Server remote MOTD file (3 lines max)' RPATH 'remote.motd'
  if [ "$DEBUGMODE" = "y" ]; then
    string 'Debug file if DEBUGMODE' LPATH '/tmp/ircd.log'
  else
    define_string LPATH "$LPATH"
  fi
  string 'File for server pid' PPATH 'ircd.pid'
endmenu

mainmenu_option next_comment
comment 'Logging (filenames are either full paths or files within DPATH)'
  bool 'Do you want to log the use of /WHO x% (recommended)' CONFIG_LOG_WHOX y
    if [ "$CONFIG_LOG_WHOX" = "y" ]; then
      string '   Give the path and(or) filename of this log file' WPATH 'whox.log'
    fi

comment 'Bad Channel G-Lines allow operators to add channel masks to a list which prohibits local clients from being able joining channels which match the mask.  Remote BadChan Glines allow Uworld to add or remove channels from the servers internal list of badchans'
  bool 'Do you want to enable Bad Channel G-lines' BADCHAN y
    if [ "$BADCHAN" = "y" ]; then
      echo " "
      echo " WARNING DO _NOT_ USE LOCAL BADCHANNEL GLINES ON UNDERNET"
      echo " Use of LOCAL BAD Channel G-Lines can be cause for REMOVAL"
      bool 'Allow LOCAL BAD Channel G-lines' LOCAL_BADCHAN
    fi

  bool 'Do you want to log G-lines to a separate file' CONFIG_LOG_GLINES
    if [ "$CONFIG_LOG_GLINES" = "y" ]; then
      string '   Give the path and(or) filename of this log file' GPATH 'gline.log'
    fi
  bool 'Do you want to log connecting users to a separate file' CONFIG_LOG_USERS
    if [ "$CONFIG_LOG_USERS" = "y" ]; then
      string '   Give the path and(or) filename of this log file' FNAME_USERLOG $DPATH/users
    fi
  bool 'Do you want to log Opers to a separate file' CONFIG_LOG_OPERS
    if [ "$CONFIG_LOG_OPERS" = "y" ]; then
      string '   Give the path and(or) filename of this log file' FNAME_OPERLOG $DPATH/opers
    fi
  if [ "$ac_cv_header_syslog_h" = "yes" ]; then
    bool 'Do you want to use syslog' USE_SYSLOG
  else
    USE_SYSLOG=n
  fi
    if [ "$USE_SYSLOG" = "y" ]; then
      bool '   Log all operator kills to syslog' SYSLOG_KILL
      bool '   Log all remote squits for all servers to syslog' SYSLOG_SQUIT
      bool '   Log remote connect messages for other all servs' SYSLOG_CONNECT
      bool '   Log all users who successfully become an Oper' SYSLOG_OPER
      bool '   Send userlog stuff to syslog' SYSLOG_USERS
      if [ "$SYSLOG_KILL" = "n" -a "$SYSLOG_SQUIT" = "n" -a \
           "$SYSLOG_CONNECT" = "n" -a "$SYSLOG_OPER" = "n" -a \
	   "$SYSLOG_USERS" = "n" ]; then
	define_macro LOG_FACILITY $LOG_FACILITY
        define_bool USE_SYSLOG n
      else
        choice '   Log facility' \
		"daemon		CONFIG_DAEMON	\
		user		CONFIG_USER	\
		local0-7	CONFIG_LOCAL" daemon
	if [ "$CONFIG_DAEMON" = "y" ]; then
	  define_macro LOG_FACILITY LOG_DAEMON
	else
	  if [ "$CONFIG_USER" = "y" ]; then
	    define_macro LOG_FACILITY LOG_USER
	  else
	    int '      Which local facility (0-7)' INT_LOCAL
	    define_macro LOG_FACILITY LOG_LOCAL$INT_LOCAL
	  fi
	fi
	echo "    Using log facility $LOG_FACILITY"
      fi
    else
      define_bool SYSLOG_KILL $SYSLOG_KILL
      define_bool SYSLOG_SQUIT $SYSLOG_SQUIT
      define_bool SYSLOG_CONNECT $SYSLOG_CONNECT
      define_bool SYSLOG_OPER $SYSLOG_OPER
      define_bool SYSLOG_USERS $SYSLOG_USERS
      define_macro LOG_FACILITY $LOG_FACILITY
    fi
endmenu

mainmenu_option next_comment
comment 'Configuration'
  bool 'Use crypted passwords for operators' CRYPT_OPER_PASSWORD y
  DUMMY=`echo "$BUFFERPOOL" | sed -e 's/[0-9]//g'`
  if [ "$DUMMY" != "" ]; then
    BUFFERPOOL=
  fi
  if [ "$HUB" = "y" ]; then
    int 'Max size of the total of of all sendqs (bytes)' BUFFERPOOL 27000000
  else
    int 'Max size of the total of of all sendqs (bytes)' BUFFERPOOL 9000000
  fi
  int 'Max receive queue for clients (bytes)' CLIENT_FLOOD 1024
  int 'Maximum number of network connections (23 - (FD_SETSIZE-4))' MAXCONNECTIONS 252
  int 'Default port for connections to other servers' SERVER_PORT 4400
  int 'Nickname history length' NICKNAMEHISTORYLENGTH 800
  bool 'Allow Opers to see (dis)connects of local clients' ALLOW_SNO_CONNEXIT
  if [ "$ALLOW_SNO_CONNEXIT" = "y" ]; then
    bool 'Show IP address in client connection notices' SNO_CONNEXIT_IP
  fi
  bool 'Do you want to use R: lines in your configuration file' R_LINES
  if [ "$R_LINES" = "y" ]; then
    bool 'Process R: lines every rehash' R_LINES_REHASH y
    bool 'Process R: lines always' R_LINES_OFTEN
  else
    define_bool R_LINES_REHASH $R_LINES_REHASH
    define_bool R_LINES_OFTEN $R_LINES_OFTEN
  fi
  bool 'Do you want support for the old I:*:ONE:*:: construct (read help text!)' USEONE n
  bool 'Send a short message instead of the MOTD to connecting clients' NODEFAULTMOTD y
  bool 'Kill connecting clients when forward and reverse DNS mismatch' KILL_IPMISMATCH n
endmenu

mainmenu_option next_comment
comment 'Oper commands'
  bool 'Allow opers to wallop' OPER_WALLOPS
  bool 'Allow (local) Opers to see all local invisible users' SHOW_INVISIBLE_USERS y
  if [ "$SHOW_INVISIBLE_USERS" = "y" ]; then
    bool 'Allow Opers to see all invisible users' SHOW_ALL_INVISIBLE_USERS y
  fi
  bool 'Allow global Opers (O:) to see inside secret channels' OPERS_SEE_IN_SECRET_CHANNELS y
  if [ "$OPERS_SEE_IN_SECRET_CHANNELS" = "y" ]; then
    bool 'Allow local Opers (o:) to see inside secret channels' LOCOP_SEE_IN_SECRET_CHANNELS n
  fi
  bool 'Do not truncate obnoxiously long /who output for opers' UNLIMIT_OPER_QUERY
  bool 'Allow Opers to use the KILL command' OPER_KILL y
  bool 'Allow Opers to use the REHASH command' OPER_REHASH y
  bool 'Allow Opers to use the RESTART command' OPER_RESTART y
  bool 'Allow Opers to use the DIE command' OPER_DIE y
  bool 'Allow Opers to add local G-lines' OPER_LGLINE y
  bool 'Allow Opers to connect from a remote site' OPER_REMOTE y
  bool 'Allow local opers to use the REHASH command' LOCOP_REHASH y
  bool 'Allow local opers to use the RESTART command' LOCOP_RESTART
  bool 'Allow local opers to use the DIE command' LOCOP_DIE
  bool 'Allow local opers to add local G-lines' LOCOP_LGLINE y
  bool 'Allow local/global opers to be on any number of channels' OPER_NO_CHAN_LIMIT y
  bool 'Allow local/global opers to set modes on local channels' OPER_MODE_LCHAN y
  bool 'Allow local/global opers to walk through local channels modes' OPER_WALK_THROUGH_LMODES n
  bool 'Prevent local/global opers from being kicked or deoped on local channels' NO_OPER_DEOP_LCHAN n

endmenu

mainmenu_option next_comment
comment 'Server characteristics'
  bool 'Do you want to have a default LIST parameter' CONFIG_LIST y
  if [ "$CONFIG_LIST" = "y" ]; then
    string 'Give default LIST parameter' DEFAULT_LIST 'T<10'
    define_string DEFAULT_LIST_PARAM "$DEFAULT_LIST"
  else
    define_string DEFAULT_LIST "$DEFAULT_LIST"
    define_bool DEFAULT_LIST_PARAM n
  fi
  bool 'K: line comments treated as a file by default' COMMENT_IS_FILE y
  bool 'Only nullify idle-time on PRIVMSG' IDLE_FROM_MSG y
endmenu

mainmenu_option next_comment
comment 'Mandatory defines (you should leave these untouched)'
  int 'Max auto connects per class (1!)' MAXIMUM_LINKS 1
  if [ "$OPER_KILL" = "y" ]; then
    bool 'Only allow KILLs of local clients' LOCAL_KILL_ONLY
  else
    define_bool LOCAL_KILL_ONLY $LOCAL_KILL_ONLY
  fi
  int 'KILL nick chase time limit (30)' KILLCHASETIMELIMIT 30
  int 'Max number of channels per user (recommended: 5)' MAXCHANNELSPERUSER 10
  int 'Max number of silence masks (15!)' MAXSILES 15
  int 'Expected average banmask length (40!)' AVBANLEN 40
  eval define_macro MAXSILELENGTH \'\($AVBANLEN * MAXSILES\)\'
  echo '* These are default values, used for class 0:'
  int 'Max server idle time (60)' TIMESEC 60
  int 'Class 0 ping frequency (120)' PINGFREQUENCY 120
  int 'Class 0 connect frequency (600)' CONNECTFREQUENCY 600
  int 'Min time before a link is good (300)' HANGONGOODLINK 300
  int 'Wait before reconnecting to good link (10!)' HANGONRETRYDELAY 10
  int 'connect(2) timeout (90!)' CONNECTTIMEOUT 90
  int 'Max send queue (40000)' DEFAULTMAXSENDQLENGTH 40000
endmenu

