Sort platforms lexicographically as well.  Also, support more than two
variants of a symbol.
diff --git a/util/libeay.num b/util/libeay.num
index 92de2a8..99fc010 100755
--- a/util/libeay.num
+++ b/util/libeay.num
@@ -701,7 +701,7 @@
 BN_uadd                                 708	EXIST::FUNCTION:
 BN_usub                                 709	EXIST::FUNCTION:
 bn_sqr_words                            710	EXIST::FUNCTION:
-crypt                                   711	EXIST:!PERL5,!NeXT,!__FreeBSD__:FUNCTION:DES
+crypt                                   711	EXIST:!NeXT,!PERL5,!__FreeBSD__:FUNCTION:DES
 d2i_ASN1_BIT_STRING                     712	EXIST::FUNCTION:
 d2i_ASN1_BOOLEAN                        713	EXIST::FUNCTION:
 d2i_ASN1_HEADER                         714	EXIST::FUNCTION:
@@ -984,8 +984,8 @@
 CRYPTO_free_ex_data                     1004	EXIST::FUNCTION:
 CRYPTO_get_ex_data                      1005	EXIST::FUNCTION:
 CRYPTO_set_ex_data                      1007	EXIST::FUNCTION:
-ERR_load_CRYPTO_strings                 1009	EXIST:!WIN16,!VMS:FUNCTION:
-ERR_load_CRYPTOlib_strings              1009	EXIST:WIN16,VMS:FUNCTION:
+ERR_load_CRYPTO_strings                 1009	EXIST:!VMS,!WIN16:FUNCTION:
+ERR_load_CRYPTOlib_strings              1009	EXIST:VMS,WIN16:FUNCTION:
 EVP_PKEY_bits                           1010	EXIST::FUNCTION:
 MD5_Transform                           1011	EXIST::FUNCTION:MD5
 SHA1_Transform                          1012	EXIST::FUNCTION:SHA,SHA1
@@ -1137,11 +1137,11 @@
 NETSCAPE_CERT_SEQUENCE_free             1165	EXIST::FUNCTION:
 NETSCAPE_CERT_SEQUENCE_new              1166	EXIST::FUNCTION:
 OBJ_txt2obj                             1167	EXIST::FUNCTION:
-PEM_read_NETSCAPE_CERT_SEQUENCE         1168	EXIST:!WIN16,!VMS:FUNCTION:
+PEM_read_NETSCAPE_CERT_SEQUENCE         1168	EXIST:!VMS,!WIN16:FUNCTION:
 PEM_read_NS_CERT_SEQ                    1168	EXIST:VMS:FUNCTION:
 PEM_read_bio_NETSCAPE_CERT_SEQUENCE     1169	EXIST:!VMS:FUNCTION:
 PEM_read_bio_NS_CERT_SEQ                1169	EXIST:VMS:FUNCTION:
-PEM_write_NETSCAPE_CERT_SEQUENCE        1170	EXIST:!WIN16,!VMS:FUNCTION:
+PEM_write_NETSCAPE_CERT_SEQUENCE        1170	EXIST:!VMS,!WIN16:FUNCTION:
 PEM_write_NS_CERT_SEQ                   1170	EXIST:VMS:FUNCTION:
 PEM_write_bio_NETSCAPE_CERT_SEQUENCE    1171	EXIST:!VMS:FUNCTION:
 PEM_write_bio_NS_CERT_SEQ               1171	EXIST:VMS:FUNCTION:
@@ -1437,10 +1437,10 @@
 d2i_PKCS8_PRIV_KEY_INFO_bio             1783	EXIST::FUNCTION:BIO
 d2i_PKCS8_fp                            1784	EXIST::FUNCTION:FP_API
 PEM_write_PKCS8                         1785	EXIST:!WIN16:FUNCTION:
-PEM_read_PKCS8_PRIV_KEY_INFO            1786	EXIST:!WIN16,!VMS:FUNCTION:
+PEM_read_PKCS8_PRIV_KEY_INFO            1786	EXIST:!VMS,!WIN16:FUNCTION:
 PEM_read_P8_PRIV_KEY_INFO               1786	EXIST:VMS:FUNCTION:
 PEM_read_bio_PKCS8                      1787	EXIST::FUNCTION:
-PEM_write_PKCS8_PRIV_KEY_INFO           1788	EXIST:!WIN16,!VMS:FUNCTION:
+PEM_write_PKCS8_PRIV_KEY_INFO           1788	EXIST:!VMS,!WIN16:FUNCTION:
 PEM_write_P8_PRIV_KEY_INFO              1788	EXIST:VMS:FUNCTION:
 PKCS5_PBE_keyivgen                      1789	EXIST::FUNCTION:
 i2d_PKCS8_bio                           1790	EXIST::FUNCTION:BIO
@@ -2035,8 +2035,8 @@
 d2i_OCSP_RESPBYTES                      2614	EXIST::FUNCTION:
 i2d_OCSP_CERTID                         2615	EXIST::FUNCTION:
 d2i_OCSP_SINGLERESP                     2616	EXIST::FUNCTION:
-OCSP_crlID_new                          2617	EXIST:!WIN16,!VMS:FUNCTION:
-OCSP_crlID2_new                         2617	EXIST:WIN16,VMS:FUNCTION:
+OCSP_crlID_new                          2617	EXIST:!VMS,!WIN16:FUNCTION:
+OCSP_crlID2_new                         2617	EXIST:VMS,WIN16:FUNCTION:
 OCSP_BASICRESP_new                      2618	EXIST::FUNCTION:
 d2i_OCSP_SERVICELOC                     2619	EXIST::FUNCTION:
 OCSP_response_new                       2620	NOEXIST::FUNCTION:
