summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRuslan Mustakov <r.mustakov@gmail.com>2018-01-20 19:10:52 +0700
committerRuslan Mustakov <r.mustakov@gmail.com>2018-01-20 19:26:00 +0700
commitbe2db6d67a33f11f8abe1d7715932ec342a7f7e4 (patch)
tree369899cc5214022b638df4ba6f7b83e26461cbe2
parentd127dd8095355af75c478fdec67da60ddbe709e6 (diff)
downloadNim-be2db6d67a33f11f8abe1d7715932ec342a7f7e4.tar.gz
Allow static linking with OpenSSL 1.0.x
This commit basically returns the code that was removed in
a78d7a31f780c6cf1e421f820d9ed19a5db64ca7, but under 'openssl10'
define symbol. OpenSSL 1.0.2 is still actively maintained, so there is
no point in dropping support of it.
-rw-r--r--changelog.md6
-rw-r--r--lib/wrappers/openssl.nim46
2 files changed, 30 insertions, 22 deletions
diff --git a/changelog.md b/changelog.md
index 3e6597ae9..bce2bcca3 100644
--- a/changelog.md
+++ b/changelog.md
@@ -212,9 +212,11 @@ for i in 1..15:
   styledEcho bgColor, bg, fgColor, fg, Nim, resetStyle
   int -= 0.01
   fg = intensity(fg, int)
-  
+
 setForegroundColor colRed
 setBackgroundColor colGreen
 styledEcho "Red on Green.", resetStyle
 ```
-
+- If you use ``--dynlibOverride:ssl`` with OpenSSL 1.0.x, you now have to
+  define ``openssl10`` symbol (``-d:openssl10``). By default OpenSSL 1.1.x is
+  assumed.
diff --git a/lib/wrappers/openssl.nim b/lib/wrappers/openssl.nim
index 1d0dc5897..70d3887db 100644
--- a/lib/wrappers/openssl.nim
+++ b/lib/wrappers/openssl.nim
@@ -209,32 +209,38 @@ proc TLSv1_method*(): PSSL_METHOD{.cdecl, dynlib: DLLSSLName, importc.}
 
 when compileOption("dynlibOverride", "ssl"):
   # Static linking
-  proc OPENSSL_init_ssl*(opts: uint64, settings: uint8): cint {.cdecl, dynlib: DLLSSLName, importc, discardable.}
-  proc SSL_library_init*(): cint {.discardable.} =
-    ## Initialize SSL using OPENSSL_init_ssl for OpenSSL >= 1.1.0
-    return OPENSSL_init_ssl(0.uint64, 0.uint8)
 
-  proc TLS_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
-  proc SSLv23_method*(): PSSL_METHOD =
-    TLS_method()
+  when defined(openssl10):
+    proc SSL_library_init*(): cint {.cdecl, dynlib: DLLSSLName, importc, discardable.}
+    proc SSL_load_error_strings*() {.cdecl, dynlib: DLLSSLName, importc.}
+    proc SSLv23_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
+  else:
+    proc OPENSSL_init_ssl*(opts: uint64, settings: uint8): cint {.cdecl, dynlib: DLLSSLName, importc, discardable.}
+    proc SSL_library_init*(): cint {.discardable.} =
+      ## Initialize SSL using OPENSSL_init_ssl for OpenSSL >= 1.1.0
+      return OPENSSL_init_ssl(0.uint64, 0.uint8)
 
-  proc SSLv23_client_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
-  proc SSLv2_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
-  proc SSLv3_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
+    proc TLS_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
+    proc SSLv23_method*(): PSSL_METHOD =
+      TLS_method()
 
-  template OpenSSL_add_all_algorithms*() = discard
+    proc OpenSSL_version_num(): culong {.cdecl, dynlib: DLLSSLName, importc.}
 
-  proc OpenSSL_version_num(): culong {.cdecl, dynlib: DLLSSLName, importc.}
+    proc getOpenSSLVersion*(): culong =
+      ## Return OpenSSL version as unsigned long
+      OpenSSL_version_num()
 
-  proc getOpenSSLVersion*(): culong =
-    ## Return OpenSSL version as unsigned long
-    OpenSSL_version_num()
+    proc SSL_load_error_strings*() =
+      ## Removed from OpenSSL 1.1.0
+      # This proc prevents breaking existing code calling SslLoadErrorStrings
+      # Static linking against OpenSSL < 1.1.0 is not supported
+      discard
 
-  proc SSL_load_error_strings*() =
-    ## Removed from OpenSSL 1.1.0
-    # This proc prevents breaking existing code calling SslLoadErrorStrings
-    # Static linking against OpenSSL < 1.1.0 is not supported
-    discard
+  template OpenSSL_add_all_algorithms*() = discard
+
+  proc SSLv23_client_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
+  proc SSLv2_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
+  proc SSLv3_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
 
 else:
   # Here we're trying to stay compatible with openssl 1.0.* and 1.1.*. Some