New Configure option no-<cipher> (rsa, idea, rc5, ...).
diff --git a/CHANGES b/CHANGES
index 61c31e2..dacdb63 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,9 @@
 
  Changes between 0.9.2b and 0.9.3
 
+  *) New Configure option no-<cipher> (rsa, idea, rc5, ...).
+     [Ulf Möller]
+
   *) Add the PKCS#12 API documentation to openssl.txt. Preliminary support for
      extension adding in x509 utility.
      [Steve Henson]
diff --git a/Configure b/Configure
index 98644fb..4ea1247 100755
--- a/Configure
+++ b/Configure
@@ -20,16 +20,9 @@
 # rsaref        use RSAref
 # no-asm        do not use assembler
 # 386           generate 80386 code
+# no-CIPHER     build without specified algorithm
 # -D, -L, -l, -f, -K: compiler options are passed through 
 # 
-# -DRSAref	build to use RSAref
-# -DNO_IDEA	build with no IDEA algorithm
-# -DNO_RC4	build with no RC4 algorithm
-# -DNO_RC2	build with no RC2 algorithm
-# -DNO_BF	build with no Blowfish algorithm
-# -DNO_DES	build with no DES/3DES algorithm
-# -DNO_MD2	build with no MD2 algorithm
-#
 # 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
@@ -255,6 +248,7 @@
 my $installprefix="";
 my $openssldir="";
 my $no_asm=0;
+my @skip=();
 my $Makefile="Makefile.ssl";
 my $des_locl="crypto/des/des_locl.h";
 my $des	="crypto/des/des.h";
@@ -284,12 +278,21 @@
 &usage if ($#ARGV < 0);
 
 my $flags="";
+my $depflags="";
 my $libs="";
 my $target="";
 foreach (@ARGV)
 	{
 	if (/^no-asm$/)
 		{ $no_asm=1; }
+	elsif (/^no-(.+)$/)
+		{
+		my $algo=$1;
+		push @skip,$algo;
+		$algo =~ tr/[a-z]/[A-Z]/;
+		$flags .= "-DNO_$algo ";
+		$depflags .= "-DNO_$algo ";
+		}
 	elsif (/^386$/)
 		{ $processor=386; }
 	elsif (/^rsaref$/)
@@ -390,14 +393,24 @@
 
 open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
 open(OUT,">$Makefile") || die "unable to create $Makefile:$!\n";
+my $sdirs=0;
 while (<IN>)
 	{
 	chop;
+	$sdirs = 1 if /^SDIRS=/;
+	$sdirs = 0 unless /\\$/;
+	if ($sdirs) {
+		my $dir;
+		foreach $dir (@skip) {
+			s/$dir//;
+			}
+		}
 	s/^INSTALLTOP=.*$/INSTALLTOP=$installprefix/;
 	s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
 	s/^PLATFORM=.*$/PLATFORM=$target/;
 	s/^CC=.*$/CC= $cc/;
 	s/^CFLAG=.*$/CFLAG= $cflags/;
+	s/^DEPFLAG=.*$/DEPFLAG= $depflags/;
 	s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
 	s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
 	s/^DES_ENC=.*$/DES_ENC= $des_obj/;
@@ -551,6 +564,7 @@
 	close(OUT);
 } else {
 	(system 'make -f Makefile.ssl links') == 0 or exit $?;
+	(system 'make depend') == 0 or exit $? if $depflags ne "";
 	&dofile("tools/c_rehash",$openssldir,'^DIR=',	'DIR=%s',);
 	&dofile("util/mk1mf.pl",$openssldir,
 				('^\$INSTALLTOP=','$INSTALLTOP="%s";',));
diff --git a/Makefile.org b/Makefile.org
index 869fe8c..7531f5a 100644
--- a/Makefile.org
+++ b/Makefile.org
@@ -43,6 +43,7 @@
 CC= gcc
 #CFLAG= -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
 CFLAG= -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
+DEPFLAG= 
 PEX_LIBS= -L. -L.. -L../.. -L../../..
 EX_LIBS= 
 AR=ar r
@@ -246,7 +247,7 @@
 	@for i in $(DIRS) ;\
 	do \
 	(cd $$i && echo "making dependancies $$i..." && \
-	$(MAKE) SDIRS='${SDIRS}' depend ) || exit 1; \
+	$(MAKE) SDIRS='${SDIRS}' DEPFLAG='${DEPFLAG}' depend ) || exit 1; \
 	done;
 
 lint:
diff --git a/STATUS b/STATUS
index ec13da9..f34d06a 100644
--- a/STATUS
+++ b/STATUS
@@ -1,6 +1,6 @@
 
   OpenSSL STATUS                           Last modified at
-  ______________                           $Date: 1999/04/27 00:36:14 $
+  ______________                           $Date: 1999/04/27 01:13:19 $
 
   DEVELOPMENT STATE
 
@@ -149,13 +149,6 @@
 
     o Properly initialize the PRNG in the absence of /dev/random.
 
-    o > NO_RSA (ejs@bfd.com)
-      > ./Configure -DNO_IDEA -DNO_RC5 -DNO_RC4 -DNO_RC2 -DNO_RSA -DNO_ERR linux-elf
-      > I tried for a whole day to do this and could not get it to work.  Linux
-      > machine, kernel 2.0.36 and 2.2.1, redhat 5.2 latest, gcc and egcs , no
-      > go.  I also noticed the even with -DNO_IDEA, _DNO_RC2, etc. the make
-      > still goes into those subdirectories and 'makes'.
-
     o ERR_error_string(..., buf) does not know how large buf is,
       there should be ERR_error_string_n(..., buf, bufsize)
       or similar.
diff --git a/apps/Makefile.ssl b/apps/Makefile.ssl
index 83c19aa..5971ada 100644
--- a/apps/Makefile.ssl
+++ b/apps/Makefile.ssl
@@ -109,7 +109,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(SRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(SRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/apps/ciphers.c b/apps/ciphers.c
index 3c76782..08e47be 100644
--- a/apps/ciphers.c
+++ b/apps/ciphers.c
@@ -66,6 +66,10 @@
 #include <openssl/err.h>
 #include <openssl/ssl.h>
 
+#if defined(NO_RSA) && !defined(NO_SSL2)
+#define NO_SSL2
+#endif
+
 #undef PROG
 #define PROG	ciphers_main
 
diff --git a/apps/dh.c b/apps/dh.c
index 0274248..b4abbe7 100644
--- a/apps/dh.c
+++ b/apps/dh.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DH
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
@@ -308,3 +309,4 @@
 	if (dh != NULL) DH_free(dh);
 	EXIT(ret);
 	}
+#endif
diff --git a/apps/dsa.c b/apps/dsa.c
index dc282b7..977955a 100644
--- a/apps/dsa.c
+++ b/apps/dsa.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -252,4 +253,4 @@
 	if (dsa != NULL) DSA_free(dsa);
 	EXIT(ret);
 	}
-
+#endif
diff --git a/apps/dsaparam.c b/apps/dsaparam.c
index bd368a3..118d974 100644
--- a/apps/dsaparam.c
+++ b/apps/dsaparam.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
@@ -349,3 +350,4 @@
 	p=n;
 #endif
 	}
+#endif
diff --git a/apps/enc.c b/apps/enc.c
index ce5f7f0..ca5691d 100644
--- a/apps/enc.c
+++ b/apps/enc.c
@@ -65,7 +65,7 @@
 #include <openssl/evp.h>
 #include <openssl/objects.h>
 #include <openssl/x509.h>
-#ifdef NO_MD5
+#ifndef NO_MD5
 #include <openssl/md5.h>
 #endif
 #include <openssl/pem.h>
diff --git a/apps/gendh.c b/apps/gendh.c
index e3be082..b3c1958 100644
--- a/apps/gendh.c
+++ b/apps/gendh.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DH
 #include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
@@ -219,5 +220,4 @@
 		}
 	return(tot);
 	}
-
-
+#endif
diff --git a/apps/gendsa.c b/apps/gendsa.c
index e43fd6a..da43245 100644
--- a/apps/gendsa.c
+++ b/apps/gendsa.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
@@ -228,5 +229,4 @@
 		}
 	return(tot);
 	}
-
-
+#endif
diff --git a/apps/genrsa.c b/apps/genrsa.c
index 2218fb0..1cba9f5 100644
--- a/apps/genrsa.c
+++ b/apps/genrsa.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
@@ -262,5 +263,4 @@
 		}
 	return(tot);
 	}
-
-
+#endif
diff --git a/apps/pem_mail.c b/apps/pem_mail.c
index b60c9a3..f85c7b1 100644
--- a/apps/pem_mail.c
+++ b/apps/pem_mail.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include <openssl/rsa.h>
 #include <openssl/evp.h>
@@ -166,3 +167,4 @@
 	ERR_print_errors(bio_err);
 	EXIT(1);
 	}
+#endif
diff --git a/apps/rsa.c b/apps/rsa.c
index 1372a5f..3be1f67 100644
--- a/apps/rsa.c
+++ b/apps/rsa.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -298,4 +299,4 @@
 	if (rsa != NULL) RSA_free(rsa);
 	EXIT(ret);
 	}
