1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
U
O±dARã
@sDddlZddlZddlZddlZddlZddlZddlZddlZddlZddlm    Z    m
Z
m Z ddl m Z ddlmZddlmZddgZe d¡Zd    d
„ZGd d„deƒZGd d„deƒZd d„Zedkr@ddlmZddlmZe d¡eedƒ  ¡ƒzeedƒ  ¡ƒWn,e!k
r>Z"z ee"ƒW5dZ"["XYnXdS)éN)ÚPopenÚPIPEÚSTDOUT)Úfilepath_from_subprocess_output)Ú    FCompiler)Ú LooseVersionÚ GnuFCompilerÚGnu95FCompilerzTarget: ([a-zA-Z0-9_\-]*)cCstjdkot ¡ddkS)NÚwin32rÚ64bit)ÚsysÚplatformÚ architecture©rrúTd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/distutils/fcompiler/gnu.pyÚis_win64src
@seZdZdZdZdZdd„Zdd„Zdd    gZd
d gd
d d dgd
d
d
d d gddgdgd
d d gdœZ    d
Z
d
Z e j dkr‚ejdkr‚dgZejdkr¤dD]Ze    e d¡qdZdZdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd
S)/rÚgnu)Úg77zGNU Fortran 77 compilercCsð| d¡r&|| d¡dd… ¡}qt|ƒdkrvt d|¡}|rÜ| d¡rZd| d¡fS| ¡d    krÜd
| d¡fSnft d |¡}|r”d
| d¡fSt d |¡}|rÜ| d¡}| d ¡sÌ| d¡sÌ| d¡rÔd|fSd
|fSd}t||ƒ‚dS)z6Handle the different versions of GNU fortran compilerszgfortran: warningÚ
éNéz    ([0-9.]+)z GNU FortranrrÚgfortranzGNU Fortran\s+95.*?([0-9-.]+)z%GNU Fortran.*?\-?([0-9-.]+\.[0-9-.]+)Ú0Ú2Ú3z6A valid Fortran version was not found in this string:
)    Ú
startswithÚfindÚstripÚlenÚreÚsearchÚgroupÚstartÚ
ValueError)ÚselfÚversion_stringÚmÚvÚerrrrrÚgnu_version_matchs0
ÿ  
  ÿ
zGnuFCompiler.gnu_version_matchcCs&| |¡}|r|ddkrdS|dS)Nrrr)r))r$r%r'rrrÚ version_matchLs
zGnuFCompiler.version_matchrZf77Nú -dumpversionú-gú-Wallú-fno-second-underscoreÚarú-crÚranlib©Ú version_cmdÚ compiler_f77Ú compiler_f90Ú compiler_fixÚ    linker_soÚarchiverr1Ú
linker_exeÚntÚcygwinz-fPICr
)r3r4r7r9ú -mno-cygwinÚg2cÚgnu95cCs |jdd…}tjdkr|tj dd¡}|sjddl}| d¡}|s\d}d|›}tj    |ddt
|ƒtjd<|  d    d
d g¡n
|  d ¡tj  d ¡rœ|  d¡|S)NrÚdarwinÚMACOSX_DEPLOYMENT_TARGETrz10.9z.Env. variable MACOSX_DEPLOYMENT_TARGET set to é)Ú
stacklevelz
-undefinedZdynamic_lookupz-bundlez-sharedÚsunosz -mimpure-text)r7r r ÚosÚenvironÚgetÚ    sysconfigÚget_config_varÚwarningsÚwarnÚstrÚextendÚappendr)r$ÚoptÚtargetrGÚsrrrÚget_flags_linker_soms 
 
 
 
 
z GnuFCompiler.get_flags_linker_soc    CsJzt |jdg¡}Wnttjfk
r0YnXt|ƒ}tj |¡SdS)Nz-print-libgcc-file-name)    Ú
subprocessÚ check_outputr4ÚOSErrorÚCalledProcessErrorrrDÚpathÚdirname)r$ÚoutputrrrÚget_libgcc_dirsÿ
 zGnuFCompiler.get_libgcc_dirc    Csˆtjdd…dkrd}ntjdkr(d}nd}d}|r„d |¡g}zt |j|¡}Wnttjfk
rnYnXt|ƒ}t    j
  |¡}|S)NéÚlinuxzlibgfortran.sor?zlibgfortran.dylibz-print-file-name={0}) r r ÚformatrRrSr4rTrUrrDrVrW)r$Zlibgfortran_nameZlibgfortran_dirZ find_lib_argrXrrrÚget_libgfortran_dir›s"
 ÿ z GnuFCompiler.get_libgfortran_dircCsàg}tjdd…dkrÆ| ¡}|rÆtjdkr¼| d¡s¼tj |¡}tj |d|j¡}tj     |¡s¼tjj|ftj
