#!/usr/bin/perl ###################################################################### # This script configures the CCSO Nameserver. # # The configuration process includes: # Building include files # Building Makefiles # # The script first sources defaults. Then, it sources each of its # arguments in turn. This allows maximum flexibility in configuration. # # defaults contains a list of things you might want to put in # your own configuration files ###################################################################### # # Copyright (c) 1985 Corporation for Research and Educational Networking # Copyright (c) 1988 University of Illinois Board of Trustees, Steven # Dorner, and Paul Pomes # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by the Corporation for # Research and Educational Networking (CREN), the University of # Illinois at Urbana, and their contributors. # 4. Neither the name of CREN, the University nor the names of their # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE TRUSTEES AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # @(#)$Id: Configure,v 1.2 1994/03/12 01:12:10 paul Exp $ ###################################################################### # Setup ###################################################################### print "\nWARNING: This version of Configure now expects any DefineStrings to\n"; print 'be uppercase, e.g., $DefineStrings{"DATABASE"} = "/nameserv/db/prod"'; print "\n\nConfiguring for ". join(' ',@ARGV) . "\n"; @INC = (@INC,"configs"); # search configs require "defaults"; # read defaults foreach $a (@ARGV) {require $a;} # and each argument file chdir $SrcDir || die "$SrcDir: $!\n"; ###################################################################### # All our settings are now read. Let's get to work. ###################################################################### ###################################################################### # Phase 1; generate configuration files ###################################################################### &OpenOrElse(CONFH,">include/conf.h",1); &OpenOrElse(CONFC,">qi/conf.c",1); print CONFH "#ifndef CONF_H\n#define CONF_H\n"; foreach $f (@Features) { print CONFH "#define $f\n";eval "\$$f=1;"; if ($f eq "KERBEROS") { if ($KrbIncDir) {$Cflags .= " -I$KrbIncDir";} if ($KrbLibDir) {$MoreLib .= " -L$KrbLibDir";} $MoreLib .= " -lkrb -ldes"; $PhFlags .= " -DKERBEROS"; } if ($f eq "CRACKLIB") { $MoreLib .= " $LibDir/libcrack.a"; } } print CONFH "#define OWNER \"$Owner\"\n"; print CONFH "#define GROUP \"$Group\"\n"; if (!$EMAIL_AUTH) {$StripEmail = ";perl -i -n -e 'if (!/email/) {print;}' temp.l";} print CONFH "extern char *OkAddrs[];\n"; print CONFC "char *OkAddrs[]={"; foreach $ok (@OkAddrs) {print CONFC qq/"$ok",/;} print CONFC "0};\n"; print CONFH "extern char *LocalAddrs[];\n"; print CONFC "char *LocalAddrs[]={"; foreach $loc (@LocalAddrs) {print CONFC qq/"$loc",/;} print CONFC "0};\n"; $i = 1; print CONFH "extern char *Strings[];\n"; print CONFC '#include '."\n"; print CONFC '#include "conf.h"'."\n"; print CONFC "char *Strings[] = {\n"; foreach $d (keys(%DefineStrings)) { printf CONFH "#define $d (Strings[%d])\n",$i; $i += 2; print CONFC qq/ "$d","$DefineStrings{$d}",\n/; } print CONFC "0 };\n"; foreach $d (keys(%OtherDefines)) { $realD = $d; $realD =~ tr/a-z/A-Z/; print CONFH "#define $realD $OtherDefines{$d}\n"; } print CONFH "extern char *Database;\n#endif\n"; print CONFC "char *Database = NULL;\n"; close(CONFH); close(CONFC); ###################################################################### # Phase 2; generate the Makefiles # Except for the top-level makefile, these are generated by eval-ing # each line of Makefile.templ, and adding some stuff ###################################################################### foreach $l (@PhLinks) {$PhLinks .= "\t-ln -s ph \$(DESTDIR)/$l\n";} chop($PhLinks); foreach $phopt (keys(%PhFlags)) { $PhFlags .= " -D"; $opt = $phopt; $opt =~ tr/a-z/A-Z/; $PhFlags .= $opt; if ($PhFlags{$phopt} ne "") { $PhFlags .= qq|=\\"$PhFlags{$phopt}\\"|; } } &OpenOrElse(TOPMAKE,">Makefile",1); print TOPMAKE $DontEditMake; foreach $targ (@TopTargets) { print TOPMAKE $targ eq "install" ? "$targ: all\n" : "$targ:\n"; if ($targ eq "clean") {print TOPMAKE "\trm -f tags\n";} foreach $dir (@WantDirs) {print TOPMAKE "\tcd $dir; make $targ\n";} print TOPMAKE "\n"; } print TOPMAKE "tags:\n\tcd lib; ctags -t -f ../tags ../*/*.[chly]\n"; foreach $dir (@WantDirs) {print TOPMAKE "\tln tags $dir/tags\n";} close(TOPMAKE); foreach $dir (@WantDirs) { &OpenOrElse(TEMPLATE,"<$dir/Makefile.templ",0); &OpenOrElse(MAKEFILE,">$dir/Makefile",1); chdir $dir || die "$dir: $!"; print MAKEFILE $DontEditMake; # # copy makefile, expanding variables as we go # while (