-
+#endif
diff --git a/apps/s_client.c b/apps/s_client.c
index ae3ce3e..44f228a 100644
--- a/apps/s_client.c
+++ b/apps/s_client.c
@@ -70,6 +70,10 @@
 #include <openssl/pem.h>
 #include "s_apps.h"
 
+#if defined(NO_RSA) && !defined(NO_SSL2)
+#define NO_SSL2
+#endif
+
 #undef PROG
 #define PROG	s_client_main
 
diff --git a/apps/s_server.c b/apps/s_server.c
index dc218db..7d1b569 100644
--- a/apps/s_server.c
+++ b/apps/s_server.c
@@ -74,7 +74,13 @@
 #include <openssl/ssl.h>
 #include "s_apps.h"
 
+#if defined(NO_RSA) && !defined(NO_SSL2)
+#define NO_SSL2
+#endif
+
+#ifndef NO_RSA
 static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int export,int keylength);
+#endif
 static int sv_body(char *hostname, int s, unsigned char *context);
 static int www_body(char *hostname, int s, unsigned char *context);
 static void close_accept_socket(void );
@@ -470,6 +476,7 @@
 			goto end;
 		}
 
+#ifndef NO_RSA
 #if 1
 	SSL_CTX_set_tmp_rsa_callback(ctx,tmp_rsa_cb);
 #else
@@ -491,6 +498,7 @@
 		BIO_printf(bio_s_out,"\n");
 		}
 #endif
+#endif
 
 	if (cipher != NULL)
 		SSL_CTX_set_cipher_list(ctx,cipher);
@@ -1199,6 +1207,7 @@
 	return(ret);
 	}
 
+#ifndef NO_RSA
 static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int export, int keylength)
 	{
 	static RSA *rsa_tmp=NULL;
@@ -1210,9 +1219,7 @@
 			BIO_printf(bio_err,"Generating temp (%d bit) RSA key...",keylength);
 			BIO_flush(bio_err);
 			}
-#ifndef NO_RSA
 		rsa_tmp=RSA_generate_key(keylength,RSA_F4,NULL,NULL);
-#endif
 		if (!s_quiet)
 			{
 			BIO_printf(bio_err,"\n");
@@ -1221,3 +1228,4 @@
 		}
 	return(rsa_tmp);
 	}
+#endif
diff --git a/apps/s_time.c b/apps/s_time.c
index ae16192..c5e3dcd 100644
--- a/apps/s_time.c
+++ b/apps/s_time.c
@@ -67,6 +67,10 @@
 #include <stdlib.h>
 #include <string.h>
 
+#if defined(NO_RSA) && !defined(NO_SSL2)
+#define NO_SSL2
+#endif
+
 #ifdef NO_STDIO
 #define APPS_WIN16
 #endif
diff --git a/apps/speed.c b/apps/speed.c
index ce489e6..4c48fd5 100644
--- a/apps/speed.c
+++ b/apps/speed.c
@@ -127,10 +127,10 @@
 #include <openssl/hmac.h>
 #include <openssl/evp.h>
 #endif
-#ifndef NO_SHA1
+#ifndef NO_SHA
 #include <openssl/sha.h>
 #endif
-#ifndef NO_RMD160
+#ifndef NO_RIPEMD
 #include <openssl/ripemd.h>
 #endif
 #ifndef NO_RC4
@@ -145,7 +145,7 @@
 #ifndef NO_IDEA
 #include <openssl/idea.h>
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 #include <openssl/blowfish.h>
 #endif
 #ifndef NO_CAST
@@ -153,9 +153,9 @@
 #endif
 #ifndef NO_RSA
 #include <openssl/rsa.h>
+#include "./testrsa.h"
 #endif
 #include <openssl/x509.h>
-#include "./testrsa.h"
 #ifndef NO_DSA
 #include "./testdsa.h"
 #endif
@@ -261,10 +261,10 @@
 	unsigned char md5[MD5_DIGEST_LENGTH];
 	unsigned char hmac[MD5_DIGEST_LENGTH];
 #endif
-#ifndef NO_SHA1
+#ifndef NO_SHA
 	unsigned char sha[SHA_DIGEST_LENGTH];
 #endif
-#ifndef NO_RMD160
+#ifndef NO_RIPEMD
 	unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
 #endif
 #ifndef NO_RC4
@@ -279,7 +279,7 @@
 #ifndef NO_IDEA
 	IDEA_KEY_SCHEDULE idea_ks;
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 	BF_KEY bf_ks;
 #endif
 #ifndef NO_CAST
@@ -323,9 +323,9 @@
 #define	R_RSA_1024	1
 #define	R_RSA_2048	2
 #define	R_RSA_4096	3
+#ifndef NO_RSA
 	RSA *rsa_key[RSA_NUM];
 	long rsa_c[RSA_NUM][2];
-#ifndef NO_RSA
 	double rsa_results[RSA_NUM][2];
 	static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
 	static unsigned char *rsa_data[RSA_NUM]=
@@ -346,7 +346,7 @@
 	int pr_header=0;
 
 	apps_startup();
-#ifdef NO_DSA
+#ifndef NO_DSA
 	memset(dsa_key,0,sizeof(dsa_key));
 #endif
 
@@ -402,13 +402,13 @@
 			if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
 		else
 #endif
-#ifndef NO_SHA1
+#ifndef NO_SHA
 			if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
 		else
 			if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
 		else
 #endif
-#ifndef NO_RMD160
+#ifndef NO_RIPEMD
 			if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
 		else
 			if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
@@ -464,7 +464,7 @@
 		else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
 		else
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 		     if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
 		else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
 		else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
@@ -514,10 +514,10 @@
 #ifndef NO_RC5
 			BIO_printf(bio_err,"rc5-cbc  ");
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 			BIO_printf(bio_err,"bf-cbc");
 #endif
-#if !defined(NO_IDEA) && !defined(NO_RC2) && !defined(NO_BLOWFISH) && !defined(NO_RC5)
+#if !defined(NO_IDEA) && !defined(NO_RC2) && !defined(NO_BF) && !defined(NO_RC5)
 			BIO_printf(bio_err,"\n");
 #endif
 			BIO_printf(bio_err,"des-cbc  des-ede3 ");
@@ -601,14 +601,15 @@
 #ifndef NO_RC5
 	RC5_32_set_key(&rc5_ks,16,key16,12);
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 	BF_set_key(&bf_ks,16,key16);
 #endif
 #ifndef NO_CAST
 	CAST_set_key(&cast_ks,16,key16);
 #endif
-
+#ifndef NO_RSA
 	memset(rsa_c,0,sizeof(rsa_c));
+#endif
 #ifndef SIGALRM
 	BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
 	count=10;
@@ -659,6 +660,7 @@
 		c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
 		c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
 		}
+#ifndef NO_RSA
 	rsa_c[R_RSA_512][0]=count/2000;
 	rsa_c[R_RSA_512][1]=count/400;
 	for (i=1; i<RSA_NUM; i++)
@@ -676,6 +678,7 @@
 				}
 			}				
 		}
+#endif
 
 	dsa_c[R_DSA_512][0]=count/1000;
 	dsa_c[R_DSA_512][1]=count/1000/2;
@@ -777,7 +780,7 @@
 			}
 		}
 #endif
-#ifndef NO_SHA1
+#ifndef NO_SHA
 	if (doit[D_SHA1])
 		{
 		for (j=0; j<SIZE_NUM; j++)
@@ -793,7 +796,7 @@
 			}
 		}
 #endif
-#ifndef NO_RMD160
+#ifndef NO_RIPEMD
 	if (doit[D_RMD160])
 		{
 		for (j=0; j<SIZE_NUM; j++)
@@ -914,7 +917,7 @@
 			}
 		}
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 	if (doit[D_CBC_BF])
 		{
 		for (j=0; j<SIZE_NUM; j++)
@@ -1092,7 +1095,7 @@
 #ifndef NO_IDEA
 	printf("%s ",idea_options());
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 	printf("%s ",BF_options());
 #endif
 	fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
diff --git a/apps/version.c b/apps/version.c
index f249d15..a567f34 100644
--- a/apps/version.c
+++ b/apps/version.c
@@ -119,7 +119,7 @@
 #ifndef NO_IDEA
 		printf("%s ",idea_options());
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 		printf("%s ",BF_options());
 #endif
 		printf("\n");
diff --git a/crypto/Makefile.ssl b/crypto/Makefile.ssl
index 4c0add7..ad6cfc9 100644
--- a/crypto/Makefile.ssl
+++ b/crypto/Makefile.ssl
@@ -115,11 +115,11 @@
 	done;
 
 depend:
-	$(MAKEDEPEND) $(INCLUDE) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDE) $(DEPFLAG) $(PROGS) $(LIBSRC)
 	@for i in $(SDIRS) ;\
 	do \
 	(cd $$i; echo "making depend in crypto/$$i..."; \
-	$(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' depend ); \
+	$(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' DEPFLAG='${DEPFLAG}' depend ); \
 	done;
 
 clean:
diff --git a/crypto/asn1/Makefile.ssl b/crypto/asn1/Makefile.ssl
index 87f392e..3bfadb1 100644
--- a/crypto/asn1/Makefile.ssl
+++ b/crypto/asn1/Makefile.ssl
@@ -101,7 +101,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/asn1/d2i_dhp.c b/crypto/asn1/d2i_dhp.c
index a0f514d..a077211 100644
--- a/crypto/asn1/d2i_dhp.c
+++ b/crypto/asn1/d2i_dhp.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DH
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -97,4 +98,4 @@
 	if (bs != NULL) ASN1_BIT_STRING_free(bs);
 	return(NULL);
 	}
