U
    eณe   ใ                   @   sฦ   d Z ddlmZ ddlmZ dd ZedZedZedZd	d
 Z	e
dddZe
dddZe
dddZe
dddZe
dd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 )%a+  
    Helper functions for recipes.

    Recipes must supply a list of patches.

    Patches consist of a filename and an optional conditional, which is
    any function of the form:
        def patch_check(arch: string, recipe : Recipe) -> bool

    This library provides some helpful conditionals and mechanisms to
    join multiple conditionals.

    Example:
        patches = [
            ("linux_or_darwin_only.patch",
             check_any(is_linux, is_darwin),
            ("recent_android_API.patch",
             is_apt_gte(27)),
            ]
้    )ฺuname)ฺVersionc                    s    fdd}|S )zH
    Returns true if the host platform matches the parameter given.
    c                    s   t  j ก   ก kS ฉN)r   ฺsystemฺlowerฉฺarchZrecipeฉฺplatformฉ ๚=/tmp/pip-unpacked-wheel-h4dze4ss/pythonforandroid/patching.pyฺcheck!   s    zis_platform.<locals>.checkr   )r
   r   r   r	   r   ฺis_platform   s    r   ฺLinuxฺDarwinฺWindowsc                    s    fdd}|S )z[
    Returns true if the target architecture platform matches the parameter
    given.
    c                    s
   | j  kS r   ฉr   r   ฉฺxarchr   r   r   2   s    zis_arch.<locals>.checkr   )r   r   r   r   r   ฺis_arch,   s    r   ฉฺapiverc                    s    fdd}|S )Nc                    s   |j j kS r   ฉฺctxZandroid_apir   r   r   r   r   >   s    zis_api.<locals>.checkr   ฉr   r   r   r   r   ฺis_api=   s    r   c                    s    fdd}|S )Nc                    s   |j j kS r   r   r   r   r   r   r   E   s    zis_api_gt.<locals>.checkr   r   r   r   r   ฺ	is_api_gtD   s    r   c                    s    fdd}|S )Nc                    s   |j j kS r   r   r   r   r   r   r   L   s    zis_api_gte.<locals>.checkr   r   r   r   r   ฺ
is_api_gteK   s    r   c                    s    fdd}|S )Nc                    s   |j j k S r   r   r   r   r   r   r   S   s    zis_api_lt.<locals>.checkr   r   r   r   r   ฺ	is_api_ltR   s    r   c                    s    fdd}|S )Nc                    s   |j j kS r   r   r   r   r   r   r   Z   s    zis_api_lte.<locals>.checkr   r   r   r   r   ฺ
is_api_lteY   s    r   c                    s    fdd}|S )z
    Return true if the Minimum Supported Android NDK level being targeted
    is equal the given parameter (which should be an AndroidNDK instance)
    c                    s   |j j kS r   )r   ฺndkr   ฉr    r   r   r   i   s    zis_ndk.<locals>.checkr   )r    r   r   r!   r   ฺis_ndkc   s    r"   c                    s    fdd}|S )z.Return true if the Recipe's version is greaterc                    s   t |jt  kS r   ฉr   ฺversionr   ฉr$   r   r   r   y   s    zis_version_gt.<locals>.checkr   ฉr$   r   r   r%   r   ฺis_version_gtv   s    r'   c                    s    fdd}|S )z0Return true if the Recipe's version is less thanc                    s   t |jt  k S r   r#   r   r%   r   r   r      s    zis_version_lt.<locals>.checkr   r&   r   r%   r   ฺis_version_lt   s    r(   c                    s    fdd}|S )Nc                    s   |j   กS r   )r$   ฺ
startswithr   ฉฺversion_prefixr   r   r      s    z"version_starts_with.<locals>.checkr   )r+   r   r   r*   r   ฺversion_starts_with   s    r,   c                    s    fdd}|S )z[Return true if the recipe with this name is planned to be included in
    the distribution.c                    s    |j jkS r   )r   Zrecipe_build_orderr   ฉฺrecipe_namer   r   r      s    zwill_build.<locals>.checkr   )r.   r   r   r-   r   ฺ
will_build   s    r/   c                     s    fdd}|S )zT
    Given a collection of patch_checks as params, return if all returned true.
    c                    s   t  fddD S )Nc                 3   s   | ]}| V  qd S r   r   ฉฺ.0Zpatch_checkr   r   r   ฺ	<genexpr>ฅ   s     z+check_all.<locals>.check.<locals>.<genexpr>)ฺallr   ฉฺpatch_checksr   r   r   ค   s    zcheck_all.<locals>.checkr   ฉr5   r   r   r4   r   ฺ	check_all   s    r7   c                     s    fdd}|S )zT
    Given a collection of patch_checks as params, return if any returned true.
    c                    s   t  fddD S )Nc                 3   s   | ]}| V  qd S r   r   r0   r   r   r   r2   ฐ   s     z+check_any.<locals>.check.<locals>.<genexpr>)ฺanyr   r4   r   r   r   ฏ   s    zcheck_any.<locals>.checkr   r6   r   r4   r   ฺ	check_anyช   s    r9   N)ฺ__doc__r
   r   Zpackaging.versionr   r   Zis_linuxZ	is_darwinZ
is_windowsr   ฺintr   r   r   r   r   r"   r'   r(   r,   r/   r7   r9   r   r   r   r   ฺ<module>   s&   
		
