From 156360af3d10fa4ecfb1ada6718f3ae57db5e62b Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 30 Jun 2014 12:14:01 -0600 Subject: switch to static linking on windows and update installation page --- cryptography/hazmat/bindings/openssl/binding.py | 4 ++++ docs/installation.rst | 19 +++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py index 554c3c3e..48d7f9bb 100644 --- a/cryptography/hazmat/bindings/openssl/binding.py +++ b/cryptography/hazmat/bindings/openssl/binding.py @@ -98,6 +98,10 @@ class Binding(object): libraries = ["crypto", "ssl"] else: # pragma: no cover libraries = ["libeay32", "ssleay32", "advapi32"] + libraries = [ + "libeay32mt", "ssleay32mt", "advapi32", + "crypt32", "gdi32", "user32", "ws2_32" + ] cls.ffi, cls.lib = build_ffi( module_prefix=cls._module_prefix, diff --git a/docs/installation.rst b/docs/installation.rst index 8fbbcb30..56d21e72 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -35,16 +35,23 @@ OpenSSL releases: On Windows ---------- -If you're on Windows you'll need to make sure you have OpenSSL installed. -There are `pre-compiled binaries`_ available. If your installation is in -an unusual location set the ``LIB`` and ``INCLUDE`` environment variables -to include the corresponding locations. For example: +The wheel package on Windows is a statically linked build (as of 0.5) so all +dependencies are included. Just run + +.. code-block:: console + + $ pip install cryptography + +If you prefer to compile it yourself you'll need to have OpenSSL installed. +There are `pre-compiled binaries`_ available. If your installation is in an +unusual location set the ``LIB`` and ``INCLUDE`` environment variables to +include the corresponding locations. For example: .. code-block:: console C:\> \path\to\vcvarsall.bat x86_amd64 - C:\> set LIB=C:\OpenSSL-1.0.1g-64bit\lib;%LIB% - C:\> set INCLUDE=C:\OpenSSL-1.0.1g-64bit\include;%INCLUDE% + C:\> set LIB=C:\OpenSSL-1.0.1h-64bit\lib\VC\static;%LIB% + C:\> set INCLUDE=C:\OpenSSL-1.0.1h-64bit\include;%INCLUDE% C:\> pip install cryptography Building cryptography on Linux -- cgit v1.2.3 From 751c53b6f7cdc3e8301dd8672091acc105ed8874 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 30 Jun 2014 15:30:19 -0600 Subject: don't need libraries twice. --- cryptography/hazmat/bindings/openssl/binding.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py index 48d7f9bb..6b4afe13 100644 --- a/cryptography/hazmat/bindings/openssl/binding.py +++ b/cryptography/hazmat/bindings/openssl/binding.py @@ -97,7 +97,6 @@ class Binding(object): if sys.platform != "win32": libraries = ["crypto", "ssl"] else: # pragma: no cover - libraries = ["libeay32", "ssleay32", "advapi32"] libraries = [ "libeay32mt", "ssleay32mt", "advapi32", "crypt32", "gdi32", "user32", "ws2_32" -- cgit v1.2.3 From 2a39f7f3c80b9c725b586ca96defbe5bad62bf83 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 2 Jul 2014 22:56:01 -0500 Subject: switch to env variable based static/dynamic switch for windows --- cryptography/hazmat/bindings/openssl/binding.py | 19 +++++++++++++++---- docs/installation.rst | 18 +++++++++++++++--- tests/hazmat/bindings/test_openssl.py | 12 +++++++++++- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py index 6b4afe13..7305874b 100644 --- a/cryptography/hazmat/bindings/openssl/binding.py +++ b/cryptography/hazmat/bindings/openssl/binding.py @@ -13,6 +13,7 @@ from __future__ import absolute_import, division, print_function +import os import sys import threading @@ -97,10 +98,8 @@ class Binding(object): if sys.platform != "win32": libraries = ["crypto", "ssl"] else: # pragma: no cover - libraries = [ - "libeay32mt", "ssleay32mt", "advapi32", - "crypt32", "gdi32", "user32", "ws2_32" - ] + link_type = os.environ.get("PYCA_OPENSSL_INSTALL", "static") + libraries = _get_windows_libraries(link_type) cls.ffi, cls.lib = build_ffi( module_prefix=cls._module_prefix, @@ -157,3 +156,15 @@ class Binding(object): mode, n, file, line ) ) + + +def _get_windows_libraries(link_type): + if link_type == "dynamic": + return ["libeay32", "ssleay32", "advapi32"] + elif link_type == "static": + return ["libeay32mt", "ssleay32mt", "advapi32", + "crypt32", "gdi32", "user32", "ws2_32"] + else: + raise ValueError( + "PYCA_OPENSSL_INSTALL must be 'static' or 'dynamic'" + ) diff --git a/docs/installation.rst b/docs/installation.rst index 56d21e72..81e150de 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -45,13 +45,25 @@ dependencies are included. Just run If you prefer to compile it yourself you'll need to have OpenSSL installed. There are `pre-compiled binaries`_ available. If your installation is in an unusual location set the ``LIB`` and ``INCLUDE`` environment variables to -include the corresponding locations. For example: +include the corresponding locations.For example: .. code-block:: console C:\> \path\to\vcvarsall.bat x86_amd64 - C:\> set LIB=C:\OpenSSL-1.0.1h-64bit\lib\VC\static;%LIB% - C:\> set INCLUDE=C:\OpenSSL-1.0.1h-64bit\include;%INCLUDE% + C:\> set LIB=C:\OpenSSL\lib\VC\static;C:\OpenSSL\lib;%LIB% + C:\> set INCLUDE=C:\OpenSSL\include;%INCLUDE% + C:\> pip install cryptography + +You can also choose to build statically or dynamically using the +``PYCA_OPENSSL_INSTALL`` variable. Allowed values are ``static`` (default) and +``dynamic``. + +.. code-block:: console + + C:\> \path\to\vcvarsall.bat x86_amd64 + C:\> set LIB=C:\OpenSSL\lib\VC\static;C:\OpenSSL\lib;%LIB% + C:\> set INCLUDE=C:\OpenSSL\include;%INCLUDE% + C:\> set PYCA_OPENSSL_INSTALL=dynamic C:\> pip install cryptography Building cryptography on Linux diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index 58d7602b..84f46b2e 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -15,7 +15,9 @@ from __future__ import absolute_import, division, print_function import pytest -from cryptography.hazmat.bindings.openssl.binding import Binding +from cryptography.hazmat.bindings.openssl.binding import ( + Binding, _get_windows_libraries +) class TestOpenSSL(object): @@ -137,3 +139,11 @@ class TestOpenSSL(object): resp = b.lib.SSL_set_mode(ssl, b.lib.SSL_OP_ALL) assert resp == b.lib.SSL_OP_ALL assert b.lib.SSL_OP_ALL == b.lib.SSL_get_mode(ssl) + + def test_windows_static_dynamic_libraries(self): + assert len(_get_windows_libraries("static")) == 7 + + assert len(_get_windows_libraries("dynamic")) == 3 + + with pytest.raises(ValueError): + _get_windows_libraries("notvalid") -- cgit v1.2.3 From 9c80e6c8e4b1ae563baffbcbd2918e07f4f709e3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 3 Jul 2014 15:49:27 -0500 Subject: improve unit tests for _get_windows_libraries --- tests/hazmat/bindings/test_openssl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index 84f46b2e..4b51ae82 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -141,9 +141,9 @@ class TestOpenSSL(object): assert b.lib.SSL_OP_ALL == b.lib.SSL_get_mode(ssl) def test_windows_static_dynamic_libraries(self): - assert len(_get_windows_libraries("static")) == 7 + assert "ssleay32mt" in _get_windows_libraries("static") - assert len(_get_windows_libraries("dynamic")) == 3 + assert "ssleay32" in _get_windows_libraries("dynamic") with pytest.raises(ValueError): _get_windows_libraries("notvalid") -- cgit v1.2.3 From 419e67a1d515ec7883a1e31608c1618e226fbffb Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Sat, 5 Jul 2014 11:15:55 -0500 Subject: change env variable name, handle empty string --- cryptography/hazmat/bindings/openssl/binding.py | 6 +++--- docs/installation.rst | 6 +++--- tests/hazmat/bindings/test_openssl.py | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py index 7305874b..4cd1b89b 100644 --- a/cryptography/hazmat/bindings/openssl/binding.py +++ b/cryptography/hazmat/bindings/openssl/binding.py @@ -98,7 +98,7 @@ class Binding(object): if sys.platform != "win32": libraries = ["crypto", "ssl"] else: # pragma: no cover - link_type = os.environ.get("PYCA_OPENSSL_INSTALL", "static") + link_type = os.environ.get("PYCA_WINDOWS_LINK_TYPE", "static") libraries = _get_windows_libraries(link_type) cls.ffi, cls.lib = build_ffi( @@ -161,10 +161,10 @@ class Binding(object): def _get_windows_libraries(link_type): if link_type == "dynamic": return ["libeay32", "ssleay32", "advapi32"] - elif link_type == "static": + elif link_type == "static" or link_type == "": return ["libeay32mt", "ssleay32mt", "advapi32", "crypt32", "gdi32", "user32", "ws2_32"] else: raise ValueError( - "PYCA_OPENSSL_INSTALL must be 'static' or 'dynamic'" + "PYCA_WINDOWS_LINK_TYPE must be 'static' or 'dynamic'" ) diff --git a/docs/installation.rst b/docs/installation.rst index 81e150de..339d8b76 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -55,15 +55,15 @@ include the corresponding locations.For example: C:\> pip install cryptography You can also choose to build statically or dynamically using the -``PYCA_OPENSSL_INSTALL`` variable. Allowed values are ``static`` (default) and -``dynamic``. +``PYCA_WINDOWS_LINK_TYPE`` variable. Allowed values are ``static`` (default) +and ``dynamic``. .. code-block:: console C:\> \path\to\vcvarsall.bat x86_amd64 C:\> set LIB=C:\OpenSSL\lib\VC\static;C:\OpenSSL\lib;%LIB% C:\> set INCLUDE=C:\OpenSSL\include;%INCLUDE% - C:\> set PYCA_OPENSSL_INSTALL=dynamic + C:\> set PYCA_WINDOWS_LINK_TYPE=dynamic C:\> pip install cryptography Building cryptography on Linux diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index 4b51ae82..d22c4fd2 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -143,6 +143,8 @@ class TestOpenSSL(object): def test_windows_static_dynamic_libraries(self): assert "ssleay32mt" in _get_windows_libraries("static") + assert "ssleay32mt" in _get_windows_libraries("") + assert "ssleay32" in _get_windows_libraries("dynamic") with pytest.raises(ValueError): -- cgit v1.2.3