-
+#endif
diff --git a/crypto/asn1/d2i_dsap.c b/crypto/asn1/d2i_dsap.c
index 2582b8f..51863a8 100644
--- a/crypto/asn1/d2i_dsap.c
+++ b/crypto/asn1/d2i_dsap.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -90,4 +91,4 @@
 	if (bs != NULL) ASN1_BIT_STRING_free(bs);
 	return(NULL);
 	}
-
+#endif
diff --git a/crypto/asn1/d2i_r_pr.c b/crypto/asn1/d2i_r_pr.c
index f6d1189..18f11b6 100644
--- a/crypto/asn1/d2i_r_pr.c
+++ b/crypto/asn1/d2i_r_pr.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -117,4 +118,4 @@
 	if (bs != NULL) ASN1_INTEGER_free(bs);
 	return(NULL);
 	}
-
+#endif
diff --git a/crypto/asn1/d2i_r_pu.c b/crypto/asn1/d2i_r_pu.c
index 80deaab..04cfe56 100644
--- a/crypto/asn1/d2i_r_pu.c
+++ b/crypto/asn1/d2i_r_pu.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -89,4 +90,4 @@
 	if (bs != NULL) ASN1_INTEGER_free(bs);
 	return(NULL);
 	}
-
+#endif
diff --git a/crypto/asn1/d2i_s_pr.c b/crypto/asn1/d2i_s_pr.c
index cf64a2e..050e1cc 100644
--- a/crypto/asn1/d2i_s_pr.c
+++ b/crypto/asn1/d2i_s_pr.c
@@ -58,6 +58,7 @@
 
 /* Original version from Steven Schoch <schoch@sheba.arc.nasa.gov> */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -101,4 +102,4 @@
 	if (bs != NULL) ASN1_INTEGER_free(bs);
 	return(NULL);
 	}
-
+#endif
diff --git a/crypto/asn1/d2i_s_pu.c b/crypto/asn1/d2i_s_pu.c
index 4d65cef..2b1bf63 100644
--- a/crypto/asn1/d2i_s_pu.c
+++ b/crypto/asn1/d2i_s_pu.c
@@ -56,8 +56,9 @@
  * [including the GNU Public Licence.]
  */
 
-/* Origional version from Steven Schoch <schoch@sheba.arc.nasa.gov> */
+/* Original version from Steven Schoch <schoch@sheba.arc.nasa.gov> */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -113,4 +114,4 @@
 	if (bs != NULL) ASN1_INTEGER_free(bs);
 	return(NULL);
 	}
-
+#endif
diff --git a/crypto/asn1/i2d_dhp.c b/crypto/asn1/i2d_dhp.c
index e82f2a9..1b2b4b8 100644
--- a/crypto/asn1/i2d_dhp.c
+++ b/crypto/asn1/i2d_dhp.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DH
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -119,3 +120,4 @@
 	*pp=p;
 	return(ret);
 	}
+#endif
diff --git a/crypto/asn1/i2d_dsap.c b/crypto/asn1/i2d_dsap.c
index 9317110..f36f0da 100644
--- a/crypto/asn1/i2d_dsap.c
+++ b/crypto/asn1/i2d_dsap.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -112,4 +113,5 @@
 	*pp=p;
 	return(ret);
 	}
+#endif
 
diff --git a/crypto/asn1/i2d_r_pr.c b/crypto/asn1/i2d_r_pr.c
index 617c10a..27e6844 100644
--- a/crypto/asn1/i2d_r_pr.c
+++ b/crypto/asn1/i2d_r_pr.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -122,4 +123,5 @@
 	*pp=p;
 	return(t);
 	}
+#endif
 
diff --git a/crypto/asn1/i2d_r_pu.c b/crypto/asn1/i2d_r_pu.c
index 03f7348..6d01bfa 100644
--- a/crypto/asn1/i2d_r_pu.c
+++ b/crypto/asn1/i2d_r_pu.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -108,4 +109,4 @@
 	*pp=p;
 	return(t);
 	}
-
+#endif
diff --git a/crypto/asn1/i2d_s_pr.c b/crypto/asn1/i2d_s_pr.c
index f3a5e8f..5d3dcdf 100644
--- a/crypto/asn1/i2d_s_pr.c
+++ b/crypto/asn1/i2d_s_pr.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -119,4 +120,4 @@
 	*pp=p;
 	return(t);
 	}
-
+#endif
diff --git a/crypto/asn1/i2d_s_pu.c b/crypto/asn1/i2d_s_pu.c
index 7903ea4..25b1507 100644
--- a/crypto/asn1/i2d_s_pu.c
+++ b/crypto/asn1/i2d_s_pu.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_DSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/bn.h>
@@ -124,4 +125,4 @@
 	*pp=p;
 	return(t);
 	}
-
+#endif
diff --git a/crypto/asn1/n_pkey.c b/crypto/asn1/n_pkey.c
index 9133bc6..cdc0d8b 100644
--- a/crypto/asn1/n_pkey.c
+++ b/crypto/asn1/n_pkey.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/rsa.h>
@@ -78,6 +79,7 @@
 static NETSCAPE_PKEY *d2i_NETSCAPE_PKEY(NETSCAPE_PKEY **a,unsigned char **pp, long length);
 static NETSCAPE_PKEY *NETSCAPE_PKEY_new(void);
 static void NETSCAPE_PKEY_free(NETSCAPE_PKEY *);
+
 int i2d_Netscape_RSA(RSA *a, unsigned char **pp, int (*cb)())
 	{
 	int i,j,l[6];
@@ -336,4 +338,4 @@
 	}
 
 #endif /* NO_RC4 */
-
+#endif
diff --git a/crypto/bf/Makefile.ssl b/crypto/bf/Makefile.ssl
index b1de950..225d818 100644
--- a/crypto/bf/Makefile.ssl
+++ b/crypto/bf/Makefile.ssl
@@ -91,7 +91,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/bf/bftest.c b/crypto/bf/bftest.c
index 091c808..80182c0 100644
--- a/crypto/bf/bftest.c
+++ b/crypto/bf/bftest.c
@@ -62,6 +62,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_BF
+int main(int argc, char *argv[])
+{
+    printf("No BF support\n");
+    return(0);
+}
+#else
 #include <openssl/blowfish.h>
 
 char *bf_key[2]={
@@ -511,3 +519,4 @@
 
 	return(err);
 	}
+#endif
diff --git a/crypto/bf/blowfish.h b/crypto/bf/blowfish.h
index 005d0ed..a18dfee 100644
--- a/crypto/bf/blowfish.h
+++ b/crypto/bf/blowfish.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_BF
+#error BF is disabled.
+#endif
+
 #define BF_ENCRYPT	1
 #define BF_DECRYPT	0
 
diff --git a/crypto/bio/Makefile.ssl b/crypto/bio/Makefile.ssl
index 8a0f3f9..c1ccfd8 100644
--- a/crypto/bio/Makefile.ssl
+++ b/crypto/bio/Makefile.ssl
@@ -73,7 +73,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/bn/Makefile.ssl b/crypto/bn/Makefile.ssl
index 6cd865a..ca55875 100644
--- a/crypto/bn/Makefile.ssl
+++ b/crypto/bn/Makefile.ssl
@@ -140,7 +140,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/buffer/Makefile.ssl b/crypto/buffer/Makefile.ssl
index 0512a20..717615c 100644
--- a/crypto/buffer/Makefile.ssl
+++ b/crypto/buffer/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/cast/Makefile.ssl b/crypto/cast/Makefile.ssl
index e29da45..d44484c 100644
--- a/crypto/cast/Makefile.ssl
+++ b/crypto/cast/Makefile.ssl
@@ -94,7 +94,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/cast/cast.h b/crypto/cast/cast.h
index c265798..215356d 100644
--- a/crypto/cast/cast.h
+++ b/crypto/cast/cast.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_CAST
+#error CAST is disabled.
+#endif
+
 #define CAST_ENCRYPT	1
 #define CAST_DECRYPT	0
 
diff --git a/crypto/cast/casttest.c b/crypto/cast/casttest.c
index a8a707c..3244b11 100644
--- a/crypto/cast/casttest.c
+++ b/crypto/cast/casttest.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_CAST
+int main(int argc, char *argv[])
+{
+    printf("No CAST support\n");
+    return(0);
+}
+#else
 #include <openssl/cast.h>
 
 #define FULL_TEST
