U
    aÊ¹j½  ã                   @   sì   d Z ddlZddlmZ ddlmZmZ ddlmZ ddd	d
gddddddddddg
dddddddddddgdœZ	ddd	d
gddddddddddg
dddddddddddgdœZ
ddddgg g dœZg ddgddgdœZG dd„ deƒZdS )aœ  distutils.zosccompiler

Contains the selection of the c & c++ compilers on z/OS. There are several
different c compilers on z/OS, all of them are optional, so the correct
one needs to be chosen based on the users input. This is compatible with
the following compilers:

IBM C/C++ For Open Enterprise Languages on z/OS 2.0
IBM Open XL C/C++ 1.1 for z/OS
IBM XL C/C++ V2.4.1 for z/OS 2.4 and 2.5
IBM z/OS XL C/C++
é    Né   )Ú	sysconfig)ÚCompileErrorÚDistutilsExecError)ÚUnixCCompilerz-m64z-fvisibility=defaultz-fzos-le-char-mode=asciiz-fno-short-enumsz-q64z-qexportallz-qasciiz-qstrictz	-qnocsectz-Wa,asa,goffz
-Wa,xplinkz
-qgonumberz
-qenum=intz-Wc,DLLz-qlanglvl=extc99)ú
ibm-openxlúibm-xlclangúibm-xlcz-qlanglvl=extended0xz-fasmz-fno-integrated-asz	-Wa,--ASAz
-Wa,--GOFFz-Wl,dllc                
       sh   e Zd ZdddddddgZddddgZdgZdd	„ Zd‡ fdd„	Zdd„ Zdd„ Z	d‡ fdd„	Z
‡  ZS )ÚzOSCCompilerz.cz.Cz.ccz.cxxz.cppz.mz.sc                    sl   ‡ fdd„dD ƒ}t |ƒdkr"dS i }dD ]}d||< q*dD ]}d||< q<d	D ]}d
||< qN| |d d¡S )Nc                    s*   g | ]"}t j |d ¡ ‰ rt j ˆ ¡‘qS ©N)ÚosÚenvironÚgetÚpathÚbasename)Ú.0Zenvvar©Úbinary© úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/_distutils/zosccompiler.pyÚ
<listcomp>n   s   þz7zOSCCompiler._get_zos_compiler_name.<locals>.<listcomp>)ÚCCÚCXXÚLDSHAREDr   r   )z	ibm-clangzibm-clang64zibm-clang++zibm-clang++64Zclangzclang++zclang-14)Zxlclangz	xlclang++Znjscznjsc++r   )ZxlcZxlCzxlc++r	   )Úlenr   )ÚselfZzos_compiler_namesZzos_compilersÚcompilerr   r   r   Ú_get_zos_compiler_namem   s    
þ	


z#zOSCCompiler._get_zos_compiler_nameFc                    s(   t ƒ  |||¡ |  ¡ | _t | ¡ d S r   )ÚsuperÚ__init__r   Úzos_compilerr   Úcustomize_compiler)r   ÚverboseÚdry_runÚforce©Ú	__class__r   r   r   Š   s    
zzOSCCompiler.__init__c           
   
   C   sÈ   g }|| j kr&| j}| t| j ¡ nH|| jkrX| j}| t| j ¡ | t| j ¡ n| j}| t| j ¡ | |¡ z |  	|| |d|g | ¡ W n* t
k
rÂ }	 zt|	ƒ‚W 5 d }	~	X Y nX d S )Nz-o)Ú_cpp_extensionsÚcompiler_cxxÚextendÚ	_cxx_argsr    Ú_asm_extensionsÚcompiler_soÚ_cc_argsÚ	_asm_argsÚspawnr   r   )
r   ÚobjÚsrcÚextZcc_argsÚextra_postargsZpp_optsZ
local_argsr   Úmsgr   r   r   Ú_compile�   s    


 zzOSCCompiler._compilec                 C   s   d| S )Nz-Lr   )r   Údirr   r   r   Úruntime_library_dir_option¢   s    z'zOSCCompiler.runtime_library_dir_optionNc                    s  t  d¡}t jr.tj t  d¡d|› d�¡}n$tj t  d¡t  d¡d|› d�¡}tj |¡rt|rn| |¡ n|g}|rÌ|D ]N}|d d … D ]<}tj ||› d�¡}tj |¡rŒ| |¡ | |¡  q|qŒq|| 	t
| j ¡ tƒ  |||||||||	|
|||¡ d S )NÚ	LDVERSIONÚabs_builddirÚ	libpythonz.xÚinstalled_baseZ
platlibdir)r   Úget_config_varÚpython_buildr   r   ÚjoinÚexistsÚappendÚremover)   Ú_ld_argsr    r   Úlink)r   Ztarget_descÚobjectsZoutput_filenameÚ
output_dirÚ	librariesÚlibrary_dirsÚruntime_library_dirsÚexport_symbolsÚdebugZextra_preargsr3   Ú
build_tempZtarget_langÚ	ldversionZside_deck_pathr6   ZlibraryZlibrary_side_deckr%   r   r   rC   ¥   sN    

þ
ý

ózzOSCCompiler.link)FFF)
NNNNNFNNNN)Ú__name__Ú
__module__Ú__qualname__Zsrc_extensionsr'   r+   r   r   r5   r7   rC   Ú__classcell__r   r   r%   r   r
   h   s$             òr
   )Ú__doc__r   Ú r   Úerrorsr   r   Zunixccompilerr   r-   r*   r.   rB   r
   r   r   r   r   Ú<module>   sŽ   üöõí$üöõí#
ýý
