
    G/PhV                     ~   d Z ddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
ZddlmZ 	 ddlmZ n# e$ r d ZY nw xY wddlmZ ddlmZmZmZmZ d	 Z ej        d
          Z ej        d          Z G d dej        j                  Zd Z d Z!d Z"d Z#d*dZ$d Z%d Z&d Z'd Z(i Z)ej*        dk    rp	 ddl+Z+de)d<   de)d<   de)d<    e,e+dd          Z-e-0 ej.        d e-          /                                \  Z0Z1e-e)e0e1z   <   [0[1[-n# e$ r  e	j2        d!           Y nw xY wd" Z3d+d$Z4d% Z5d& Z6d' Z7d( Z8d) Z9dS ),a  
Support code for building Python extensions on Windows.

    # NT stuff
    # 1. Make sure libpython<version>.a exists for gcc.  If not, build it.
    # 2. Force windows to use gcc (we're struggling with MSVC and g77 support)
    # 3. Force windows to use g77

    N)log)UnixCCompiler)get_build_versionc                      d S N r       `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/distutils/mingw32ccompiler.pyget_build_msvc_versionr      s    tr	   )UnknownFileError)msvc_runtime_librarymsvc_runtime_versionmsvc_runtime_majorget_build_architecturec                  ,    t                      } | g n| gS )zBReplacement for outdated version of get_msvcr from cygwinccompiler)r   )msvcrs    r
   get_msvcr_replacementr   (   s     ""E22UG+r	   z\[Ordinal/Name Pointer\] Tablez$^\s+\[([\s*[0-9]*)\] ([a-zA-Z0-9_]*)c                   D    e Zd ZdZdZ	 	 	 d	dZ	 	 	 	 	 	 d
dZ	 	 ddZdS )Mingw32CCompilerzH A modified MingW32 compiler compatible with an MSVC built Python.

    mingw32r   c                    t           j        j                            | |||           t	                       t                      }t          d          }|s|r|                     d           t                      }|r|                     dd|z             t                      dk    r| 	                    ddd	d
           n| 	                    dddd           dg| _
        d S )NT)debugNPY_MINGW_USE_CUSTOM_MSVCR__MSVCRT_VERSION__z0x%04iAMD64z#gcc -g -DDEBUG -DMS_WIN64 -O0 -Wallz7gcc -g -DDEBUG -DMS_WIN64 -O0 -Wall -Wstrict-prototypeszgcc -gzgcc -g -shared)compilercompiler_so
linker_exe	linker_sozgcc -O2 -Wallz!gcc -O2 -Wall -Wstrict-prototypeszg++ zg++ -sharedzg++)	distutilscygwinccompilerCygwinCCompiler__init__build_import_librarybuild_msvcr_librarydefine_macror   r   set_executablescompiler_cxx)selfverbosedry_runforcemsvcr_successmsvcr_dbg_successmsvcr_versions          r
   r#   zMingw32CCompiler.__init__:   s2   
 	!1::D'<CU	L 	L 	L 	 ,--/d;;; 	<- 	<:;;; -.. 	N2H}4LMMM "##w..  >2#* ! , , , ,   (?!'	 ! ) ) ) #G 	r	   Nc                     t                      }|r|sg }|                    |           | |||||||d |	|
|||f}t          j        } ||d |j        j                   d S r   )r   appendr   link__code__co_argcount)r)   target_descobjectsoutput_filename
output_dir	librarieslibrary_dirsruntime_library_dirsexport_symbolsr   extra_preargsextra_postargs
build_temptarget_langruntime_libraryargsfuncs                    r
   r2   zMingw32CCompiler.linkr   s      /00 	. 	_---$ !d-DM--.//r	    c                    |d}g }|D ]<}t           j                            t           j                            |                    \  }}t           j                            |          \  }}|r
|dd          }|| j        ddgz   vrt          d|d|d          |rt           j                            |          }|dk    s|dk    r@|                    t           j        	                    |||z   | j
        z                        |                    t           j        	                    ||| j
        z                        >|S )NrD      .rcz.reszunknown file type 'z	' (from 'z'))ospathsplitextnormcase
splitdrivesrc_extensionsr   basenamer1   joinobj_extension)	r)   source_filenames	strip_dirr8   	obj_namessrc_namebaseextdrvs	            r
   object_filenamesz!Mingw32CCompiler.object_filenames   s{    Bz	( 	L 	LH'**BG,<,<X,F,FGGKT3
 **400IC  ABBx4.%@AA&&ssHHH&' ' '  /w''..f}}u  "',,
04s
T=O0O#Q #Q R R R R   "',,
04t7I0I#K #K L L L Lr	   )r   r   r   )Nr   NNNN)r   rD   )__name__
__module____qualname____doc__compiler_typer#   r2   rX   r   r	   r
   r   r   3   s          M 4 4 4 4@ # % % % %R %&%'     r	   r   c                  D   t           j        g} t           j        t           j        k    r|                     t           j                   g d}g }| D ]:}|D ]5}|                    t          j                            ||                     6;dt          j        v rC|                    t          j                            t          j        d         d                     t          t           j	        d d                   \  }}t           j
        j        }|dk    r	d| | d}n|dk    r
d	| d
| d}nd| }t          d|z             |D ]E}t          j                            ||          }	t          j                            |	          r|	c S Ft          |d|          )N)rD   libbin
SYSTEMROOTSystem32   cpythonpython.dllpypylibpypy.z-c.dllzUnknown platform zLooking for %sz not found in )sysprefixbase_prefixr1   rH   rI   rO   environtupleversion_infoimplementationnameprintexists
ValueError)
stemssub_dirslib_dirsstemfoldermajor_versionminor_versionrp   dllnamedlls
             r
   find_python_dllr~      s    ZLE
#*$$S_%%%!!!HH 8 8 	8 	8FOOBGLLv667777	8 rz!!RZ%=zJJKKK $))9"1")=#>#> M=',N""===-===	6	!	!AMAAMAAA6n66	
W
$%%%  gll67++7>># 	JJJ	 WWWhh?
@
@@r	   c                 Z    t          j        dd| g          }|                    d          S )Nzobjdump.exez-p   
)
subprocesscheck_outputsplit)r}   sts     r
   
dump_tabler      s)    		 -s!;	<	<B88E??r	   c                 *   t          |           }t          t          |                    D ]6}t                              ||                                                   r n7t          d          g }t          |dz   t          |                    D ]}t                              ||                                                   }|r]|                    t          |
                    d                                                    |
                    d          f            t          |          dk    rt          j        d| z             t          |d          5 }|                    dt           j                            |           z             |                    d           |                    d	           |                    d
           |D ] }|                    d|d         z             !	 ddd           dS # 1 swxY w Y   dS )zGiven a dll file location,  get all its exported symbols and dump them
    into the given def file.

    The .def file will be overwrittenzSymbol table not foundrF   rc   r   zNo symbols found in %swzLIBRARY        %s
z,;CODE          PRELOAD MOVEABLE DISCARDABLE
z;DATA          PRELOAD SINGLE
z	
EXPORTS
z%s
N)r   rangelen_STARTmatchdecodert   _TABLEr1   intgroupstripr   warnopenwriterH   rI   rN   )	r}   dfiledumpisymsjmdss	            r
   generate_defr      s$   
 c??D3t99 3 3<<Q(()) 	E	 1222D1Q3D		""  LLa))** 	KKQWWQZZ--//00!''!**=>>>>
4yyA~~)C/000	eS		 #Q	%(8(8(=(==>>>	?@@@	1222	 	# 	#AGGFQqTM""""	## # # # # # # # # # # # # # # # # #s   "BHHHc                 n    dddt                               fd}d } ||           p
 ||           S )Namd64x86)r   Intelc                 P   t           j                            t           j                            dd          d          }t           j                            |          sd S t          j        |          D ]0\  }}}| |v r&|v r"t           j                            ||           c S 1d S )NWINDIRz
C:\WINDOWSwinsxs)rH   rI   rO   rm   getrs   walk)dll_namewinsxs_pathrootdirsfilesarchs        r
   _find_dll_in_winsxsz%find_dll.<locals>._find_dll_in_winsxs  s    gll2:>>(M#J#J#+- -w~~k** 	4!#!5!5 	4 	4D$5  TT\\w||D(33333tr	   c                 2   t           j        gt          j        d                             d          z   D ]b}t          j                            ||           }t          j                            |          r!t          j                            |          c S cd S )NPATH;)	rj   rk   rH   rm   r   rI   rO   rs   abspath)r   rI   filepaths      r
   _find_dll_in_pathz#find_dll.<locals>._find_dll_in_path  s     ZL2:f#5#;#;C#@#@@ 	1 	1Dw||D(33Hw~~h'' 1wx000001	1 	1r	   )r   )r   r   r   r   s      @r
   find_dllr     so     3557D	 	 	 	 	1 1 1 x((G,=,=h,G,GGr	   Fc                    t           j        dk    rdS t                      }|t          j        d           dS |dk     rt          j        d           dS t                      }| r|dz  }d|z  }t           j                            t          j	        d|          }t           j        
                    |          rt          j        d	|d
           dS |dz   }t          |          }|st          j        d|z             dS d|z  }t           j                            t          j	        d|          }t          j        d|d|d           t          ||           dd|d|g}	t          j        |	          }
t          j        |           |
 S )NntFz?Skip building import library: Runtime is not compiled with MSVCP   z=Skip building msvcr library: custom functionality not presentr   zlib%s.alibszSkip building msvcr library: "z" existsTrf   z*Cannot build msvcr library: "%s" not foundz	lib%s.defzBuilding msvcr library: "" (from )dlltool-d-l)rH   rq   r   r   r   r   rI   rO   rj   rk   isfiler   r   infor   r   callremove)r   	msvcr_ver
msvcr_nameout_nameout_filemsvcr_dll_namedll_filedef_namedef_filecmdretcodes              r
   r%   r%      s   	w$u #$$I	 6 	7 	7 	7u 2~~	 6 	7 	7 	7u%''J c
 :%Hw||CJ99H	w~~h 		88 	 	 	t  &(N''H =  	! 	! 	!uZ'Hw||CJ99HHH((($ % % % 8$$$ dHdH
5Coc""G IhKr	   c                      t           j        dk    rd S t                      } | dk    rt                      S | dk    rt	                      S t          d| z            )Nr   r   r   zUnhandled arch %s)rH   rq   r   _build_import_library_amd64_build_import_library_x86rt   )r   s    r
   r$   r$   [  s[    	w$!##Dw*,,,	(***,t3444r	   c            
         t          t          j        dd                   \  } }g d}t          j        g}t	          t          d          r:t          j        t          j        k    r |                    t          j                   nNt	          t          d          r9t          j        t          j        k    r|                    t          j                   ddg}g }|D ]G}|| |fz  }|D ];}|D ]6}	|                    t          j	        
                    ||	|                     7<H|D ]'}
t          j	                            |
          rd|
fc S (d	|d
         fS )zACheck if an import library for the Python runtime already exists.Nrc   )zlibpython%d%d.azlibpython%d%d.dll.azlibpython%d.%d.dll.arl   real_prefixr   r_   TFr   )rn   rj   ro   rk   hasattrrl   r1   r   rH   rI   rO   r   )rz   r{   patternsru   rv   
candidatespatfilenamestem_dirry   fullnames              r
   _check_for_import_libr   g  s~   #()9"1")=#>#> M=( ( (H
 ZLEsM"" &s#*'D'DS_%%%%	m	$	$ &CJ)F)FS_%%% H J L L-77 	L 	LH" L L!!"',,x"J"JKKKKL	L
  $ $7>>(## 	$(####	$
 :a=!!r	   c                     t                      \  } }| rt          j        d|           d S t                      }t          j        d|d|d           dt          t          j        d d                   z  }t          j	        
                    t          j        d|          }t          ||           dd	|d
|g}t          j        |           d S )N)Skip building import library: "%s" existsz'Building import library (arch=AMD64): "r   r   python%d%d.defrc   r   r   r   r   )r   r   r   r~   r   rn   rj   ro   rH   rI   rO   rk   r   r   
check_call)
out_existsr   r   r   r   r   s         r
   r   r     s    022J 	=xHHH   HHHhh" # # #  %(8!(<"="==Hw||CJ99H8$$$ dHdH
5C#r	   c                      t                      \  } }| rt          j        d|           dS dt          t          j        dd                   z  }t          j                            t          j	        d|          }t          j        
                    |          st          t          d          r,t          j                            t          j        d|          }nCt          t          d          r,t          j                            t          j        d|          }nd}t          j        
                    |          r|}nt          j        d	|           dS t          j        d
|           ddlm} dt          t          j        dd                   z  }t          j                            t          j	        d|          }|                    |j        |gz   d          }|                    |          \  }	}
t+          |d          5 }|                    |	|
|j        |           ddd           n# 1 swxY w Y   t1                      }dd|d|d|g}t3          j        |          }|rt          j        d           dS )z; Build the import libraries for Mingw32-gcc on Windows
    r   Nzpython%d%d.librc   r   rl   r   rD   z+Cannot build import library: "%s" not foundz(Building import library (ARCH=x86): "%s"r   )lib2defr   F)shellr   r   z	--dllnamez--defz--output-libz:Failed to build import library for gcc. Linking will fail.)r   r   r   rn   rj   ro   rH   rI   rO   rk   r   r   rl   r   r   r   numpy.distutilsr   getnm
DEFAULT_NMparse_nmr   
output_def
DEF_HEADERr~   r   r   )r   r   lib_namelib_filebase_libr   r   r   	nm_outputdlistflistfidr   r   statuss                  r
   r   r     s    122J 	=xHHH%(8!(<"="==Hw||CJ99H7>>(##  3&& 	w||COVXFFHHS-(( 	w||COVXFFHHH7>>(## 	HHHBHMMMFH7BBB''''''%(8!(<"="==Hw||CJ99H(+5  : :I##I..LE5	h		 B5%);SAAAB B B B B B B B B B B B B B B !!HH8%C $S))F OMNNN
Fs   H22H69H6win32z8.0.50727.4280z9.0.21022.890z10.0.30319.460100CRT_ASSEMBLY_VERSIONz(\d+)\.(\d)z9Cannot import msvcrt: using manifest will not be possiblec                     	 t           t          | dz  |z                      }n## t          $ r t          d| |fz            dw xY wt	          j        d          }||| |dz  S )zUGiven a major and minor version of the MSVCR, returns the
    corresponding XML file.
   z)Version %d,%d of MSVCRT not supported yetNa          <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
          <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
            <security>
              <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
              </requestedPrivileges>
            </security>
          </trustInfo>
          <dependency>
            <dependentAssembly>
              <assemblyIdentity type="win32" name="Microsoft.VC%(maj)d%(min)d.CRT" version="%(fullver)s" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
            </dependentAssembly>
          </dependency>
        </assembly>)fullvermajmin)_MSVCRVER_TO_FULLVERstrKeyErrorrt   textwrapdedent)r   r   r   templates       r
   msvc_manifest_xmlr     s    /&s38c>':':; / / /Ds$ % %*.	//     H  '#cBBBBs	    #  Ar}   c                 X    |dk    rd}n|dk    rd}nt          d|z            d|| fz  S )aW  Return the rc file used to generate the res file which will be embedded
    as manifest for given manifest file name, of given type ('dll' or
    'exe').

    Parameters
    ----------
    name : str
            name of the manifest file to embed
    type : str {'dll', 'exe'}
            type of the binary which will embed the manifest

    r}   rc   exerF   zType %s not supportedz&#include "winuser.h"
%d RT_MANIFEST %s)rt   )rq   typerctypes      r
   manifest_rcr    sN     u}}	047888~& &r	   c                     t                      }|r4|t          |           k    s#t          dt          |           |fz            dS dS )z6msver is the ms runtime version used for the MANIFEST.zKDiscrepancy between linked msvcr (%d) and the one about to be embedded (%d)N)r   r   rt   )msverr   s     r
   !check_embedded_msvcr_match_linkedr  0  sb     

C
 .c%jj  JJ,-. . .. .  r	   c                     t           j                            |                     dg d                    }t           j                            |          d         S )Nyocr   )rH   rI   rN   _gen_temp_sourcefilerJ   )configrU   s     r
   configtest_namer  <  sD    7F77b#FFGGD7D!!!$$r	   c                 H    t          |           }| j        j        }||z   dz   S )Nz	.manifest)r  r   exe_extension)r  r   exexts      r
   manifest_namer  @  s(    6""DO)E%<+%%r	   c                 *    t          |           }|dz   S )NrG   )r  )r  r   s     r
   rc_namer  F  s    6""D%<r	   c                    t                      }||dk    rt          |           t          |                              d          \  }}t	          t          |          t          |                    }t          t          |           d          5 }| j        	                    t          |                      |
                    |           d d d            d S # 1 swxY w Y   d S d S d S )N   ri   r   )r   r  r   r   r   r   r   r  
temp_filesr1   r   )r  r  ma_strmi_strmanxmlmans         r
   generate_manifestr  K  s   "$$EA::-e444 ZZ--c22NFF&s6{{CKK@@FmF++S11 "S!((v)>)>???		&!!!" " " " " " " " " " " " " " " " " " :s   =CC #C )F)r}   ):r\   rH   rj   r   rer   numpy.distutils.ccompilernumpyr   r   distutils.cygwinccompilerr    distutils.unixccompilerr   distutils.msvccompilerr   r   ImportErrordistutils.errorsr   numpy.distutils.misc_utilr   r   r   r   r   compiler   r   r!   r"   r   r~   r   r   r   r%   r$   r   r   r   r   platformmsvcrtgetattrcrt_verr   groupsr   r   r   r   r  r  r  r  r  r  r   r	   r
   <module>r*     sy    
			 



     				  !             !       1 1 1 1 1 1RRRRRRR        . - - - - -? ? ? ? ? ? ? ? ? ? ? ?
, , , 
5	6	6	;	<	<D D D D Dy0@ D D DR$A $A $AL  # # #@H H H49 9 9 9v
5 
5 
5"" "" ""H  (/ / /D  <7N &4T"%2T" '7U#'&"8$??rx88??AAHC.5 s+SG N N N 	LMMMMM	NC C C@& & & &0
. 
. 
.% % %& & &  

" 
" 
" 
" 
"s   3 >>8AD D$#D$