diff --git a/util/mkdef.pl b/util/mkdef.pl
index b611749..a4f573c 100755
--- a/util/mkdef.pl
+++ b/util/mkdef.pl
@@ -384,9 +384,13 @@
 				$variant_cnt{$s}++;
 				$a .= "{$variant_cnt{$s}}";
 			}
-			if (defined($variant{$s})) { $variant{$s} .= ";"; }
-			$variant{$s} = $a.":".$a1;
-			if (defined($k)) { $variant{$s} .= ":$k"; }
+			my $toadd = $a.":".$a1.(defined($k)?":".$k:"");
+			my $togrep = $s.'(\{[0-9]+\})?:'.$a1.(defined($k)?":".$k:"");
+			if (!grep(/^$togrep$/,
+				  split(/;/, defined($variant{$s})?$variant{$s}:""))) {
+				if (defined($variant{$s})) { $variant{$s} .= ";"; }
+				$variant{$s} .= $toadd;
+			}
 			print STDERR "DEBUG: make_variant: Exit with variant of ",$s," = ",$variant{$s},"\n" if $debug;
 		};
 
@@ -679,7 +683,6 @@
 					&$make_variant("$1_it","$1_it",
 						      "EXPORT_VAR_AS_FUNCTION",
 						      "FUNCTION");
-					print STDERR "DEBUG: after make_variant: variant of $1_it = ",$variant{"$1_it"},"\n" if $debug;
 					next;
 				} elsif (/^\s*DECLARE_ASN1_SET_OF\s*\(\s*(\w*)\s*\)/) {
 					next;
@@ -751,7 +754,6 @@
 					&$make_variant("_shadow_$2","_shadow_$2",
 						      "EXPORT_VAR_AS_FUNCTION",
 						      "FUNCTION");
-					print STDERR "DEBUG: after make_variant: variant of $1_it = ",$variant{"$1_it"},"\n" if $debug;
 				} elsif ($tag{'CONST_STRICT'} != 1) {
 					if (/\{|\/\*|\([^\)]*$/) {
 						$line = $_;
@@ -831,15 +833,17 @@
 			$algorithm{$s} .= ','.$a;
 
 			if (defined($variant{$s})) {
-				(my $r, my $p, my $k) = split(/:/,$variant{$s});
-				my $ip = join ',',map({ /^!(.*)$/ ? $1 : "!".$_ } split /,/, $p);
-				$syms{$r} = 1;
-				if (!defined($k)) { $k = $kind{$s}; }
-				$kind{$r} = $k."(".$s.")";
-				$algorithm{$r} = $algorithm{$s};
-				$platform{$r} = &reduce_platforms($platform{$s}.",".$p.",".$p);
-				$platform{$s} = &reduce_platforms($platform{$s}.','.$ip.','.$ip);
-				print STDERR "DEBUG: \$variant{\"$s\"} = ",$variant{$s},"; \$r = $r; \$p = ",$platform{$r},"; \$a = ",$algorithm{$r},"; \$kind = ",$kind{$r},"\n" if $debug;
+				foreach $v (split /;/,$variant{$s}) {
+					(my $r, my $p, my $k) = split(/:/,$v);
+					my $ip = join ',',map({ /^!(.*)$/ ? $1 : "!".$_ } split /,/, $p);
+					$syms{$r} = 1;
+					if (!defined($k)) { $k = $kind{$s}; }
+					$kind{$r} = $k."(".$s.")";
+					$algorithm{$r} = $algorithm{$s};
+					$platform{$r} = &reduce_platforms($platform{$s}.",".$p.",".$p);
+					$platform{$s} = &reduce_platforms($platform{$s}.','.$ip.','.$ip);
+					print STDERR "DEBUG: \$variant{\"$s\"} = ",$v,"; \$r = $r; \$p = ",$platform{$r},"; \$a = ",$algorithm{$r},"; \$kind = ",$kind{$r},"\n" if $debug;
+				}
 			}
 			print STDERR "DEBUG: \$s = $s; \$p = ",$platform{$s},"; \$a = ",$algorithm{$s},"; \$kind = ",$kind{$s},"\n" if $debug;
 		}
@@ -901,7 +905,7 @@
 
 	delete $p{""};
 
-	$ret = join(',',map { $p{$_} < 0 ? "!".$_ : $_ } keys %p);
+	$ret = join(',',sort(map { $p{$_} < 0 ? "!".$_ : $_ } keys %p));
 	print STDERR "DEBUG: Exiting reduce_platforms with \"$ret\"\n"
 	    if $debug;
 	return $ret;
diff --git a/util/ssleay.num b/util/ssleay.num
index bc2c1fc..32c89c3 100755
--- a/util/ssleay.num
+++ b/util/ssleay.num
@@ -169,7 +169,7 @@
 SSL_add_file_cert_subjs_to_stk          185	EXIST:VMS:FUNCTION:STDIO
 SSL_set_tmp_rsa_callback                186	EXIST::FUNCTION:RSA
 SSL_set_tmp_dh_callback                 187	EXIST::FUNCTION:DH
-SSL_add_dir_cert_subjects_to_stack      188	EXIST:!WIN32,!VMS:FUNCTION:STDIO
+SSL_add_dir_cert_subjects_to_stack      188	EXIST:!VMS,!WIN32:FUNCTION:STDIO
 SSL_add_dir_cert_subjs_to_stk           188	NOEXIST::FUNCTION:
 SSL_set_session_id_context              189	EXIST::FUNCTION:
 SSL_CTX_use_certificate_chain_file      222	EXIST:!VMS:FUNCTION:STDIO