48 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import shutil
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
import pytest
 | 
						|
import os
 | 
						|
import sysconfig
 | 
						|
 | 
						|
from numpy.distutils import mingw32ccompiler
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.skipif(sys.platform != 'win32', reason='win32 only test')
 | 
						|
@pytest.mark.skipif(not os.path.exists(os.path.join(sys.prefix, 'libs')),
 | 
						|
                    reason="test requires mingw library layout")
 | 
						|
@pytest.mark.skipif(sysconfig.get_platform() == 'win-arm64', reason='mingw GNU objdump does not understand arm64 binary format yet')
 | 
						|
def test_build_import():
 | 
						|
    '''Test the mingw32ccompiler.build_import_library, which builds a
 | 
						|
    `python.a` from the MSVC `python.lib`
 | 
						|
    '''
 | 
						|
 | 
						|
    # make sure `nm.exe` exists and supports the current python version. This
 | 
						|
    # can get mixed up when the PATH has a 64-bit nm but the python is 32-bit
 | 
						|
    try:
 | 
						|
        out = subprocess.check_output(['nm.exe', '--help'])
 | 
						|
    except FileNotFoundError:
 | 
						|
        pytest.skip("'nm.exe' not on path, is mingw installed?")
 | 
						|
    supported = out[out.find(b'supported targets:'):]
 | 
						|
    if sys.maxsize < 2**32:
 | 
						|
        if b'pe-i386' not in supported:
 | 
						|
            raise ValueError("'nm.exe' found but it does not support 32-bit "
 | 
						|
                             "dlls when using 32-bit python. Supported "
 | 
						|
                             "formats: '%s'" % supported)
 | 
						|
    elif b'pe-x86-64' not in supported:
 | 
						|
        raise ValueError("'nm.exe' found but it does not support 64-bit "
 | 
						|
                         "dlls when using 64-bit python. Supported "
 | 
						|
                         "formats: '%s'" % supported)
 | 
						|
    # Hide the import library to force a build
 | 
						|
    has_import_lib, fullpath = mingw32ccompiler._check_for_import_lib()
 | 
						|
    if has_import_lib: 
 | 
						|
        shutil.move(fullpath, fullpath + '.bak')
 | 
						|
 | 
						|
    try: 
 | 
						|
        # Whew, now we can actually test the function
 | 
						|
        mingw32ccompiler.build_import_library()
 | 
						|
 | 
						|
    finally:
 | 
						|
        if has_import_lib:
 | 
						|
            shutil.move(fullpath + '.bak', fullpath)
 |