o
    5‘ði¨  ã                   @   s¦   d 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 g d	¢g d
¢g d¢dœZg d	¢g d
¢g d¢dœZ	g d¢g g dœZ
g ddgddgdœZG dd„ dejƒ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)ÚDistutilsExecErroré   )Úunix)ÚCompileError)z-m64z-fvisibility=defaultz-fzos-le-char-mode=asciiz-fno-short-enums)
ú-q64ú-qexportallú-qasciiú-qstrictú	-qnocsectú-Wa,asa,goffú
-Wa,xplinkú
-qgonumberú
-qenum=intú-Wc,DLL)r   r	   r
   r   r   r   r   r   r   r   z-qlanglvl=extc99)ú
ibm-openxlúibm-xlclangúibm-xlc)r   r	   r
   r   r   r   r   r   r   r   z-qlanglvl=extended0x)z-fasmz-fno-integrated-asz	-Wa,--ASAz
-Wa,--GOFFz-Wl,dllr   c                       sn   e Zd Zg d¢Zg d¢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 )ÚCompiler)z.cú.Cú.ccú.cxxú.cppz.mú.s)r   r   r   r   r   c                    sl   ‡ fdd„dD ƒ}t |ƒdkrdS i }dD ]}d||< qdD ]}d||< qd	D ]}d
||< q'| |d d¡S )Nc                    s*   g | ]}t j |d ¡ ‰ rt j ˆ ¡‘qS )N)ÚosÚenvironÚgetÚpathÚbasename)Ú.0Úenvvar©Úbinary© úd/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_distutils/compilers/C/zos.pyÚ
<listcomp>o   s    ý
ÿz3Compiler._get_zos_compiler_name.<locals>.<listcomp>)ÚCCÚCXXÚLDSHAREDr   r   )z	ibm-clangzibm-clang64zibm-clang++zibm-clang++64Úclangzclang++zclang-14)Úxlclangz	xlclang++Únjscznjsc++r   )ÚxlcÚxlCzxlc++r   )Úlenr   )ÚselfÚzos_compiler_namesÚzos_compilersÚcompilerr$   r"   r%   Ú_get_zos_compiler_namen   s   
þ
	

zCompiler._get_zos_compiler_nameFc                    s(   t ƒ j||d� |  ¡ | _t | ¡ d S )N)Úforce)ÚsuperÚ__init__r4   Úzos_compilerr   Úcustomize_compiler)r0   Úverboser5   ©Ú	__class__r$   r%   r7   ‹   s   
zCompiler.__init__c           
   
   C   s¼   g }|| j v r| j}| t| j ¡ n$|| jv r,| j}| t| j ¡ | t| j ¡ n| j}| t| j ¡ | |¡ z|  	|| |d|g | ¡ W d S  t
y] }	 zt|	ƒ‚d }	~	ww )Nz-o)Ú_cpp_extensionsÚcompiler_cxxÚextendÚ	_cxx_argsr8   Ú_asm_extensionsÚcompiler_soÚ_cc_argsÚ	_asm_argsÚspawnr   r   )
r0   ÚobjÚsrcÚextÚcc_argsÚextra_postargsÚpp_optsÚ
local_argsr3   Úmsgr$   r$   r%   Ú_compile�   s"   


"€ÿzCompiler._compilec                 C   s   d| S )Nz-Lr$   )r0   Údirr$   r$   r%   Úruntime_library_dir_option£   s   z#Compiler.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 |¡r:|r7| |¡ n|g}|rf|D ]'}|d d … D ]}tj ||› d�¡}tj |¡rd| |¡ | |¡  nqFq>| 	t
| j ¡ tƒ  |||||||||	|
|||¡ d S )NÚ	LDVERSIONÚabs_builddirÚ	libpythonz.xÚinstalled_baseÚ
platlibdir)r   Úget_config_varÚpython_buildr   r   ÚjoinÚexistsÚappendÚremover?   Ú_ld_argsr8   r6   Úlink)r0   Útarget_descÚobjectsÚoutput_filenameÚ
output_dirÚ	librariesÚlibrary_dirsÚruntime_library_dirsÚexport_symbolsÚdebugÚextra_preargsrJ   Ú
build_tempÚtarget_langÚ	ldversionÚside_deck_pathrO   ÚlibraryÚlibrary_side_deckr;   r$   r%   r]   ¦   sR   

þ
ý

ý€ózCompiler.link)FF)
NNNNNFNNNN)Ú__name__Ú
__module__Ú__qualname__Úsrc_extensionsr=   rA   r4   r7   rN   rP   r]   Ú__classcell__r$   r$   r;   r%   r   i   s&    òr   )Ú__doc__r   Ú r   Úerrorsr   r   r   rC   r@   rD   r\   r   r$   r$   r$   r%   Ú<module>   s.    í#í#ýý