@@ -219,4 +227,4 @@
     exit(err);
     return(err);
     }
-
+#endif
diff --git a/crypto/comp/Makefile.ssl b/crypto/comp/Makefile.ssl
index 89620a8..2ccc8ed 100644
--- a/crypto/comp/Makefile.ssl
+++ b/crypto/comp/Makefile.ssl
@@ -68,7 +68,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/conf/Makefile.ssl b/crypto/conf/Makefile.ssl
index a3e5a07..b84c53c 100644
--- a/crypto/conf/Makefile.ssl
+++ b/crypto/conf/Makefile.ssl
@@ -66,7 +66,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/des/Makefile.ssl b/crypto/des/Makefile.ssl
index 9bb5575..f243a90 100644
--- a/crypto/des/Makefile.ssl
+++ b/crypto/des/Makefile.ssl
@@ -123,7 +123,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/des/des.h b/crypto/des/des.h
index 18ceaa2..392d8bb 100644
--- a/crypto/des/des.h
+++ b/crypto/des/des.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_DES
+#error DES is disabled.
+#endif
+
 #include <stdio.h>
 #include <openssl/opensslconf.h> /* DES_LONG */
 
diff --git a/crypto/des/destest.c b/crypto/des/destest.c
index 6b67e34..107635f 100644
--- a/crypto/des/destest.c
+++ b/crypto/des/destest.c
@@ -70,6 +70,14 @@
 #include <io.h>
 #endif
 #include <string.h>
+
+#ifdef NO_DES
+int main(int argc, char *argv[])
+{
+    printf("No DES support\n");
+    return(0);
+}
+#else
 #include <openssl/des.h>
 
 #if defined(PERL5) || defined(__FreeBSD__)
@@ -318,6 +326,7 @@
 	int num;
 	char *str;
 
+#ifndef NO_DESCBCM
 	printf("Doing cbcm\n");
 	if ((j=des_key_sched(cbc_key,ks)) != 0)
 		{
@@ -368,7 +377,7 @@
 		printf("\n");
 		err=1;
 		}
-
+#endif
 
 	printf("Doing ecb\n");
 	for (i=0; i<NUM_TESTS; i++)
@@ -908,4 +917,4 @@
 	}
 
 #endif
-
+#endif
diff --git a/crypto/des/ede_cbcm_enc.c b/crypto/des/ede_cbcm_enc.c
index 82ef961..302e32e 100644
--- a/crypto/des/ede_cbcm_enc.c
+++ b/crypto/des/ede_cbcm_enc.c
@@ -68,6 +68,7 @@
 
 */
 
+#ifndef NO_DESCBCM
 #include "des_locl.h"
 
 void des_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
@@ -192,3 +193,4 @@
     tin0=tin1=tout0=tout1=xor0=xor1=0;
     tin[0]=tin[1]=0;
     }
+#endif
diff --git a/crypto/dh/Makefile.ssl b/crypto/dh/Makefile.ssl
index 1dfdd01..eb4dc12 100644
--- a/crypto/dh/Makefile.ssl
+++ b/crypto/dh/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/dh/dh.h b/crypto/dh/dh.h
index 3ae16f3..6a0a186 100644
--- a/crypto/dh/dh.h
+++ b/crypto/dh/dh.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_DH
+#error DH is disabled.
+#endif
+
 #include <openssl/bn.h>
 	
 #define DH_FLAG_CACHE_MONT_P	0x01
diff --git a/crypto/dh/dhtest.c b/crypto/dh/dhtest.c
index c638e16..370784b 100644
--- a/crypto/dh/dhtest.c
+++ b/crypto/dh/dhtest.c
@@ -65,6 +65,14 @@
 #include <openssl/crypto.h>
 #include <openssl/bio.h>
 #include <openssl/bn.h>
+
+#ifdef NO_DH
+int main(int argc, char *argv[])
+{
+    printf("No DH support\n");
+    return(0);
+}
+#else
 #include <openssl/dh.h>
 
 #ifdef WIN16
@@ -177,3 +185,4 @@
 	p=n;
 #endif
 	}
+#endif
diff --git a/crypto/dsa/Makefile.ssl b/crypto/dsa/Makefile.ssl
index e80750b..435349c 100644
--- a/crypto/dsa/Makefile.ssl
+++ b/crypto/dsa/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/dsa/dsa.h b/crypto/dsa/dsa.h
index 3fc1519..d9ff193 100644
--- a/crypto/dsa/dsa.h
+++ b/crypto/dsa/dsa.h
@@ -69,6 +69,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_DSA
+#error DSA is disabled.
+#endif
+
 #include <openssl/bn.h>
 
 #define DSA_FLAG_CACHE_MONT_P	0x01
diff --git a/crypto/dsa/dsatest.c b/crypto/dsa/dsatest.c
index c020993..363eab6 100644
--- a/crypto/dsa/dsatest.c
+++ b/crypto/dsa/dsatest.c
@@ -65,11 +65,19 @@
 #include <openssl/rand.h>
 #include <openssl/bio.h>
 #include <openssl/err.h>
-#include <openssl/dsa.h>
 #ifdef WINDOWS
 #include "../bio/bss_file.c"
 #endif
 
+#ifdef NO_DSA
+int main(int argc, char *argv[])
+{
+    printf("No DSA support\n");
+    return(0);
+}
+#else
+#include <openssl/dsa.h>
+
 #ifdef WIN16
 #define MS_CALLBACK     _far _loadds
 #else
@@ -206,5 +214,4 @@
 		exit(1);
 		}
 	}
-
-
+#endif
diff --git a/crypto/err/Makefile.ssl b/crypto/err/Makefile.ssl
index d3030b9..f92b3ae 100644
--- a/crypto/err/Makefile.ssl
+++ b/crypto/err/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/evp/Makefile.ssl b/crypto/evp/Makefile.ssl
index 3491f2c..08f0a79 100644
--- a/crypto/evp/Makefile.ssl
+++ b/crypto/evp/Makefile.ssl
@@ -92,7 +92,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/evp/evp.h b/crypto/evp/evp.h
index 4b5af77..ccb7d51 100644
--- a/crypto/evp/evp.h
+++ b/crypto/evp/evp.h
@@ -69,10 +69,10 @@
 #ifndef NO_MD5
 #include <openssl/md5.h>
 #endif
-#if !defined(NO_SHA) || !defined(NO_SHA1)
+#ifndef NO_SHA
 #include <openssl/sha.h>
 #endif
-#ifndef NO_RMD160
+#ifndef NO_RIPEMD
 #include <openssl/ripemd.h>
 #endif
 #ifndef NO_DES
@@ -87,7 +87,7 @@
 #ifndef NO_RC5
 #include <openssl/rc5.h>
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 #include <openssl/blowfish.h>
 #endif
 #ifndef NO_CAST
@@ -111,20 +111,14 @@
 
 #ifndef NO_RSA
 #include <openssl/rsa.h>
-#else
-#define RSA	long
 #endif
 
 #ifndef NO_DSA
 #include <openssl/dsa.h>
-#else
-#define DSA	long
 #endif
 
 #ifndef NO_DH
 #include <openssl/dh.h>
-#else
-#define DH	long
 #endif
 
 #include <openssl/objects.h>
@@ -159,9 +153,15 @@
 	int references;
 	union	{
 		char *ptr;
+#ifndef NO_RSA
 		struct rsa_st *rsa;	/* RSA */
+#endif
+#ifndef NO_DSA
 		struct dsa_st *dsa;	/* DSA */
+#endif
+#ifndef NO_DH
 		struct dh_st *dh;	/* DH */
+#endif
 		} pkey;
 	int save_parameters;
 	STACK /*X509_ATTRIBUTE*/ *attributes; /* [ 0 ] */
@@ -294,10 +294,10 @@
 #ifndef NO_MD5
 		MD5_CTX md5;
 #endif
-#ifndef NO_RMD160
+#ifndef NO_RIPEMD
 		RIPEMD160_CTX ripemd160;
 #endif
-#if !defined(NO_SHA) || !defined(NO_SHA1)
+#ifndef NO_SHA
 		SHA_CTX sha;
 #endif
 #ifndef NO_MDC2
@@ -372,7 +372,7 @@
 #ifndef NO_RC5
 		RC5_32_KEY rc5_ks;/* key schedule */
 #endif
-#ifndef NO_BLOWFISH
+#ifndef NO_BF
 		BF_KEY bf_ks;/* key schedule */
 #endif
 #ifndef NO_CAST
