U
    f                     @   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Zbinary Alib/python3.8/site-packages/setuptools/_distutils/zosccompiler.py
<listcomp>n   s   z7zOSCCompiler._get_zos_compiler_name.<locals>.<listcomp>)ZCCZCXXZ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   Zcustomize_compiler)r   verboseZdry_runZ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_extensionsZcompiler_cxxextend	_cxx_argsr   _asm_extensionsZcompiler_so_cc_args	_asm_argsZspawnr   r   )
r   objsrcZ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 )NZ	LDVERSIONZabs_builddirZ	libpythonz.xZinstalled_baseZ
platlibdir)r   Zget_config_varZpython_buildr   r   joinexistsappendremover!   _ld_argsr   r   link)r   Ztarget_descZobjectsZoutput_filenameZ
output_dirZ	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsdebugZextra_preargsr(   Z
build_tempZtarget_langZ	ldversionZside_deck_pathr+   ZlibraryZlibrary_side_deckr   r   r   r2      sN    




zzOSCCompiler.link)FFF)
NNNNNFNNNN)__name__
__module____qualname__Zsrc_extensionsr    r#   r   r   r*   r,   r2   __classcell__r   r   r   r   r
   h   s$             r
   )__doc__r    r   errorsr   r   Zunixccompilerr   r$   r"   r%   r1   r
   r   r   r   r   <module>   s   $#

