Allow both shared and static PolarSSL library

By default, PolarSSL is built as a static library. If the option
USE_SHARED_POLARSSL_LIBRARY is set, then it is build as a shared
library. But there is no way of building both the shared and static
versions.

This patch adds the USE_STATIC_POLARSSL_LIBRARY (which defaults to ON)
in addition to the existing USE_SHARED_POLARSSL_LIBRARY (which
defaults to OFF). Both options can be manipulated independently.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Index: polarssl-1.1.1/library/CMakeLists.txt
===================================================================
--- polarssl-1.1.1.orig/library/CMakeLists.txt
+++ polarssl-1.1.1/library/CMakeLists.txt
@@ -1,4 +1,5 @@
 option(USE_SHARED_POLARSSL_LIBRARY "Build PolarSSL as a shared library." OFF)
+option(USE_STATIC_POLARSSL_LIBRARY "Build PolarSSL as a static library." ON)
 
 set(src
      aes.c
@@ -40,17 +41,21 @@
      xtea.c
 )
 
-if(NOT USE_SHARED_POLARSSL_LIBRARY)
-
-add_library(polarssl STATIC ${src})
-
-else(NOT USE_SHARED_POLARSSL_LIBRARY)
+if(USE_SHARED_POLARSSL_LIBRARY)
 
 add_library(polarssl SHARED ${src})
 set_target_properties(polarssl PROPERTIES VERSION 1.1.3 SOVERSION 1)
+set_target_properties(polarssl PROPERTIES OUTPUT_NAME polarssl)
+
+endif(USE_SHARED_POLARSSL_LIBRARY)
+
+if(USE_STATIC_POLARSSL_LIBRARY)
+
+add_library(polarssl-static STATIC ${src})
+set_target_properties(polarssl-static PROPERTIES OUTPUT_NAME polarssl)
 
-endif(NOT USE_SHARED_POLARSSL_LIBRARY)
+endif(USE_STATIC_POLARSSL_LIBRARY)
 
-install(TARGETS polarssl
+install(TARGETS polarssl polarssl-static
         DESTINATION ${LIB_INSTALL_DIR}
         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
