U
    ì©/eË  ã                	   @   s¾   d dl Z d dlmZmZ edko&edkZerZej e e 	e 
e¡d¡¡¡ d dlmZ nd dlmZ edddddddd	ZG d
d„ deƒZG dd„ deƒZG dd„ de jƒZerºe  ¡  dS )é    N)ÚsysÚpathÚ__main__z..)ÚCCompilerOpt)ÚgccÚclangZiccZiccwZmsvc)r   r   )r   )Úx86Úx64Úppc64Úppc64leZarmhfÚaarch64Znarchc                   @   s:   e Zd ZdZdd„ Zdd„ Zdd„ Zedd	œd
d„ƒZdS )ÚFakeCCompilerOpt)ÚarchÚcompilerÚ
extra_argsc                 O   s   t j| d f|Ž d S ©N)r   Ú__init__)ÚselfÚargsÚkwargs© r   úQ/tmp/pip-unpacked-wheel-w1amr7ya/numpy/distutils/tests/test_ccompiler_opt_conf.pyr      s    zFakeCCompilerOpt.__init__c                 K   s   |S r   r   )r   ÚsourcesÚflagsr   r   r   r   Údist_compile   s    zFakeCCompilerOpt.dist_compilec                 C   s   t jS r   )r   Ú	fake_info©r   r   r   r   Ú	dist_info   s    zFakeCCompilerOpt.dist_infoF)Ústderrc                 G   s   d S r   r   )r   r   r   r   r   Údist_log   s    zFakeCCompilerOpt.dist_logN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Ústaticmethodr   r   r   r   r   r      s   r   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )Ú_TestConfFeatureszlA hook to check the sanity of configured features
-   before it called by the abstract class '_Feature'
    c                 C   sX   | j }| ¡ D ]\}}|  d|||¡ qt | ¡}| ¡ D ]\}}|  d|||¡ q:|S )Nzattribute conf_featureszconf_features_partial())Zconf_featuresÚitemsÚtest_featurer   Úconf_features_partial)r   Zconf_allÚfeature_nameZfeatureZconf_partialr   r   r   r'   &   s"      þ
  þz'_TestConfFeatures.conf_features_partialc                 C   sŠ   d  ||| j| j¡}| ¡ s(t|d ƒ‚| ¡ D ]$\}}|  |||¡ |  |||¡ q0|  ||||¡ |  	||||¡ |  
||||¡ d S )NzJduring validate '{}' within feature '{}', march '{}' and compiler '{}'
>> z!feature name must be in uppercase)ÚformatZcc_marchZcc_nameÚisupperÚAssertionErrorr%   Útest_option_typesÚtest_duplicatesÚtest_impliesÚ
test_groupÚtest_extra_checks)r   ÚlogÚ	search_inr(   Úfeature_dictÚ	error_msgÚoptionÚvalr   r   r   r&   6   s    ÿ   ýz_TestConfFeatures.test_featurec                 C   s¨   t tfdft fdftfdftfdfttd ƒfdffD ]Z\}}||k}|sJq4t||ƒsŠdd„ |˜D ƒ}d |¡}t|d	||t|ƒjf  ƒ‚ qq4|s¤t|d
|  ƒ‚d S )N©ÚimpliesÚheadersr   ÚgroupÚdetectÚextra_checks)Údisable)Zinterest)Zimplies_detect)Zautovecc                 S   s   g | ]
}|j ‘qS r   )r    )Ú.0Útr   r   r   Ú
<listcomp>U   s     z7_TestConfFeatures.test_option_types.<locals>.<listcomp>z or z+expected '%s' type for option '%s' not '%s'zinvalid option name '%s')	ÚstrÚlistÚintÚboolÚtypeÚ
isinstanceÚjoinr+   r    )r   r4   r5   r6   ÚtpÚ	availableZfound_itZerror_tpr   r   r   r,   G   s,    
ù	

  ÿÿz#_TestConfFeatures.test_option_typesc                 C   sF   |dkrd S t |tƒr| ¡ }t|ƒtt|ƒƒkrBt|d|  ƒ‚d S )Nr7   z duplicated values in option '%s')rF   rA   ÚsplitÚlenÚsetr+   )r   r4   r5   r6   r   r   r   r-   `   s    
z!_TestConfFeatures.test_duplicatesc                 C   s–   |  d¡d k	rd S |  dd¡}|s&d S t|tƒr8| ¡ }||krLt|d ƒ‚|D ]@}|  |¡}|d k	r€d|krPt|d|  ƒ‚qPt|d|  ƒ‚qPd S )NÚdisabledr8   Ú zfeature implies itselfr=   zimplies disabled feature '%s'zimplies non-exist feature '%s'©ÚgetrF   rA   rJ   r+   )r   r4   r2   r(   r3   r8   ÚimplÚ	impl_dictr   r   r   r.   k   s     

z_TestConfFeatures.test_impliesc                 C   sn   |  d¡d k	rd S |  dd¡}|s&d S t|tƒr8| ¡ }|D ],}|  |¡}|r<d|krXq<t|d|  ƒ‚q<d S )NrM   r:   rN   r=   z8in option 'group', '%s' already exists as a feature namerO   )r   r4   r2   r(   r3   r:   ÚfrR   r   r   r   r/      s    

ÿz_TestConfFeatures.test_groupc                 C   sn   |  d¡d k	rd S |  dd¡}|s&d S t|tƒr8| ¡ }|D ],}|  |¡}|r<d|krXq<t|d|  ƒ‚q<d S )NrM   r<   rN   r=   zOin option 'extra_checks', extra test case '%s' already exists as a feature namerO   )r   r4   r2   r(   r3   r<   rS   rR   r   r   r   r0      s    

ÿz#_TestConfFeatures.test_extra_checksN)r    r!   r"   Ú__doc__r'   r&   r,   r-   r.   r/   r0   r   r   r   r   r$   !   s   r$   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚTestConfFeaturesÚrunTestc                 C   s   t j | |¡ |  ¡  d S r   )ÚunittestÚTestCaser   Ú_setup)r   Ú
methodNamer   r   r   r   ¢   s    zTestConfFeatures.__init__c                 C   s
   dt _d S )NT)r   Zconf_nocacher   r   r   r   rY   ¦   s    zTestConfFeatures._setupc                 C   s2   t  ¡ D ]$\}}|D ]}||dft_tƒ  qqd S )NrN   )Úarch_compilersr%   r   r   r$   )r   r   Z	compilersÚccr   r   r   Útest_features©   s    zTestConfFeatures.test_featuresN)rV   )r    r!   r"   r   rY   r]   r   r   r   r   rU   ¡   s   
rU   )rW   Úosr   r   r    Ú__package__Zis_standaloneÚappendÚabspathrG   ÚdirnameÚ__file__Zccompiler_optr   Znumpy.distutils.ccompiler_optÚdictr[   r   r$   rX   rU   Úmainr   r   r   r   Ú<module>   s*    ù
 