#!/bin/sh # # IRC - Internet Relay Chat, tools/transition # Copyright (C) 2001 Kevin L. Mitchell # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 1, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # $Id: transition,v 1.1 2001-06-21 23:28:53 kev Exp $ # Better than having evals all over the place setvar () { eval $1=\$2 } getvar () { eval echo \$$1 } # Set up an echo that doesn't newline-terminate if test x`echo -n` = x-n; then echo_n () { echo "$@"'\c' } else echo_n () { echo -n "$@" } fi # Debugging notices, enabled only if $DEBUG has something in it if test x"$DEBUG" = x; then deb () { : } deb_n () { : } else deb () { echo "$@" } deb_n () { echo_n "$@" } fi # Get base directory; first step, how were we called? case $0 in */*) basedir=`echo $0 | sed -e 's@/[^/]*@@g'` ;; *) basedir=`pwd` ;; esac # Now locate the ircd subdirectory if test -d $basedir/ircd; then : elif test -d $basedir/../ircd; then basedir=$basedir/.. elif test -d ./ircd; then basedir=`pwd` else echo "Cannot find base ircd directory!" >&2 exit 1 fi # Finally, canonicalize it cwd=`pwd` cd $basedir basedir=`pwd` cd $cwd deb "Base directory: $basedir" # This is where our ./configure-parsable results will go cache_file=$basedir/config.cache # Now locate .config and config.cache config_in= config_cache_in= # If the config subdirectory isn't there anymore, don't bother checking there if test -d $basedir/config; then if test -r $basedir/config/.config; then config_in=$basedir/config/.config fi if test -r $basedir/config/config.cache; then config_cache_in=$basedir/config/config.cache fi fi # Last ditch effort...try ../.config if test x"$config_in" = x; then if test -r $basedir/../.config; then config_in=$basedir/../.config else echo "Cannot find original .config file!" >&2 exit 2 fi fi # Last ditch effort...try ../.config.cache if test x"$config_cache_in" = x; then if test -r $basedir/../.config.cache; then config_cache_in=$basedir/../.config.cache else echo "Cannot find original config.cache file!" >&2 exit 3 fi fi # Now load the two data files echo "Loading old config.cache file $config_cache_in" . $config_cache_in echo "Loading old .config file $config_in" . $config_in # Now we have to track down the defaults so we will know what to generate # F-lines for if test ! -r $basedir/ircd/ircd_features.c; then echo "Cannot find default features!" >&2 exit 4 fi echo_n "Loading feature default values; please be patient... " deb "" features= exec 4<$basedir/ircd/ircd_features.c while read line <&4; do # if a line has '(' but not ')', then we hang them until we find the # matching ')'; this is not robust! if test x"$hangline" != x; then line="$hangline $line" hangline= fi if test x"`echo "$line" | grep '(' 2>/dev/null`" != x -a \ x"`echo "$line" | grep ')' 2>/dev/null`" = x; then hangline=$line continue fi # Now we process the line we read... case $line in \#*) # We want to ignore the #define, since it's a false positive ;; F_[NIBS]*) # Found one of the feature define macros type=`echo "$line" | sed -e 's/^F_\([NIBS]\).*$/\1/g'` arglist=`echo "$line" | sed -e 's/^F_[NIBS](\(.*\)),.*/\1/g' \ -e 's/ | /|/g'` # Now we must parse the arguments tIFS=$IFS IFS=,$IFS name= value= argnum=0 for arg in $arglist; do case $type$argnum in [NIBS]0) # First argument is always the name of the feature name=$arg ;; I2) # Second argument of F_I() is the numerical value value=$arg ;; B2) # Second argument of F_B() is a numerical value # We must convert this numerical value to "y" or "n" if test x"$arg" = x0; then value=n else value=y fi ;; [ST]2) # Second argument of F_S() is a string value; must # take into account unquoted possibilities, though dequote=`echo "$arg" | sed -e 's/^"\(.*\)"$/\1/g'` if test x"$dequote" = x"$arg"; then type=T value=$arg else value=$dequote fi ;; esac # Next time through, we'll be testing the next argument argnum=`expr $argnum + 1` done IFS=$tIFS deb "Loaded feature \"$name\" of type \"$type\"; default: \"$value\"" # Store the information we extracted setvar type_$name $type setvar def_$name "$value" # Keep a list of features we've checked features="$features $name" ;; esac done exec 4<&- echo "done" echo "Converting some options that are still compile-time" unet_cv_prefix=`echo $SPATH | sed -e 's@/bin/ircd@@g'` deb "Installation directory (derived from SPATH)... $unet_cv_prefix" deb_n "Enable debugging (DEBUGMODE)... " if test x"$DEBUGMODE" = xy; then unet_cv_enable_debug=yes else unet_cv_enable_debug=no fi deb "$unet_cv_enable_debug" deb_n "Enable assertion checking (CONFIG_NDEBUG)... " if test x"$CONFIG_NDEBUG" = xy; then unet_cv_enable_asserts=yes else unet_cv_enable_asserts=no fi deb "$unet_cv_enable_asserts" deb_n "Force inlining of some critical functions (FORCEINLINE)... " if test x"$FORCEINLINE" = xy; then unet_cv_enable_inlines=yes else unet_cv_enable_inlines=no fi deb "$unet_cv_enable_inlines" unet_cv_with_symlink=$SYMLINK deb "Symlink name (SYMLINK)... $unet_cv_with_symlink" unet_cv_with_mode=$IRCDMODE deb "Binary permissions (IRCDMODE)... $unet_cv_with_mode" unet_cv_with_owner=$IRCDOWN deb "Binary owner (IRCDOWN)... $unet_cv_with_owner" unet_cv_with_group=$IRCDGRP deb "Binary group owner (IRCDGRP)... $unet_cv_with_group" unet_cv_with_domain=$DOMAINNAME deb "Local domain name (DOMAINNAME)... $unet_cv_with_domain" deb_n "Enable CHROOT operation (CHROOTDIR)... " if test x"$CHROOTDIR" = xy; then deb_n "yes, path " unet_cv_with_chroot=$DPATH else unet_cv_with_chroot=no fi deb "$unet_cv_with_chroot" unet_cv_with_dpath=$DPATH deb "Data path (DPATH)... $unet_cv_with_dpath" unet_cv_with_cpath=$CPATH deb "Configuration file (CPATH)... $unet_cv_with_cpath" # LPATH may not be set; if it's not, we'll just ignore it here and let # ./configure fill it in appropriately if test x"$LPATH" != x; then unet_cv_with_lpath=$LPATH deb "Debug log file (LPATH)... $unet_cv_with_lpath" fi unet_cv_with_maxcon=$MAXCONNECTIONS deb "Maximum number of connections (MAXCONNECTIONS)... $unet_cv_with_maxcon" # Shouldn't run ./configure before the transition script, but we can deal if test -r "$cache_file"; then echo "WARNING: Destroying new config.cache file $cache_file" >&2 rm $cache_file fi # Create the cache file... echo "Creating new config.cache file $cache_file" > $cache_file # This section is copied from a GNU autoconf-generated configure script ############################################################################### cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache ############################################################################### # If they ran ./configure before, there'll be a config.status hanging around; # if so, we can run that to integrate the config.cache we just generated. if test -x $basedir/config.status; then echo "Running $basedir/config.status to update configuration" cwd=`pwd` cd $basedir # Have to run it twice to get the Makefile recreated ./config.status --recheck ./config.status cd $cwd fi # Now we need to track down ircd.conf so we can add the F-lines. echo_n "Locating IRCD configuration file... " case $unet_cv_with_cpath in /*) # CPATH is absolute conf_file=$unet_cv_with_cpath ;; *) # CPATH is relative to DPATH conf_file=$unet_cv_with_dpath/$unet_cv_with_cpath ;; esac # suppress duplicate '/' conf_file=`echo "$conf_file" | sed -e 's@//*@/@g'` echo "$conf_file" # if we can't find the .conf, use "flines.conf" in the base directory (so # they'll be easy to find). if test ! -r $conf_file; then fline_conf=yes conf_file=$basedir/flines.conf if test ! -r $conf_file; then > $conf_file fi echo "WARNING: Unable to read ircd.conf; you will need to add the" >&2 echo " F-lines manually. For your convenience, they will be" >&2 echo " placed in $conf_file." >&2 fi # here's where we take the old .config and compare it to the feature defaults echo_n "Building feature table... " for feature in $features; do defval=`getvar def_$feature` value=`getvar $feature` if test x"$value" = x -o x"$value" = x"$defval"; then setvar FEAT_$feature $defval else setvar FEAT_$feature $value fi done # We won't add an F-line for DOMAINNAME, since (hopefully) the right one is # already compiled in FEAT_DOMAINNAME=DOMAINNAME # Have to make sure we have a RANDOM_SEED to enhance randomness... FEAT_RANDOM_SEED=$RANDOM_SEED # This feature changed names to be consistent... FEAT_OPER_LBADCHAN=$LOCAL_BADCHAN # DEFAULT_LIST_PARAM is perhaps the most complicated to transition, but # this'll do the trick... if test x"$CONFIG_LIST" = xy; then FEAT_DEFAULT_LIST_PARAM=$DEFAULT_LIST_PARAM else FEAT_DEFAULT_LIST_PARAM=0 fi echo "done" # Now we just generate the F-lines echo_n "Generating F-lines... " exec 4>>$conf_file # The various log files are set up first--these are all that were defined # in u2.10.10.pl15 if test x"$CONFIG_LOG_WHOX" = xy; then echo "F:LOG:WHO:FILE:$WPATH" >&4 fi if test x"$CONFIG_LOG_GLINES" = xy; then echo "F:LOG:GLINE:FILE:$GPATH" >&4 fi if test x"$CONFIG_LOG_USERS" = xy; then echo "F:LOG:USER:FILE:$FNAME_USERLOG" >&4 fi if test x"$CONFIG_LOG_OPERS" = xy; then echo "F:LOG:OPER:FILE:$FNAME_OPERLOG" >&4 fi # Now we traverse the entire feature table and compare values with their # defaults for feature in $features; do type=`getvar type_$feature` defval=`getvar def_$feature` value=`getvar FEAT_$feature` if test x"$defval" != x"$value"; then if test x"$type" = xB; then # Must map booleans yet again; I prefer TRUE/FALSE if test x"$value" = xy; then value=TRUE else value=FALSE fi fi # Write the F-line echo "F:$feature:$value" >&4 fi done exec 4>&- echo "done" echo_n "Transition is complete." if test ! -r $basedir/config.status; then echo_n " You should now run ./configure." fi echo "" if test x"$fline_conf" = xyes; then echo "Don't forget to add the F-lines to your ircd.conf. They can be" echo "found in $conf_file." else echo "Don't forget to verify the F-lines in your ircd.conf!" fi