[Python-Dev] Python for windows.
larry.bugbee at boeing.com
Thu Nov 27 02:09:56 CET 2008
> > All, and not to start flames, but I still do not understand why
> > applink.c isn't included in python's main (conditionally) instead
> > of expecting users, many of them novices, to do the build. ???
> One reason is that I don't know what applink is, and why I should
> care about it. (I may have known in the past, but then I have
> forgotten since).
Yeah, it's been a while for me too.
As I recall, OpenSSL, a long while ago stopped, supporting some idiosyncrasies associated with Windows I/O and opted for a "cleaner" approach, that of requiring developers to link a small file, applink.c, into the app's main. applink.c is provided by the OpenSSL folks.
OPENSSL_Applink is application-side interface which
provides a glue between OpenSSL BIO layer and Win32
compiler run-time environment. Even though it appears
at application side, it's essentially OpenSSL private
interface. For this reason application developers are
not expected to implement it, but to compile provided
module with compiler of their choice and link it into
the target application. The referred module is available
For most custom apps this is a simple process of adding "#include applink.c" to the app's main(). The problem for Python developers is that their Python program is not main(), and if python.exe does not have the OPENSSL_Applink interface, they cannot import M2Crypto, pyOpenSSL, or use ctypes to wrap OpenSSL, and write a PEM file without throwing an error. (That said, Daniel Clark says he is not experiencing problems with NCrypt. I have not verified.)
One solution is for those users to build their own Python from scratch. Many/most cannot do it, especially if they don't have the right version of Visual Studio. I know I don't. I simply stopped developing on Windows.
Arguably better is to have the include statement in the python source file, python.c, appropriately conditioned. ...and to provide a copy of applink.c. That way, there would be no more need to try to find or do a custom build. Everybody building for a Windows platform will have applink included and access to OpenSSL becomes a non-issue.
More information about the Python-Dev