o
    LK&h                     @   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 X/var/www/html/venv/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  ||| |  | _t|  d S r   )super__init__r5   zos_compilerr   customize_compiler)r1   verbosedry_runforce	__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   )
r1   objsrcextcc_argsextra_postargspp_opts
local_argsr4   msgr%   r%   r&   _compile   s"   


"zCompiler._compilec                 C   s   d| S )Nz-Lr%   )r1   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removerA   _ld_argsr8   r6   link)r1   target_descobjectsoutput_filename
output_dir	librarieslibrary_dirsruntime_library_dirsexport_symbolsdebugextra_preargsrL   
build_temptarget_lang	ldversionside_deck_pathrQ   librarylibrary_side_deckr=   r%   r&   r_      sR   




zCompiler.link)FFF)
NNNNNFNNNN)__name__
__module____qualname__src_extensionsr?   rC   r5   r7   rP   rR   r_   __classcell__r%   r%   r=   r&   r   i   s&    r   )__doc__r    r   errorsr   r   r   rE   rB   rF   r^   r   r%   r%   r%   r&   <module>   s.    ##
