<div dir="ltr">IMO, static build is more appropriate for Windows users. That means user doesn't need to additionally install openssl binaries.<div><br></div><div>E.g. CPython itself (ssl standard library) has openssl linked statically AFAIK. I suspect this is also to avoid "dll hell". E.g. win64 binary installation of OpenSSL has dlls with the exactly same names as win32 installation: libeay32.dll and ssleay32.dll. I suspect there is no way to have both versions co-exists as system-wide dll libraries.<div>

<br></div><div>I won't ask you to change your build scripts to use static libs on Windows, but I'd like to help with a patch to make this supported in some way. I'm going to try to build whl (wheel) file for cryptography with static openssl libs for both 32/64. I'm mostly interested in working pyOpenSSL library for my project, actually. But it depends on `cryptography`.</div>

<div><br></div><div>Any hints on approach to provide support for static build for Windows? Probably some sort of config option needed? I'm not sure how it should work with pip and wheels.</div></div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">2014-02-18 16:24 GMT+02:00 Paul Kehrer <span dir="ltr"><<a href="mailto:paul.l.kehrer@gmail.com" target="_blank">paul.l.kehrer@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


                <div>Thanks for the information, I don’t believe anyone has ever tried to do a static build on Windows before!</div><div><br></div><div>Some of the codegen from cffi on the Windows side causes warnings that, to our knowledge, are not an issue. We definitely would like to be warning clean when compiling with cl.exe (as we are with clang/gcc on OS X and Linux).
                </div><div><br></div><div>To run our test suite you should pip install -r dev-requirements.txt and then you can run py.test (or tox) to execute the tests.</div><div><br></div><div>-Paul Kehrer</div><div><div class="h5">


                <div></div>
                 
                <p style="color:#a0a0a8">On Tuesday, February 18, 2014 at 8:13 AM, Alexander Belchenko wrote:</p>
                </div></div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px">
                    <span><div><div><div class="h5"><div><div dir="ltr">Hi,<div><br></div><div>I started to write an email with request for help building cryptography on Windows for Python 3.3, but then I figured out how to get the desired result, so now I only want to share some knowledge and also provide you a build log in the case you're interested in compiler warnings.</div>



<div><br></div><div>Also I'd like to know it built correctly, is there any easy-to-use unittest suite I can run? I see there tests package, but I'm not sure what is your method to run tests in your project? Obvioulsly `python3 -m unittest` does not work.</div>



<div><br></div><div>My intent was to build cryptography library against static libs of OpenSSL because I had problems with running simple C code with OpenSSL dlls, I found on StackOverflow suggestion that only linking against static libraries would help. It does help for me.</div>



<div><br></div><div>Here is openssl directories I've used:</div><div>include: C:\OpenSSL-Win32\include<br></div><div>lib: C:\OpenSSL-Win32\lib\VC\static</div><div><br></div><div>My C code successfully linked against this set of libraries:</div>



<div>'libeay32MD', 'ssleay32MD', 'gdi32', 'user32', 'advapi32'<br></div><div><br></div><div>So here is my steps similar to what you wrote on Installation page:</div><div><a href="https://cryptography.io/en/latest/installation/#on-windows" target="_blank">https://cryptography.io/en/latest/installation/#on-windows</a><br>



</div><div><br></div><div><div>"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86</div><div>set LIB=C:\OpenSSL-Win32\lib\VC\static;%LIB%</div><div>set INCLUDE=C:\OpenSSL-Win32\include;%INCLUDE%</div>



<div>C:\Python33\python setup.py install</div></div><div><br></div><div>That wasn't enough because of set of libraries you need to link against. So I just changed settings in bindings.py:</div><div><br></div><div><p style="margin:0px">



<span style="font-family:'Courier New';font-size:8pt;font-weight:600;color:rgb(117,117,117);background-color:rgb(246,245,238)">=== modified file cryptography/hazmat/bindings/openssl/binding.py</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt;font-weight:600;color:rgb(0,136,11)">--- cryptography/hazmat/bindings/openssl/binding.py     2014-02-18 13:18:03 +0000</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt;font-weight:600;color:rgb(204,0,0)">+++ cryptography/hazmat/bindings/openssl/binding.py      2014-02-18 13:54:26 +0000</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt;font-style:italic;color:rgb(153,30,199)">@@ -92,7 +92,9 @@</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt">         if sys.platform != "win32":</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt">             libraries = ["crypto", "ssl"]</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt">         else:  # pragma: no cover</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt;color:rgb(204,0,0)">-            libraries = ["libeay32", "ssleay32", "advapi32"]</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt;color:rgb(0,136,11)">+            libraries = ["libeay32MD", "ssleay32MD", </span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt;color:rgb(0,136,11)">+                "gdi32", "user32", "advapi32",</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt;color:rgb(0,136,11)">+                "Ws2_32", "Crypt32"]</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt"> </span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt">         cls.ffi, cls.lib = build_ffi(cls._module_prefix, cls._modules,</span></p>
<p style="margin:0px"><span style="font-family:'Courier New';font-size:8pt">                                      _OSX_PRE_INCLUDE, _OSX_POST_INCLUDE,</span></p><br>With the last change I was finally able to build cryptography python library. \o/<p style="margin:0px;font-family:'Courier New';font-size:8pt">



</p>
<p style="margin:0px;font-family:'Courier New';font-size:8pt"></p></div><div><br></div><div>Attached is the build log in the case you want to see compiler errors.</div><div><br></div><div>Some warnings catched my eye, like this:</div>



<div><br></div><div><div>cryptography\hazmat\primitives\__pycache__\_cffi__xcd368b2dx4a8b9ec1.c(218) : warning C4244: '=' : conversion from 'unsigned __int64' to 'uint8_t', possible loss of data<br>



</div></div><div><br></div><div>or</div><div><br></div><div><div>cryptography\hazmat\bindings\__pycache__\_cffi__xabccc2b1x4bab9030.c(4386) : warning C4308: negative integral constant converted to unsigned type</div></div>



<div><br></div><div>Probably you might know that everything is OK, I just wanted to test somehow my build is OK.</div><div><br></div><div>Alexander.</div><div><br></div></div>
</div></div></div><div><div>_______________________________________________</div><div>Cryptography-dev mailing list</div><div><a href="mailto:Cryptography-dev@python.org" target="_blank">Cryptography-dev@python.org</a></div>

<div><a href="https://mail.python.org/mailman/listinfo/cryptography-dev" target="_blank">https://mail.python.org/mailman/listinfo/cryptography-dev</a></div></div></div></span>
                 
                 
                <div style="border-bottom:1px solid #f0f0f0;min-height:10px">
                </div>
                <br>
                 
                <div style="font-weight:bold;font-size:14px;margin-bottom:5px">Attachments:</div>
                 
                 
                 
                 
                 
                 
                 
                <div>
                     
                    <div>- setup.log</div>
                     
                </div>
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>
            <br>_______________________________________________<br>
Cryptography-dev mailing list<br>
<a href="mailto:Cryptography-dev@python.org">Cryptography-dev@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/cryptography-dev" target="_blank">https://mail.python.org/mailman/listinfo/cryptography-dev</a><br>
<br></blockquote></div><br></div>