U
    ee                      @   s  d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
 dZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdd Zdd ZdZdZdZdZdd ZdZdZ d!eZ"dZ#dd  Z$d!Z%d"Z&ed#j!e%e&d$Z'd%j!e'd&Z(d'j!ej)j*ej)j+e'd(Z,d)d* Z-d+d, Z.dS )-z2Simple functions for checking dependency versions.    N)LooseVersion)join)infowarning)BuildInterruptingException   Z25bz,https://developer.android.com/ndk/downloads/z-Newer NDKs may not be fully supported by p4a.zECould not determine NDK version, no source.properties in the NDK dir.zECould not parse $NDK_DIR/source.properties, not checking NDK version.zBUnable to read the NDK version from the given directory {ndk_dir}.zMake sure your NDK version is greater than {min_supported}. If you get build errors, download the recommended NDK {rec_version} from {ndk_url}.zYThe minimum supported NDK version is {min_supported}. You can download it from {ndk_url}.zzAsked to build for armeabi architecture with API {req_ndk_api}, but API {max_ndk_api} or greater does not support armeabi.zFound NDK version {ndk_version}zZMaximum recommended NDK version is {recommended_ndk_version}, but newer versions may work.c                 C   s   t | }|dkr8ttj| d ttjtttd dS ddi}|dd t	t
tdtdd	 D  |jd }||jd
  }dj||d}ttj|d |tk rttjttddjttddn |tkrttjtd tt dS )a  
    Check the NDK version against what is currently recommended and raise an
    exception of :class:`~pythonforandroid.util.BuildInterruptingException` in
    case that the user tries to use an NDK lower than minimum supported,
    specified via attribute `MIN_NDK_VERSION`.

    .. versionchanged:: 2019.06.06.1.dev0
        Added the ability to get android's NDK `letter version` and also
        rewrote to raise an exception in case that an NDK version lower than
        the minimum supported is detected.
    N)ndk_dir)min_supportedrec_versionndk_urlr    c                 S   s   i | ]\}}|d  t |qS )   )chr).0ni r   D/tmp/pip-unpacked-wheel-h4dze4ss/pythonforandroid/recommendations.py
<dictcomp>R   s      z%check_ndk_version.<locals>.<dictcomp>br   r   z{major_version}{letter_version})major_versionletter_version)ndk_version)r	   r   zPlease, go to the android NDK page ({ndk_url}) and download a supported version.
*** The currently recommended NDK version is {rec_version} ***)r   r
   Zinstructions)Zrecommended_ndk_version)read_ndk_versionr   READ_ERROR_NDK_MESSAGEformatENSURE_RIGHT_NDK_MESSAGEMIN_NDK_VERSIONRECOMMENDED_NDK_VERSIONNDK_DOWNLOAD_URLupdate	enumeraterangeordversionr   CURRENT_NDK_VERSION_MESSAGEr    NDK_LOWER_THAN_SUPPORTED_MESSAGEMAX_NDK_VERSIONRECOMMENDED_NDK_VERSION_MESSAGENEW_NDK_MESSAGE)r   r%   Zminor_to_letterr   r   Zstring_versionr   r   r   check_ndk_version2   sP    "
  r+   c              	   C   s   z&t t| d}| }W 5 Q R X W n tk
rD   tt Y dS X |dD ]}|drP qpqPtt dS t	|dd 
 }|S )z2Read the NDK version from the NDK dir, if possiblezsource.propertiesN
zPkg.Revision=)openr   readIOErrorr   UNKNOWN_NDK_MESSAGEsplit
startswithPARSE_ERROR_NDK_MESSAGEr   strip)r   ZfilehZndk_dataliner   r   r   r   r   t   s    
r      !      zTarget APIs lower than 30 are no longer supported on Google Play, and are not recommended. Note that the Target API can be higher than your device Android version, and should usually be as high as possible.c                 C   sJ   | t kr&|dkr&ttj| t ddd| tk rFtd| t tt dS )zVWarn if the user's target API is less than the current minimum
    recommendation
    Zarmeabi)Zreq_ndk_apiZmax_ndk_apiz:You probably want to build with --arch=armeabi-v7a insteadr   zTarget API {} < {}N)ARMEABI_MAX_TARGET_APIr   'UNSUPPORTED_NDK_API_FOR_ARMEABI_MESSAGEr   MIN_TARGET_APIr   OLD_API_MESSAGE)apiarchr   r   r   check_target_api   s     rA   z%NDK API less than {} is not supportedzNTarget NDK API is {ndk_api}, higher than the target Android API {android_api}.c                 C   s2   | |krt tj| |ddd| tk r.tt dS )z*Warn if the user's NDK is too high or low.Zndk_apiZandroid_apiz[The NDK API is a minimum supported API number and must be lower than the target Android APIr   N)r   .TARGET_NDK_API_GREATER_THAN_TARGET_API_MESSAGEr   MIN_NDK_APIr   OLD_NDK_API_MESSAGErB   r   r   r   check_ndk_api   s     rF         z{major}.{minor})majorminorzpython-for-android no longer supports running under Python 2. Either upgrade to Python {min_version} or higher (recommended), or revert to python-for-android 2019.07.08.)min_versionzYour Python version {user_major}.{user_minor} is not supported by python-for-android, please upgrade to {min_version} or higher.)Z
user_majorZ
user_minorrK   c                   C   s8   t jjdkrttt jjtk s,t jjtk r4ttd S )N   )	sysversion_inforI   r   PY2_ERROR_TEXTMIN_PYTHON_MAJOR_VERSIONrJ   MIN_PYTHON_MINOR_VERSIONPY_VERSION_ERROR_TEXTr   r   r   r   check_python_version   s    

rS   c                   C   sX   t dt t dt t dt t dt t dt t dt dS )zS
    Print the main recommended dependency versions as simple key-value pairs.
    zMin supported NDK version: {}zRecommended NDK version: {}zMin target API: {}zRecommended target API: {}zMin NDK API: {}zRecommended NDK API: {}N)printr   r   r   r=   RECOMMENDED_TARGET_APIrD   RECOMMENDED_NDK_APIr   r   r   r   print_recommendations   s    rW   )/__doc__rM   Zdistutils.versionr   os.pathr   Zpythonforandroid.loggerr   r   Zpythonforandroid.utilr   r   r(   r   r    r*   r2   r5   r   r   r'   r<   r&   r)   r+   r   r=   rU   r;   r>   rA   rD   rV   r   rE   rC   rF   rP   rQ   ZMIN_PYTHON_VERSIONrO   rN   rI   rJ   rR   rS   rW   r   r   r   r   <module>   sr   B
	