diff --git a/crypto/evp/evp_pkey.c b/crypto/evp/evp_pkey.c
index 8bea61e..421e452 100644
--- a/crypto/evp/evp_pkey.c
+++ b/crypto/evp/evp_pkey.c
@@ -67,14 +67,19 @@
 EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
 {
 	EVP_PKEY *pkey;
+#ifndef NO_RSA
 	RSA *rsa;
+#endif
+#ifndef NO_DSA
 	DSA *dsa;
 	ASN1_INTEGER *dsapriv;
-	X509_ALGOR *a;
 	STACK *ndsa;
 	BN_CTX *ctx;
+	int plen;
+#endif
+	X509_ALGOR *a;
 	unsigned char *p;
-	int plen, pkeylen;
+	int pkeylen;
 	char obj_tmp[80];
 
 	switch (p8->broken) {
@@ -100,6 +105,7 @@
 	a = p8->pkeyalg;
 	switch (OBJ_obj2nid(a->algorithm))
 	{
+#ifndef NO_RSA
 		case NID_rsaEncryption:
 		if (!(rsa = d2i_RSAPrivateKey (NULL, &p, pkeylen))) {
 			EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
@@ -107,7 +113,8 @@
 		}
 		EVP_PKEY_assign_RSA (pkey, rsa);
 		break;
-		
+#endif
+#ifndef NO_DSA
 		case NID_dsa:
 		/* PKCS#8 DSA is weird: you just get a private key integer
 	         * and parameters in the AlgorithmIdentifier the pubkey must
@@ -174,7 +181,7 @@
 		EVP_PKEY_assign_DSA (pkey, dsa);
 		BN_CTX_free (ctx);
 		break;
-
+#endif
 		default:
 		EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);
 		if (!a->algorithm) strcpy (obj_tmp, "NULL");
@@ -191,9 +198,11 @@
 PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey)
 {
 	PKCS8_PRIV_KEY_INFO *p8;
+#ifndef NO_DSA
 	ASN1_INTEGER *dpkey;
 	unsigned char *p, *q;
 	int len;
+#endif
 	if (!(p8 = PKCS8_PRIV_KEY_INFO_new())) {	
 		EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
 		return NULL;
@@ -205,6 +214,7 @@
 		return NULL;
 	}
 	switch (EVP_PKEY_type(pkey->type)) {
+#ifndef NO_RSA
 		case EVP_PKEY_RSA:
 
 		p8->pkeyalg->algorithm = OBJ_nid2obj(NID_rsaEncryption);
@@ -216,7 +226,8 @@
 			return NULL;
 		}
 		break;
-
+#endif
+#ifndef NO_DSA
 		case EVP_PKEY_DSA:
 		p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa);
 
@@ -249,7 +260,7 @@
 		}
 		ASN1_INTEGER_free (dpkey);
 		break;
-
+#endif
 		default:
 		EVPerr(EVP_F_EVP_PKEY2PKCS8, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);
 		PKCS8_PRIV_KEY_INFO_free (p8);
diff --git a/crypto/evp/p_open.c b/crypto/evp/p_open.c
index 6b53294..ddb9fd6 100644
--- a/crypto/evp/p_open.c
+++ b/crypto/evp/p_open.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/evp.h>
@@ -109,3 +110,4 @@
 	EVP_DecryptInit(ctx,NULL,NULL,NULL);
 	return(i);
 	}
+#endif
diff --git a/crypto/evp/p_seal.c b/crypto/evp/p_seal.c
index cd29276..09b46f4 100644
--- a/crypto/evp/p_seal.c
+++ b/crypto/evp/p_seal.c
@@ -59,7 +59,9 @@
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/rand.h>
+#ifndef NO_RSA
 #include <openssl/rsa.h>
+#endif
 #include <openssl/evp.h>
 #include <openssl/objects.h>
 #include <openssl/x509.h>
diff --git a/crypto/hmac/Makefile.ssl b/crypto/hmac/Makefile.ssl
index f6d3bd1..6e1f964 100644
--- a/crypto/hmac/Makefile.ssl
+++ b/crypto/hmac/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/hmac/hmac.h b/crypto/hmac/hmac.h
index 2efce94..91b2f8d 100644
--- a/crypto/hmac/hmac.h
+++ b/crypto/hmac/hmac.h
@@ -62,6 +62,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_HMAC
+#error No HMAC support.
+#endif
+
 #include <openssl/evp.h>
 
 #define HMAC_MAX_MD_CBLOCK	64
diff --git a/crypto/hmac/hmactest.c b/crypto/hmac/hmactest.c
index 0a3db68..15eb0c4 100644
--- a/crypto/hmac/hmactest.c
+++ b/crypto/hmac/hmactest.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_HMAC
+int main(int argc, char *argv[])
+{
+    printf("No HMAC support\n");
+    return(0);
+}
+#else
 #include <openssl/hmac.h>
 
 struct test_st
@@ -137,3 +145,4 @@
 		sprintf(&(buf[i*2]),"%02x",md[i]);
 	return(buf);
 	}
+#endif
diff --git a/crypto/idea/Makefile.ssl b/crypto/idea/Makefile.ssl
index b643086..a61defe 100644
--- a/crypto/idea/Makefile.ssl
+++ b/crypto/idea/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/idea/idea.h b/crypto/idea/idea.h
index 0075426..ae32f56 100644
--- a/crypto/idea/idea.h
+++ b/crypto/idea/idea.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_IDEA
+#error IDEA is disabled.
+#endif
+
 #define IDEA_ENCRYPT	1
 #define IDEA_DECRYPT	0
 
diff --git a/crypto/idea/ideatest.c b/crypto/idea/ideatest.c
index 4593d9e..64b9353 100644
--- a/crypto/idea/ideatest.c
+++ b/crypto/idea/ideatest.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_IDEA
+int main(int argc, char *argv[])
+{
+    printf("No IDEA support\n");
+    return(0);
+}
+#else
 #include <openssl/idea.h>
 
 unsigned char k[16]={
@@ -219,4 +227,4 @@
 	ret[16]='\0';
 	return(ret);
 	}
-	
+#endif
diff --git a/crypto/lhash/Makefile.ssl b/crypto/lhash/Makefile.ssl
index dc56cec..15bf962 100644
--- a/crypto/lhash/Makefile.ssl
+++ b/crypto/lhash/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/md2/Makefile.ssl b/crypto/md2/Makefile.ssl
index cc7afff..d5faa85 100644
--- a/crypto/md2/Makefile.ssl
+++ b/crypto/md2/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/md2/md2.h b/crypto/md2/md2.h
index e0285a3..0d35925 100644
--- a/crypto/md2/md2.h
+++ b/crypto/md2/md2.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_MD2
+#error MD2 is disabled.
+#endif
+
 #define MD2_DIGEST_LENGTH	16
 #define MD2_BLOCK       	16
 #include <openssl/opensslconf.h> /* MD2_INT */
diff --git a/crypto/md2/md2test.c b/crypto/md2/md2test.c
index 2368ec3..63404b1 100644
--- a/crypto/md2/md2test.c
+++ b/crypto/md2/md2test.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#ifdef NO_MD2
+int main(int argc, char *argv[])
+{
+    printf("No MD2 support\n");
+    return(0);
+}
+#else
 #include <openssl/md2.h>
 
 char *test[]={
@@ -120,3 +128,4 @@
 		sprintf(&(buf[i*2]),"%02x",md[i]);
 	return(buf);
 	}
+#endif
diff --git a/crypto/md5/Makefile.ssl b/crypto/md5/Makefile.ssl
index f91b462..4a78035 100644
--- a/crypto/md5/Makefile.ssl
+++ b/crypto/md5/Makefile.ssl
@@ -89,7 +89,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/md5/md5.h b/crypto/md5/md5.h
index fc76787..6e97fe1 100644
--- a/crypto/md5/md5.h
+++ b/crypto/md5/md5.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_MD5
+#error MD5 is disabled.
+#endif
+
 #define MD5_CBLOCK	64
 #define MD5_LBLOCK	16
 #define MD5_BLOCK	16
diff --git a/crypto/md5/md5test.c b/crypto/md5/md5test.c
index 2778b40..a192a62 100644
--- a/crypto/md5/md5test.c
+++ b/crypto/md5/md5test.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_MD5
+int main(int argc, char *argv[])
+{
+    printf("No MD5 support\n");
+    return(0);
+}
+#else
 #include <openssl/md5.h>
 
 char *test[]={
@@ -120,3 +128,4 @@
 		sprintf(&(buf[i*2]),"%02x",md[i]);
 	return(buf);
 	}
+#endif
diff --git a/crypto/mdc2/Makefile.ssl b/crypto/mdc2/Makefile.ssl
index 924a8b3..eb0f0d6 100644
--- a/crypto/mdc2/Makefile.ssl
+++ b/crypto/mdc2/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/mdc2/mdc2.h b/crypto/mdc2/mdc2.h
index 39a6c9e..ec8e159 100644
--- a/crypto/mdc2/mdc2.h
+++ b/crypto/mdc2/mdc2.h
@@ -65,6 +65,10 @@
 
 #include <openssl/des.h>
 
+#ifdef NO_MDC2
+#error MDC2 is disabled.
+#endif
+
 #define MDC2_BLOCK              8
 #define MDC2_DIGEST_LENGTH      16
  
diff --git a/crypto/mdc2/mdc2test.c b/crypto/mdc2/mdc2test.c
index f627162..6fc6c0e 100644
--- a/crypto/mdc2/mdc2test.c
+++ b/crypto/mdc2/mdc2test.c
@@ -59,6 +59,18 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#ifdef NO_DES
+#define NO_MDC2
+#endif
+
+#ifdef NO_MDC2
+int main(int argc, char *argv[])
+{
+    printf("No MDC2 support\n");
+    return(0);
+}
+#else
 #include <openssl/mdc2.h>
 
 static unsigned char pad1[16]={
@@ -117,4 +129,4 @@
 	exit(ret);
 	return(ret);
 	}
-
+#endif
diff --git a/crypto/objects/Makefile.ssl b/crypto/objects/Makefile.ssl
index e139fe4..a7ad157 100644
--- a/crypto/objects/Makefile.ssl
+++ b/crypto/objects/Makefile.ssl
@@ -68,7 +68,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/objects/obj_dat.h b/crypto/objects/obj_dat.h
index 03ba60c..10a6304 100644
--- a/crypto/objects/obj_dat.h
+++ b/crypto/objects/obj_dat.h
@@ -761,8 +761,8 @@
 &(nid_objs[19]),/* OBJ_rsa                          2 5 8 1 1 */
 &(nid_objs[96]),/* OBJ_mdc2WithRSA                  2 5 8 3 100 */
 &(nid_objs[95]),/* OBJ_mdc2                         2 5 8 3 101 */
-&(nid_objs[125]),/* OBJ_zlib_compression             1 1 1 1 666.2 */
 &(nid_objs[124]),/* OBJ_rle_compression              1 1 1 1 666.1 */
+&(nid_objs[125]),/* OBJ_zlib_compression             1 1 1 1 666.2 */
 &(nid_objs[104]),/* OBJ_md5WithRSA                   1 3 14 3 2 3 */
 &(nid_objs[29]),/* OBJ_des_ecb                      1 3 14 3 2 6 */
 &(nid_objs[31]),/* OBJ_des_cbc                      1 3 14 3 2 7 */
diff --git a/crypto/pem/Makefile.ssl b/crypto/pem/Makefile.ssl
index 3582404..519547a 100644
--- a/crypto/pem/Makefile.ssl
+++ b/crypto/pem/Makefile.ssl
@@ -66,7 +66,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/pem/pem.h b/crypto/pem/pem.h
index e9eb547..6f0f09f 100644
--- a/crypto/pem/pem.h
+++ b/crypto/pem/pem.h
@@ -372,28 +372,42 @@
 X509 *PEM_read_X509(FILE *fp,X509 **x,int (*cb)());
 X509_REQ *PEM_read_X509_REQ(FILE *fp,X509_REQ **x,int (*cb)());
 X509_CRL *PEM_read_X509_CRL(FILE *fp,X509_CRL **x,int (*cb)());
+#ifndef NO_RSA
 RSA *PEM_read_RSAPrivateKey(FILE *fp,RSA **x,int (*cb)());
 RSA *PEM_read_RSAPublicKey(FILE *fp,RSA **x,int (*cb)());
+#endif
+#ifndef NO_DSA
 DSA *PEM_read_DSAPrivateKey(FILE *fp,DSA **x,int (*cb)());
+DSA *PEM_read_DSAparams(FILE *fp,DSA **x,int (*cb)());
+#endif
+#ifndef NO_DH
+DH *PEM_read_DHparams(FILE *fp,DH **x,int (*cb)());
+#endif
 EVP_PKEY *PEM_read_PrivateKey(FILE *fp,EVP_PKEY **x,int (*cb)());
 PKCS7 *PEM_read_PKCS7(FILE *fp,PKCS7 **x,int (*cb)());
-DH *PEM_read_DHparams(FILE *fp,DH **x,int (*cb)());
-DSA *PEM_read_DSAparams(FILE *fp,DSA **x,int (*cb)());
 NETSCAPE_CERT_SEQUENCE *PEM_read_NETSCAPE_CERT_SEQUENCE(FILE *fp,NETSCAPE_CERT_SEQUENCE **x,int (*cb)());
 int PEM_write_X509(FILE *fp,X509 *x);
 int PEM_write_X509_REQ(FILE *fp,X509_REQ *x);
 int PEM_write_X509_CRL(FILE *fp,X509_CRL *x);
+#ifndef NO_RSA
 int PEM_write_RSAPrivateKey(FILE *fp,RSA *x,EVP_CIPHER *enc,unsigned char *kstr,
         int klen,int (*cb)());
 int PEM_write_RSAPublicKey(FILE *fp,RSA *x);
+#endif
+#ifndef NO_DSA
 int PEM_write_DSAPrivateKey(FILE *fp,DSA *x,const EVP_CIPHER *enc,
 			    unsigned char *kstr,
         int klen,int (*cb)());
+#endif
 int PEM_write_PrivateKey(FILE *fp,EVP_PKEY *x,EVP_CIPHER *enc,
 	unsigned char *kstr,int klen,int (*cb)());
 int PEM_write_PKCS7(FILE *fp,PKCS7 *x);
+#ifndef NO_DH
 int PEM_write_DHparams(FILE *fp,DH *x);
+#endif
+#ifndef NO_DSA
 int PEM_write_DSAparams(FILE *fp,DSA *x);
+#endif
 int PEM_write_NETSCAPE_CERT_SEQUENCE(FILE *fp,NETSCAPE_CERT_SEQUENCE *x);
 #endif
 
@@ -401,27 +415,43 @@
 X509 *PEM_read_bio_X509(BIO *bp,X509 **x,int (*cb)());
 X509_REQ *PEM_read_bio_X509_REQ(BIO *bp,X509_REQ **x,int (*cb)());
 X509_CRL *PEM_read_bio_X509_CRL(BIO *bp,X509_CRL **x,int (*cb)());
+#ifndef NO_RSA
 RSA *PEM_read_bio_RSAPrivateKey(BIO *bp,RSA **x,int (*cb)());
 RSA *PEM_read_bio_RSAPublicKey(BIO *bp,RSA **x,int (*cb)());
+#endif
+#ifndef NO_DSA
 DSA *PEM_read_bio_DSAPrivateKey(BIO *bp,DSA **x,int (*cb)());
+#endif
 EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp,EVP_PKEY **x,int (*cb)());
 PKCS7 *PEM_read_bio_PKCS7(BIO *bp,PKCS7 **x,int (*cb)());
+#ifndef NO_DH
 DH *PEM_read_bio_DHparams(BIO *bp,DH **x,int (*cb)());
+#endif
 NETSCAPE_CERT_SEQUENCE *PEM_read_bio_NETSCAPE_CERT_SEQUENCE(BIO *bp,NETSCAPE_CERT_SEQUENCE **x,int (*cb)());
+#ifndef NO_DSA
 DSA *PEM_read_bio_DSAparams(BIO *bp,DSA **x,int (*cb)());
+#endif
 int PEM_write_bio_X509(BIO *bp,X509 *x);
 int PEM_write_bio_X509_REQ(BIO *bp,X509_REQ *x);
 int PEM_write_bio_X509_CRL(BIO *bp,X509_CRL *x);
+#ifndef NO_RSA
 int PEM_write_bio_RSAPrivateKey(BIO *fp,RSA *x,const EVP_CIPHER *enc,
         unsigned char *kstr,int klen,int (*cb)());
 int PEM_write_bio_RSAPublicKey(BIO *fp,RSA *x);
+#endif
+#ifndef NO_DSA
 int PEM_write_bio_DSAPrivateKey(BIO *fp,DSA *x,const EVP_CIPHER *enc,
         unsigned char *kstr,int klen,int (*cb)());
+#endif
 int PEM_write_bio_PrivateKey(BIO *fp,EVP_PKEY *x,EVP_CIPHER *enc,
         unsigned char *kstr,int klen,int (*cb)());
 int PEM_write_bio_PKCS7(BIO *bp,PKCS7 *x);
+#ifndef NO_DH
 int PEM_write_bio_DHparams(BIO *bp,DH *x);
+#endif
+#ifndef NO_DSA
 int PEM_write_bio_DSAparams(BIO *bp,DSA *x);
+#endif
 int PEM_write_bio_NETSCAPE_CERT_SEQUENCE(BIO *bp,NETSCAPE_CERT_SEQUENCE *x);
 #endif
 
diff --git a/crypto/pem/pem_seal.c b/crypto/pem/pem_seal.c
index 5f5d2c0..23f95be 100644
--- a/crypto/pem/pem_seal.c
+++ b/crypto/pem/pem_seal.c
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef NO_RSA
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/evp.h>
@@ -174,3 +175,4 @@
 	if (s != NULL) Free(s);
 	return(ret);
 	}
+#endif
diff --git a/crypto/pkcs12/Makefile.ssl b/crypto/pkcs12/Makefile.ssl
index b4d5a53..f86ef95 100644
--- a/crypto/pkcs12/Makefile.ssl
+++ b/crypto/pkcs12/Makefile.ssl
@@ -71,7 +71,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/pkcs12/p12_crpt.c b/crypto/pkcs12/p12_crpt.c
index 137d7cd..9e37436 100644
--- a/crypto/pkcs12/p12_crpt.c
+++ b/crypto/pkcs12/p12_crpt.c
@@ -64,18 +64,22 @@
 
 void PKCS12_PBE_add(void)
 {
+#ifndef NO_RC4
 EVP_PBE_alg_add(NID_pbe_WithSHA1And128BitRC4, EVP_rc4(), EVP_sha1(),
 							 PKCS12_PBE_keyivgen);
 EVP_PBE_alg_add(NID_pbe_WithSHA1And40BitRC4, EVP_rc4_40(), EVP_sha1(),
 							 PKCS12_PBE_keyivgen);
+#endif
 EVP_PBE_alg_add(NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
 		 	EVP_des_ede3_cbc(), EVP_sha1(), PKCS12_PBE_keyivgen);
 EVP_PBE_alg_add(NID_pbe_WithSHA1And2_Key_TripleDES_CBC, 
 			EVP_des_ede_cbc(), EVP_sha1(), PKCS12_PBE_keyivgen);
+#ifndef NO_RC2
 EVP_PBE_alg_add(NID_pbe_WithSHA1And128BitRC2_CBC, EVP_rc2_cbc(),
 					EVP_sha1(), PKCS12_PBE_keyivgen);
 EVP_PBE_alg_add(NID_pbe_WithSHA1And40BitRC2_CBC, EVP_rc2_40_cbc(),
 					EVP_sha1(), PKCS12_PBE_keyivgen);
+#endif
 }
 
 int PKCS12_PBE_keyivgen (const char *pass, int passlen, unsigned char *salt,
diff --git a/crypto/pkcs7/Makefile.ssl b/crypto/pkcs7/Makefile.ssl
index e81cb1b..b2607f9 100644
--- a/crypto/pkcs7/Makefile.ssl
+++ b/crypto/pkcs7/Makefile.ssl
@@ -67,7 +67,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/rand/Makefile.ssl b/crypto/rand/Makefile.ssl
index 7a00164..17591e0 100644
--- a/crypto/rand/Makefile.ssl
+++ b/crypto/rand/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/rc2/Makefile.ssl b/crypto/rc2/Makefile.ssl
index c78a099..50a46c7 100644
--- a/crypto/rc2/Makefile.ssl
+++ b/crypto/rc2/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/rc2/rc2.h b/crypto/rc2/rc2.h
index 0204745..9571efb 100644
--- a/crypto/rc2/rc2.h
+++ b/crypto/rc2/rc2.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_RC2
+#error RC2 is disabled.
+#endif
+
 #define RC2_ENCRYPT	1
 #define RC2_DECRYPT	0
 
diff --git a/crypto/rc2/rc2test.c b/crypto/rc2/rc2test.c
index e6b355f..6a5defa 100644
--- a/crypto/rc2/rc2test.c
+++ b/crypto/rc2/rc2test.c
@@ -62,6 +62,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_RC2
+int main(int argc, char *argv[])
+{
+    printf("No RC2 support\n");
+    return(0);
+}
+#else
 #include <openssl/rc2.h>
 
 unsigned char RC2key[4][16]={
@@ -258,3 +266,4 @@
 	}
 	
 #endif
+#endif
diff --git a/crypto/rc4/Makefile.ssl b/crypto/rc4/Makefile.ssl
index 60e419f..389c4ea 100644
--- a/crypto/rc4/Makefile.ssl
+++ b/crypto/rc4/Makefile.ssl
@@ -93,7 +93,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/rc4/rc4.h b/crypto/rc4/rc4.h
index 8d2b165..7418c2a 100644
--- a/crypto/rc4/rc4.h
+++ b/crypto/rc4/rc4.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_RC4
+#error RC4 is disabled.
+#endif
+
 #include <openssl/opensslconf.h> /* RC4_INT */
 
 typedef struct rc4_key_st
diff --git a/crypto/rc4/rc4test.c b/crypto/rc4/rc4test.c
index 1410b72..5abf8cf 100644
--- a/crypto/rc4/rc4test.c
+++ b/crypto/rc4/rc4test.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#ifdef NO_RC4
+int main(int argc, char *argv[])
+{
+    printf("No RC4 support\n");
+    return(0);
+}
+#else
 #include <openssl/rc4.h>
 
 unsigned char keys[7][30]={
@@ -190,4 +198,4 @@
 	exit(err);
 	return(0);
 	}
-
+#endif
diff --git a/crypto/rc5/Makefile.ssl b/crypto/rc5/Makefile.ssl
index 98b70be..31349ed 100644
--- a/crypto/rc5/Makefile.ssl
+++ b/crypto/rc5/Makefile.ssl
@@ -91,7 +91,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/rc5/rc5.h b/crypto/rc5/rc5.h
index c18d943..38e9015 100644
--- a/crypto/rc5/rc5.h
+++ b/crypto/rc5/rc5.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_RC5
+#error RC5 is disabled.
+#endif
+
 #define RC5_ENCRYPT	1
 #define RC5_DECRYPT	0
 
diff --git a/crypto/rc5/rc5test.c b/crypto/rc5/rc5test.c
index d24da3c..d819284 100644
--- a/crypto/rc5/rc5test.c
+++ b/crypto/rc5/rc5test.c
@@ -62,6 +62,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_RC5
+int main(int argc, char *argv[])
+{
+    printf("No RC5 support\n");
+    return(0);
+}
+#else
 #include <openssl/rc5.h>
 
 unsigned char RC5key[5][16]={
@@ -373,3 +381,4 @@
 	}
 	
 #endif
+#endif
diff --git a/crypto/ripemd/Makefile.ssl b/crypto/ripemd/Makefile.ssl
index 8e81d85..c43c2e0 100644
--- a/crypto/ripemd/Makefile.ssl
+++ b/crypto/ripemd/Makefile.ssl
@@ -89,7 +89,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/ripemd/ripemd.h b/crypto/ripemd/ripemd.h
index b2708d5..ab76be4 100644
--- a/crypto/ripemd/ripemd.h
+++ b/crypto/ripemd/ripemd.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_RIPEMD
+#error RIPEMD is disabled.
+#endif
+
 #define RIPEMD160_CBLOCK	64
 #define RIPEMD160_LBLOCK	16
 #define RIPEMD160_BLOCK		16
diff --git a/crypto/ripemd/rmdtest.c b/crypto/ripemd/rmdtest.c
index 11737e2..8a19f29 100644
--- a/crypto/ripemd/rmdtest.c
+++ b/crypto/ripemd/rmdtest.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_RIPEMD
+int main(int argc, char *argv[])
+{
+    printf("No ripemd support\n");
+    return(0);
+}
+#else
 #include <openssl/ripemd.h>
 
 char *test[]={
@@ -122,4 +130,4 @@
 		sprintf(&(buf[i*2]),"%02x",md[i]);
 	return(buf);
 	}
-
+#endif
diff --git a/crypto/rsa/Makefile.ssl b/crypto/rsa/Makefile.ssl
index 9487b6f..96480f4 100644
--- a/crypto/rsa/Makefile.ssl
+++ b/crypto/rsa/Makefile.ssl
@@ -67,7 +67,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/rsa/rsa.h b/crypto/rsa/rsa.h
index f006b89..2f53ff0 100644
--- a/crypto/rsa/rsa.h
+++ b/crypto/rsa/rsa.h
@@ -66,6 +66,10 @@
 #include <openssl/bn.h>
 #include <openssl/crypto.h>
 
+#ifdef NO_RSA
+#error RSA is disabled.
+#endif
+
 typedef struct rsa_st RSA;
 
 typedef struct rsa_meth_st
diff --git a/crypto/rsa/rsa_oaep_test.c b/crypto/rsa/rsa_oaep_test.c
index 4005aa5..4dd078d 100644
--- a/crypto/rsa/rsa_oaep_test.c
+++ b/crypto/rsa/rsa_oaep_test.c
@@ -3,8 +3,15 @@
 #include <stdio.h>
 #include <string.h>
 #include <openssl/e_os.h>
-#include <openssl/rsa.h>
 #include <openssl/err.h>
+#ifdef NO_RSA
+int main(int argc, char *argv[])
+{
+    printf("No RSA support\n");
+    return(0);
+}
+#else
+#include <openssl/rsa.h>
 
 #define SetKey \
   key->n = BN_bin2bn(n, sizeof(n)-1, key->n); \
@@ -291,3 +298,4 @@
 	}
     return err;
     }
