Improvements to tests/Makefile when using shared library
diff --git a/ChangeLog b/ChangeLog
index fe8e5e7..13f4e5a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,7 @@
    * Improvements to the CMake build system, contributed by Julian Ospald.
    * Work around a bug of the version of Clang shipped by Apple with Mavericks
      that prevented bignum.c from compiling. (Reported by Rafael Baptista.)
+   * Improvements to tests/Makefile, contributed by Oden Eriksson.
 
 Security
    * Forbid change of server certificate during renegotiation to prevent
diff --git a/tests/Makefile b/tests/Makefile
index 3fcf92b..8c18378 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -9,6 +9,14 @@
 OFLAGS	= -O2
 LDFLAGS	+= -L../library -lpolarssl $(SYS_LDFLAGS)
 
+ifndef SHARED
+DEP=../library/libpolarssl.a
+CHECK_PRELOAD=
+else
+DEP=../library/libpolarssl.so
+CHECK_PRELOAD= LD_PRELOAD=../library/libpolarssl.so
+endif
+
 ifdef DEBUG
 CFLAGS += -g3
 endif
@@ -115,151 +123,151 @@
 	echo   "  Generate	$@"
 	scripts/generate_code.pl suites $* $*
 
-test_suite_aes.ecb: test_suite_aes.ecb.c ../library/libpolarssl.a
+test_suite_aes.ecb: test_suite_aes.ecb.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_aes.cbc: test_suite_aes.cbc.c ../library/libpolarssl.a
+test_suite_aes.cbc: test_suite_aes.cbc.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_aes.cfb: test_suite_aes.cfb.c ../library/libpolarssl.a
+test_suite_aes.cfb: test_suite_aes.cfb.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_aes.rest: test_suite_aes.rest.c ../library/libpolarssl.a
+test_suite_aes.rest: test_suite_aes.rest.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_arc4: test_suite_arc4.c ../library/libpolarssl.a
+test_suite_arc4: test_suite_arc4.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_base64: test_suite_base64.c ../library/libpolarssl.a
+test_suite_base64: test_suite_base64.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_blowfish: test_suite_blowfish.c ../library/libpolarssl.a
+test_suite_blowfish: test_suite_blowfish.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_camellia: test_suite_camellia.c ../library/libpolarssl.a
+test_suite_camellia: test_suite_camellia.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_cipher.aes: test_suite_cipher.aes.c ../library/libpolarssl.a
+test_suite_cipher.aes: test_suite_cipher.aes.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_cipher.blowfish: test_suite_cipher.blowfish.c ../library/libpolarssl.a
+test_suite_cipher.blowfish: test_suite_cipher.blowfish.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_cipher.camellia: test_suite_cipher.camellia.c ../library/libpolarssl.a
+test_suite_cipher.camellia: test_suite_cipher.camellia.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_cipher.des: test_suite_cipher.des.c ../library/libpolarssl.a
+test_suite_cipher.des: test_suite_cipher.des.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_cipher.null: test_suite_cipher.null.c ../library/libpolarssl.a
+test_suite_cipher.null: test_suite_cipher.null.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_ctr_drbg: test_suite_ctr_drbg.c ../library/libpolarssl.a
+test_suite_ctr_drbg: test_suite_ctr_drbg.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_des: test_suite_des.c ../library/libpolarssl.a
+test_suite_des: test_suite_des.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_dhm: test_suite_dhm.c ../library/libpolarssl.a
+test_suite_dhm: test_suite_dhm.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_error: test_suite_error.c ../library/libpolarssl.a
+test_suite_error: test_suite_error.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_gcm.decrypt_128: test_suite_gcm.decrypt_128.c ../library/libpolarssl.a
+test_suite_gcm.decrypt_128: test_suite_gcm.decrypt_128.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_gcm.decrypt_192: test_suite_gcm.decrypt_192.c ../library/libpolarssl.a
+test_suite_gcm.decrypt_192: test_suite_gcm.decrypt_192.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_gcm.decrypt_256: test_suite_gcm.decrypt_256.c ../library/libpolarssl.a
+test_suite_gcm.decrypt_256: test_suite_gcm.decrypt_256.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_gcm.encrypt_128: test_suite_gcm.encrypt_128.c ../library/libpolarssl.a
+test_suite_gcm.encrypt_128: test_suite_gcm.encrypt_128.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_gcm.encrypt_192: test_suite_gcm.encrypt_192.c ../library/libpolarssl.a
+test_suite_gcm.encrypt_192: test_suite_gcm.encrypt_192.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_gcm.encrypt_256: test_suite_gcm.encrypt_256.c ../library/libpolarssl.a
+test_suite_gcm.encrypt_256: test_suite_gcm.encrypt_256.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_hmac_shax: test_suite_hmac_shax.c ../library/libpolarssl.a
+test_suite_hmac_shax: test_suite_hmac_shax.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_md: test_suite_md.c ../library/libpolarssl.a
+test_suite_md: test_suite_md.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_mdx: test_suite_mdx.c ../library/libpolarssl.a
+test_suite_mdx: test_suite_mdx.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_mpi: test_suite_mpi.c ../library/libpolarssl.a
+test_suite_mpi: test_suite_mpi.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_pbkdf2: test_suite_pbkdf2.c ../library/libpolarssl.a
+test_suite_pbkdf2: test_suite_pbkdf2.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_pkcs1_v21: test_suite_pkcs1_v21.c ../library/libpolarssl.a
+test_suite_pkcs1_v21: test_suite_pkcs1_v21.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_pkcs5: test_suite_pkcs5.c ../library/libpolarssl.a
+test_suite_pkcs5: test_suite_pkcs5.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_rsa: test_suite_rsa.c ../library/libpolarssl.a
+test_suite_rsa: test_suite_rsa.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_shax: test_suite_shax.c ../library/libpolarssl.a
+test_suite_shax: test_suite_shax.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_x509parse: test_suite_x509parse.c ../library/libpolarssl.a
+test_suite_x509parse: test_suite_x509parse.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_x509write: test_suite_x509write.c ../library/libpolarssl.a
+test_suite_x509write: test_suite_x509write.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_xtea: test_suite_xtea.c ../library/libpolarssl.a
+test_suite_xtea: test_suite_xtea.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_debug: test_suite_debug.c ../library/libpolarssl.a
+test_suite_debug: test_suite_debug.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
-test_suite_version: test_suite_version.c ../library/libpolarssl.a
+test_suite_version: test_suite_version.c $(DEP)
 	echo   "  CC    	$@.c"
 	$(CC) $(CFLAGS) $(OFLAGS) $@.c	$(LDFLAGS) -o $@
 
@@ -273,12 +281,12 @@
 
 check: $(APPS)
 ifndef WINDOWS
-	echo "Running checks (Success if all tests PASSED)"	
+	echo "Running checks (Success if all tests PASSED)"
 	RETURN=0;																\
 	for i in $(APPS);														\
 	do																		\
 		echo " - $${i}";													\
-		RESULT=`./$${i} | grep -v 'PASS$$' | grep -v -- '-----' | grep -v '^$$'`;	\
+		RESULT=`$(CHECK_PRELOAD) ./$${i} | grep -v 'PASS$$' | grep -v -- '----' | grep -v '^$$'`;	\
 		FAILED=`echo $$RESULT |grep FAILED`; 								\
 		echo "   $$RESULT";													\
 		if [ "$$FAILED" != "" ];											\