fdžŽ}tj  tj |d¡¡}tj |d|j¡}tj     |¡r¼|  |¡|  |¡|  ¡}|rÜ|  |¡|S)NrZr[r
z/usr/libzlib%s.aéÚlib)r r rYrrDrVÚnormpathÚjoinr=ÚexistsÚpardirÚabspathrMr])r$rNÚdrVÚrootZd2Úlib_gfortran_dirrrrÚget_library_dirs°s$   
 
 
zGnuFCompiler.get_library_dirscCs¤g}| ¡}|dk    rL|jd}|j||jf}tj tj ||¡¡sR|j}n|j}|dk    rd| |¡|j    }t
j dkrŒ|rŒ|j dkrŒ| d¡t
j dkr | d¡|S)Nz-picr
ÚmsvcÚgccr?Ú
cc_dynamic) rYr=Zstatic_lib_formatZstatic_lib_extensionrDrVÚisfilerarMÚ
c_compilerr r Ú compiler_type)r$rNrer=ÚfrmrrrÚ get_librariesÆs$
 
ÿ
 
 
zGnuFCompiler.get_librariescCsdgS)Nr,r©r$rrrÚget_flags_debugÛszGnuFCompiler.get_flags_debugcCs0| ¡}|r|dkrdg}ndg}| d¡|S)Nz3.3.3z-O2z-O3z-funroll-loops)Ú get_versionrM)r$r'rNrrrÚ get_flags_optÞs  
zGnuFCompiler.get_flags_optcCs`ddl}z| ¡d}Wntk
r0gYSXt d¡}g}| |¡D]}|d|g7}qJ|S)z( Return detected arch flags from CFLAGS rNÚCFLAGSz -arch\s+(\w+)ú-arch)rGÚget_config_varsÚKeyErrorrÚcompileÚfindall)r$rGÚcflagsZarch_reÚ
arch_flagsÚarchrrrÚ _c_arch_flagsés
 
zGnuFCompiler._c_arch_flagscCsgS)NrrqrrrÚget_flags_archöszGnuFCompiler.get_flags_archcCs\tjdkstjdkrt‚d|ks$t‚tjdkr8d|›Stj d¡rNd|›Sd|›SdS)    Nr
r;ú,r?z -Wl,-rpath,©ÚaixZos400z-Wl,-blibpath:z -Wl,-rpath=)r r ÚNotImplementedErrorÚAssertionErrorr)r$ÚdirrrrÚruntime_library_dir_optionùs 
 
 
z'GnuFCompiler.runtime_library_dir_option)Ú__name__Ú
__module__Ú __qualname__rnÚcompiler_aliasesÚ descriptionr)r*Úpossible_executablesÚ executablesÚmodule_dir_switchÚmodule_include_switchrDÚnamer r Z    pic_flagsÚkeyrMr=Zsuggested_f90_compilerrQrYr]rhrprrrtr~rr†rrrrrsD-
ø
 
#   c    @seZdZdZdZdZdd„ZddgZdd    gd
d d d dgd
d d dgd
d d d dgdd d gddgdgd
d gdœZdZ    dZ
e j   d¡r¼ed d¡e  ¡dd
d…dkr¼dD]Zee d¡q¨dZdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd
S)1r    r>)rzGNU Fortran 95 compilercCs\| |¡}|r|ddkrdS|d}t|ƒdkr4n$tjdkrXdD]}|j| d¡qB|S)NrrrÚ4r
)r3r4r5r6r7r9r<)r)rr r rrM)r$r%r'r‘rrrr*s
 
zGnu95FCompiler.version_matchrZf95z<F90>r+Nr-r,z -ffixed-formr.r/r0r1r2z-Jz-Irr7z    -lpthreadrrAÚ64)r4r5r6r7r9z-maix64cCs^tjdksgSg}| ¡}d|kr0d|| d¡<dD]$}t||ƒr4||kr4| d|g¡q4|S)z>Return a list of -arch flags for every supported architecture.r?Úi386Úi686)Úppcr•Úx86_64Úppc64Ús390xrv)r r r~ÚindexÚ _can_targetrL)r$Úcmdr|Zc_archsr}rrrÚ_universal_flags<s
zGnu95FCompiler._universal_flagscCs*t |¡}| |j¡}|r&||dd…<|S©Nr)rÚ    get_flagsrr5©r$Úflagsr|rrrrŸLs
 
  zGnu95FCompiler.get_flagscCs*t |¡}| |j¡}|r&||dd…<|Srž)rrQrr7r rrrrQSs
 
  z"Gnu95FCompiler.get_flags_linker_soc    Cs²t |¡}tjdkr˜|j}|r˜|jdkr˜| ¡}|r˜tj     | 
¡¡}tjj |ftj fdžŽ}tj  |d¡}tj     |¡}tj  tj  |d¡¡r˜| |¡| ¡}|r®| |¡|S)Nr
rir^r_z libmingwex.a)rrhr r rmrnÚ
get_targetrDrVr`rYrarcrbrMr])    r$rNrmrOrerfrVZmingwdirrgrrrrhZs 
 
 
 