+#endif
diff --git a/crypto/sha/Makefile.ssl b/crypto/sha/Makefile.ssl
index 4033cd8..4f5413c 100644
--- a/crypto/sha/Makefile.ssl
+++ b/crypto/sha/Makefile.ssl
@@ -88,7 +88,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/sha/sha.h b/crypto/sha/sha.h
index ac10d4c..105d4c8 100644
--- a/crypto/sha/sha.h
+++ b/crypto/sha/sha.h
@@ -63,6 +63,10 @@
 extern "C" {
 #endif
 
+#ifdef NO_SHA
+#error SHA is disabled.
+#endif
+
 #define SHA_CBLOCK	64
 #define SHA_LBLOCK	16
 #define SHA_BLOCK	16
@@ -84,16 +88,20 @@
 	int num;
 	} SHA_CTX;
 
+#ifndef NO_SHA0
 void SHA_Init(SHA_CTX *c);
 void SHA_Update(SHA_CTX *c, unsigned char *data, unsigned long len);
 void SHA_Final(unsigned char *md, SHA_CTX *c);
 unsigned char *SHA(unsigned char *d, unsigned long n,unsigned char *md);
 void SHA_Transform(SHA_CTX *c, unsigned char *data);
+#endif
+#ifndef NO_SHA1
 void SHA1_Init(SHA_CTX *c);
 void SHA1_Update(SHA_CTX *c, unsigned char *data, unsigned long len);
 void SHA1_Final(unsigned char *md, SHA_CTX *c);
 unsigned char *SHA1(unsigned char *d, unsigned long n,unsigned char *md);
 void SHA1_Transform(SHA_CTX *c, unsigned char *data);
