-print "\n#ifdef INCLUDE_FUNCTION_TABLE\n";
-print "static FUNCTION functions[] = {\n";
-foreach (@ARGV) {
- my $str=" { FT_general, \"$_\", ${_}_main, ${_}_options },\n";
- if (/^s_/ || /^ciphers$/) {
- print "#if !defined(OPENSSL_NO_SOCK)\n${str}#endif\n";
- } elsif (/^engine$/) {
- print "#ifndef OPENSSL_NO_ENGINE\n${str}#endif\n";
- } elsif (/^rsa$/ || /^genrsa$/ || /^rsautl$/) {
- print "#ifndef OPENSSL_NO_RSA\n${str}#endif\n";
- } elsif (/^dsa$/ || /^gendsa$/ || /^dsaparam$/) {
- print "#ifndef OPENSSL_NO_DSA\n${str}#endif\n";
- } elsif (/^ec$/ || /^ecparam$/) {
- print "#ifndef OPENSSL_NO_EC\n${str}#endif\n";
- } elsif (/^dh$/ || /^gendh$/ || /^dhparam$/) {
- print "#ifndef OPENSSL_NO_DH\n${str}#endif\n";
- } elsif (/^pkcs12$/) {
- print "#if !defined(OPENSSL_NO_DES)\n${str}#endif\n";
- } elsif (/^cms$/) {
- print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n";
- } elsif (/^ocsp$/) {
- print "#ifndef OPENSSL_NO_OCSP\n${str}#endif\n";
- } elsif (/^srp$/) {
- print "#ifndef OPENSSL_NO_SRP\n${str}#endif\n";
- } elsif (/^ts$/) {
- print "#ifndef OPENSSL_NO_TS\n${str}#endif\n";
+
+my %cmd_disabler = (
+ ciphers => "sock",
+ genrsa => "rsa",
+ rsautl => "rsa",
+ gendsa => "dsa",
+ dsaparam => "dsa",
+ gendh => "dh",
+ dhparam => "dh",
+ ecparam => "ec",
+ pkcs12 => "des",
+ );
+print "\nstatic FUNCTION functions[] = {\n";
+foreach my $cmd (@ARGV) {
+ my $str=" { FT_general, \"$cmd\", ${cmd}_main, ${cmd}_options },\n";
+ if ($cmd =~ /^s_/) {
+ print "#ifndef OPENSSL_NO_SOCK\n${str}#endif\n";
+ } elsif (grep { $cmd eq $_ } @disablables) {
+ print "#ifndef OPENSSL_NO_".uc($cmd)."\n${str}#endif\n";
+ } elsif (my $disabler = $cmd_disabler{$cmd}) {
+ print "#ifndef OPENSSL_NO_".uc($disabler)."\n${str}#endif\n";