U
    ui                     @   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 F/tmp/pip-unpacked-wheel-9osl9suo/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|qq||	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_descZobjectsZoutput_filename
output_dir	librarieslibrary_dirsruntime_library_dirsexport_symbolsdebugZextra_preargsr3   
build_tempZtarget_langZ	ldversionZside_deck_pathr6   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   $#