+#endif
 #ifdef  __cplusplus
 }
 #endif
diff --git a/crypto/sha/sha1_one.c b/crypto/sha/sha1_one.c
index b5a93d9..864e2a8 100644
--- a/crypto/sha/sha1_one.c
+++ b/crypto/sha/sha1_one.c
@@ -60,6 +60,7 @@
 #include <string.h>
 #include <openssl/sha.h>
 
+#ifndef NO_SHA1
 unsigned char *SHA1(unsigned char *d, unsigned long n, unsigned char *md)
 	{
 	SHA_CTX c;
@@ -72,3 +73,4 @@
 	memset(&c,0,sizeof(c));
 	return(md);
 	}
+#endif
diff --git a/crypto/sha/sha1dgst.c b/crypto/sha/sha1dgst.c
index 18a492d..532f53b 100644
--- a/crypto/sha/sha1dgst.c
+++ b/crypto/sha/sha1dgst.c
@@ -64,6 +64,7 @@
 #include "sha_locl.h"
 #include <openssl/opensslv.h>
 
+#ifndef NO_SHA1
 char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT;
 
 /* Implemented from SHA-1 document - The Secure Hash Algorithm
@@ -446,4 +447,5 @@
 	c->num=0;
 /*	memset((char *)&c,0,sizeof(c));*/
 	}
