diff options
-rwxr-xr-x | configure.pl | 1100 | ||||
-rw-r--r-- | misc/config/code/config.pl | 54 | ||||
-rw-r--r-- | misc/config/code/conflict.pl | 29 | ||||
-rw-r--r-- | misc/config/code/header.pl | 9 | ||||
-rw-r--r-- | misc/config/code/help.pl | 46 | ||||
-rw-r--r-- | misc/config/code/include.pl | 76 | ||||
-rw-r--r-- | misc/config/code/loadmod.pl | 79 | ||||
-rw-r--r-- | misc/config/code/main.pl | 243 | ||||
-rw-r--r-- | misc/config/code/makefile.pl | 167 | ||||
-rw-r--r-- | misc/config/code/misc.pl | 182 | ||||
-rw-r--r-- | misc/config/code/modinfo.pl | 121 | ||||
-rw-r--r-- | misc/config/code/modloop.pl | 18 | ||||
-rw-r--r-- | misc/config/code/nmake.pl | 194 | ||||
-rw-r--r-- | misc/config/code/pkg_conf.pl | 87 | ||||
-rw-r--r-- | misc/config/code/sysinfo.pl | 53 | ||||
-rw-r--r-- | misc/config/code/unixmake.pl | 279 | ||||
-rw-r--r-- | misc/config/code/wag.pl | 206 | ||||
-rwxr-xr-x | misc/config/mkconfig.pl | 455 |
18 files changed, 360 insertions, 3038 deletions
diff --git a/configure.pl b/configure.pl index 7d2ed2156..9a57544be 100755 --- a/configure.pl +++ b/configure.pl @@ -1,13 +1,5 @@ #!/usr/bin/perl -w -# Warning: This file is machine-generated; any changes will be lost. Instead, -# change mkconfig.pl and the system description files. If you find a bug in -# this program (such as generation of incorrect options), please mail -# [email protected] with details. - -# This file is in the public domain. - -# It actually runs on a lot of 5.005 installs, but not all... require 5.006; use strict; @@ -16,9 +8,6 @@ use Getopt::Long; use File::Spec; use File::Copy; -my $PROJECT_NAME = 'Botan'; -my $PROJECT_NAME_LC = lc $PROJECT_NAME; - my $MAJOR_VERSION = 1; my $MINOR_VERSION = 5; my $PATCH_VERSION = 11; @@ -43,7 +32,7 @@ my $BUILD_INCLUDE_DIR = 'build/include'; my $CONFIG_HEADER = 'build.h'; -my $CPP_INCLUDE_DIR_DIRNAME = $PROJECT_NAME_LC; +my $CPP_INCLUDE_DIR_DIRNAME = 'botan'; # Available module sets my %MODULE_SETS = ( @@ -77,733 +66,59 @@ my %DOCS = ( 'thanks.txt' => $DOC_DIR, 'todo.txt' => $DOC_DIR ); -my %ARCH = ( - '68020' => 'm68k', - '68030' => 'm68k', - '68040' => 'm68k', - '68060' => 'm68k', - 'alpha' => 'alpha', - 'alpha-ev4' => 'alpha', - 'alpha-ev5' => 'alpha', - 'alpha-ev56' => 'alpha', - 'alpha-ev6' => 'alpha', - 'alpha-ev67' => 'alpha', - 'alpha-ev68' => 'alpha', - 'alpha-ev7' => 'alpha', - 'alpha-pca56' => 'alpha', - 'amd64' => 'amd64', - 'arm' => 'arm', - 'arm2' => 'arm', - 'arm3' => 'arm', - 'arm6' => 'arm', - 'arm7' => 'arm', - 'arm8' => 'arm', - 'arm9' => 'arm', - 'athlon' => 'ia32', - 'athlon64' => 'amd64', - 'em64t' => 'amd64', - 'hppa' => 'hppa', - 'hppa1.0' => 'hppa', - 'hppa1.1' => 'hppa', - 'hppa2.0' => 'hppa', - 'i386' => 'ia32', - 'i486' => 'ia32', - 'i586' => 'ia32', - 'i686' => 'ia32', - 'ia32' => 'ia32', - 'ia64' => 'ia64', - 'k6' => 'ia32', - 'm68k' => 'm68k', - 'mip32-r3000' => 'mips32', - 'mip32-r6000' => 'mips32', - 'mips32' => 'mips32', - 'mips64' => 'mips64', - 'mips64-r10000' => 'mips64', - 'mips64-r4000' => 'mips64', - 'mips64-r4100' => 'mips64', - 'mips64-r4300' => 'mips64', - 'mips64-r4400' => 'mips64', - 'mips64-r4560' => 'mips64', - 'mips64-r4600' => 'mips64', - 'mips64-r5000' => 'mips64', - 'mips64-r8000' => 'mips64', - 'opteron' => 'amd64', - 'pentium4' => 'ia32', - 'power3' => 'ppc64', - 'power4' => 'ppc64', - 'power5' => 'ppc64', - 'ppc' => 'ppc', - 'ppc601' => 'ppc', - 'ppc603' => 'ppc', - 'ppc604' => 'ppc', - 'ppc64' => 'ppc64', - 'ppc740' => 'ppc', - 'ppc7400' => 'ppc', - 'ppc7450' => 'ppc', - 'ppc750' => 'ppc', - 'ppc970' => 'ppc64', - 'rs64a' => 'ppc64', - 's390' => 's390', - 's390x' => 's390x', - 'sh' => 'sh', - 'sh1' => 'sh', - 'sh2' => 'sh', - 'sh3' => 'sh', - 'sh3e' => 'sh', - 'sh4' => 'sh', - 'sparc32' => 'sparc32', - 'sparc32-v7' => 'sparc32', - 'sparc32-v8' => 'sparc32', - 'sparc32-v9' => 'sparc32', - 'sparc64' => 'sparc64', - 'sparc64-ultra' => 'sparc64', - 'sparc64-ultra2' => 'sparc64', - 'sparc64-ultra3' => 'sparc64', - 'strongarm' => 'arm', - 'strongarm110' => 'arm', - 'strongarm1100' => 'arm', - 'xscale' => 'arm', -); - -my %ARCH_ALIAS = ( - '680x0' => 'm68k', - '68k' => 'm68k', - '80x86' => 'ia32', - 'alphaaxp' => 'alpha', - 'athlon64' => 'amd64', - 'axp' => 'alpha', - 'hp-pa' => 'hppa', - 'hp-pa-risc' => 'hppa', - 'hp-parisc' => 'hppa', - 'i86pc' => 'ia32', - 'itanium' => 'ia64', - 'ix86' => 'ia32', - 'merced' => 'ia64', - 'mips' => 'mips32', - 'opteron' => 'amd64', - 'pa-risc' => 'hppa', - 'parisc' => 'hppa', - 'powerpc' => 'ppc', - 'sparc' => 'sparc32', - 'x86' => 'ia32', - 'x86-64' => 'amd64', - 'x86_64' => 'amd64', -); - -my %DEFAULT_SUBMODEL = ( - 'alpha' => 'alpha-ev5', - 'amd64' => 'amd64', - 'arm' => 'arm2', - 'hppa' => 'hppa1.1', - 'ia32' => 'i586', - 'ia64' => 'ia64', - 'm68k' => '68040', - 'mips32' => 'r3000', - 'mips64' => 'r4400', - 'ppc' => 'ppc740', - 'ppc64' => 'power4', - 's390' => 's390', - 's390x' => 's390x', - 'sh' => 'sh1', - 'sparc32' => 'sparc32-v8', - 'sparc64' => 'sparc64-ultra', -); - -my %SUBMODEL_ALIAS = ( - 'alphaev4' => 'alpha-ev4', - 'alphaev5' => 'alpha-ev5', - 'alphaev56' => 'alpha-ev56', - 'alphaev6' => 'alpha-ev6', - 'alphaev67' => 'alpha-ev67', - 'alphaev68' => 'alpha-ev68', - 'alphaev7' => 'alpha-ev7', - 'alphapca56' => 'alpha-pca56', - 'athlon-xp' => 'athlon', - 'cypress' => 'sparc32-v7', - 'duron' => 'athlon', - 'g3' => 'ppc740', - 'g4' => 'ppc7450', - 'g5' => 'ppc970', - 'hypersparc' => 'sparc32-v8', - 'k7' => 'athlon', - 'microsparc' => 'sparc32-v8', - 'mipsbe' => 'mips3000', - 'mipsle' => 'mips3000', - 'p2' => 'i686', - 'p3' => 'i686', - 'p4' => 'pentium4', - 'pentium' => 'i586', - 'pentium2' => 'i686', - 'pentium3' => 'i686', - 'pentium_pro' => 'i686', - 'pentiumpro' => 'i686', - 'r10000' => 'mips64-r10000', - 'r10k' => 'mips64-r10000', - 'r3000' => 'mips32-r3000', - 'r3k' => 'mips32-r3000', - 'r4000' => 'mips64-r4000', - 'r4100' => 'mips64-r4100', - 'r4300' => 'mips64-r4300', - 'r4400' => 'mips64-r4400', - 'r4560' => 'mips64-r4560', - 'r4600' => 'mips64-r4600', - 'r4k' => 'mips64-r4000', - 'r5000' => 'mips64-r5000', - 'r5k' => 'mips64-r5000', - 'r6000' => 'mips32-r6000', - 'r6k' => 'mips32-r6000', - 'r8000' => 'mips64-r8000', - 'r8k' => 'mips64-r8000', - 'sa110' => 'strongarm110', - 'sa1100' => 'strongarm1100', - 'sparc-v7' => 'sparc32-v7', - 'sparc-v8' => 'sparc32-v8', - 'sparc-v9' => 'sparc32-v9', - 'sparclite' => 'sparc32-v8', - 'sparcv7' => 'sparc32-v7', - 'sparcv8' => 'sparc32-v8', - 'sparcv9' => 'sparc32-v9', - 'strongarm1110' => 'strongarm1100', - 'supersparc' => 'sparc32-v8', - 'ultrasparc' => 'sparc64-ultra', - 'ultrasparc2' => 'sparc64-ultra2', - 'ultrasparc3' => 'sparc64-ultra3', -); - -my %OS_SUPPORTS_ARCH = ( - 'aix' => [ 'ia64', 'ppc', 'ppc64', ], - 'beos' => [ 'ia32', 'ppc', ], - 'cygwin' => [ 'amd64', 'ia32', 'ia64', ], - 'darwin' => [ 'ia32', 'ppc', 'ppc64', ], - 'freebsd' => [ 'alpha', 'amd64', 'ia32', 'ia64', 'powerpc', 'sparc64', - ], - 'hpux' => [ 'hppa', 'ia64', ], - 'irix' => [ 'mips32', 'mips64', ], - 'linux' => [ 'alpha', 'amd64', 'arm', 'hppa', 'ia32', 'ia64', 'm68k', - 'mips32', 'mips64', 'ppc', 'ppc64', 's390', 's390x', 'sh', - 'sparc32', 'sparc64', ], - 'netbsd' => [ 'alpha', 'amd64', 'arm', 'hppa', 'ia32', 'ia64', 'm68k', - 'mips32', 'mips64', 'ppc', 'sparc32', ], - 'openbsd' => [ 'alpha', 'ia32', 'm68k', 'mips32', 'ppc', 'sparc32', 'sparc64', - ], - 'qnx' => [ 'arm', 'ia32', 'mips32', 'ppc', 'sh', ], - 'solaris' => [ 'ia32', 'sparc32', 'sparc64', ], - 'tru64' => [ 'alpha', ], - 'windows' => [ 'amd64', 'ia32', 'ia64', ], -); - -my %OS_SUPPORTS_SHARED = ( - 'aix' => [ 'all', ], - 'beos' => [ 'all', ], - 'darwin' => [ 'all', ], - 'freebsd' => [ 'all', ], - 'hpux' => [ 'all', ], - 'irix' => [ 'all', ], - 'linux' => [ 'all', ], - 'netbsd' => [ 'all', ], - 'openbsd' => [ 'all', ], - 'qnx' => [ 'all', ], - 'solaris' => [ 'all', ], - 'tru64' => [ 'all', ], -); - -my %OS_TYPE = ( - 'aix' => 'unix', - 'beos' => 'beos', - 'cygwin' => 'unix', - 'darwin' => 'unix', - 'freebsd' => 'unix', - 'hpux' => 'unix', - 'irix' => 'unix', - 'linux' => 'unix', - 'netbsd' => 'unix', - 'openbsd' => 'unix', - 'qnx' => 'unix', - 'solaris' => 'unix', - 'tru64' => 'unix', - 'windows' => 'windows', -); - -my %OS_OBJ_SUFFIX = ( - 'defaults' => 'o', - 'windows' => 'obj', -); - -my %OS_SHARED_SUFFIX = ( - 'darwin' => 'dylib', - 'defaults' => 'so', - 'hpux' => 'sl', - 'windows' => 'dll', -); - -my %OS_STATIC_SUFFIX = ( - 'defaults' => 'a', - 'windows' => 'lib', -); - -my %OS_AR_COMMAND = ( - 'darwin' => 'ar cr', - 'defaults' => 'ar crs', -); - -my %OS_AR_NEEDS_RANLIB = ( - 'darwin' => '1', - 'defaults' => '0', -); - -my %OS_ALIAS = ( - 'haiku' => 'beos', - 'hp-ux' => 'hpux', - 'macosx' => 'darwin', - 'osf1' => 'tru64', - 'sunos' => 'solaris', -); - -my %INSTALL_INFO = ( - 'beos' => { - 'docs' => 'documentation', - 'headers' => '../develop/headers', - 'libs' => 'system/lib', - 'root' => '/boot/beos', - }, - 'cygwin' => { - 'docs' => 'docs', - 'root' => 'c:\Botan', - }, - 'darwin' => { - 'docs' => 'doc', - 'group' => 'wheel', - }, - 'defaults' => { - 'command' => 'install -o OWNER -g GROUP -m MODE', - 'docs' => 'share/doc', - 'group' => 'root', - 'headers' => 'include', - 'libs' => 'lib', - 'root' => '/usr/local', - 'user' => 'root', - }, - 'freebsd' => { - 'group' => 'wheel', - }, - 'netbsd' => { - 'group' => 'wheel', - }, - 'openbsd' => { - 'group' => 'wheel', - }, - 'solaris' => { - 'command' => 'install -u OWNER -g GROUP -m MODE', - }, - 'windows' => { - 'docs' => 'docs', - 'root' => 'c:\Botan', - }, -); - -my %CC_SUPPORTS_OS = ( - 'bcc' => [ 'windows', ], - 'compaq' => [ 'linux', 'tru64', ], - 'ekopath' => [ 'linux', ], - 'gcc' => [ 'aix', 'beos', 'cygwin', 'darwin', 'freebsd', 'hpux', 'irix', - 'linux', 'netbsd', 'openbsd', 'qnx', 'solaris', 'tru64', - 'windows', ], - 'hpcc' => [ 'hpux', ], - 'icc' => [ 'linux', ], - 'kai' => [ 'hpux', 'irix', 'linux', 'solaris', 'tru64', ], - 'mipspro' => [ 'irix', ], - 'msvc' => [ 'windows', ], - 'pgi' => [ 'linux', 'solaris', ], - 'sgipro64' => [ 'linux', ], - 'sunwspro' => [ 'solaris', ], -); - -my %CC_SUPPORTS_ARCH = ( - 'bcc' => [ 'ia32', ], - 'compaq' => [ 'alpha', ], - 'ekopath' => [ 'amd64', 'ia32', ], - 'gcc' => [ 'alpha', 'amd64', 'arm', 'hppa', 'ia32', 'ia64', 'm68k', - 'mips32', 'mips64', 'ppc', 'ppc64', 's390', 's390x', 'sh', - 'sparc32', 'sparc64', ], - 'hpcc' => [ 'hppa', ], - 'icc' => [ 'ia32', 'ia64', ], - 'kai' => [ 'alpha', 'hppa', 'ia32', 'mips32', 'mips64', 'sparc32', - 'sparc64', ], - 'mipspro' => [ 'mips32', 'mips64', ], - 'msvc' => [ 'ia32', ], - 'pgi' => [ 'ia32', ], - 'sgipro64' => [ 'ia64', ], - 'sunwspro' => [ 'ia32', 'sparc32', 'sparc64', ], -); - -my %CC_BINARY_NAME = ( - 'bcc' => 'bcc32', - 'compaq' => 'cxx', - 'ekopath' => 'pathCC', - 'gcc' => 'g++', - 'hpcc' => 'aCC', - 'icc' => 'icc', - 'kai' => 'KCC', - 'mipspro' => 'CC', - 'msvc' => 'cl /nologo', - 'pgi' => 'pgCC', - 'sgipro64' => 'sgiCC', - 'sunwspro' => 'CC', -); - -my %CC_LIB_OPT_FLAGS = ( - 'bcc' => '-O2', - 'compaq' => '-O2', - 'ekopath' => '-O3 -OPT:Ofast:alias=disjoint', - 'gcc' => '-O2 -finline-functions', - 'hpcc' => '+O2', - 'icc' => '-O3 -ip -unroll', - 'kai' => '+K3 --inline_auto_space_time=65 --abstract_pointer', - 'mipspro' => '-O3 -OPT:alias=TYPED', - 'msvc' => '/O2 /Ob2', - 'pgi' => '-fast -Minline', - 'sgipro64' => '-O3 -OPT:alias=TYPED', - 'sunwspro' => '-xO2', -); - -my %CC_CHECK_OPT_FLAGS = ( - 'bcc' => '-O2', - 'compaq' => '-O2', - 'ekopath' => '-O2', - 'gcc' => '-O2', - 'hpcc' => '+O2', - 'icc' => '-O2', - 'kai' => '+K3', - 'mipspro' => '-O3 -OPT:alias=TYPED', - 'msvc' => '/O2', - 'pgi' => '-fast', - 'sgipro64' => '-O3 -OPT:alias=TYPED', - 'sunwspro' => '-xO2', -); - -my %CC_WARN_FLAGS = ( - 'bcc' => '-w', - 'compaq' => '', - 'ekopath' => '-W -Wall', - 'gcc' => '-W -Wall', - 'hpcc' => '', - 'icc' => '-w1', - 'kai' => '', - 'mipspro' => '', - 'msvc' => '', - 'pgi' => '', - 'sgipro64' => '-Wall -W', - 'sunwspro' => '+w', -); - -my %CC_LANG_FLAGS = ( - 'bcc' => '', - 'compaq' => '-std ansi -D__USE_STD_IOSTREAM', - 'ekopath' => '-D_REENTRANT -ansi -Wno-long-long', - 'gcc' => '-D_REENTRANT -ansi -Wno-long-long', - 'hpcc' => '-AA -ext +eh -z', - 'icc' => '', - 'kai' => '-D__KAI_STRICT', - 'mipspro' => '-ansi -LANG:ansi-for-init-scope=ON', - 'msvc' => '/EHsc /GR /D_CONSOLE', - 'pgi' => '', - 'sgipro64' => '-ansi -LANG:ansi-for-init-scope=ON', - 'sunwspro' => '+p -D__EXTENSIONS__', -); - -my %CC_DEBUG_FLAGS = ( - 'bcc' => '', - 'compaq' => '-g', - 'ekopath' => '-g', - 'gcc' => '-g', - 'hpcc' => '-g', - 'icc' => '-g', - 'kai' => '-g', - 'mipspro' => '-g3', - 'msvc' => '', - 'pgi' => '', - 'sgipro64' => '-g3', - 'sunwspro' => '-g', -); - -my %CC_NO_DEBUG_FLAGS = ( - 'bcc' => '', - 'compaq' => '', - 'ekopath' => '', - 'gcc' => '', - 'hpcc' => '', - 'icc' => '', - 'kai' => '', - 'mipspro' => '', - 'msvc' => '', - 'pgi' => '', - 'sgipro64' => '', - 'sunwspro' => '', -); - -my %CC_MACHINE_OPT_FLAGS = ( - 'bcc' => { - 'athlon' => '/G6', - 'i486' => '/G4', - 'i586' => '/G5', - 'i686' => '/G6', - 'pentium4' => '/G6', - }, - 'compaq' => { - 'alpha' => '-arch=SUBMODEL', - }, - 'ekopath' => { - 'amd64' => '-mcpu=athlon64', - 'athlon' => '-mcpu=athlon', - 'athlon64' => '-mcpu=athlon64', - 'em64t' => '-mcpu=em64t', - 'i386' => '-mcpu=anyx86', - 'opteron' => '-mcpu=opteron', - 'pentium4' => '-mcpu=pentium4', - }, - 'gcc' => { - 'alpha' => '-mcpu=SUBMODEL', - 'alpha-ev67' => '-mcpu=ev6', - 'alpha-ev68' => '-mcpu=ev6', - 'alpha-ev7' => '-mcpu=ev6', - 'amd64' => '', - 'arm' => '-mcpu=SUBMODEL', - 'hppa' => '-march=SUBMODEL', - 'i386' => '-mcpu=i686', - 'ia32' => '-march=SUBMODEL', - 'm68k' => '-mSUBMODEL', - 'mips32' => '-mips1 -mcpu=SUBMODEL', - 'mips64' => '-mips3 -mcpu=SUBMODEL', - 'ppc' => '-mcpu=SUBMODEL', - 'ppc601' => '-mpowerpc -mcpu=601', - 'ppc64' => '-mcpu=SUBMODEL', - 'r10000' => '-mips4', - 'sh' => '-mSUBMODEL', - 'sparc32' => '-mcpu=SUBMODEL -Wa,-xarch=v8plus', - 'sparc64' => '-mcpu=v9 -mtune=ultrasparc', - 'sparc64-ultra3' => '-mcpu=v9 -mtune=ultrasparc3', - }, - 'icc' => { - 'athlon' => '-tpp6 -xiM', - 'i586' => '-tpp5', - 'i686' => '-tpp6 -xiM', - 'pentium4' => '-tpp7 -xiMW', - }, - 'mipspro' => { - 'mips32' => '-mips1', - 'mips64' => '-mips3', - 'mips64-r10000' => '-mips4 -r10000', - 'mips64-r5000' => '-mips4 -r5000', - 'mips64-r8000' => '-mips4 -r8000', - }, - 'msvc' => { - 'athlon' => '/G6', - 'i486' => '/G4', - 'i586' => '/G5', - 'i686' => '/G6', - 'pentium4' => '/G6', - }, - 'pgi' => { - 'athlon' => '-tp k7', - 'i586' => '-tp p5', - 'i686' => '-tp p6', - 'ia32' => '-tp px', - 'pentium4' => '-tp p6', - }, - 'sunwspro' => { - 'i386' => '-xtarget=486', - 'i486' => '-xtarget=486', - 'i586' => '-xtarget=pentium', - 'i686' => '-xtarget=pentium_pro', - 'k6' => '-xtarget=pentium', - 'pentium4' => '-xtarget=pentium_pro', - 'sparc32' => '-xchip=ultra -xarch=SUBMODEL', - 'sparc32-v9' => '-xchip=ultra -xarch=v8', - 'sparc64' => '-xchip=SUBMODEL', - }, -); - -my %CC_MACHINE_OPT_FLAGS_RE = ( - 'compaq' => { - 'alpha' => 'alpha-', - }, - 'gcc' => { - 'alpha' => 'alpha-', - 'hppa' => 'hppa', - 'mips32' => 'mips32-', - 'mips64' => 'mips64-', - 'ppc' => 'ppc', - 'ppc64' => 'ppc', - 'sh' => 'sh', - 'sparc32' => 'sparc32-', - }, - 'sunwspro' => { - 'sparc32' => 'sparc32-', - 'sparc64' => 'sparc64-', - }, -); - -my %CC_SO_OBJ_FLAGS = ( - 'bcc' => '', - 'compaq' => '', - 'ekopath' => '-fPIC', - 'gcc' => '-fPIC', - 'hpcc' => '+Z', - 'icc' => '-KPIC', - 'kai' => '', - 'mipspro' => '-KPIC', - 'msvc' => '', - 'pgi' => '-fPIC', - 'sgipro64' => '-KPIC', - 'sunwspro' => '-KPIC', -); - -my %CC_ABI_FLAGS = ( - 'gcc' => { - 'amd64' => '-m64', - 'freebsd' => '-pthread', - 'mips32' => '-mabi=n32', - 'mips64' => '-mabi=64', - 'netbsd' => '-pthread', - 'openbsd' => '-pthread', - 'ppc64' => '-m64', - 'qnx' => '-fexceptions', - 's390' => '-m31', - 's390x' => '-m64', - 'sparc32' => '-m32 -mno-app-regs', - 'sparc64' => '-m64 -mno-app-regs', - }, - 'hpcc' => { - 'hppa1.0' => '+DAportable', - 'hppa1.1' => '+DA1.1', - 'hppa2.0' => '+DA2.0W', - }, - 'kai' => { - 'all' => '--one_per', - }, - 'mipspro' => { - 'mips32' => '-n32', - 'mips64' => '-64', - }, - 'sunwspro' => { - 'sparc64' => '-xarch=v9', - }, -); - -my %CC_SO_LINK_FLAGS = ( - 'compaq' => { - 'default' => '$(CXX) -shared -soname $(SONAME)', - }, - 'ekopath' => { - 'default' => '$(CXX) -shared -fPIC -Wl,-soname,$(SONAME)', - }, - 'gcc' => { - 'aix' => '$(CXX) -shared -fPIC', - 'beos' => 'ld -shared -h $(SONAME)', - 'darwin' => '$(CXX) -dynamiclib -fPIC -install_name $(SONAME)', - 'default' => '$(CXX) -shared -fPIC -Wl,-soname,$(SONAME)', - 'hpux' => '$(CXX) -shared -fPIC -Wl,+h,$(SONAME)', - 'solaris' => '$(CXX) -shared -fPIC -Wl,-h,$(SONAME)', - }, - 'hpcc' => { - 'default' => '$(CXX) +Z -b -Wl,+h,$(SONAME)', - }, - 'icc' => { - 'default' => '$(CXX) -KPIC -shared', - }, - 'kai' => { - 'default' => '$(CXX) --soname $(SONAME)', - }, - 'mipspro' => { - 'default' => '$(CXX) -shared -Wl,-soname,$(SONAME)', - }, - 'pgi' => { - 'linux' => '$(CXX) -shared -fPIC -Wl,-soname,$(SONAME)', - 'solaris' => '$(CXX) -G -fPIC -Wl,-h,$(SONAME)', - }, - 'sgipro64' => { - 'default' => '$(CXX) -shared -Wl,-soname,$(SONAME)', - }, - 'sunwspro' => { - 'default' => '$(CXX) -G -h$(SONAME)', - }, -); - -my %CC_AR_COMMAND = ( - 'bcc' => 'tlib /C /P256', - 'compaq' => '', - 'ekopath' => '', - 'gcc' => '', - 'hpcc' => '', - 'icc' => '', - 'kai' => 'KCC -o', - 'mipspro' => '', - 'msvc' => 'link /lib', - 'pgi' => '', - 'sgipro64' => '', - 'sunwspro' => '', -); - -my %MAKEFILE_STYLE = ( - 'bcc' => 'nmake', - 'compaq' => 'unix', - 'ekopath' => 'unix', - 'gcc' => 'unix', - 'hpcc' => 'unix', - 'icc' => 'unix', - 'kai' => 'unix', - 'mipspro' => 'unix', - 'msvc' => 'nmake', - 'pgi' => 'unix', - 'sgipro64' => 'unix', - 'sunwspro' => 'unix', -); - -my %REALNAME = ( - 'aix' => 'AIX', - 'alpha' => 'DEC Alpha', - 'amd64' => 'AMD64', - 'arm' => 'ARM', - 'bcc' => 'Borland C++', - 'beos' => 'BeOS', - 'compaq' => 'Compaq C++', - 'cygwin' => 'Cygwin', - 'darwin' => 'Darwin / MacOS X', - 'ekopath' => 'PathScale EKOPath C++', - 'freebsd' => 'FreeBSD', - 'gcc' => 'GNU C++', - 'hpcc' => 'HP-UX C++', - 'hppa' => 'HP-PA', - 'hpux' => 'HP-UX', - 'ia32' => 'IA-32', - 'ia64' => 'IA-64', - 'icc' => 'Intel C++', - 'irix' => 'IRIX', - 'kai' => 'KAI C++', - 'linux' => 'Linux', - 'm68k' => 'Motorola 680x0', - 'mips32' => 'MIPS', - 'mips64' => 'MIPS64', - 'mipspro' => 'SGI MIPSPro C++', - 'msvc' => 'Visual C++ 2000/2003', - 'netbsd' => 'NetBSD', - 'openbsd' => 'OpenBSD', - 'pgi' => 'Portland Group C++', - 'ppc' => 'PowerPC', - 'ppc64' => 'PowerPC 64', - 'qnx' => 'QNX', - 's390' => 'S/390 31-bit', - 's390x' => 'S/390 64-bit', - 'sgipro64' => 'SGI Pro64', - 'sh' => 'Hitachi SH', - 'solaris' => 'Solaris', - 'sparc32' => 'SPARC', - 'sparc64' => 'SPARC64', - 'sunwspro' => 'Sun Workshop Pro C++', - 'tru64' => 'Tru64', - 'windows' => 'MS Windows', -); - +my %REALNAME = (); + +my $ARCH_DIR = 'misc/config/arch'; +my $OS_DIR = 'misc/config/os'; +my $CC_DIR = 'misc/config/cc'; + +my ($ARCH,$ARCH_ALIAS,$DEFAULT_SUBMODEL,$SUBMODEL_ALIAS) = + arch_defines($ARCH_DIR,\%REALNAME); + +my ($OS_SUPPORTS_ARCH,$OS_SUPPORTS_SHARED,$OS_TYPE,$OS_OBJ_SUFFIX, + $OS_SHARED_SUFFIX,$OS_STATIC_SUFFIX,$OS_AR_COMMAND, + $OS_AR_NEEDS_RANLIB,$OS_ALIAS,$INSTALL_INFO) = + os_defines($OS_DIR,\%REALNAME); + +my ($CC_BINARY_NAME, $CC_LIB_OPT_FLAGS, $CC_CHECK_OPT_FLAGS, + $CC_WARN_FLAGS, $CC_LANG_FLAGS, $CC_SO_OBJ_FLAGS, + $CC_SO_LINK_FLAGS, $CC_DEBUG_FLAGS, $CC_NO_DEBUG_FLAGS, + $CC_MACH_OPT_FLAGS, $CC_MACH_OPT_FLAGS_RE, $CC_ABI_FLAGS, + $CC_SUPPORTS_OS, $CC_SUPPORTS_ARCH, $CC_AR_COMMAND, + $MAKEFILE_STYLE) = cc_defines($CC_DIR,\%REALNAME); + +my %ARCH = %$ARCH; +my %ARCH_ALIAS = %$ARCH_ALIAS; +my %DEFAULT_SUBMODEL = %$DEFAULT_SUBMODEL; +my %SUBMODEL_ALIAS = %$SUBMODEL_ALIAS; + +my %OS_SUPPORTS_ARCH = %$OS_SUPPORTS_ARCH; +my %OS_SUPPORTS_SHARED = %$OS_SUPPORTS_SHARED; +my %OS_TYPE = %$OS_TYPE; +my %OS_OBJ_SUFFIX = %$OS_OBJ_SUFFIX; +my %OS_SHARED_SUFFIX = %$OS_SHARED_SUFFIX; +my %OS_STATIC_SUFFIX = %$OS_STATIC_SUFFIX; +my %OS_AR_COMMAND = %$OS_AR_COMMAND; +my %OS_AR_NEEDS_RANLIB = %$OS_AR_NEEDS_RANLIB; +my %OS_ALIAS = %$OS_ALIAS; +my %INSTALL_INFO = %$INSTALL_INFO; + +my %CC_BINARY_NAME = %$CC_BINARY_NAME; +my %CC_LIB_OPT_FLAGS = %$CC_LIB_OPT_FLAGS; +my %CC_CHECK_OPT_FLAGS = %$CC_CHECK_OPT_FLAGS; +my %CC_WARN_FLAGS = %$CC_WARN_FLAGS; +my %CC_LANG_FLAGS = %$CC_LANG_FLAGS; +my %CC_SO_OBJ_FLAGS = %$CC_SO_OBJ_FLAGS; +my %CC_SO_LINK_FLAGS = %$CC_SO_LINK_FLAGS; +my %CC_DEBUG_FLAGS = %$CC_DEBUG_FLAGS; +my %CC_NO_DEBUG_FLAGS = %$CC_NO_DEBUG_FLAGS; +my %CC_MACHINE_OPT_FLAGS = %$CC_MACH_OPT_FLAGS; +my %CC_MACHINE_OPT_FLAGS_RE = %$CC_MACH_OPT_FLAGS_RE; +my %CC_ABI_FLAGS = %$CC_ABI_FLAGS; +my %CC_SUPPORTS_OS = %$CC_SUPPORTS_OS; +my %CC_SUPPORTS_ARCH = %$CC_SUPPORTS_ARCH; +my %CC_AR_COMMAND = %$CC_AR_COMMAND; +my %MAKEFILE_STYLE = %$MAKEFILE_STYLE; # if($#ARGV < 0) { help(); } my $debug = 0; @@ -813,6 +128,8 @@ my $module_set = ''; my $dumb_gcc = 0; my $autoconfig = 1; my $user_set_root = ''; +my $build_dir = ''; +my $local_config = ''; my @using_mods; my ($doc_dir, $lib_dir); @@ -832,6 +149,8 @@ GetOptions('debug' => sub { $debug = 1; }, 'prefix=s' => \$user_set_root, 'docdir=s' => \$doc_dir, 'libdir=s' => \$lib_dir, + 'build-dir=s' => \$build_dir, + 'local-config=s' => \$local_config, 'help' => sub { help(); } ); @@ -851,6 +170,12 @@ else { help(); } my ($cc,$os,$submodel) = split(/-/,$cc_os_cpu_set,3); if(!defined($cc) or !defined($os) or !defined($submodel)) { help(); } +if($build_dir ne '') +{ + $BUILD_DIR = $build_dir; + $BUILD_INCLUDE_DIR = $build_dir . '/include'; +} + ################################################## # Some special hacks # ################################################## @@ -1282,6 +607,15 @@ END_OF_CONFIG_H } print CONFIG_H $defines; + + if($local_config ne '') + { + open LOCAL_CONFIG, "<$local_config" or die + "Couldn't read $local_config ($!)\n"; + print CONFIG_H "\n"; + while(<LOCAL_CONFIG>) { print CONFIG_H; } + } + print CONFIG_H "\n#endif\n"; close CONFIG_H; @@ -1548,7 +882,6 @@ Options: --debug: tune compiler flags for debugging; inferior code can result --disable-shared: disable building shared libararies --noauto: Disable autoconfiguration - --dumb-gcc: change makefile flags to support GCC 2.95.x, 3.[34].x, or 4.0.x --make-style=STYLE: override the guess as to what type of makefile to use --modules=MODS: add module(s) MODS to the library. --module-set=SET: add a pre-specified set of modules (unix|win32|beos) @@ -2566,3 +1899,290 @@ END_OF_FILE close PKGCONFIG; chmod 0755, 'botan-config'; } + +sub arch_defines { + my(undef, $REALNAME) = @_; + my $dir = new DirHandle $_[0]; + if(!defined $dir) { + die "Couldn't open directory $_[0] ($!)"; + } + + my(%SUBMODEL_ALIAS,%DEFAULT_SUBMODEL,%ARCH,%ARCH_ALIAS); + + while(defined($_ = $dir->read)) { + next if($_ eq '.' or $_ eq '..'); + my $arch = $_; + my $filename = catfile($_[0], $arch); + open ARCHFILE, "<$filename" or die "Couldn't open $filename, ($!)"; + + $ARCH{$arch} = $arch; + while(<ARCHFILE>) { + $_ = process($_); + next unless $_; + + $$REALNAME{$arch} = $1 if(/^realname \"(.*)\"/); + $DEFAULT_SUBMODEL{$arch} = $1 if(/^default_submodel (.*)$/); + + # Read in a list of aliases and add them to ARCH_ALIAS + if(/^<aliases>$/) { + while(1) { + $_ = process($_ = <ARCHFILE>); + next unless $_; + last if(m@^</aliases>$@); + $ARCH_ALIAS{$_} = $arch; + } + } + # Read in a list of submodels and add them to ARCH + if(/^<submodels>$/) { + while(1) { + $_ = process($_ = <ARCHFILE>); + next unless $_; + last if(m@^</submodels>$@); + $ARCH{$_} = $arch; + } + } + + # Read in a list of submodel aliases and add them to SUBMODEL_ALIAS + if(/^<submodel_aliases>$/) { + while(1) { + $_ = process($_ = <ARCHFILE>); + next unless $_; + last if(m@^</submodel_aliases>$@); + m/^(\S*) -> (\S*)$/; + $SUBMODEL_ALIAS{$1} = $2; + } + } + } + } + undef $dir; + + return (\%ARCH,\%ARCH_ALIAS,\%DEFAULT_SUBMODEL,\%SUBMODEL_ALIAS); +} + +sub os_defines { + my(undef, $REALNAME) = @_; + my $dir = new DirHandle $_[0]; + if(!defined $dir) { + die "Couldn't open directory $_[0] ($!)"; + } + + my(%OS_SUPPORTS_ARCH, + %OS_SUPPORTS_SHARED, + %OS_TYPE, + %INSTALL_INFO, + %OS_OBJ_SUFFIX, + %OS_SHARED_SUFFIX, + %OS_STATIC_SUFFIX, + %OS_AR_COMMAND, + %OS_AR_NEEDS_RANLIB, + %OS_ALIAS); + + while(defined($_ = $dir->read)) { + next if($_ eq '.' or $_ eq '..'); + my $os = $_; + + my $filename = catfile($_[0], $os); + open OSFILE, "<$filename" or die "Couldn't open $filename, ($!)"; + $OS_SHARED_SUFFIX{$os} = ''; + $OS_AR_COMMAND{$os} = ''; + + # Default values + while(<OSFILE>) { + $_ = process($_); + next unless $_; + + $$REALNAME{$os} = $1 if(/^realname \"(.*)\"/); + $OS_TYPE{$os} = $1 if(/^os_type (.*)/); + $OS_AR_COMMAND{$os} = $1 if(/^ar_command \"(.*)\"/); + $OS_AR_NEEDS_RANLIB{$os} = 1 if(/^ar_needs_ranlib yes$/); + $OS_AR_NEEDS_RANLIB{$os} = 0 if(/^ar_needs_ranlib no$/); + $OS_OBJ_SUFFIX{$os} = $1 if(/^obj_suffix (.*)/); + $OS_SHARED_SUFFIX{$os} = $1 if(/^so_suffix (.*)/); + $OS_STATIC_SUFFIX{$os} = $1 if(/^static_suffix (.*)/); + + $INSTALL_INFO{$os}{'root'} = $1 if(/^install_root (.*)/); + $INSTALL_INFO{$os}{'headers'} = $1 if(/^header_dir (.*)/); + $INSTALL_INFO{$os}{'libs'} = $1 if(/^lib_dir (.*)/); + $INSTALL_INFO{$os}{'docs'} = $1 if(/^doc_dir (.*)/); + $INSTALL_INFO{$os}{'user'} = $1 if(/^install_user (.*)/); + $INSTALL_INFO{$os}{'group'} = $1 if(/^install_group (.*)/); + $INSTALL_INFO{$os}{'command'} = $1 + if(/^install_cmd (.*)/); + + + if(/^<aliases>$/) { + while(1) { + $_ = process($_ = <OSFILE>); + next unless $_; + last if(m@^</aliases>$@); + $OS_ALIAS{$_} = $os; + } + } + if(/^<supports_shared>$/) { + while(1) { + $_ = process($_ = <OSFILE>); + next unless $_; + last if(m@^</supports_shared>$@); + push @{$OS_SUPPORTS_SHARED{$os}}, $_; + } + } + + # Read in a list of architectures and add them to OS_SUPPORTS_ARCH + if(/^<arch>$/) { + while(1) { + $_ = process($_ = <OSFILE>); + next unless $_; + last if(m@^</arch>$@); + push @{$OS_SUPPORTS_ARCH{$os}}, $_; + } + } + } + } + undef $dir; + + return (\%OS_SUPPORTS_ARCH,\%OS_SUPPORTS_SHARED,\%OS_TYPE,\%OS_OBJ_SUFFIX, + \%OS_SHARED_SUFFIX,\%OS_STATIC_SUFFIX,\%OS_AR_COMMAND, + \%OS_AR_NEEDS_RANLIB,\%OS_ALIAS,\%INSTALL_INFO); + +} + +############################################################################# +sub cc_defines { + my(undef, $REALNAME) = @_; + my $dir = new DirHandle $_[0]; + if(!defined $dir) { + die "Couldn't open directory $_[0] ($!)"; + } + + # Hashes 'o plenty here + my(%CC_BINARY_NAME, + %CC_LIB_OPT_FLAGS, + %CC_CHECK_OPT_FLAGS, + %CC_WARN_FLAGS, + %CC_LANG_FLAGS, + %CC_SO_OBJ_FLAGS, + %CC_SO_LINK_FLAGS, + %CC_DEBUG_FLAGS, + %CC_NO_DEBUG_FLAGS, + %CC_MACH_OPT_FLAGS, + %CC_MACH_OPT_FLAGS_RE, + %CC_ABI_FLAGS, + %CC_SUPPORTS_OS, + %CC_SUPPORTS_ARCH, + %CC_AR_COMMAND, + %MAKEFILE_STYLE); + + while(defined($_ = $dir->read)) { + next if($_ eq '.' or $_ eq '..'); + my $cc = $_; + my $filename = catfile($_[0], $cc); + open CCFILE, "<$filename" or die "Couldn't open $filename, ($!)"; + + # Default to empty values, so they don't have to be explicitly set + $CC_LIB_OPT_FLAGS{$cc} = + $CC_CHECK_OPT_FLAGS{$cc} = + $CC_LANG_FLAGS{$cc} = + $CC_WARN_FLAGS{$cc} = + $CC_SO_OBJ_FLAGS{$cc} = + $CC_DEBUG_FLAGS{$cc} = + $CC_AR_COMMAND{$cc} = + $CC_NO_DEBUG_FLAGS{$cc} = ''; + + while(<CCFILE>) { + $_ = process($_); + next unless $_; + + $$REALNAME{$cc} = $1 if(/^realname \"(.*)\"/); + $CC_BINARY_NAME{$cc} = $1 if(/^binary_name \"(.*)\"/); + + $CC_LIB_OPT_FLAGS{$cc} = $1 if(/^lib_opt_flags \"(.*)\"/); + + $CC_CHECK_OPT_FLAGS{$cc} = $1 + if(/^check_opt_flags \"(.*)\"/); + + $CC_AR_COMMAND{$cc} = $1 if(/^ar_command \"(.*)\"/); + $CC_LANG_FLAGS{$cc} = $1 if(/^lang_flags \"(.*)\"/); + $CC_WARN_FLAGS{$cc} = $1 if(/^warning_flags \"(.*)\"/); + $CC_SO_OBJ_FLAGS{$cc} = $1 if(/^so_obj_flags \"(.*)\"/); + $CC_DEBUG_FLAGS{$cc} = $1 if(/^debug_flags \"(.*)\"/); + $CC_NO_DEBUG_FLAGS{$cc} = $1 if(/^no_debug_flags \"(.*)\"/); + $MAKEFILE_STYLE{$cc} = $1 if(/^makefile_style (.*)/); + + # Read in a list of supported CPU types + if(/^<arch>$/) { + while(1) { + $_ = process($_ = <CCFILE>); + next unless $_; + last if(m@^</arch>$@); + push @{$CC_SUPPORTS_ARCH{$cc}}, $_; + } + } + + # Read in a list of supported OSes + if(/^<os>$/) { + while(1) { + $_ = process($_ = <CCFILE>); + next unless $_; + last if(m@^</os>$@); + push @{$CC_SUPPORTS_OS{$cc}}, $_; + } + } + + # Read in a list of machine optimization flags + if(/^<mach_opt>$/) { + while(1) { + $_ = process($_ = <CCFILE>); + next unless $_; + last if(m@^</mach_opt>$@); + m/^(\S*) -> \"(.*)\" ?(.*)?$/; + $CC_MACH_OPT_FLAGS{$cc}{$1} = $2; + if($3 ne '') { + $CC_MACH_OPT_FLAGS_RE{$cc}{$1} = $3; + } + } + } + + # Some systems need certain flags passed for linking as well + # (usually these change the ABI somehow). We just append this + # value to the CXX variable, so it's used for all ops. + if(/^<mach_abi_linking>$/) { + while(1) { + $_ = process($_ = <CCFILE>); + next unless $_; + last if(m@^</mach_abi_linking>$@); + m/^(\S*) -> \"(.*)\"$/; + $CC_ABI_FLAGS{$cc}{$1} = $2; + } + } + + # Read in a list of flags to created a shared lib (and set soname) + if(/^<so_link_flags>$/) { + while(1) { + $_ = process($_ = <CCFILE>); + next unless $_; + last if(m@^</so_link_flags>$@); + m/^(\S*) -> \"(.*)\"$/; + $CC_SO_LINK_FLAGS{$cc}{$1} = $2; + } + } + } + } + undef $dir; + + return \(%CC_BINARY_NAME, + %CC_LIB_OPT_FLAGS, + %CC_CHECK_OPT_FLAGS, + %CC_WARN_FLAGS, + %CC_LANG_FLAGS, + %CC_SO_OBJ_FLAGS, + %CC_SO_LINK_FLAGS, + %CC_DEBUG_FLAGS, + %CC_NO_DEBUG_FLAGS, + %CC_MACH_OPT_FLAGS, + %CC_MACH_OPT_FLAGS_RE, + %CC_ABI_FLAGS, + %CC_SUPPORTS_OS, + %CC_SUPPORTS_ARCH, + %CC_AR_COMMAND, + %MAKEFILE_STYLE); +} diff --git a/misc/config/code/config.pl b/misc/config/code/config.pl deleted file mode 100644 index 071b83823..000000000 --- a/misc/config/code/config.pl +++ /dev/null @@ -1,54 +0,0 @@ -# If 1, then we always copy include files, without attempting to make symlinks -# or hardlinks. It seems that link("","") will succeed on Windows, but the -# actual operation will fail (FAT32 doesn't support any kind of links). -# This is automatically forced if $^O is 'dos', 'MSWin32', or 'cygwin' -my $FORCE_COPY = 0; - -# A whole buncha filenames -my $INCLUDE_DIR = 'include'; -my $SRC_DIR = 'src'; -my $MOD_DIR = 'modules'; -my $CHECK_DIR = 'checks'; -my $DOC_DIR = 'doc'; -my $BUILD_DIR = 'build'; -my $BUILD_DIR_LIB = 'lib'; -my $BUILD_DIR_CHECKS = 'checks'; -my $MAKE_FILE = 'Makefile'; -my $BUILD_INCLUDE_DIR = 'build/include'; - -my $CONFIG_HEADER = 'build.h'; - -my $CPP_INCLUDE_DIR_DIRNAME = 'botan'; - -# Available module sets -my %MODULE_SETS = ( - 'unix' => [ 'alloc_mmap', 'es_egd', 'es_ftw', 'es_unix', 'fd_unix', - 'tm_unix' ], - 'beos' => [ 'es_beos', 'es_unix', 'fd_unix', 'tm_unix' ], - 'win32' => ['es_capi', 'es_win32', 'mux_win32', 'tm_win32' ], -); - -# Documentation list -my %DOCS = ( - 'readme.txt' => undef, # undef = file is in top level directory - - 'pgpkeys.asc' => $DOC_DIR, - - 'api.pdf' => $DOC_DIR, - 'tutorial.pdf' => $DOC_DIR, - 'fips140.pdf' => $DOC_DIR, - - 'api.tex' => $DOC_DIR, - 'tutorial.tex' => $DOC_DIR, - 'fips140.tex' => $DOC_DIR, - - 'botan.rc' => $DOC_DIR, - - 'credits.txt' => $DOC_DIR, -# 'deprecated.txt' => $DOC_DIR, - 'info.txt' => $DOC_DIR, - 'license.txt' => $DOC_DIR, - 'log.txt' => $DOC_DIR, - 'thanks.txt' => $DOC_DIR, - 'todo.txt' => $DOC_DIR - ); diff --git a/misc/config/code/conflict.pl b/misc/config/code/conflict.pl deleted file mode 100644 index 2f76c7623..000000000 --- a/misc/config/code/conflict.pl +++ /dev/null @@ -1,29 +0,0 @@ -sub check_for_conflicts { - my @mods = @_; - my (%ignored, %added, %replaced, %defines); - foreach my $mod (@mods) { - - sub check_hash { - my ($mod, $do_what, $hashref) = @_; - foreach (keys %{ $MODULES{$mod}{$do_what} }) { - ${$hashref}{conflicts($mod, $_, $do_what, $hashref)} = $mod; - } - } - - check_hash($mod, 'define', \%defines); - check_hash($mod, 'replace', \%replaced); - check_hash($mod, 'add', \%added); - check_hash($mod, 'ignore', \%ignored); - } -} - -sub conflicts { - my ($mod, $item, $do_what, $hashref) = @_; - return if(!defined($item)); - - if(defined($$hashref{$item})) { - my $other_mod = $$hashref{$item}; - die "(error): Both $mod and $other_mod $do_what $item\n"; - } - return $item; -} diff --git a/misc/config/code/header.pl b/misc/config/code/header.pl deleted file mode 100644 index b7cf76eaf..000000000 --- a/misc/config/code/header.pl +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/perl -w - -require 5.006; - -use strict; -use DirHandle; -use Getopt::Long; -use File::Spec; -use File::Copy; diff --git a/misc/config/code/help.pl b/misc/config/code/help.pl deleted file mode 100644 index 4b3d47fa3..000000000 --- a/misc/config/code/help.pl +++ /dev/null @@ -1,46 +0,0 @@ -sub help - { - print <<ENDOFHELP; -Usage: $0 [options] CC-OS-CPU - -See doc/building.pdf for more information about this program. - -Options: - --prefix=/path: Set the installation path - --libdir=/path: Install library files in \${prefix}/\${libdir} - --docdir=/path: Install documentation in \${prefix}/\${docdir} - - --debug: tune compiler flags for debugging; inferior code can result - --disable-shared: disable building shared libararies - --noauto: Disable autoconfiguration - --make-style=STYLE: override the guess as to what type of makefile to use - --modules=MODS: add module(s) MODS to the library. - --module-set=SET: add a pre-specified set of modules (unix|win32|beos) - -You may use 'generic' for OS or CPU (useful if your OS or CPU isn't listed). - -CPU can be a generic family name or a specific model name. Common aliases are -supported but not listed. Choosing a specific submodel will usually result in -code that will not run on earlier versions of that architecture. - -ENDOFHELP - print_listing('CC', %CC_BINARY_NAME); - print_listing('OS', %OS_SUPPORTS_ARCH); - print_listing('CPU', %DEFAULT_SUBMODEL); - if(%MODULES) { print_listing('MODULES', %MODULES); } - exit; - } - -sub print_listing - { - my ($header, %hash) = @_; - print "$header: "; - my $len = length "$header: "; - foreach(sort(keys %hash)) { - if($len > 71) { print "\n "; $len = 3; } - print "$_ "; - $len += length "$_ "; - } - print "\n"; - } - diff --git a/misc/config/code/include.pl b/misc/config/code/include.pl deleted file mode 100644 index 398f7e8c7..000000000 --- a/misc/config/code/include.pl +++ /dev/null @@ -1,76 +0,0 @@ -sub print_config_h - { - my ($major, $minor, $patch, $os, $arch, $cpu, - $mp_bits, $defines_ref, $defines_base_ref) = @_; - - my @defines = @{ $defines_ref }; - my @defines_base = @{ $defines_base_ref }; - - chomp($patch); - - my $defines = ''; - foreach (sort @defines_base) { - next if not defined $_ or not $_; - $defines .= "#define BOTAN_$_\n"; - } - if(scalar @defines_base) { $defines .= "\n"; } - - foreach (sort @defines) { - next if not defined $_ or not $_; - $defines .= "#define BOTAN_EXT_$_\n"; - } - - chomp($defines); - - if($defines) { $defines = "\n" . $defines . "\n"; } - - open CONFIG_H, ">$CONFIG_H_FILE" or - die "Couldn't write $CONFIG_H_FILE ($!)\n"; - - print CONFIG_H <<END_OF_CONFIG_H; -/************************************************* -* Build Config Header File * -* (C) 1999-2006 The Botan Project * -*************************************************/ - -#ifndef BOTAN_BUILD_CONFIG_H__ -#define BOTAN_BUILD_CONFIG_H__ - -#define BOTAN_VERSION_MAJOR $major -#define BOTAN_VERSION_MINOR $minor -#define BOTAN_VERSION_PATCH $patch - -#define BOTAN_MP_WORD_BITS $mp_bits -#define BOTAN_DEFAULT_BUFFER_SIZE 4096 - -#define BOTAN_KARAT_MUL_THRESHOLD 12 -#define BOTAN_KARAT_SQR_THRESHOLD 12 -END_OF_CONFIG_H - - if($arch ne 'generic') - { - $arch = uc $arch; - print CONFIG_H "\n#define BOTAN_TARGET_ARCH_IS_$arch\n"; - - if($arch ne $cpu) - { - $cpu = uc $cpu; - $cpu =~ s/-/_/g; - print CONFIG_H "#define BOTAN_TARGET_CPU_IS_$cpu\n"; - } - } - - print CONFIG_H $defines; - - if($local_config ne '') - { - open LOCAL_CONFIG, "<$local_config" or die - "Couldn't read $local_config ($!)\n"; - print CONFIG_H "\n"; - while(<LOCAL_CONFIG>) { print CONFIG_H; } - } - - print CONFIG_H "\n#endif\n"; - - close CONFIG_H; - } diff --git a/misc/config/code/loadmod.pl b/misc/config/code/loadmod.pl deleted file mode 100644 index 4a6bfda6d..000000000 --- a/misc/config/code/loadmod.pl +++ /dev/null @@ -1,79 +0,0 @@ -sub load_module { - my ($modname,$cc,$os,$arch,$sub,%module) = @_; - - # Check to see if everything is OK WRT system requirements - if(defined($module{'os'}) and !exists($module{'os'}{$os}) and - $os ne 'generic') - { die "(error): Module '$modname' does not run on $REALNAME{$os}\n"; } - - if(defined($module{'arch'}) and $arch ne 'generic' and - !exists($module{'arch'}{$arch}) and !exists($module{'arch'}{$sub})) - { die "(error): Module '$modname' does not run on ". - "$REALNAME{$arch}/$sub\n"; } - - if(defined($module{'cc'}) and !exists($module{'cc'}{$cc})) - { - die "(error): Module '$modname' does not work with $REALNAME{$cc}\n"; - } - - handle_files($modname, $module{'replace'}, \&replace_file); - handle_files($modname, $module{'ignore'}, \&ignore_file); - handle_files($modname, $module{'add'}, \&add_file); - - if(defined($module{'notes'})) - { - my $realname = $module{'name'}; - my $note = $module{'notes'}; - print STDERR "(note): $modname (\"$realname\"): $note\n"; - } -} - -sub handle_files { - my($modname, $hash_scalar, $func) = @_; - return unless defined($hash_scalar); - my %hash = %{ $hash_scalar }; - foreach (sort keys %hash) { - if(defined($hash{$_})) { &$func($modname, $_, $hash{$_}); } - else { &$func($modname, $_); } - } -} - -sub full_path { - my ($file,$modname) = @_; - if(defined($modname)) - { return catfile ($MOD_DIR, $modname, $file); } - else { - if($file =~ /\.h$/) - { return catfile ($INCLUDE_DIR, $file); } - elsif($file =~ /\.cpp$/ or $file =~ /\.s$/ or $file =~ /\.S$/) - { return catfile ($SRC_DIR, $file); } - else { die "(internal error): Not sure where to put $file\n"; } - } -} - -sub add_file { - my ($modname,$file) = @_; - check_for_file(full_path($file, $modname), $modname); - if($file =~ /\.cpp$/ or $file =~ /\.s$/ or $file =~ /\.S$/) - { $added_src{$file} = catdir($MOD_DIR, $modname); } - elsif($file =~ /\.h$/) - { $added_include{$file} = catdir($MOD_DIR, $modname); } - else { die "Not sure where to put $file\n"; } -} - -sub ignore_file { - my ($modname,$file) = @_; - check_for_file(full_path($file), $modname); - if($file =~ /\.cpp$/ or $file =~ /\.s$/ or $file =~ /\.S$/) - { $ignored_src{$file} = 1; } - elsif($file =~ /\.h$/) { $ignored_include{$file} = 1; } - else { die "Not sure where to put $file\n"; } -} - -# This works because ignore file always runs on files in the main source tree, -# and add always works on the file in the modules directory. -sub replace_file { - my ($modname,$file) = @_; - ignore_file($modname, $file); - add_file($modname, $file); -} diff --git a/misc/config/code/main.pl b/misc/config/code/main.pl deleted file mode 100644 index 6465d8864..000000000 --- a/misc/config/code/main.pl +++ /dev/null @@ -1,243 +0,0 @@ -# if($#ARGV < 0) { help(); } - -my $debug = 0; -my $no_shared = 0; -my $make_style = ''; -my $module_set = ''; -my $dumb_gcc = 0; -my $autoconfig = 1; -my $user_set_root = ''; -my $build_dir = ''; -my $local_config = ''; -my @using_mods; -my ($doc_dir, $lib_dir); - -my %MODULES = get_modules_list($MOD_DIR); - -################################################## -# Parse command line options # -################################################## -GetOptions('debug' => sub { $debug = 1; }, - 'disable-shared' => sub { $no_shared = 1; }, - 'noauto' => sub { $autoconfig = 0 }, - 'gcc295x' => sub { $dumb_gcc = 1; }, - 'dumb-gcc' => sub { $dumb_gcc = 1; }, - 'make-style=s' => \$make_style, - 'modules=s' => \@using_mods, - 'module-set=s' => \$module_set, - 'prefix=s' => \$user_set_root, - 'docdir=s' => \$doc_dir, - 'libdir=s' => \$lib_dir, - 'build-dir=s' => \$build_dir, - 'local-config=s' => \$local_config, - 'help' => sub { help(); } - ); - -if($^O eq 'MSWin32' or $^O eq 'dos' or $^O eq 'cygwin') { - print "Disabling use of symlink()/link() due to Win32 FS limitations\n"; - $FORCE_COPY = 1; -} - -my $cc_os_cpu_set = ''; -if($#ARGV == 0) { $cc_os_cpu_set = $ARGV[0]; } -elsif($autoconfig) { - $cc_os_cpu_set = guess_triple(); - print "(autoconfig): Guessing your system config is $cc_os_cpu_set\n"; -} -else { help(); } - -my ($cc,$os,$submodel) = split(/-/,$cc_os_cpu_set,3); -if(!defined($cc) or !defined($os) or !defined($submodel)) { help(); } - -if($build_dir ne '') -{ - $BUILD_DIR = $build_dir; - $BUILD_INCLUDE_DIR = $build_dir . '/include'; -} - -################################################## -# Some special hacks # -################################################## -#warn "(warning): OpenBSD's GCC 2.95.3 is often buggy with -O2\n" . -# " : Run 'make check' before installing!\n" -# if($os eq 'openbsd' && $cc eq 'gcc'); - -if($cc eq 'gcc' && $dumb_gcc != 1) -{ - my $gcc_version = ''; - - # Stupid Apple. At least they fixed it after 10.2 - if($os eq 'darwin') { $gcc_version = `c++ -v 2>&1`; } - else { $gcc_version = `g++ -v 2>&1`; } - - $gcc_version = '' if not defined $gcc_version; - - # GCC 2.95.x and 3.[34] are busted in handling long long in C++. The third - # check is because on Cygwin (at least for me) $gcc_version doesn't get the - # output from g++, not sure what's up with that. If it's Cygwin and we - # didn't get output, assume it's a buggy GCC. There is no reduction in code - # quality, etc, so even if we're wrong it's no big deal. - - if(($gcc_version =~ /4\.[01]/) || - ($gcc_version =~ /3\.[34]/) || - ($gcc_version =~ /2\.95\.[0-4]/) || - ($gcc_version eq '' && $^O eq 'cygwin')) - { - warn "(note): Enabling -fpermissive to work around possible GCC issues\n"; - $dumb_gcc = 1; - } - if($gcc_version =~ /2\.95\.[0-4]/) - { - print "(note): GCC 2.95.x issues a lot of warnings for things in\n" . - " Botan; either ignore the warnings or upgrade to 3.x\n"; - } -} - -################################################## -# Check input # -################################################## -$os = $OS_ALIAS{$os} if(defined $OS_ALIAS{$os}); - -die "(error): Compiler $cc isn't known\n" unless defined($CC_BINARY_NAME{$cc}); - -die "(error): OS $os isn't known\n" unless - (defined($OS_SUPPORTS_ARCH{$os}) or $os eq 'generic'); - -# Get the canonical submodel name (like r8k -> r8000) -$submodel = $SUBMODEL_ALIAS{$submodel} if(defined($SUBMODEL_ALIAS{$submodel})); - -my $arch = undef; -# Convert an arch alias to it's real name (like axp -> alpha) -if(defined($ARCH_ALIAS{$submodel})) - { $arch = $ARCH_ALIAS{$submodel}; $submodel = $arch; } -# If it's a regular submodel type, figure out what arch it is -elsif(defined($ARCH{$submodel})) - { $arch = $ARCH{$submodel}; } -elsif($submodel eq 'generic') { $arch = 'generic'; } -else { die "(error): Arch $submodel isn't known\n"; } - -# If we got a generic family name as the model type -if($submodel eq $arch and $submodel ne 'generic') { - $submodel = $DEFAULT_SUBMODEL{$arch}; - - warn "(note): Using $submodel as default type for family ", - $REALNAME{$arch},"\n" if($submodel ne $arch); -} - -$make_style = $MAKEFILE_STYLE{$cc} unless($make_style); - -die "(error): Module set $module_set isn't known\n" - if($module_set && !defined($MODULE_SETS{$module_set})); - -if($module_set) { - foreach (@{ $MODULE_SETS{$module_set} }) { push @using_mods,$_; } -} - -@using_mods = grep {/./} split(/,/,join(',',@using_mods)); - -if($autoconfig) -{ - foreach (guess_mods($cc,$os,$arch,$submodel)) - { - # Print a notice, *unless* it was enabled explicitly or via module set - my $picked_by_user = 0; - foreach my $x (@using_mods) { $picked_by_user = 1 if($_ eq $x); } - - print " (autoconfig): Enabling module $_\n" if(!$picked_by_user); - push @using_mods, $_; - } -} - -# Uniqify @using_mods -my %uniqed_mods; -foreach my $mod (@using_mods) { $uniqed_mods{$mod} = 0; } -@using_mods = sort keys %uniqed_mods; - -foreach (@using_mods) { - die "(error): Module $_ isn't known (try --help)\n" - unless(exists($MODULES{$_})); -} - -################################################## -# Does the OS support the arch? # -################################################## -die "(error): $REALNAME{$os} doesn't run on $arch ($submodel)\n" - unless($arch eq 'generic' or $os eq 'generic' or - in_array($OS_SUPPORTS_ARCH{$os}, $arch)); - -################################################## -# Does the compiler support the arch? # -################################################## -die "(error): $REALNAME{$cc} doesn't run on $arch ($submodel)\n" - unless($arch eq 'generic' or (in_array($CC_SUPPORTS_ARCH{$cc}, $arch))); - -################################################## -# Does the compiler support the OS? # -################################################## -die "(error): $REALNAME{$cc} doesn't run on $REALNAME{$os}\n" - unless($os eq 'generic' or (in_array($CC_SUPPORTS_OS{$cc}, $os))); - -################################################## -# Check for conflicts in the module selections # -################################################## -check_for_conflicts(@using_mods); -my (%ignored_src, %ignored_include, %added_src, %added_include); -foreach (@using_mods) { - load_module($_, $cc, $os, $arch, $submodel, %{ $MODULES{$_} }); -} - -################################################## -# Print some source files # -################################################## -print_pkg_config($os, $MAJOR_VERSION, $MINOR_VERSION, $PATCH_VERSION, - using_libs($os, @using_mods)); - -################################################## -# Figure out the files involved # -################################################## -my $CPP_INCLUDE_DIR = catdir($BUILD_INCLUDE_DIR, $CPP_INCLUDE_DIR_DIRNAME); -my $BUILD_LIB_DIR = catdir($BUILD_DIR, $BUILD_DIR_LIB); -my $BUILD_CHECK_DIR = catdir($BUILD_DIR, $BUILD_DIR_CHECKS); - -my %lib_src = list_dir($SRC_DIR, \%ignored_src); -my %check_src = list_dir($CHECK_DIR, undef); - -my %include = list_dir($INCLUDE_DIR, \%ignored_include); - -################################################## -# Set up the build tree # -################################################## -mkdirs(($BUILD_DIR, - $BUILD_INCLUDE_DIR, $CPP_INCLUDE_DIR, - $BUILD_LIB_DIR, $BUILD_CHECK_DIR)); -clean_out_dirs(($CPP_INCLUDE_DIR)); - -################################################## -# Generate the config.h header # -################################################## -my $CONFIG_H_FILE = catfile($BUILD_DIR, $CONFIG_HEADER); - -print_config_h($MAJOR_VERSION, $MINOR_VERSION, $PATCH_VERSION, - $os, $arch, $submodel, - find_mp_bits(@using_mods), defines(@using_mods), - defines_base(@using_mods)); - -$added_include{$CONFIG_HEADER} = $BUILD_DIR; - -################################################## -# Copy all headers # -################################################## -copy_files($CPP_INCLUDE_DIR, \%include, \%added_include); - -################################################## -# Print the makefile # -################################################## -my %all_includes = list_dir($CPP_INCLUDE_DIR); - -generate_makefile($make_style, - $cc, $os, $submodel, $arch, - $debug, $no_shared, $dumb_gcc, - \%lib_src, \%check_src, \%all_includes, - \%added_src, using_libs($os, @using_mods)); - -exit; diff --git a/misc/config/code/makefile.pl b/misc/config/code/makefile.pl deleted file mode 100644 index edbd8d1a1..000000000 --- a/misc/config/code/makefile.pl +++ /dev/null @@ -1,167 +0,0 @@ -################################################## -# Generate compiler options and print makefile # -################################################## -sub generate_makefile { - my($make_style, $cc, $os, $submodel, $arch, - $debug, $no_shared, $dumb_gcc, - $lib_src, $check_src, $all_includes, - $added_src, @libs_used) = @_; - - my %all_lib_srcs = (%{ $lib_src }, %{ $added_src }); - - ################################################## - # Set language options # - ################################################## - my $lang_flags = $CC_LANG_FLAGS{$cc}; - $lang_flags = "$lang_flags -fpermissive" if($dumb_gcc); - - ################################################## - # Set basic optimization options # - ################################################## - my $lib_opt_flags = $CC_LIB_OPT_FLAGS{$cc}; - if(!$debug and ($CC_NO_DEBUG_FLAGS{$cc})) - { $lib_opt_flags .= ' '.$CC_NO_DEBUG_FLAGS{$cc}; } - if($debug and ($CC_DEBUG_FLAGS{$cc})) - { $lib_opt_flags .= ' '.$CC_DEBUG_FLAGS{$cc}; } - - ################################################## - # Set machine dependent optimization options # - ################################################## - my $mach_opt_flags = ''; - if(defined($CC_MACHINE_OPT_FLAGS{$cc}{$submodel})) - { $mach_opt_flags = $CC_MACHINE_OPT_FLAGS{$cc}{$submodel}; } - elsif(defined($CC_MACHINE_OPT_FLAGS{$cc}{$arch})) { - $mach_opt_flags = $CC_MACHINE_OPT_FLAGS{$cc}{$arch}; - my $processed_modelname = $submodel; - if(defined($CC_MACHINE_OPT_FLAGS_RE{$cc}{$arch})) - { $processed_modelname =~ - s/$CC_MACHINE_OPT_FLAGS_RE{$cc}{$arch}//; } - $mach_opt_flags =~ s/SUBMODEL/$processed_modelname/g; - } - - ################################################## - # Figure out static library creation method # - ################################################## - # This is a default that works on most Unix and Unix-like systems - my $ar_command = "ar crs"; - my $ar_needs_ranlib = 0; # almost no systems need it anymore - - # See if there are any over-riding methods. We presume if CC is creating - # the static libs, it knows how to create the index itself. - if($CC_AR_COMMAND{$cc}) { $ar_command = $CC_AR_COMMAND{$cc}; } - elsif(os_ar_command($os)) - { - $ar_command = os_ar_command($os); - $ar_needs_ranlib = 1 if(os_ar_needs_ranlib($os)); - } - - ################################################## - # Set shared object options # - ################################################## - my $so_link_flags = ''; - my $so_obj_flags = $CC_SO_OBJ_FLAGS{$cc}; - - if($no_shared or (!in_array($OS_SUPPORTS_SHARED{$os}, 'all') and - !in_array($OS_SUPPORTS_SHARED{$os}, $arch))) - { $so_obj_flags = ''; } - - elsif(defined($CC_SO_LINK_FLAGS{$cc}{$os})) - { $so_link_flags = $CC_SO_LINK_FLAGS{$cc}{$os}; } - elsif(defined($CC_SO_LINK_FLAGS{$cc}{'default'})) - { $so_link_flags = $CC_SO_LINK_FLAGS{$cc}{'default'}; } - - my $make_shared = 0; - $make_shared = 1 - if(($so_obj_flags or $so_link_flags) and $OS_SUPPORTS_SHARED{$os}); - - ################################################## - # Set check code compilation flags # - ################################################## - my $check_opt_flags = $CC_CHECK_OPT_FLAGS{$cc}; - - ################################################## - # Set misc ABI options # - ################################################## - my $ccopts = ''; - - $ccopts .= ' '.$CC_ABI_FLAGS{$cc}{$arch} - if(defined($CC_ABI_FLAGS{$cc}{$arch})); - - $ccopts .= ' '.$CC_ABI_FLAGS{$cc}{$os} if(defined($CC_ABI_FLAGS{$cc}{$os})); - - $ccopts .= ' '.$CC_ABI_FLAGS{$cc}{'all'} - if(defined($CC_ABI_FLAGS{$cc}{'all'})); - - ################################################## - # Where to install? # - ################################################## - my $install_root = os_install_info($os, 'root'); - my $header_dir = os_install_info($os, 'headers'); - my $lib_dir = os_install_info($os, 'libs'); - my $doc_dir = os_install_info($os, 'docs'); - - if($user_set_root ne '') { $install_root = $user_set_root; } - - ################################################## - # Open the makefile # - ################################################## - open MAKEFILE, ">$MAKE_FILE" - or die "Couldn't write $MAKE_FILE ($!)\n"; - - ################################################## - # Ready, set, print! # - ################################################## - my $cc_bin = $CC_BINARY_NAME{$cc}; - - # Hack for 10.1, 10.2+ is fixed. Don't have a 10.0.x machine anymore - if($os eq "darwin" and $cc eq "gcc") { $cc_bin = "c++"; } - - my $obj_suffix = os_obj_suffix($os); - my $static_suffix = os_static_suffix($os); - - # Man that's a lot of arguments. :) - my @arguments = (\*MAKEFILE, - $os, - $cc_bin . $ccopts, - $lib_opt_flags, - $check_opt_flags, - $mach_opt_flags, - $lang_flags, - $CC_WARN_FLAGS{$cc}, - $make_shared, - $so_obj_flags, - $so_link_flags, - $obj_suffix, - os_shared_suffix($os), - $static_suffix, - $ar_command, - $ar_needs_ranlib, - \%all_lib_srcs, - $check_src, - \%all_includes, - \%DOCS, - $install_root, - $header_dir, - $lib_dir, - $doc_dir, - \@libs_used); - - if($make_style eq 'unix') { print_unix_makefile(@arguments); } - elsif($make_style eq 'nmake') { print_nmake_makefile(@arguments); } - else { - die "(error): This configure script does not know how to make ", - "a makefile for makefile style \"$make_style\"\n"; - } - - close MAKEFILE; -} - -################################################## -# Print a header for a makefile # -################################################## -sub print_header { - my ($fh, $comment, $string) = @_; - print $fh $comment x 50, "\n", - "$comment $string", ' 'x(47-length($string)), "$comment\n", - $comment x 50, "\n"; -} diff --git a/misc/config/code/misc.pl b/misc/config/code/misc.pl deleted file mode 100644 index 63fc4cccf..000000000 --- a/misc/config/code/misc.pl +++ /dev/null @@ -1,182 +0,0 @@ - -sub catfile { - return File::Spec->catfile(@_); -} - -sub catdir { - return File::Spec->catdir(@_); -} - -sub process { - my $l = $_[0]; - chomp($l); - $l =~ s/#.*//; - $l =~ s/^\s*//; - $l =~ s/\s*$//; - $l =~ s/\s\s*/ /; - $l =~ s/\t/ /; - $l; -} - -sub check_for_file { - my ($file,$mod) = @_; - - unless( -e $file ) { die - "(error): Module $mod requires that file $file exist. This error\n", - "should never occur; please contact the maintainers with details.\n"; - } -} - -sub using_libs { - my ($os,@using) = @_; - my %libs; - foreach my $mod (@using) { - my %MOD_LIBS = %{ $MODULES{$mod}{'libs'} }; - foreach my $mod_os (keys %MOD_LIBS) - { - next if($mod_os =~ /^all!$os$/); - next if($mod_os =~ /^all!$os,/); - next if($mod_os =~ /^all!.*,${os}$/); - next if($mod_os =~ /^all!.*,$os,.*/); - next unless($mod_os eq $os or ($mod_os =~ /^all.*/)); - my @liblist = split(/,/, $MOD_LIBS{$mod_os}); - foreach my $lib (@liblist) { $libs{$lib} = 1; } - } - } - - my @libarray; - foreach (sort keys %libs) { push @libarray , $_; } - return @libarray; - } - -sub defines { - my @using = @_; - my @defarray; - foreach (@using) { - foreach my $define (sort keys %{ $MODULES{$_}{'define'} }) { - push @defarray , $define; - } - } - return \@defarray; - } - -sub defines_base { - my @using = @_; - my @defarray; - foreach (@using) { - foreach my $define (sort keys %{ $MODULES{$_}{'define_base'} }) { - push @defarray , $define; - } - } - return \@defarray; - } - -# Any other alternatives here? -sub portable_symlink { - my ($from, $to_dir, $to_fname) = @_; - - my $can_symlink = eval { symlink("",""); 1 }; - my $can_link = eval { link("",""); 1 }; - - if($FORCE_COPY) { $can_symlink = 0; $can_link = 0; } - - chdir $to_dir or die "Can't chdir to $to_dir ($!)\n"; - - if($can_symlink) { - symlink $from, $to_fname or die "Can't symlink $from to $to_fname ($!)"; } - elsif($can_link) { - link $from, $to_fname or die "Can't link $from to $to_fname ($!)"; } - else { - copy ($from, $to_fname) or die "Can't copy $from to $to_fname ($!)"; } - - my $go_up = File::Spec->splitdir($to_dir); - for(my $j = 0; $j != $go_up; $j++) - { - chdir File::Spec->updir(); - } -} - -sub copy_files { - my ($include_dir, $mainline, $modules) = @_; - - my $updir = File::Spec->updir(); - - foreach (keys %{ $mainline }) { - my $include = File::Spec->catfile($updir, $updir, $updir, - 'include', $_); - - portable_symlink($include, $include_dir, $_); - } - foreach (keys %{ $modules }) { - my $include = File::Spec->catfile($updir, $updir, $updir, - $$modules{$_}, $_); - portable_symlink($include, $include_dir, $_); - } -} - -sub list_dir { - my ($dir, $ignore) = @_; - opendir DIR, $dir or die "Couldn't open directory $dir ($!)\n"; - my @list = grep { !/^\./ } readdir DIR; - - if($dir eq $CHECK_DIR) { - @list = grep { !/\.dat$/ } grep { !/^keys$/ } grep { !/\.h$/ } @list; - } - - # If $ignore is set, pull everything in @list that's in $ignore out of it - if(defined($ignore)) { - @list = grep { !exists($$ignore{$_}) } @list; - } - close DIR; - my %list = map { $_ => $dir } @list; - return %list; -} - -sub clean_out_dirs { - my (@dirs) = @_; - foreach my $dir (@dirs) { - my %files = list_dir($dir); - foreach my $file (keys %files) { - my $path = catfile($dir, $file); - unlink $path or die "Could not unlink $path ($!)\n"; - } - } -} - -sub mkdirs { - my (@dirs) = @_; - foreach my $dir (@dirs) { - next if( -e $dir and -d $dir ); # skip it if it's already there - mkdir($dir, 0777) or - die "(error): Could not create directory $dir ($!)\n"; - } -} - -sub in_array { - my($array_ref, $target) = @_; - if(!defined($array_ref)) { return 0; } - my @array = @{ $array_ref }; - foreach (@array) { if($_ eq $target) { return 1; } } - return 0; -} - -sub find_mp_bits -{ - my(@modules_list) = @_; - my $mp_bits = 32; # default, good for most systems - my $seen_mp_module = 0; - - foreach my $modname (@modules_list) - { - my %modinfo = %{ $MODULES{$modname} }; - if($modinfo{'mp_bits'}) - { - die "(error): Inconsistent mp_bits requests from modules\n" - if($seen_mp_module && $modinfo{'mp_bits'} != $mp_bits); - - $seen_mp_module = 1; - $mp_bits = $modinfo{'mp_bits'}; - } - } - return $mp_bits; -} diff --git a/misc/config/code/modinfo.pl b/misc/config/code/modinfo.pl deleted file mode 100644 index 968bfc7a6..000000000 --- a/misc/config/code/modinfo.pl +++ /dev/null @@ -1,121 +0,0 @@ -sub get_module_info - { - my ($MODULE, $MOD_DIR) = @_; - my %HASH; - my $mod_dirname = catfile($MOD_DIR,$MODULE); - my $mod_dir = new DirHandle $mod_dirname; - if(!defined $mod_dir) - { die "(error): Couldn't open dir $mod_dirname ($!)\n"; } - - my $mod_info_name = 'modinfo.txt'; - - my %MODFILES; - my $have_config_file = 0; - while(defined($_ = $mod_dir->read)) - { - if($_ eq $mod_info_name) { $have_config_file = 1; } - else { $MODFILES{$_} = undef; } - } - die "(error): Module $MODULE does not seem to have a description file\n" - unless $have_config_file; - - my $desc_file = catfile($MOD_DIR,$MODULE,$mod_info_name); - open MODFILE, "<$desc_file" or die - "(error): Couldn't open file $desc_file, ($!)\n"; - - $HASH{'libs'} = {}; - - $HASH{'add'} = {}; - $HASH{'local_only'} = {}; - $HASH{'replace'} = {}; - $HASH{'ignore'} = {}; - - $HASH{'define'} = {}; - $HASH{'define_base'} = {}; - - $HASH{'external_libs'} = 0; - - while(<MODFILE>) - { - $HASH{'name'} = $1 if(/^realname \"(.*)\"/); - $HASH{'notes'} = $1 if(/^note \"(.*)\"/); - $HASH{'add'}{$1} = undef if(/^add_file ([\.\w]*)/); - $HASH{'local_only'}{$1} = undef if(/^local_only ([\.\w]*)/); - $HASH{'replace'}{$1} = undef if(/^replace_file ([\.\w]*)/); - $HASH{'ignore'}{$1} = undef if(/^ignore_file ([\.\w]*)/); - - $HASH{'define'}{$1} = undef if(/^define (\w*)/); - $HASH{'define_base'}{$1} = undef if(/^define_base (\w*)/); - $HASH{'mp_bits'} = $1 if(/^mp_bits ([0-9]*)/); - - $HASH{'external_libs'} = 1 if(/^uses_external_libs/); - - if(/^require_version /) - { - if(/^require_version (\d)\.(\d)\.(\d)$/) - { - my $version = "$1.$2.$3"; - my $needed_version = 100*$1 + 10*$2 + $3; - - my $have_version = - 100*$MAJOR_VERSION + 10*$MINOR_VERSION + $PATCH_VERSION; - - if($needed_version > $have_version) { - warn "Module $MODULE requires Botan version $version\n"; - %HASH = (); - close MODFILE; - return %HASH; - } - } - else - { - warn "In module $MODULE, bad version code in require_version\n"; - } - } - - # Read in a list of supported CPU types (archs and/or submodels) - if(/^<arch>$/) { - while(1) { - $_ = process($_ = <MODFILE>); - next unless $_; - last if (m@^</arch>$@); - $HASH{'arch'}{$_} = undef; - } - } - - # Read in a list of supported OSes - if(/^<os>$/) { - while(1) { - $_ = process($_ = <MODFILE>); - next unless $_; - last if (m@^</os>$@); - $HASH{'os'}{$_} = undef; - } - } - - # Read in a set of os->extra library mappings - if(/^<libs>$/) { - while(1) { - $_ = process($_ = <MODFILE>); - next unless $_; - last if (m@^</libs>$@); - m/^([\w!,]*) -> ([\w,-]*)$/; - $HASH{'libs'}{$1} = $2; - } - } - - # Read in a list of supported compilers - if(/^<cc>$/) { - while(1) { - $_ = process($_ = <MODFILE>); - next unless $_; - last if (m@^</cc>$@); - $HASH{'cc'}{$_} = undef; - } - } - } - - close MODFILE; - return %HASH; - } - diff --git a/misc/config/code/modloop.pl b/misc/config/code/modloop.pl deleted file mode 100644 index 09d0130ae..000000000 --- a/misc/config/code/modloop.pl +++ /dev/null @@ -1,18 +0,0 @@ -sub get_modules_list - { - my $MOD_DIR = $_[0]; - my $dir = new DirHandle $MOD_DIR; - if(!defined $dir) { return (); } - - my %MODULES; - - while(defined($_ = $dir->read)) - { - next if($_ eq '.' or $_ eq '..'); - my $MODULE = $_; - my %modinfo = get_module_info($MODULE, $MOD_DIR); - foreach (keys %modinfo) { $MODULES{$MODULE}{$_} = $modinfo{$_}; } - } - return %MODULES; - } - diff --git a/misc/config/code/nmake.pl b/misc/config/code/nmake.pl deleted file mode 100644 index 02a5fe874..000000000 --- a/misc/config/code/nmake.pl +++ /dev/null @@ -1,194 +0,0 @@ -################################################## -# Print a NMAKE-style makefile # -################################################## -sub print_nmake_makefile { - my ($makefile, $os, $cc, - $lib_opt, $check_opt, $mach_opt, - $lang_flags, $warn_flags, - undef, # $make_shared - undef, # $so_obj - undef, # $so_link - $obj_suffix, - $so_suffix, - $static_lib_suffix, - $ar_command, - undef, # $use_ranlib - $src_hash, $check_hash, $include_hash, $docs, - $install_root, $header_dir, $lib_dir, $doc_dir, - $lib_list) = @_; - - ################################################## - # Some constants # - ################################################## - my $__TAB__ = "\t"; - my $COMMENT_CHAR = '#'; - - ################################################## - # Convert the references to hashes # - ################################################## - my %src = %{ $src_hash }; - my %includes = %{ $include_hash }; - - my %check = %{ $check_hash }; - - my %docs = %{ $docs }; - - ################################################## - # Make the library linking list # - ################################################## - my $link_to = ''; - foreach my $lib (@{ $lib_list }) - { - my $lib_full = $lib . "." . $static_lib_suffix; - if($link_to eq '') { $link_to .= $lib_full; } - else { $link_to .= ' ' . $lib_full; } - } - - ################################################## - # Generate a few variables # - ################################################## - my $lib_flags = '$(LIB_OPT) $(MACH_OPT) $(LANG_FLAGS) $(WARN_FLAGS)'; - - my $libs = '$(STATIC_LIB)'; - -##################### COMMON CODE (PARTIALLY) ###################### - - my $includes = file_list(16, undef, undef, undef, %includes); - - my $lib_obj = file_list(16, $BUILD_LIB_DIR, '.cpp', '.'.$obj_suffix, - %src, %added_src); - my $check_obj = file_list(16, $BUILD_CHECK_DIR, '.cpp', '.'.$obj_suffix, - %check); - - my $doc_list = file_list(16, undef, undef, undef, %docs); - -##################### / COMMON CODE (PARTIALLY) ###################### - - print_header($makefile, $COMMENT_CHAR, 'Compiler Options'); - print $makefile <<END_OF_MAKEFILE_HEADER; -CXX = $cc -LIB_OPT = $lib_opt -CHECK_OPT = $check_opt -MACH_OPT = $mach_opt -LANG_FLAGS = $lang_flags -WARN_FLAGS = $warn_flags -SO_OBJ_FLAGS = -SO_LINK_FLAGS = -LINK_TO = $link_to - -END_OF_MAKEFILE_HEADER - - print_header($makefile, $COMMENT_CHAR, 'Version Numbers'); - print $makefile <<END_OF_VERSIONS; -MAJOR = $MAJOR_VERSION -MINOR = $MINOR_VERSION -PATCH = $PATCH_VERSION - -VERSION = \$(MAJOR).\$(MINOR).\$(PATCH) - -END_OF_VERSIONS - - print_header($makefile, $COMMENT_CHAR, 'Installation Settings'); - print $makefile <<END_OF_INSTALL_SETTINGS; -INSTALLROOT = $install_root - -LIBDIR = \$(INSTALLROOT)\\$lib_dir -HEADERDIR = \$(INSTALLROOT)\\$header_dir\\botan -DOCDIR = \$(INSTALLROOT)\\$doc_dir - -END_OF_INSTALL_SETTINGS - - print_header($makefile, $COMMENT_CHAR, 'Aliases for Common Programs'); - print $makefile <<END_OF_COMMAND_ALIASES; -AR = $ar_command -CD = \@cd -ECHO = \@echo -INSTALL = copy -INSTALL_CMD = \$(INSTALL) -MKDIR = \@md -MKDIR_INSTALL = \@md -RM = \@del /Q -RMDIR = \@rmdir - -END_OF_COMMAND_ALIASES - - print_header($makefile, $COMMENT_CHAR, 'File Lists'); - print $makefile <<END_OF_FILE_LISTS; -LIB_FLAGS = $lib_flags -CHECK_FLAGS = \$(CHECK_OPT) \$(LANG_FLAGS) \$(WARN_FLAGS) - -CHECK = check - -DOCS = $doc_list - -HEADERS = $includes - -LIBOBJS = $lib_obj - -CHECKOBJS = $check_obj - -LIBRARIES = $libs - -LIBNAME = libbotan -STATIC_LIB = \$(LIBNAME).$static_lib_suffix - -END_OF_FILE_LISTS - - print $makefile "all: \$(LIBRARIES)\n\n"; - print_header($makefile, $COMMENT_CHAR, 'Build Commands'); - - sub print_build_cmds_nmake { - my ($fh, $dir, $flags, $obj_suffix, %files) = @_; - foreach (sort keys %files) { - my $src_file = catfile ($files{$_}, $_); - my $obj_file = catfile ($dir, $_); - $obj_file =~ s/.cpp/.$obj_suffix/; - print $fh "$obj_file: $src_file\n", - "\t\$(CXX) -I$BUILD_INCLUDE_DIR $flags /c \$? /Fo\$@\n\n"; - } - } - - print_build_cmds_nmake($makefile, $BUILD_LIB_DIR, - '$(LIB_FLAGS)', $obj_suffix, %src, %added_src); - - print_build_cmds_nmake($makefile, $BUILD_CHECK_DIR, - '$(CHECK_FLAGS)', $obj_suffix, %check); - - print_header($makefile, $COMMENT_CHAR, 'Link Commands'); - - print $makefile <<END_OF_LINK_COMMANDS; -\$(CHECK): \$(LIBRARIES) \$(CHECKOBJS) -${__TAB__}LINK /OUT:\[email protected] \$(CHECKOBJS) \$(STATIC_LIB) \$(LINK_TO) - -\$(STATIC_LIB): \$(LIBOBJS) -$__TAB__\$(AR) /OUT:\$@ /NAME:BOTAN-\$(VERSION) \$(LIBOBJS) -END_OF_LINK_COMMANDS - - print $makefile "\n"; - - print_header($makefile, $COMMENT_CHAR, 'Misc Targets'); - print $makefile "static: \$(STATIC_LIB)\n\n"; - - print_header($makefile, $COMMENT_CHAR, 'Fake Targets'); - print $makefile <<END_OF_FAKE_TARGETS; -clean: -$__TAB__\$(RM) $BUILD_LIB_DIR\\* $BUILD_CHECK_DIR\\* -$__TAB__\$(RM) \$(LIBRARIES) \$(CHECK) - -distclean: clean -$__TAB__\$(RM) $CPP_INCLUDE_DIR\\* -$__TAB__\$(RMDIR) $CPP_INCLUDE_DIR -$__TAB__\$(RMDIR) $BUILD_LIB_DIR $BUILD_CHECK_DIR $BUILD_INCLUDE_DIR $BUILD_DIR -$__TAB__\$(RM) $MAKE_FILE -END_OF_FAKE_TARGETS - - print_header($makefile, $COMMENT_CHAR, 'Install Commands'); - - print $makefile <<END_OF_INSTALL_SCRIPTS; -install: \$(LIBRARIES) -$__TAB__\$(ECHO) "Install command not done" -END_OF_INSTALL_SCRIPTS - - print $makefile "\n"; - -} diff --git a/misc/config/code/pkg_conf.pl b/misc/config/code/pkg_conf.pl deleted file mode 100644 index 7fc308b82..000000000 --- a/misc/config/code/pkg_conf.pl +++ /dev/null @@ -1,87 +0,0 @@ - -sub print_pkg_config -{ - my ($os, $major,$minor,$patch,@libs) = @_; - - return if($os eq 'generic' or $os eq 'windows'); - - my $install_root = os_install_info($os, 'root'); - my $header_dir = os_install_info($os, 'headers'); - my $lib_dir = os_install_info($os, 'libs'); - - if($user_set_root ne '') { $install_root = $user_set_root; } - - my $link_to = "-lm"; - foreach my $lib (@libs) - { - $link_to .= " -l" . $lib; - } - - my $VERSION = $major . "." . $minor . "." . $patch; - - open PKGCONFIG, ">botan-config" or - die "Couldn't write to botan-config ($!)"; - - print PKGCONFIG <<END_OF_FILE; -#!/bin/sh - -guess_prefix=\`dirname \\\`dirname \$0\\\`\` -install_prefix=$install_root -prefix= -includedir=$header_dir -libdir=$lib_dir - -usage() -{ - echo "botan-config [--prefix[=DIR]] [--version] [--libs] [--cflags]" - exit 1 -} - -if test \$# -eq 0; then - usage -fi - -if test \`echo \$guess_prefix | cut -c 1\` = "/"; then - prefix=\$guess_prefix -else - prefix=\$install_prefix -fi - -while test \$# -gt 0; do - case "\$1" in - -*=*) optarg=`echo "\$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - case "\$1" in - --prefix=*) - prefix=\$optarg - ;; - --prefix) - echo \$prefix - ;; - --version) - echo $VERSION - exit 0 - ;; - --cflags) - if [ \$prefix != "/usr" -a \$prefix != "/usr/local" ] - then - echo -I\$prefix/\$includedir - fi - ;; - --libs) - echo -L\$prefix/\$libdir $link_to -lbotan - ;; - *) - usage - ;; - esac - shift -done - -exit 0 -END_OF_FILE - - close PKGCONFIG; - chmod 0755, 'botan-config'; -} diff --git a/misc/config/code/sysinfo.pl b/misc/config/code/sysinfo.pl deleted file mode 100644 index 6a78234bd..000000000 --- a/misc/config/code/sysinfo.pl +++ /dev/null @@ -1,53 +0,0 @@ - -sub os_info_for { - my ($os,$hashref) = @_; - - my %hash = %{ $hashref }; - - die "Internal error: os_info_for called with undef hash\n" - unless %hash; - - die "Internal error: os_info_for called with an os of defaults\n" - if($os eq 'defaults'); - - return $hash{$os} if(defined($hash{$os}) && $hash{$os} ne ''); - return $hash{'defaults'}; -} - -sub os_static_suffix { - my $os = $_[0]; - return os_info_for($os, \%OS_STATIC_SUFFIX); -} - -sub os_shared_suffix { - my $os = $_[0]; - return os_info_for($os, \%OS_SHARED_SUFFIX); -} - -sub os_obj_suffix { - my $os = $_[0]; - return os_info_for($os, \%OS_OBJ_SUFFIX); -} - -sub os_ar_command { - my $os = $_[0]; - return os_info_for($os, \%OS_AR_COMMAND); -} - -sub os_ar_needs_ranlib { - my $os = $_[0]; - return os_info_for($os, \%OS_AR_NEEDS_RANLIB); -} - -sub os_install_info { - my ($os,$what) = @_; - - return $doc_dir if($what eq 'docs' && $doc_dir); - return $lib_dir if($what eq 'libs' && $lib_dir); - - return $INSTALL_INFO{$os}{$what} - if(defined($INSTALL_INFO{$os}) && - defined($INSTALL_INFO{$os}{$what})); - - return $INSTALL_INFO{'defaults'}{$what}; -} diff --git a/misc/config/code/unixmake.pl b/misc/config/code/unixmake.pl deleted file mode 100644 index 72c155170..000000000 --- a/misc/config/code/unixmake.pl +++ /dev/null @@ -1,279 +0,0 @@ -################################################## -# Print a Unix style makefile # -################################################## -sub print_unix_makefile { - my ($makefile, $os, $cc, - $lib_opt, $check_opt, $mach_opt, - $lang_flags, $warn_flags, - $make_shared, $so_obj, $so_link, - $obj_suffix, $so_suffix, $static_lib_suffix, - $ar_command, $use_ranlib, - $src_hash, $check_hash, $include_hash, $docs, - $install_root, $header_dir, $lib_dir, $doc_dir, - $lib_list) = @_; - - ################################################## - # Some constants # - ################################################## - my $__TAB__ = "\t"; - my $COMMENT_CHAR = '#'; - - ################################################## - # Convert the references to hashes # - ################################################## - my %src = %{ $src_hash }; - my %includes = %{ $include_hash }; - - my %check = %{ $check_hash }; - - my %docs = %{ $docs }; - - ################################################## - # Make the library linking list # - ################################################## - my $link_to = "-lm"; - foreach my $lib (@{ $lib_list }) - { - $link_to .= " -l" . $lib; - } - - ################################################## - # Generate a few variables # - ################################################## - my $lib_flags = '$(LIB_OPT) $(MACH_OPT) $(LANG_FLAGS) $(WARN_FLAGS)'; - - my $libs = '$(STATIC_LIB)'; - if($make_shared) { $lib_flags .= ' $(SO_OBJ_FLAGS)'; - $libs .= ' $(SHARED_LIB)'; } - - my $install_user = os_install_info($os, 'user'); - my $install_group = os_install_info($os, 'group'); - - my $install_cmd_exec = os_install_info($os, 'command'); - my $install_cmd_data = os_install_info($os, 'command'); - - $install_cmd_exec =~ s/OWNER/\$(OWNER)/; - $install_cmd_data =~ s/OWNER/\$(OWNER)/; - - $install_cmd_exec =~ s/GROUP/\$(GROUP)/; - $install_cmd_data =~ s/GROUP/\$(GROUP)/; - - $install_cmd_exec =~ s/MODE/\$(EXEC_MODE)/; - $install_cmd_data =~ s/MODE/\$(DATA_MODE)/; - -##################### COMMON CODE (PARTIALLY) ###################### - sub file_list { - my ($spaces, $put_in, $from, $to, %files) = @_; - my $len = $spaces; - my $list; - foreach (sort keys %files) { - my $file = $_; - my $dir = $put_in; - if(!defined($dir)) { $dir = $files{$_}; } - if($len > 60) - { $list .= "\\\n" . ' 'x$spaces; $len = $spaces; } - if(defined($from) and defined($to)) { $file =~ s/$from/$to/; } - if(defined($dir)) - { $list .= catfile ($dir, $file) . ' '; - $len += length($file) + length($dir); } - else - { $list .= $file . ' '; - $len += length($file); } - } - return $list; - } - - my $includes = file_list(16, undef, undef, undef, %includes); - - my $lib_obj = file_list(16, $BUILD_LIB_DIR, '(\.cpp$|\.s$|\.S$)', - '.'.$obj_suffix, %src, %added_src); - my $check_obj = file_list(16, $BUILD_CHECK_DIR, '.cpp', '.'.$obj_suffix, - %check); - - my $doc_list = file_list(16, undef, undef, undef, %docs); - -##################### / COMMON CODE (PARTIALLY) ###################### - - print_header($makefile, $COMMENT_CHAR, 'Compiler Options'); - print $makefile <<END_OF_MAKEFILE_HEADER; -CXX = $cc -LIB_OPT = $lib_opt -CHECK_OPT = $check_opt -MACH_OPT = $mach_opt -LANG_FLAGS = $lang_flags -WARN_FLAGS = $warn_flags -SO_OBJ_FLAGS = $so_obj -SO_LINK_CMD = $so_link -LINK_TO = $link_to - -END_OF_MAKEFILE_HEADER - - print_header($makefile, $COMMENT_CHAR, 'Version Numbers'); - print $makefile <<END_OF_VERSIONS; -MAJOR = $MAJOR_VERSION -MINOR = $MINOR_VERSION -PATCH = $PATCH_VERSION - -VERSION = \$(MAJOR).\$(MINOR).\$(PATCH) - -END_OF_VERSIONS - - print_header($makefile, $COMMENT_CHAR, 'Installation Settings'); - print $makefile <<END_OF_INSTALL_SETTINGS; -INSTALLROOT = $install_root - -BINDIR = \$(INSTALLROOT)/bin -LIBDIR = \$(INSTALLROOT)/$lib_dir -HEADERDIR = \$(INSTALLROOT)/$header_dir/botan -DOCDIR = \$(INSTALLROOT)/$doc_dir/Botan-\$(VERSION) - -OWNER = $install_user -GROUP = $install_group -DATA_MODE = 644 -EXEC_MODE = 755 - -CONFIG_SCRIPT = botan-config - -END_OF_INSTALL_SETTINGS - - print_header($makefile, $COMMENT_CHAR, 'Aliases for Common Programs'); - print $makefile <<END_OF_COMMAND_ALIASES; -AR = $ar_command -CD = \@cd -ECHO = \@echo -INSTALL_CMD_EXEC = $install_cmd_exec -INSTALL_CMD_DATA = $install_cmd_data -LN = ln -fs -MKDIR = \@mkdir -MKDIR_INSTALL = \@umask 022; mkdir -p -m \$(EXEC_MODE) -RANLIB = \@ranlib -RM = \@rm -f -RM_R = \@rm -rf - -END_OF_COMMAND_ALIASES - - print_header($makefile, $COMMENT_CHAR, 'File Lists'); - print $makefile <<END_OF_FILE_LISTS; -CHECK = check - -DOCS = $doc_list - -HEADERS = $includes - -LIBOBJS = $lib_obj - -CHECKOBJS = $check_obj - -LIB_FLAGS = $lib_flags -CHECK_FLAGS = \$(CHECK_OPT) \$(LANG_FLAGS) \$(WARN_FLAGS) - -LIBRARIES = $libs - -LIBNAME = libbotan -STATIC_LIB = \$(LIBNAME).$static_lib_suffix - -END_OF_FILE_LISTS - - if($make_shared) { - print $makefile <<END_OF_SHARED_LIB_DECL; -SHARED_LIB = \$(LIBNAME)-\$(MAJOR).\$(MINOR).\$(PATCH).$so_suffix -SONAME = \$(LIBNAME)-\$(MAJOR).\$(MINOR).\$(PATCH).$so_suffix - -SYMLINK = \$(LIBNAME).$so_suffix - -END_OF_SHARED_LIB_DECL - } - - print $makefile "all: \$(LIBRARIES)\n\n"; - print_header($makefile, $COMMENT_CHAR, 'Build Commands'); - - sub print_build_cmds { - my ($fh, $dir, $flags, $obj_suffix, %files) = @_; - foreach (sort keys %files) { - my $src_file = catfile ($files{$_}, $_); - my $obj_file = catfile ($dir, $_); - $obj_file =~ s/\.cpp$/.$obj_suffix/; - $obj_file =~ s/\.s$/.$obj_suffix/; - $obj_file =~ s/\.S$/.$obj_suffix/; - print $fh "$obj_file: $src_file\n", - "\t\$(CXX) -I$BUILD_INCLUDE_DIR $flags -c \$? -o \$@\n\n"; - } - } - - print_build_cmds($makefile, $BUILD_LIB_DIR, - '$(LIB_FLAGS)', $obj_suffix, %src, %added_src); - - print_build_cmds($makefile, $BUILD_CHECK_DIR, - '$(CHECK_FLAGS)', $obj_suffix, %check); - - print_header($makefile, $COMMENT_CHAR, 'Link Commands'); - - print $makefile <<END_OF_LINK_COMMANDS; -\$(CHECK): \$(LIBRARIES) \$(CHECKOBJS) -$__TAB__\$(CXX) \$(CHECKOBJS) -L. -lbotan \$(LINK_TO) -o \$(CHECK) - -\$(STATIC_LIB): \$(LIBOBJS) -$__TAB__\$(RM) \$(STATIC_LIB) -$__TAB__\$(AR) \$(STATIC_LIB) \$(LIBOBJS) -END_OF_LINK_COMMANDS - - if($use_ranlib) { print $makefile "$__TAB__\$(RANLIB) \$(STATIC_LIB)\n\n"; } - else { print $makefile "\n"; } - - if($make_shared) { - print $makefile <<END_OF_SO_LINK_COMMAND; -\$(SHARED_LIB): \$(LIBOBJS) -$__TAB__\$(SO_LINK_CMD) \$(LINK_TO) \$(LIBOBJS) -o \$(SHARED_LIB) -$__TAB__\$(LN) \$(SHARED_LIB) \$(SYMLINK) - -END_OF_SO_LINK_COMMAND - } - - - print_header($makefile, $COMMENT_CHAR, 'Fake Targets'); - - print $makefile ".PHONY = clean distclean install static"; - if($make_shared) { print $makefile " shared"; } - print $makefile "\n\n"; - - print $makefile "static: \$(STATIC_LIB)\n\n"; - if($make_shared) { print $makefile "shared: \$(SHARED_LIB)\n\n"; } - - print $makefile <<END_OF_FAKE_TARGETS; -clean: -$__TAB__\$(RM_R) $BUILD_LIB_DIR/* $BUILD_CHECK_DIR/* -$__TAB__\$(RM) \$(LIBRARIES) \$(SYMLINK) \$(CHECK) - -distclean: clean -$__TAB__\$(RM_R) $BUILD_DIR -$__TAB__\$(RM) $MAKE_FILE \$(CONFIG_SCRIPT) - -END_OF_FAKE_TARGETS - - print $makefile <<END_OF_INSTALL_SCRIPTS; -install: \$(LIBRARIES) -$__TAB__\$(ECHO) "Installing Botan into \$(INSTALLROOT)... " -$__TAB__\$(MKDIR_INSTALL) \$(DOCDIR) -$__TAB__\$(MKDIR_INSTALL) \$(HEADERDIR) -$__TAB__\$(MKDIR_INSTALL) \$(LIBDIR) -$__TAB__\$(MKDIR_INSTALL) \$(BINDIR) -$__TAB__\@for i in \$(DOCS); do \\ -$__TAB__ \$(INSTALL_CMD_DATA) \$\$i \$(DOCDIR); \\ -$__TAB__ done -$__TAB__\@for i in \$(HEADERS); do \\ -$__TAB__ \$(INSTALL_CMD_DATA) \$\$i \$(HEADERDIR); \\ -$__TAB__ done -$__TAB__\@\$(INSTALL_CMD_DATA) \$(STATIC_LIB) \$(LIBDIR) -$__TAB__\@\$(INSTALL_CMD_EXEC) \$(CONFIG_SCRIPT) \$(BINDIR) -END_OF_INSTALL_SCRIPTS - - if($make_shared) { - print $makefile <<END_OF_SYMLINKS; -$__TAB__\@\$(INSTALL_CMD_EXEC) \$(SHARED_LIB) \$(LIBDIR) -$__TAB__\$(CD) \$(LIBDIR); \$(LN) \$(SHARED_LIB) \$(SYMLINK) - -END_OF_SYMLINKS - } - else { print $makefile "\n"; } - -} diff --git a/misc/config/code/wag.pl b/misc/config/code/wag.pl deleted file mode 100644 index b9ea42c3c..000000000 --- a/misc/config/code/wag.pl +++ /dev/null @@ -1,206 +0,0 @@ -sub which -{ - my $file = $_[0]; - my @paths = split(/:/, $ENV{PATH}); - foreach my $path (@paths) - { - my $file_path = File::Spec->catfile($path, $file); - return $file_path if(guess_check_for_file($file_path)); - } - return ''; -} - -sub guess_cpu_from_this -{ - my $cpuinfo = lc $_[0]; - my $cpu = ''; - - $cpu = 'athlon' if($cpuinfo =~ /athlon/); - $cpu = 'pentium4' if($cpuinfo =~ /pentium 4/); - $cpu = 'pentium4' if($cpuinfo =~ /pentium\(r\) 4/); - $cpu = 'pentium3' if($cpuinfo =~ /pentium iii/); - $cpu = 'pentium2' if($cpuinfo =~ /pentium ii/); - $cpu = 'pentium3' if($cpuinfo =~ /pentium 3/); - $cpu = 'pentium2' if($cpuinfo =~ /pentium 2/); - - # The 32-bit SPARC stuff is impossible to match to arch type easily, and - # anyway the uname stuff will pick up that it's a SPARC so it doesn't - # matter. If it's an Ultra, assume a 32-bit userspace, no 64-bit code - # possible; that's the most common setup right now anyway - $cpu = 'sparc32-v9' if($cpuinfo =~ /ultrasparc/); - - # 64-bit PowerPC - $cpu = 'rs64a' if($cpuinfo =~ /rs64-/); - $cpu = 'power3' if($cpuinfo =~ /power3/); - $cpu = 'power4' if($cpuinfo =~ /power4/); - $cpu = 'power5' if($cpuinfo =~ /power5/); - $cpu = 'ppc970' if($cpuinfo =~ /ppc970/); - - # Ooh, an Alpha. Try to figure out what kind - if($cpuinfo =~ /alpha/) - { - $cpu = 'alpha-ev4' if($cpuinfo =~ /ev4/); - $cpu = 'alpha-ev5' if($cpuinfo =~ /ev5/); - $cpu = 'alpha-ev56' if($cpuinfo =~ /ev56/); - $cpu = 'alpha-pca56' if($cpuinfo =~ /pca56/); - $cpu = 'alpha-ev6' if($cpuinfo =~ /ev6/); - $cpu = 'alpha-ev67' if($cpuinfo =~ /ev67/); - $cpu = 'alpha-ev68' if($cpuinfo =~ /ev68/); - $cpu = 'alpha-ev7' if($cpuinfo =~ /ev7/); - } - - return $cpu; -} - -# Do some WAGing and see if we can figure out what system we are. Think about -# this as a really moronic config.guess -sub guess_triple -{ - # /bin/sh, good bet we're on something Unix-y (at least it'll have uname) - if(-f '/bin/sh') - { - my $os = lc `uname -s 2>/dev/null`; chomp $os; - - # Let the crappy hacks commence! - - # Cygwin's uname -s is cygwin_<windows version> - $os = 'cygwin' if($os =~ /^cygwin/); - - if(!defined $OS_TYPE{$os} && !defined $OS_ALIAS{$os}) - { - print "Unknown uname -s output: $os, falling back to 'generic'\n"; - $os = 'generic'; - } - - $os = $OS_ALIAS{$os} if(defined($OS_ALIAS{$os})); - my $cpu = ''; - - # If we have /proc/cpuinfo, try to get nice specific information about - # what kind of CPU we're running on. - if(guess_check_for_file('/proc/cpuinfo')) - { - open CPUINFO, '/proc/cpuinfo' or die - "Hey, guess_check_for_file said /proc/cpuinfo was readable!\n"; - my $cpuinfo = join('', <CPUINFO>); - close CPUINFO; - - $cpu = guess_cpu_from_this($cpuinfo); - } - - # `umame -p` is sometimes something stupid like unknown, but in some - # cases it can be more specific (useful) than `uname -m` - if($cpu eq '') # no guess so far - { - my $uname_p = `uname -p 2>/dev/null`; - chomp $uname_p; - $cpu = guess_cpu_from_this($uname_p); - - # If guess_cpu_from_this didn't figure it out, try it plain - if($cpu eq '') { $cpu = lc $uname_p; } - - if(!defined $ARCH{$cpu} && !defined $SUBMODEL_ALIAS{$cpu} && - !defined $ARCH_ALIAS{$cpu}) - { - # Nope, couldn't figure out uname -p - $cpu = lc `uname -m 2>/dev/null`; - chomp $cpu; - - if(!defined $ARCH{$cpu} && !defined $SUBMODEL_ALIAS{$cpu} && - !defined $ARCH_ALIAS{$cpu}) - { - $cpu = 'generic'; - } - } - } - - my @CCS = ('gcc', 'icc', 'compaq', 'kai'); # Skips several, oh well... - - # First try the CC enviornmental variable, if it's set - if(defined($ENV{CC})) - { - my @new_CCS = ($ENV{CC}); - foreach my $cc (@CCS) { push @new_CCS, $cc; } - @CCS = @new_CCS; - } - - my $cc = ''; - foreach (@CCS) - { - my $bin_name = $CC_BINARY_NAME{$_}; - $cc = $_ if(which($bin_name) ne ''); - last if($cc ne ''); - } - - if($cc eq '') { - warn "Can't find a usable C++ compiler, is your PATH right?\n"; - warn "You might need to run with explicit compiler/system flags;\n"; - warn " run '$0 --help' for more information\n"; - exit 1; - } - - return "$cc-$os-$cpu"; - } - elsif($^O eq 'MSWin32' or $^O eq 'dos') - { - my $os = 'windows'; # obviously - - # Suggestions on this? The Win32 'shell' env is not so hot. We could - # try using cpuinfo, except that will crash hard on NT/Alpha (like what - # we're doing now won't!). In my defense of choosing i686: - # a) There are maybe a few hundred Alpha/MIPS boxes running NT4 today - # b) Anyone running Windows on < Pentium Pro deserves to lose. - my $cpu = 'i686'; - - # No /bin/sh, so not cygwin. Assume VC++; again, this could be much - # smarter - my $cc = 'msvc'; - return "$cc-$os-$cpu"; - } - else - { - print "Sorry, you don't seem to be on Unix or Windows;\n" . - " autoconfig failed (try running me with --help)\n"; - exit 1; - } -} - -sub guess_check_for_file -{ - my $file = $_[0]; - return 1 if(-f $file and -r $file); - return 0; -} - -sub guess_mods -{ - my ($cc, $os, $arch, $submodel) = @_; - - my @usable_modules; - - foreach my $mod (sort keys %MODULES) - { - next if($mod eq 'minimal'); # Never enabled by default - - my %modinfo = %{ $MODULES{$mod} }; - - # If it uses external libs, the user has to request it specifically - next if($modinfo{'external_libs'}); - - my @cc_list = (); - if($modinfo{'cc'}) { @cc_list = keys %{ $modinfo{'cc'} }; } - my @os_list = (); - if($modinfo{'os'}) { @os_list = keys %{ $modinfo{'os'} }; } - my @arch_list = (); - if($modinfo{'arch'}) { @arch_list = keys %{ $modinfo{'arch'} }; } - - next if(scalar @cc_list > 0 && !in_array(\@cc_list, $cc)); - next if(scalar @os_list > 0 && !in_array(\@os_list, $os)); - - next if(scalar @arch_list > 0 && - !in_array(\@arch_list, $arch) && - !in_array(\@arch_list, $submodel)); - - push @usable_modules, $mod; - } - return @usable_modules; -} diff --git a/misc/config/mkconfig.pl b/misc/config/mkconfig.pl deleted file mode 100755 index 1f62fb40d..000000000 --- a/misc/config/mkconfig.pl +++ /dev/null @@ -1,455 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use DirHandle; -use File::Spec::Functions; - -############################################################################ -# Version numbers -my $MAJOR = 1; -my $MINOR = 5; -my $PATCH = 11; - -############################################################################# -# Configuration options - -my $OUTPUT_FILE = '../../configure.pl'; - -my $CODE_DIR = 'code'; -my $ARCH_DIR = 'arch'; -my $OS_DIR = 'os'; -my $CC_DIR = 'cc'; - -############################################################################# -# The basic logic of the script - -print "Writing config script to $OUTPUT_FILE\n"; - -open OUTPUT, ">$OUTPUT_FILE" or - die "Couldn't open $OUTPUT_FILE for writing ($!)"; -chmod 0700, $OUTPUT_FILE; - -write_code($CODE_DIR, 'header.pl'); - -sub q { my($s) = @_; $s =~ s/^: {0,3}//gm; $s; } - -print OUTPUT &q(<<ENDOFCONFIG); - -my \$MAJOR_VERSION = $MAJOR; -my \$MINOR_VERSION = $MINOR; -my \$PATCH_VERSION = $PATCH; - -ENDOFCONFIG - -write_code($CODE_DIR, 'config.pl'); - -my %REALNAMES = (); - -print_arch_defines($ARCH_DIR,\%REALNAMES); -print_os_defines($OS_DIR,\%REALNAMES); -print_cc_defines($CC_DIR,\%REALNAMES); -print_hash('REALNAME',%REALNAMES); - -# Most of the code is kept in separate files for ease of editing -write_code($CODE_DIR,'main.pl'); -write_code($CODE_DIR,'misc.pl'); -write_code($CODE_DIR,'include.pl'); -write_code($CODE_DIR,'conflict.pl'); -write_code($CODE_DIR,'modloop.pl'); -write_code($CODE_DIR,'modinfo.pl'); -write_code($CODE_DIR,'loadmod.pl'); -write_code($CODE_DIR,'help.pl'); -write_code($CODE_DIR,'wag.pl'); -write_code($CODE_DIR,'sysinfo.pl'); -write_code($CODE_DIR,'makefile.pl'); -write_code($CODE_DIR,'unixmake.pl'); -write_code($CODE_DIR,'nmake.pl'); -write_code($CODE_DIR,'pkg_conf.pl'); - -close OUTPUT; -exit; - -############################################################################# -# Some utility code - -sub write_code { - my $fullpath = catfile($_[0],$_[1]); - open CODEFILE, $fullpath or die "Couldn't open $fullpath ($!)"; - while(<CODEFILE>) { - print OUTPUT; - } - close CODEFILE; -} - -sub process { - my $l = $_[0]; - chomp($l); - $l =~ s/#.*//; - $l =~ s/^\s*//; - $l =~ s/\s*$//; - $l =~ s/\s\s*/ /; - $l =~ s/\t/ /; - $l; -} - -# These could be replaced by Data::Dumper, but it looks nicer with this... -sub print_hash { - my($name,%HASH) = @_; - print OUTPUT "my %$name = (\n"; - foreach(sort keys %HASH) { - my $quoted = '\''.$_.'\''; - if(defined($HASH{$_})) { - printf OUTPUT " %-16s => \'$HASH{$_}\',\n", $quoted; - } - } - print OUTPUT ")\;\n\n"; -} - -sub print_hash_nodef { - my($name,%HASH) = @_; - print OUTPUT "my %$name = (\n"; - foreach(sort keys %HASH) { - my $quoted = '\''.$_.'\''; - if(defined($HASH{$_}) && $HASH{$_} ne '') { - printf OUTPUT " %-16s => \'$HASH{$_}\',\n", $quoted; - } - } - print OUTPUT ")\;\n\n"; -} - -sub print_hash_of_hashes { - my($hashname,%HASH) = @_; - print OUTPUT "my %$hashname = (\n"; - foreach my $key (sort keys %HASH) { - printf OUTPUT " %-12s => {\n", '\''.$key.'\''; - foreach(sort keys %{ $HASH{$key} }) { - my $quoted = '\''.$_.'\''; - if(defined($HASH{$key}{$_})) { - printf OUTPUT " %-12s => \'$HASH{$key}{$_}\',\n", $quoted; - } else { - printf OUTPUT " %-12s => undef,\n", $quoted; - } - } - print OUTPUT " },\n"; - } - print OUTPUT ")\;\n\n"; -} - -sub print_hash_of_arrays { - my($hashname,%HASH) = @_; - print OUTPUT "my %$hashname = (\n"; - foreach my $key (sort keys %HASH) { - printf OUTPUT " %-12s => [ ", '\''.$key.'\''; - my $len = 0; - foreach(sort keys %{ $HASH{$key} }) { - my $quoted = '\''.$_.'\''; - print OUTPUT "$quoted, "; - $len += length("$quoted, "); - if($len > 55) { - print OUTPUT "\n "; $len = 0; - } - } - print OUTPUT "],\n"; - } - print OUTPUT ")\;\n\n"; -} - -############################################################################# -sub print_arch_defines { - my(undef, $REALNAME) = @_; - my $dir = new DirHandle $_[0]; - if(!defined $dir) { - die "Couldn't open directory $_[0] ($!)"; - } - - my(%SUBMODEL_ALIAS,%DEFAULT_SUBMODEL,%ARCH,%ARCH_ALIAS); - - while(defined($_ = $dir->read)) { - next if($_ eq '.' or $_ eq '..'); - my $arch = $_; - my $filename = catfile($_[0], $arch); - open ARCHFILE, "<$filename" or die "Couldn't open $filename, ($!)"; - - $ARCH{$arch} = $arch; - while(<ARCHFILE>) { - $_ = process($_); - next unless $_; - - $$REALNAME{$arch} = $1 if(/^realname \"(.*)\"/); - $DEFAULT_SUBMODEL{$arch} = $1 if(/^default_submodel (.*)$/); - - # Read in a list of aliases and add them to ARCH_ALIAS - if(/^<aliases>$/) { - while(1) { - $_ = process($_ = <ARCHFILE>); - next unless $_; - last if(m@^</aliases>$@); - $ARCH_ALIAS{$_} = $arch; - } - } - # Read in a list of submodels and add them to ARCH - if(/^<submodels>$/) { - while(1) { - $_ = process($_ = <ARCHFILE>); - next unless $_; - last if(m@^</submodels>$@); - $ARCH{$_} = $arch; - } - } - - # Read in a list of submodel aliases and add them to SUBMODEL_ALIAS - if(/^<submodel_aliases>$/) { - while(1) { - $_ = process($_ = <ARCHFILE>); - next unless $_; - last if(m@^</submodel_aliases>$@); - m/^(\S*) -> (\S*)$/; - $SUBMODEL_ALIAS{$1} = $2; - } - } - } - } - undef $dir; - - print_hash('ARCH',%ARCH); - print_hash('ARCH_ALIAS',%ARCH_ALIAS); - print_hash('DEFAULT_SUBMODEL', %DEFAULT_SUBMODEL); - print_hash('SUBMODEL_ALIAS',%SUBMODEL_ALIAS); -} - -############################################################################# -sub print_os_defines { - my(undef, $REALNAME) = @_; - my $dir = new DirHandle $_[0]; - if(!defined $dir) { - die "Couldn't open directory $_[0] ($!)"; - } - - my(%OS_SUPPORTS_ARCH, - %OS_SUPPORTS_SHARED, - %OS_TYPE, - %INSTALL_INFO, - %OS_OBJ_SUFFIX, - %OS_SHARED_SUFFIX, - %OS_STATIC_SUFFIX, - %OS_AR_COMMAND, - %OS_AR_NEEDS_RANLIB, - %OS_ALIAS); - - while(defined($_ = $dir->read)) { - next if($_ eq '.' or $_ eq '..'); - my $os = $_; - - my $filename = catfile($_[0], $os); - open OSFILE, "<$filename" or die "Couldn't open $filename, ($!)"; - $OS_SHARED_SUFFIX{$os} = ''; - $OS_AR_COMMAND{$os} = ''; - - # Default values - while(<OSFILE>) { - $_ = process($_); - next unless $_; - - $$REALNAME{$os} = $1 if(/^realname \"(.*)\"/); - $OS_TYPE{$os} = $1 if(/^os_type (.*)/); - $OS_AR_COMMAND{$os} = $1 if(/^ar_command \"(.*)\"/); - $OS_AR_NEEDS_RANLIB{$os} = 1 if(/^ar_needs_ranlib yes$/); - $OS_AR_NEEDS_RANLIB{$os} = 0 if(/^ar_needs_ranlib no$/); - $OS_OBJ_SUFFIX{$os} = $1 if(/^obj_suffix (.*)/); - $OS_SHARED_SUFFIX{$os} = $1 if(/^so_suffix (.*)/); - $OS_STATIC_SUFFIX{$os} = $1 if(/^static_suffix (.*)/); - - $INSTALL_INFO{$os}{'root'} = $1 if(/^install_root (.*)/); - $INSTALL_INFO{$os}{'headers'} = $1 if(/^header_dir (.*)/); - $INSTALL_INFO{$os}{'libs'} = $1 if(/^lib_dir (.*)/); - $INSTALL_INFO{$os}{'docs'} = $1 if(/^doc_dir (.*)/); - $INSTALL_INFO{$os}{'user'} = $1 if(/^install_user (.*)/); - $INSTALL_INFO{$os}{'group'} = $1 if(/^install_group (.*)/); - $INSTALL_INFO{$os}{'command'} = $1 - if(/^install_cmd (.*)/); - - - if(/^<aliases>$/) { - while(1) { - $_ = process($_ = <OSFILE>); - next unless $_; - last if(m@^</aliases>$@); - $OS_ALIAS{$_} = $os; - } - } - if(/^<supports_shared>$/) { - while(1) { - $_ = process($_ = <OSFILE>); - next unless $_; - last if(m@^</supports_shared>$@); - $OS_SUPPORTS_SHARED{$os}{$_} = undef; - } - } - - # Read in a list of architectures and add them to OS_SUPPORTS_ARCH - if(/^<arch>$/) { - while(1) { - $_ = process($_ = <OSFILE>); - next unless $_; - last if(m@^</arch>$@); - $OS_SUPPORTS_ARCH{$os}{$_} = undef; - } - } - } - } - undef $dir; - - print_hash_of_arrays('OS_SUPPORTS_ARCH', %OS_SUPPORTS_ARCH); - print_hash_of_arrays('OS_SUPPORTS_SHARED', %OS_SUPPORTS_SHARED); - print_hash('OS_TYPE', %OS_TYPE); - print_hash_nodef('OS_OBJ_SUFFIX', %OS_OBJ_SUFFIX); - print_hash_nodef('OS_SHARED_SUFFIX', %OS_SHARED_SUFFIX); - print_hash_nodef('OS_STATIC_SUFFIX', %OS_STATIC_SUFFIX); - print_hash_nodef('OS_AR_COMMAND', %OS_AR_COMMAND); - print_hash_nodef('OS_AR_NEEDS_RANLIB', %OS_AR_NEEDS_RANLIB); - print_hash('OS_ALIAS', %OS_ALIAS); - print_hash_of_hashes('INSTALL_INFO', %INSTALL_INFO); -} - -############################################################################# -sub print_cc_defines { - my(undef, $REALNAME) = @_; - my $dir = new DirHandle $_[0]; - if(!defined $dir) { - die "Couldn't open directory $_[0] ($!)"; - } - - # Hashes 'o plenty here - my(%CC_BINARY_NAME, - %CC_LIB_OPT_FLAGS, - %CC_CHECK_OPT_FLAGS, - %CC_WARN_FLAGS, - %CC_LANG_FLAGS, - %CC_SO_OBJ_FLAGS, - %CC_SO_LINK_FLAGS, - %CC_DEBUG_FLAGS, - %CC_NO_DEBUG_FLAGS, - %CC_MACH_OPT_FLAGS, - %CC_MACH_OPT_FLAGS_RE, - %CC_ABI_FLAGS, - %CC_SUPPORTS_OS, - %CC_SUPPORTS_ARCH, - %CC_AR_COMMAND, - %MAKEFILE_STYLE); - - while(defined($_ = $dir->read)) { - next if($_ eq '.' or $_ eq '..'); - my $cc = $_; - my $filename = catfile($_[0], $cc); - open CCFILE, "<$filename" or die "Couldn't open $filename, ($!)"; - - # Default to empty values, so they don't have to be explicitly set - $CC_LIB_OPT_FLAGS{$cc} = - $CC_CHECK_OPT_FLAGS{$cc} = - $CC_LANG_FLAGS{$cc} = - $CC_WARN_FLAGS{$cc} = - $CC_SO_OBJ_FLAGS{$cc} = - $CC_DEBUG_FLAGS{$cc} = - $CC_AR_COMMAND{$cc} = - $CC_NO_DEBUG_FLAGS{$cc} = ''; - - while(<CCFILE>) { - $_ = process($_); - next unless $_; - - $$REALNAME{$cc} = $1 if(/^realname \"(.*)\"/); - $CC_BINARY_NAME{$cc} = $1 if(/^binary_name \"(.*)\"/); - - $CC_LIB_OPT_FLAGS{$cc} = $1 if(/^lib_opt_flags \"(.*)\"/); - - $CC_CHECK_OPT_FLAGS{$cc} = $1 - if(/^check_opt_flags \"(.*)\"/); - - $CC_AR_COMMAND{$cc} = $1 if(/^ar_command \"(.*)\"/); - $CC_LANG_FLAGS{$cc} = $1 if(/^lang_flags \"(.*)\"/); - $CC_WARN_FLAGS{$cc} = $1 if(/^warning_flags \"(.*)\"/); - $CC_SO_OBJ_FLAGS{$cc} = $1 if(/^so_obj_flags \"(.*)\"/); - $CC_DEBUG_FLAGS{$cc} = $1 if(/^debug_flags \"(.*)\"/); - $CC_NO_DEBUG_FLAGS{$cc} = $1 if(/^no_debug_flags \"(.*)\"/); - $MAKEFILE_STYLE{$cc} = $1 if(/^makefile_style (.*)/); - - # Read in a list of supported CPU types - if(/^<arch>$/) { - while(1) { - $_ = process($_ = <CCFILE>); - next unless $_; - last if(m@^</arch>$@); - $CC_SUPPORTS_ARCH{$cc}{$_} = undef; - } - } - - # Read in a list of supported OSes - if(/^<os>$/) { - while(1) { - $_ = process($_ = <CCFILE>); - next unless $_; - last if(m@^</os>$@); - $CC_SUPPORTS_OS{$cc}{$_} = undef; - } - } - - # Read in a list of machine optimization flags - if(/^<mach_opt>$/) { - while(1) { - $_ = process($_ = <CCFILE>); - next unless $_; - last if(m@^</mach_opt>$@); - m/^(\S*) -> \"(.*)\" ?(.*)?$/; - $CC_MACH_OPT_FLAGS{$cc}{$1} = $2; - if($3 ne '') { - $CC_MACH_OPT_FLAGS_RE{$cc}{$1} = $3; - } - } - } - - # Some systems need certain flags passed for linking as well - # (usually these change the ABI somehow). We just append this - # value to the CXX variable, so it's used for all ops. - if(/^<mach_abi_linking>$/) { - while(1) { - $_ = process($_ = <CCFILE>); - next unless $_; - last if(m@^</mach_abi_linking>$@); - m/^(\S*) -> \"(.*)\"$/; - $CC_ABI_FLAGS{$cc}{$1} = $2; - } - } - - # Read in a list of flags to created a shared lib (and set soname) - if(/^<so_link_flags>$/) { - while(1) { - $_ = process($_ = <CCFILE>); - next unless $_; - last if(m@^</so_link_flags>$@); - m/^(\S*) -> \"(.*)\"$/; - $CC_SO_LINK_FLAGS{$cc}{$1} = $2; - } - } - } - } - undef $dir; - - # Finally, print some stuff - print_hash_of_arrays('CC_SUPPORTS_OS',%CC_SUPPORTS_OS); - print_hash_of_arrays('CC_SUPPORTS_ARCH',%CC_SUPPORTS_ARCH); - - print_hash('CC_BINARY_NAME', %CC_BINARY_NAME); - print_hash('CC_LIB_OPT_FLAGS', %CC_LIB_OPT_FLAGS); - print_hash('CC_CHECK_OPT_FLAGS', %CC_CHECK_OPT_FLAGS); - print_hash('CC_WARN_FLAGS', %CC_WARN_FLAGS); - print_hash('CC_LANG_FLAGS', %CC_LANG_FLAGS); - print_hash('CC_DEBUG_FLAGS', %CC_DEBUG_FLAGS); - print_hash('CC_NO_DEBUG_FLAGS', %CC_NO_DEBUG_FLAGS); - print_hash_of_hashes('CC_MACHINE_OPT_FLAGS', %CC_MACH_OPT_FLAGS); - print_hash_of_hashes('CC_MACHINE_OPT_FLAGS_RE', %CC_MACH_OPT_FLAGS_RE); - print_hash('CC_SO_OBJ_FLAGS', %CC_SO_OBJ_FLAGS); - print_hash_of_hashes('CC_ABI_FLAGS', %CC_ABI_FLAGS); - print_hash_of_hashes('CC_SO_LINK_FLAGS', %CC_SO_LINK_FLAGS); - print_hash('CC_AR_COMMAND', %CC_AR_COMMAND); - print_hash('MAKEFILE_STYLE', %MAKEFILE_STYLE); -} |