diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2016-01-01 15:07:08 -0500 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2016-01-01 15:07:08 -0500 |
commit | b5804e02d72c1f80a6db494979c1b9533516b462 (patch) | |
tree | 7a4d5847046c25409237dfbc66a4661f6829d3d2 | |
parent | 7105e7f0132618798d5decac1b778ddb5f560a39 (diff) | |
parent | 33980bbb55919054bd1e0d641b8f28135a22472c (diff) | |
download | cryptography-b5804e02d72c1f80a6db494979c1b9533516b462.tar.gz cryptography-b5804e02d72c1f80a6db494979c1b9533516b462.tar.bz2 cryptography-b5804e02d72c1f80a6db494979c1b9533516b462.zip |
Merge pull request #2617 from reaperhulk/compiler-mingw-why-not
don't add the NXCOMPAT and DYNAMICBASE flags if the compiler isn't msvc
-rw-r--r-- | src/_cffi_src/build_constant_time.py | 5 | ||||
-rw-r--r-- | src/_cffi_src/build_openssl.py | 6 | ||||
-rw-r--r-- | src/_cffi_src/build_padding.py | 5 | ||||
-rw-r--r-- | src/_cffi_src/utils.py | 27 |
4 files changed, 29 insertions, 14 deletions
diff --git a/src/_cffi_src/build_constant_time.py b/src/_cffi_src/build_constant_time.py index 6d9a8f54..7a11f7b5 100644 --- a/src/_cffi_src/build_constant_time.py +++ b/src/_cffi_src/build_constant_time.py @@ -5,9 +5,8 @@ from __future__ import absolute_import, division, print_function import os -import sys -from _cffi_src.utils import build_ffi, extra_link_args +from _cffi_src.utils import build_ffi, compiler_type, extra_link_args with open(os.path.join( @@ -24,5 +23,5 @@ ffi = build_ffi( module_name="_constant_time", cdef_source=types, verify_source=functions, - extra_link_args=extra_link_args(sys.platform), + extra_link_args=extra_link_args(compiler_type()), ) diff --git a/src/_cffi_src/build_openssl.py b/src/_cffi_src/build_openssl.py index c856e3d9..c47b3082 100644 --- a/src/_cffi_src/build_openssl.py +++ b/src/_cffi_src/build_openssl.py @@ -7,7 +7,9 @@ from __future__ import absolute_import, division, print_function import os import sys -from _cffi_src.utils import build_ffi_for_binding, extra_link_args +from _cffi_src.utils import ( + build_ffi_for_binding, compiler_type, extra_link_args +) def _get_openssl_libraries(platform): @@ -92,5 +94,5 @@ ffi = build_ffi_for_binding( pre_include=_OSX_PRE_INCLUDE, post_include=_OSX_POST_INCLUDE, libraries=_get_openssl_libraries(sys.platform), - extra_link_args=extra_link_args(sys.platform), + extra_link_args=extra_link_args(compiler_type()), ) diff --git a/src/_cffi_src/build_padding.py b/src/_cffi_src/build_padding.py index 5df93d80..4c5096a1 100644 --- a/src/_cffi_src/build_padding.py +++ b/src/_cffi_src/build_padding.py @@ -5,9 +5,8 @@ from __future__ import absolute_import, division, print_function import os -import sys -from _cffi_src.utils import build_ffi, extra_link_args +from _cffi_src.utils import build_ffi, compiler_type, extra_link_args with open(os.path.join( @@ -24,5 +23,5 @@ ffi = build_ffi( module_name="_padding", cdef_source=types, verify_source=functions, - extra_link_args=extra_link_args(sys.platform), + extra_link_args=extra_link_args(compiler_type()), ) diff --git a/src/_cffi_src/utils.py b/src/_cffi_src/utils.py index 0b00353e..bdce2f3b 100644 --- a/src/_cffi_src/utils.py +++ b/src/_cffi_src/utils.py @@ -5,6 +5,8 @@ from __future__ import absolute_import, division, print_function import sys +from distutils.ccompiler import new_compiler +from distutils.dist import Distribution from cffi import FFI @@ -79,10 +81,23 @@ def build_ffi(module_name, cdef_source, verify_source, libraries=[], return ffi -def extra_link_args(platform): - if platform != "win32": - return [] +def extra_link_args(compiler_type): + if compiler_type == 'msvc': + # Enable NX and ASLR for Windows builds on MSVC. These are enabled by + # default on Python 3.3+ but not on 2.x. + return ['/NXCOMPAT', '/DYNAMICBASE'] else: - # Enable NX and ASLR for Windows builds. These are enabled by default - # on Python 3.3+ but not on 2.x. - return ["/NXCOMPAT", "/DYNAMICBASE"] + return [] + + +def compiler_type(): + """ + Gets the compiler type from distutils. On Windows with MSVC it will be + "msvc". On OS X and linux it is "unix". + """ + dist = Distribution() + dist.parse_config_files() + cmd = dist.get_command_obj('build') + cmd.ensure_finalized() + compiler = new_compiler(compiler=cmd.compiler) + return compiler.compiler_type |