o
    Ô­jÎ  ã                   @   sž   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ dgZG dd„ deƒZedkrMd d	lmZ e d
¡ eedd� ¡ ƒ dS dS )é    N)Ú	FCompiler)Úfind_executable)Úmake_temp_file)ÚlogÚIBMFCompilerc                   @   sh   e Zd ZdZdZdZddgdgddgdgd	gd
dgdgdœZdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )r   ÚibmzIBM XL Fortran Compilerzo(xlf\(1\)\s*|)IBM XL Fortran ((Advanced Edition |)Version |Enterprise Edition V|for AIX, V)(?P<version>[^\s*]*)z<F77>z	-qversionÚxlfÚxlf90z-qfixedÚxlf95Úarz-crÚranlib)Úversion_cmdÚcompiler_f77Úcompiler_fixÚcompiler_f90Ú	linker_soÚarchiverr   c           
   	      s  t j| g|¢R i |¤Ž}|d u rNtj d¡rNtdƒ}tdƒ}tj |¡rNtj |¡rNz
t	 
|ddg¡}W n tt	jfy@   Y nw t d|¡}|rN| d¡}d‰ |d u rtj ˆ ¡rtt ˆ ¡ƒ}| ¡  ‡ fd	d
„|D ƒ}|rddlm}	 |	|d ƒ | _}|S )NÚaixÚlslppr   z-LcÚxlfcmpz xlfcmp:(?P<version>\d+([.]\d+)+)Úversionz/etc/opt/ibmcmp/xlfc              	      s(   g | ]}t j t j ˆ |d ¡¡r|‘qS )zxlf.cfg)ÚosÚpathÚisfileÚjoin)Ú.0Úd©Úxlf_dir© úZ/var/www/html/CropPilot/venv/lib/python3.10/site-packages/numpy/distutils/fcompiler/ibm.pyÚ
<listcomp>5   s   ( z,IBMFCompiler.get_version.<locals>.<listcomp>r   )ÚLooseVersion)r   Úget_versionÚsysÚplatformÚ
startswithr   r   r   ÚexistsÚ
subprocessÚcheck_outputÚOSErrorÚCalledProcessErrorÚreÚsearchÚgroupÚisdirÚsortedÚlistdirÚreverseÚdistutils.versionr"   r   )
ÚselfÚargsÚkwdsr   r   r   ÚoÚmÚlr"   r   r   r    r#      s*   ÿzIBMFCompiler.get_versionc                 C   ó   dgS )Nz	-qextnamer   ©r4   r   r   r    Ú	get_flags;   ó   zIBMFCompiler.get_flagsc                 C   r:   )Nz-gr   r;   r   r   r    Úget_flags_debug>   r=   zIBMFCompiler.get_flags_debugc           
      C   sö   g }t jdkr| d¡ n| d¡ | jddgd�}|d uryt j d¡r'd}nd	| }td
d�\}}t d| ¡ t|ƒ�)}t	 
d¡j}|D ]}||ƒ}	|	rY| d|	 d¡ ¡ qF| |¡ qFW d   ƒ n1 siw   Y  | ¡  | d| ¡ |S )NÚdarwinz/-Wl,-bundle,-flat_namespace,-undefined,suppressz-bsharedr   é(   )Ú	ok_statusr   z/etc/xlf.cfgz/etc/opt/ibmcmp/xlf/%s/xlf.cfgz_xlf.cfg)Úsuffixz	Creating z \s*crt\s*=\s*(?P<path>.*)/crt1.ozcrt = %s/bundle1.o
r   z-F)r$   r%   Úappendr#   r&   r   r   ÚinfoÚopenr,   ÚcompileÚmatchÚwriter.   Úclose)
r4   Úoptr   Úxlf_cfgÚfoÚnew_cfgÚfiÚ
crt1_matchÚliner8   r   r   r    Úget_flags_linker_soA   s.   


ûþz IBMFCompiler.get_flags_linker_soc                 C   r:   )Nz-O3r   r;   r   r   r    Úget_flags_opt[   r=   zIBMFCompiler.get_flags_optN)Ú__name__Ú
__module__Ú__qualname__Úcompiler_typeÚdescriptionÚversion_patternÚexecutablesr#   r<   r>   rQ   rR   r   r   r   r    r      s"    ù
Ú__main__)Úcustomized_fcompileré   r   )Úcompiler)r   r,   r$   r(   Únumpy.distutils.fcompilerr   Únumpy.distutils.exec_commandr   Únumpy.distutils.misc_utilr   Ú	distutilsr   Ú	compilersr   rS   Únumpy.distutilsr[   Úset_verbosityÚprintr#   r   r   r   r    Ú<module>   s    Q
ý