+#endif
 
diff --git a/crypto/sha/sha1test.c b/crypto/sha/sha1test.c
index 9e4d3f1..6a34a9a 100644
--- a/crypto/sha/sha1test.c
+++ b/crypto/sha/sha1test.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_SHA
+int main(int argc, char *argv[])
+{
+    printf("No SHA support\n");
+    return(0);
+}
+#else
 #include <openssl/sha.h>
 
 #undef SHA_0 /* FIPS 180 */
@@ -145,3 +153,4 @@
 		sprintf(&(buf[i*2]),"%02x",md[i]);
 	return(buf);
 	}
+#endif
diff --git a/crypto/sha/sha_dgst.c b/crypto/sha/sha_dgst.c
index 950c69c..e75c66c 100644
--- a/crypto/sha/sha_dgst.c
+++ b/crypto/sha/sha_dgst.c
@@ -64,6 +64,7 @@
 #include "sha_locl.h"
 #include <openssl/opensslv.h>
 
+#ifndef NO_SHA0
 char *SHA_version="SHA" OPENSSL_VERSION_PTEXT;
 
 /* Implemented from SHA-0 document - The Secure Hash Algorithm
@@ -424,4 +425,4 @@
 	c->num=0;
 /*	memset((char *)&c,0,sizeof(c));*/
 	}
-
+#endif
diff --git a/crypto/sha/sha_one.c b/crypto/sha/sha_one.c
index 80b0697..6ef3f06 100644
--- a/crypto/sha/sha_one.c
+++ b/crypto/sha/sha_one.c
@@ -60,6 +60,7 @@
 #include <string.h>
 #include <openssl/sha.h>
 
+#ifndef NO_SHA0
 unsigned char *SHA(unsigned char *d, unsigned long n, unsigned char *md)
 	{
 	SHA_CTX c;
@@ -72,3 +73,4 @@
 	memset(&c,0,sizeof(c));
 	return(md);
 	}
+#endif
diff --git a/crypto/sha/shatest.c b/crypto/sha/shatest.c
index 4e201ed..6ebcbb1 100644
--- a/crypto/sha/shatest.c
+++ b/crypto/sha/shatest.c
@@ -59,6 +59,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+
+#ifdef NO_SHA
+int main(int argc, char *argv[])
+{
+    printf("No SHA support\n");
+    return(0);
+}
+#else
 #include <openssl/sha.h>
 
 #define SHA_0 /* FIPS 180 */
@@ -145,3 +153,4 @@
 		sprintf(&(buf[i*2]),"%02x",md[i]);
 	return(buf);
 	}
+#endif
diff --git a/crypto/stack/Makefile.ssl b/crypto/stack/Makefile.ssl
index 3abe0bc..4d34e5f 100644
--- a/crypto/stack/Makefile.ssl
+++ b/crypto/stack/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/txt_db/Makefile.ssl b/crypto/txt_db/Makefile.ssl
index 6b9e5b6..8bae0e7 100644
--- a/crypto/txt_db/Makefile.ssl
+++ b/crypto/txt_db/Makefile.ssl
@@ -65,7 +65,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/x509/Makefile.ssl b/crypto/x509/Makefile.ssl
index c724a74..1fc144f 100644
--- a/crypto/x509/Makefile.ssl
+++ b/crypto/x509/Makefile.ssl
@@ -75,7 +75,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/crypto/x509/x509.h b/crypto/x509/x509.h
index 1ba0be7..7c3ab2f 100644
--- a/crypto/x509/x509.h
+++ b/crypto/x509/x509.h
@@ -69,20 +69,14 @@
 
 #ifndef NO_RSA
 #include <openssl/rsa.h>
-#else
-#define RSA	long
 #endif
 
 #ifndef NO_DSA
 #include <openssl/dsa.h>
-#else
-#define DSA	long
 #endif
 
 #ifndef NO_DH
 #include <openssl/dh.h>
-#else
-#define DH	long
 #endif
 
 #include <openssl/evp.h>
@@ -549,13 +543,17 @@
 int i2d_X509_CRL_fp(FILE *fp,X509_CRL *crl);
 X509_REQ *d2i_X509_REQ_fp(FILE *fp,X509_REQ *req);
 int i2d_X509_REQ_fp(FILE *fp,X509_REQ *req);
+#ifndef NO_RSA
 RSA *d2i_RSAPrivateKey_fp(FILE *fp,RSA *rsa);
 int i2d_RSAPrivateKey_fp(FILE *fp,RSA *rsa);
-DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
-int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
 RSA *d2i_RSAPublicKey_fp(FILE *fp,RSA *rsa);
 int i2d_RSAPublicKey_fp(FILE *fp,RSA *rsa);
 #endif
+#ifndef NO_DSA
+DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
+int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
+#endif
+#endif
 
 #ifdef HEADER_BIO_H
 X509 *d2i_X509_bio(BIO *bp,X509 *x509);
@@ -564,13 +562,17 @@
 int i2d_X509_CRL_bio(BIO *bp,X509_CRL *crl);
 X509_REQ *d2i_X509_REQ_bio(BIO *bp,X509_REQ *req);
 int i2d_X509_REQ_bio(BIO *bp,X509_REQ *req);
+#ifndef NO_RSA
 RSA *d2i_RSAPrivateKey_bio(BIO *bp,RSA *rsa);
 int i2d_RSAPrivateKey_bio(BIO *bp,RSA *rsa);
-DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
-int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
 RSA *d2i_RSAPublicKey_bio(BIO *bp,RSA *rsa);
 int i2d_RSAPublicKey_bio(BIO *bp,RSA *rsa);
 #endif
+#ifndef NO_DSA
+DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
+int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
+#endif
+#endif
 
 X509 *X509_dup(X509 *x509);
 X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa);
@@ -580,8 +582,10 @@
 X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn);
 X509_NAME *X509_NAME_dup(X509_NAME *xn);
 X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne);
+#ifndef NO_RSA
 RSA *RSAPublicKey_dup(RSA *rsa);
 RSA *RSAPrivateKey_dup(RSA *rsa);
+#endif
 
 #endif /* !SSLEAY_MACROS */
 
diff --git a/crypto/x509v3/Makefile.ssl b/crypto/x509v3/Makefile.ssl
index a46f10a..84e6ad3 100644
--- a/crypto/x509v3/Makefile.ssl
+++ b/crypto/x509v3/Makefile.ssl
@@ -69,7 +69,7 @@
 	lint -DLINT $(INCLUDES) $(SRC)>fluff
 
 depend:
-	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC)
+	$(MAKEDEPEND) $(INCLUDES) $(DEPFLFAG) $(PROGS) $(LIBSRC)
 
 dclean:
 	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new