zGnu95FCompiler.get_library_dirscCsŠt |¡}tjdkr| d¡tjdkr†|j}|rn|jdkrnd|krn| d¡}| |dd¡| |dd¡|j}|r†|jdkr†gS|S)    Nr?rkr
rirjrZmingwexZmingw32)    rrpr r ÚremovermrnršÚinsert)r$rNrmÚirrrrpms
 
 
 
 
zGnu95FCompiler.get_librariesc    Cs|z<tj|jdgtjtjd}| ¡\}}|p0d|p6d}Wnttjfk
rVYn"Xt|ƒ}t     |¡}|rx| 
d¡SdS)Nz-v)ÚstdinÚstderrórÚ) rRrr4rÚ communicaterTrUrÚTARGET_Rr r!)r$ÚpÚstdoutr§rXr&rrrr¢s
ý 
 
zGnu95FCompiler.get_targetc
Csft ¡}|D]6}t|dƒ"}| d¡}|s,q8| |¡qW5QRXq t | ¡¡}| d¡}|     d¡S)NÚrbiÚasciiú=)
ÚhashlibÚsha1ÚopenÚreadÚupdateÚbase64Ú    b32encodeÚdigestÚdecodeÚrstrip)r$Ú    filenamesÚhÚfnroÚblockÚtextrrrÚ _hash_files‘s 
 
zGnu95FCompiler._hash_filesc Cs`|j}|jdkrtdƒ‚| t|ƒt|ƒ¡}tƒr:d}nd}dtj tj     |d¡¡ddd…}    |    d    |d
|}
|
d } |
d } |
d } tj 
|| ¡}tj 
|| ¡}tj 
|| ¡}tj  |¡rÐ||fS|rèdgt|ƒdg}|j || |t|ƒdd|ddddgdtƒr d}nd}d|d||g}|j sF| ¡| |jg|¡||fS)zeCreate a wrapper shared library for the given objects
 
        Return an MSVC-compatible lib
        rizThis method only supports MSVCZ    win_amd64r
r_rNéÚ.z
.gfortran-z.dllz.defz.libz-Wl,--whole-archivez-Wl,--no-whole-archivez-Wl,--allow-multiple-definitionz-Wl,--output-def,z-Wl,--export-all-symbolsz-Wl,--enable-auto-importz-staticz-mlong-double-64)Ú
output_dirZextra_postargsz /MACHINE:X64z /MACHINE:X86z/def:z/OUT:)rmrnr#rÀÚlistrrDrVÚsplitextÚbasenamerarlZlink_shared_objectZ initializedZ
initializeÚspawnr_)r$ÚobjectsrÃÚ extra_dll_dirÚ chained_dllsÚ
is_archivermZ object_hashÚtagrÆZ    root_nameZdll_nameZdef_nameZlib_nameZdll_pathZdef_pathZlib_pathÚ    specifierZlib_argsrrrÚ_link_wrapper_libžs`
ÿÿÿ  ÿúüz Gnu95FCompiler._link_wrapper_libcCs
|jdkS)N)ri)rn)r$ÚcompilerrrrÚcan_ccompiler_linkÜsz!Gnu95FCompiler.can_ccompiler_linkc CsÆ|jjdkrºg}g}|D](}| ¡ d¡r6| |¡q| |¡qg}g}|ddd…D]6}    |j|    g|||dd\}
} | d|
¡| d| ¡qX|s˜|S|j||||dd\}
} |
g|Std    ƒ‚dS)
        Convert a set of object files that are not compatible with the default
        linker, to a file that is compatible.
        riz.aNéÿÿÿÿT)rÊrËrFzUnsupported C compiler)rmrnÚlowerÚendswithrMrÎr¤r#) r$rÈrÃrÉZarchivesZ plain_objectsÚobjZ chained_libsrÊÚarchiver_ÚdllrrrÚwrap_unlinkable_objectsàs<   û
 û
 
z&Gnu95FCompiler.wrap_unlinkable_objects)r‡rˆr‰rnrŠr‹r*rŒrrŽrr r rrMrr‘r=rrŸrQrhrpr¢rÀrÎrÐr×rrrrr    
sLÿÿÿõ  >c    Cs²|dd…}tjdd\}}t |¡zztj |¡}tj |¡dd}z<|     d|d|g¡t
|t t |d}|  ¡|jdkW¢W¢Stj |¡rœt |¡XW5t |¡XdS)    z7Return true if the architecture supports the -arch flagNz.f)Úsuffixrz.orvz-c)r§r­Úcwd)ÚtempfileÚmkstemprDÚcloser£rVrWrÅrbrLrrrrªÚ
returncode)rœr}ZnewcmdZfidÚfilenamererXr¬rrrr›s 
  r›Ú__main__)Úlog)Úcustomized_fcompilerrArZg95)#rrDr rIr rÚr±r¶rRrrrZnumpy.distutils.exec_commandrZnumpy.distutils.fcompilerrZdistutils.versionrZ    compilersryr«rrr    r›r‡Ú    distutilsràZnumpy.distutilsráÚ set_verbosityÚprintrsÚ    ExceptionÚerrrrÚ<module>s<   
q