# DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
# provided to stack calls. Generates unique stack functions for
# each possible stack type.
-# DES_PTR use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
-# DES_RISC1 use different DES_ENCRYPT macro that helps reduce register
-# dependancies but needs to more registers, good for RISC CPU's
-# DES_RISC2 A different RISC variant.
-# DES_UNROLL unroll the inner DES loop, sometimes helps, somtimes hinders.
-# DES_INT use 'int' instead of 'long' for DES_LONG in crypto/des/des.h
-# This is used on the DEC Alpha where long is 8 bytes
-# and int is 4
# BN_LLONG use the type 'long long' in crypto/bn/bn.h
-# MD2_CHAR use 'char' instead of 'int' for MD2_INT in crypto/md2/md2.h
-# MD2_LONG use 'long' instead of 'int' for MD2_INT in crypto/md2/md2.h
-# IDEA_SHORT use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h
-# IDEA_LONG use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h
-# RC2_SHORT use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
-# RC2_LONG use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
# RC4_CHAR use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
-# RC4_LONG use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
-# RC4_INDEX define RC4_INDEX in crypto/rc4/rc4_locl.h. This turns on
-# array lookups instead of pointer use.
-# RC4_CHUNK enables code that handles data aligned at long (natural CPU
-# word) boundary.
-# RC4_CHUNK_LL enables code that handles data aligned at long long boundary
-# (intended for 64-bit CPUs running 32-bit OS).
-# BF_PTR use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
-# BF_PTR2 intel specific version (generic version is more efficient).
-#
# Following are set automatically by this script
#
# MD5_ASM use some extra md5 assember,
# This adds backtrace information to the memory leak info.
my $memleak_devteam_backtrace = "-rdynamic -DCRYPTO_MDEBUG_BACKTRACE";
-
my $strict_warnings = 0;
-my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
-
-# MD2_CHAR slags pentium pros
-my $x86_gcc_opts="RC4_INDEX MD2_INT";
-
# As for $BSDthreads. Idea is to maintain "collective" set of flags,
# which would cover all BSD flavors. -pthread applies to them all,
# but is treated differently. OpenBSD expands is as -D_POSIX_THREAD
my $no_rfc3779=0;
my $no_asm=0;
my $no_dso=0;
-my $Makefile="Makefile";
my $default_ranlib;
$config{fips}=0;
"ec_nistp_64_gcc_128",
"engine",
"err", # Really???
- "gost",
"heartbeats",
"hmac",
"hw(-.+)?",
"zlib" => [ "zlib-dynamic" ],
"rijndael" => [ "aes" ],
"des" => [ "mdc2" ],
- "ec" => [ "ecdsa", "ecdh", "gost" ],
- "dsa" => [ "gost" ],
- "dh" => [ "gost" ],
+ "ec" => [ "ecdsa", "ecdh" ],
"psk" => [ "jpake" ],
"dgram" => [ "dtls" ],
{ $no_sse2 = 1; }
elsif (/^engine$/)
{ @{$config{dirs}} = grep !/^engine$/, @{$config{dirs}}; }
- elsif (/^gost$/)
- { @{$config{engdirs}} = grep !/^ccgost$/, @{$config{engdirs}}; }
else
{
my ($ALGO, $algo);
# Allow environment CC to override compiler...
$target{cc} = $ENV{CC} || $target{cc};
-# For cflags and lflags, add the debug_ or release_ attributes
+# For cflags, lflags and ex_libs, add the debug_ or release_ attributes
# Do it in such a way that no spurious space is appended (hence the grep).
$config{cflags} = join(" ",
grep { $_ ne "" } ($target{cflags},
$config{lflags} = join(" ",
grep { $_ ne "" } ($target{lflags},
$target{$build_prefix."lflags"}));
+$config{ex_libs} = join(" ",
+ grep { $_ ne "" } ($target{ex_libs},
+ $target{$build_prefix."ex_libs"}));
$target{ranlib} = $ENV{'RANLIB'} || $target{ranlib} || $default_ranlib;
$target{ar} = $ENV{'AR'} || "ar";
$config{cflags} .= "$exp_cflags";
-# '%' in $config{lflags} is used to split flags to "pre-" and post-flags
-my ($pre,$post)=split('%',$config{lflags});
-if (defined($post)) { $config{prelflags}=$pre; $config{lflags}=$post; }
-else { $config{prelflags}=""; $config{lflags}=$pre; }
-
if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` !~ m/-mno-cygwin/m)
{
$config{cflags} =~ s/-mno-cygwin\s*//;
$config{cflags} = "$dso_cflags $config{cflags}";
}
-my $thread_cflags;
+my $thread_cflags = "";
my @thread_defines;
if ($target{thread_cflag} ne "(unknown)" && !$no_threads)
{
print "provide any system-specific compiler options\n";
exit(1);
}
- $thread_cflags="-DOPENSSL_THREADS $config{cflags}" ;
+ $thread_cflags="-DOPENSSL_THREADS" ;
push @thread_defines, "OPENSSL_THREADS";
}
else
{
- $thread_cflags="-DOPENSSL_THREADS $target{thread_cflag} $config{cflags}";
+ $thread_cflags="-DOPENSSL_THREADS $target{thread_cflag}";
push @thread_defines, "OPENSSL_THREADS";
-# my $def;
-# foreach $def (split ' ',$target{thread_cflag})
-# {
-# if ($def =~ s/^-D// && $def !~ /^_/)
-# {
-# push @thread_defines, "$def";
-# }
-# }
}
-$config{lflags}="$libs$config{lflags}" if ($libs ne "");
+$config{ex_libs}="$libs$config{ex_libs}" if ($libs ne "");
if ($no_asm)
{
$config{cflags}=~s/-D[BL]_ENDIAN// if ($config{fips});
- $thread_cflags=~s/-D[BL]_ENDIAN// if ($config{fips});
}
if ($threads)
{
- $config{cflags}=$thread_cflags;
+ $config{cflags} = "$thread_cflags $config{cflags}" if $thread_cflags;
push @{$config{openssl_thread_defines}}, @thread_defines;
}
{
if (defined($withargs{"zlib-lib"}))
{
- $config{lflags} .= " -L" . $withargs{"zlib-lib"} . " -lz";
+ $config{ex_libs} .= " -L" . $withargs{"zlib-lib"} . " -lz";
}
else
{
- $config{lflags} .= " -lz";
+ $config{ex_libs} .= " -lz";
}
}
else
#
# Platform fix-ups
#
-if ($target =~ /-icc$/) # Intel C compiler
- {
- my $iccver=0;
- if (open(FD,"$target{cc} -V 2>&1 |"))
- {
- while(<FD>) { $iccver=$1 if (/Version ([0-9]+)\./); }
- close(FD);
- }
- if ($iccver>=8)
- {
- $config{cflags}=~s/-KPIC/-fPIC/;
- # Eliminate unnecessary dependency from libirc.a. This is
- # essential for shared library support, as otherwise
- # apps/openssl can end up in endless loop upon startup...
- $config{cflags}.=" -Dmemcpy=__builtin_memcpy -Dmemset=__builtin_memset";
- }
- if ($iccver>=9)
- {
- $config{lflags}.=" -i-static";
- $config{lflags}=~s/-no_cpprt/-no-cpprt/;
- }
- if ($iccver>=10)
- {
- $config{lflags}=~s/-i-static/-static-intel/;
- }
- if ($iccver>=11)
- {
- $config{cflags}.=" -no-intel-extensions"; # disable Cilk
- $config{lflags}=~s/-no-cpprt/-no-cxxlib/;
- }
- }
-
# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
# .so objects. Apparently application RPATH is not global and does
}
}
-$config{makedepprog} = "makedepend";
-if ($target{cc} eq "gcc" || ($target{cc} eq 'cc' && $config{target} =~ /darwin/)) {
- $config{makedepprog} = $target{cc};
-}
-# On different platforms, shared library suffixes takes interesting forms.
-# On Most Unixen, it's .so.{version} or .sl.{version}, while on MacOS X,
-# it's .{version}.dylib. We're want to separate the two so we can calculate
-# symlinks.
-# FIXME: is this actually needed any more? Makefile.shared seems to just
-# symlink a file name without SOVER to the file with full SOVER, nothing in
-# between.
-if ($target{shared_extension} =~ /^(|(?<e>\.s[ol])(?<v>\..*)|(?<v>\..*)(?<e>\.dylib))$/) {
- my @vernums = split /\./, $+{v};
- shift @vernums; # Because the initial period in shlib_extension.
- my @s = ();
- while (@vernums) {
- pop @vernums;
- push @s, join(".", $+{e} eq ".dylib" ? "" : $+{e},
- @vernums,
- $+{e} eq ".dylib" ? $+{e} : () );
- }
- $config{shared_link_extensions} = join(" ", @s);
-} else {
- $config{shared_link_extensions} = "";
-}
+my $ecc = $target{cc};
+$ecc = "clang" if `$target{cc} --version 2>&1` =~ /clang/;
+
+$config{makedepprog} =
+ $ecc eq "gcc" || $ecc eq "clang" ? $target{cc} : "makedepend";
$config{depflags} =~ s/^\s*//;
# Deal with bn_ops ###################################################
-$config{des_ptr} =0;
-$config{des_risc1} =0;
-$config{des_risc2} =0;
-$config{des_unroll} =0;
$config{bn_ll} =0;
-$config{rc4_idx} =0;
-$config{bf_ptr} =0;
$config{export_var_as_fn} =0;
my $def_int="unsigned int";
$config{rc4_int} =$def_int;
-$config{rc4_chunk} ="";
-$config{md2_int} =$def_int;
-$config{idea_int} =$def_int;
-$config{rc2_int} =$def_int;
-($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})=(0,0,1,0,0);
-
-$config{des_int} = "unsigned long";
+($config{b64l},$config{b64},$config{b32})=(0,0,1);
+my $count = 0;
foreach (sort split(/\s+/,$target{bn_ops})) {
- $config{des_ptr}=1 if /DES_PTR/;
- $config{des_risc1}=1 if /DES_RISC1/;
- $config{des_risc2}=1 if /DES_RISC2/;
- $config{des_unroll}=1 if /DES_UNROLL/;
- $config{des_int}="unsigned int" if /DES_INT/;
- $config{bn_ll}=1 if /BN_LLONG/;
- $config{rc4_int}="unsigned char" if /RC4_CHAR/;
- $config{rc4_int}="unsigned long" if /RC4_LONG/;
- $config{rc4_idx}=1 if /RC4_INDEX/;
- $config{rc4_chunk}="unsigned long" if /RC4_CHUNK/;
- $config{rc4_chunk}="unsigned long long" if /RC4_CHUNK_LL/;
- $config{md2_int}="unsigned char" if /MD2_CHAR/;
- $config{md2_int}="unsigned long" if /MD2_LONG/;
- $config{idea_int}="unsigned char" if /IDEA_CHAR/;
- $config{idea_int}="unsigned long" if /IDEA_LONG/;
- $config{rc2_int}="unsigned char" if /RC2_CHAR/;
- $config{rc2_int}="unsigned long" if /RC2_LONG/;
- $config{bf_ptr}=1 if $_ eq "BF_PTR";
- $config{bf_ptr}=2 if $_ eq "BF_PTR2";
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(0,0,1,0,0) if /THIRTY_TWO_BIT/;
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(0,0,0,1,0) if /SIXTEEN_BIT/;
- ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
- =(0,0,0,0,1) if /EIGHT_BIT/;
- $config{export_var_as_fn}=1 if /EXPORT_VAR_AS_FN/;
+ $count++ if /SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT/;
+ $config{export_var_as_fn}=1 if $_ eq 'EXPORT_VAR_AS_FN';
+ $config{bn_ll}=1 if $_ eq 'BN_LLONG';
+ $config{rc4_int}="unsigned char" if $_ eq 'RC4_CHAR';
+ ($config{b64l},$config{b64},$config{b32})
+ =(0,1,0) if $_ eq 'SIXTY_FOUR_BIT';
+ ($config{b64l},$config{b64},$config{b32})
+ =(1,0,0) if $_ eq 'SIXTY_FOUR_BIT_LONG';
+ ($config{b64l},$config{b64},$config{b32})
+ =(0,0,1) if $_ eq 'THIRTY_TWO_BIT';
}
+die "Exactly one of SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT can be set in bn_ops\n"
+ if $count > 1;
# Hack cflags for better warnings (dev option) #######################
$config{cflags} .= " $apiflag";
}
-my $ecc = $target{cc};
-$ecc = "clang" if `$target{cc} --version 2>&1` =~ /clang/;
-
if ($strict_warnings)
{
my $wopt;
}
if ($target =~ /^BSD-/)
{
- $config{lflags} .= " -lexecinfo";
+ $config{ex_libs} .= " -lexecinfo";
}
}
}
print OUT <<"EOF";
);
+EOF
+print OUT "our \%available_protocols = (\n";
+print OUT " tls => [ ", join(", ", map { quotify("perl", $_) } @tls), " ],\n";
+print OUT " dtls => [ ", join(", ", map { quotify("perl", $_) } @dtls), " ],\n";
+print OUT <<"EOF";
+);
+
+EOF
+print OUT "our \%disabled = (\n";
+foreach (sort keys %disabled) {
+ print OUT " ", quotify("perl", $_), " => ", quotify("perl", $disabled{$_}), ",\n";
+}
+print OUT <<"EOF";
+);
+
EOF
print OUT "our %withargs = (\n";
foreach (sort keys %withargs) {
print "IsMK1MF =", ($target{build_scheme}->[0] eq "mk1mf" ? "yes" : "no"), "\n";
print "CC =$target{cc}\n";
print "CFLAG =$config{cflags}\n";
-print "EX_LIBS =$config{lflags}\n";
+print "LFLAGS =$config{lflags}\n";
+print "EX_LIBS =$config{ex_libs}\n";
print "CPUID_OBJ =$target{cpuid_obj}\n";
print "BN_ASM =$target{bn_obj}\n";
print "EC_ASM =$target{ec_obj}\n";
print "RMD160_OBJ_ASM=$target{rmd160_obj}\n";
print "CMLL_ENC =$target{cmll_obj}\n";
print "MODES_OBJ =$target{modes_obj}\n";
-print "ENGINES_OBJ =$target{engines_obj}\n";
+print "PADLOCK_OBJ =$target{padlock_obj}\n";
print "CHACHA_ENC =$target{chacha_obj}\n";
print "POLY1305_OBJ =$target{poly1305_obj}\n";
print "PROCESSOR =$config{processor}\n";
print "RANLIB =$target{ranlib}\n";
print "ARFLAGS =$target{arflags}\n";
print "PERL =$config{perl}\n";
+print "\n";
+print "SIXTY_FOUR_BIT_LONG mode\n" if $config{b64l};
+print "SIXTY_FOUR_BIT mode\n" if $config{b64};
+print "THIRTY_TWO_BIT mode\n" if $config{b32};
+print "BN_LLONG mode\n" if $config{bn_ll};
+print "RC4 uses $config{rc4_int}\n" if $config{rc4_int} != $def_int;
-run_dofile("$Makefile.in","$Makefile.new");
+run_dofile("Makefile.in","Makefile");
-run_dofile("include/openssl/opensslconf.h.in", "include/openssl/opensslconf.h");
+run_dofile("util/domd.in", "util/domd");
+chmod 0755, "util/domd";
run_dofile("include/openssl/opensslconf.h.in", "include/openssl/opensslconf.h");
-foreach my $alg ( 'bf', 'bn', 'des', 'rc4' ) {
+foreach my $alg ( 'bn' ) {
run_dofile("crypto/include/internal/${alg}_conf.h.in",
"crypto/include/internal/${alg}_conf.h");
}
-# Fix the date
-
-print "SIXTY_FOUR_BIT_LONG mode\n" if $config{b64l};
-print "SIXTY_FOUR_BIT mode\n" if $config{b64};
-print "THIRTY_TWO_BIT mode\n" if $config{b32};
-print "SIXTEEN_BIT mode\n" if $config{b16};
-print "EIGHT_BIT mode\n" if $config{b8};
-print "DES_PTR used\n" if $config{des_ptr};
-print "DES_RISC1 used\n" if $config{des_risc1};
-print "DES_RISC2 used\n" if $config{des_risc2};
-print "DES_UNROLL used\n" if $config{des_unroll};
-print "DES_INT used\n" if $config{des_int} =~ / int$/;
-print "BN_LLONG mode\n" if $config{bn_ll};
-print "RC4 uses $config{rc4_int}\n" if $config{rc4_int} != $def_int;
-print "RC4_INDEX mode\n" if $config{rc4_idx};
-print "RC4_CHUNK is undefined\n" unless $config{rc4_chunk};
-print "RC4_CHUNK is $config{rc4_chunk}\n" if $config{rc4_chunk};
-print "MD2 uses $config{md2_int}\n" if $config{md2_int} != $def_int;
-print "IDEA uses $config{idea_int}\n" if $config{idea_int} != $def_int;
-print "RC2 uses $config{rc2_int}\n" if $config{rc2_int} != $def_int;
-print "BF_PTR used\n" if $config{bf_ptr} == 1;
-print "BF_PTR2 used\n" if $config{bf_ptr} == 2;
-
# Copy all Makefile.in to Makefile (except top-level)
use File::Find;
use IO::File;
-find(sub {
- return if ($_ ne "Makefile.in" || $File::Find::dir eq ".");
- my $in = IO::File->new($_, "r") or
- die sprintf "Error reading Makefile.in in %s: !$\n",
+find(
+ {
+ preprocess => sub {
+ grep(!/^\./, @_);
+ },
+ wanted => sub {
+ return if ($_ ne "Makefile.in" || $File::Find::dir eq ".");
+ my $in = IO::File->new($_, "r") or
+ die sprintf "Error reading Makefile.in in %s: !$\n",
$File::Find::dir;
- my $out = IO::File->new("Makefile", "w") or
- die sprintf "Error writing Makefile in %s: !$\n",
+ my $out = IO::File->new("Makefile", "w") or
+ die sprintf "Error writing Makefile in %s: !$\n",
$File::Find::dir;
- print $out "# Generated from $_, do not edit\n";
- while (my $line = <$in>) { print $out $line }
- $in->close() or
- die sprintf "Error reading Makefile.in in %s: !$\n",
+ print $out "# Generated from $_, do not edit\n";
+ while (my $line = <$in>) { print $out $line }
+ $in->close() or
+ die sprintf "Error reading Makefile.in in %s: !$\n",
$File::Find::dir;
- $out->close() or
- die sprintf "Error writing Makefile in %s: !$\n",
+ $out->close() or
+ die sprintf "Error writing Makefile in %s: !$\n",
$File::Find::dir;
- }, ".");
+ },
+ },
+ ".");
my %builders = (
unixmake => sub {
my $in = shift;
my $out = shift;
- # should we remove $out ?
- system("$config{perl} -I. -Mconfigdata util/dofile.pl <$in >$out.new");
+ unlink $out || warn "Can't remove $out, $!"
+ if -f $out;
+ die "Can't open $in, $!" unless -f $in;
+ system("$config{perl} -I. -Mconfigdata util/dofile.pl -o\"Configure\" $in > $out.new");
exit 1 if $? != 0;
rename("$out.new", $out) || die "Can't rename $out.new, $!";
}
return if $target{template};
my @sequence = (
+ "sys_id",
"cc",
"cflags",
"debug_cflags",
"release_cflags",
- "unistd",
"thread_cflag",
- "sys_id",
+ "unistd",
+ "ld",
"lflags",
+ "ex_libs",
"debug_lflags",
+ "debug_ex_libs",
"release_lflags",
+ "release_ex_libs",
"bn_ops",
"cpuid_obj",
"bn_obj",
"wp_obj",
"cmll_obj",
"modes_obj",
- "engines_obj",
+ "padlock_obj",
"perlasm_scheme",
"dso_scheme",
"shared_target",
"shared_cflag",
"shared_ldflag",
"shared_extension",
+ "obj_extension",
+ "exe_extension",
"ranlib",
+ "ar",
"arflags",
"multilib",
+ "build_scheme",
);
if ($type eq "TABLE") {
}
}
-sub print_table_entry
- {
- my $target = shift;
- my %target = resolve_config($target);
- my $type = shift;
-
- # Don't print the templates
- return if $target{template};
-
- if ($type eq "TABLE") {
- print <<"EOF"
-
-*** $target
-\$cc = $target{cc}
-\$cflags = $target{cflags}
-\$debug_cflags = $target{debug_cflags}
-\$release_cflags = $target{release_cflags}
-\$unistd = $target{unistd}
-\$thread_cflag = $target{thread_cflag}
-\$sys_id = $target{sys_id}
-\$lflags = $target{lflags}
-\$debug_lflags = $target{debug_lflags}
-\$release_lflags = $target{release_lflags}
-\$bn_ops = $target{bn_ops}
-\$cpuid_obj = $target{cpuid_obj}
-\$bn_obj = $target{bn_obj}
-\$ec_obj = $target{ec_obj}
-\$des_obj = $target{des_obj}
-\$aes_obj = $target{aes_obj}
-\$bf_obj = $target{bf_obj}
-\$md5_obj = $target{md5_obj}
-\$sha1_obj = $target{sha1_obj}
-\$cast_obj = $target{cast_obj}
-\$rc4_obj = $target{rc4_obj}
-\$rmd160_obj = $target{rmd160_obj}
-\$rc5_obj = $target{rc5_obj}
-\$wp_obj = $target{wp_obj}
-\$cmll_obj = $target{cmll_obj}
-\$modes_obj = $target{modes_obj}
-\$engines_obj = $target{engines_obj}
-\$chacha_obj = $target{chacha_obj}
-\$poly1305_obj = $target{poly1305_obj}
-\$perlasm_scheme = $target{perlasm_scheme}
-\$dso_scheme = $target{dso_scheme}
-\$shared_target= $target{shared_target}
-\$shared_cflag = $target{shared_cflag}
-\$shared_ldflag = $target{shared_ldflag}
-\$shared_extension = $target{shared_extension}
-\$ranlib = $target{ranlib}
-\$arflags = $target{arflags}
-\$multilib = $target{multilib}
-EOF
- } elsif ($type eq "HASH") {
- my @sequence = (
- "cc",
- "cflags",
- "debug_cflags",
- "release_cflags",
- "unistd",
- "thread_cflag",
- "sys_id",
- "lflags",
- "debug_lflags",
- "release_lflags",
- "bn_ops",
- "cpuid_obj",
- "bn_obj",
- "ec_obj",
- "des_obj",
- "aes_obj",
- "bf_obj",
- "md5_obj",
- "sha1_obj",
- "cast_obj",
- "rc4_obj",
- "rmd160_obj",
- "rc5_obj",
- "wp_obj",
- "cmll_obj",
- "modes_obj",
- "engines_obj",
- "chacha_obj",
- "poly1305_obj",
- "perlasm_scheme",
- "dso_scheme",
- "shared_target",
- "shared_cflag",
- "shared_ldflag",
- "shared_extension",
- "ranlib",
- "arflags",
- "multilib",
- );
- my $largest =
- length((sort { length($a) <=> length($b) } @sequence)[-1]);
- print " '$target' => {\n";
- foreach (@sequence) {
- if ($target{$_}) {
- print " '",$_,"'"," " x ($largest - length($_))," => '",$target{$_},"',\n";
- }
- }
- print " },\n";
- }
- }
-
sub quotify {
my %processors = (
perl => sub { my $x = shift;