U
    ee3                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
 G dd deZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZdddZdd Zedkre  dS )    N)infowarningerror)
ensure_dirc                   @   s   e Zd ZdZ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d Zdd Zdd Zdd Zdd Zd&ddZdd  Zd!d" Zed#d$ Zd%S )'PrerequisiteZDefault Flinuxdarwinc                 C   sT   |   rtd| j d dS | jtj s>td| j d ntd| j d d S )NzPrerequisite z is met)Tr   z+ is not met, but is marked as non-mandatoryz is not met)checkerr   name	mandatorysysplatformr   r   self r   B/tmp/pip-unpacked-wheel-h4dze4ss/pythonforandroid/prerequisites.pyis_valid   s    zPrerequisite.is_validc                 C   s0   t jdkr|  S t jdkr$|  S tdd S Nr
   r	   Unsupported platform)r   r   darwin_checkerlinux_checker	Exceptionr   r   r   r   r      s
    

zPrerequisite.checkerc                 C   sJ   t jdddkr:td| j d}| dkr4dS dS ntd dS d S )	NZ2PYTHONFORANDROID_PREREQUISITES_INSTALL_INTERACTIVE1z/Do you want automatically install prerequisite z? [y/N] yTFz`Session is not interactive (usually this happens during a CI run), so let's consider it as a YES)osenvirongetinputr   lowerr   )r   resr   r   r   ask_to_install&   s    zPrerequisite.ask_to_installc                 C   s`   t d| j  |  rJtjdkr,|   q\tjdkr@|   q\tdnt d| j d d S )Nz;python-for-android can automatically install prerequisite: r
   r	   r   z&Skipping installation of prerequisite z as per user request)r   r   r"   r   r   darwin_installerlinux_installerr   r   r   r   r   install8   s    




zPrerequisite.installc                 C   s4   t jdkr|   nt jdkr(|   ntdd S r   )r   r   darwin_helperlinux_helperr   r   r   r   r   show_helperF   s
    



zPrerequisite.show_helperc                 C   s   | j tj S )N)installer_is_supportedr   r   r   r   r   r   install_is_supportedN   s    z!Prerequisite.install_is_supportedc                 C   s   t d| j d S )Nz,Unsupported prerequisite check on linux for r   r   r   r   r   r   r   Q   s    zPrerequisite.linux_checkerc                 C   s   t d| j d S )Nz,Unsupported prerequisite check on macOS for r+   r   r   r   r   r   T   s    zPrerequisite.darwin_checkerc                 C   s   t d| j d S )Nz0Unsupported prerequisite installer on linux for r+   r   r   r   r   r$   W   s    zPrerequisite.linux_installerc                 C   s   t d| j d S )Nz0Unsupported prerequisite installer on macOS for r+   r   r   r   r   r#   Z   s    zPrerequisite.darwin_installerc                 C   s   t d| j d d S )N&No helper available for prerequisite: z	 on macOSr   r   r   r   r   r   r&   ]   s    zPrerequisite.darwin_helperc                 C   s   t d| j d d S )Nr,   z	 on linuxr-   r   r   r   r   r'   `   s    zPrerequisite.linux_helperc                 C   sj   |r
dgng }t jdd|f|t jt jd}| \}}|jdkrXt|d  d S |d S d S )Nz--installedbrewz--prefixstdoutstderrr   zutf-8)
subprocessPopenPIPEcommunicate
returncoder   decodestrip)r   Zformula	installedoptsp_stdout_res_stderr_resr   r   r   (_darwin_get_brew_formula_location_prefixc   s    
z5Prerequisite._darwin_get_brew_formula_location_prefixc                 C   s   t d| j  dS )Nz@pkg-config location is not supported on macOS for prerequisite: r   r   r   r   r   r   r   darwin_pkg_config_locationr   s    
z'Prerequisite.darwin_pkg_config_locationc                 C   s   t d| j  dS )Nz@pkg-config location is not supported on linux for prerequisite: r   r?   r   r   r   r   linux_pkg_config_locationx   s    
z&Prerequisite.linux_pkg_config_locationc                 C   s(   t jdkr|  S t jdkr$|  S d S )Nr
   r	   )r   r   r@   rA   r   r   r   r   pkg_config_location~   s    

z Prerequisite.pkg_config_locationN)F)__name__
__module____qualname__r   homebrew_formula_namedictr   r)   r   r   r"   r%   r(   r*   r   r   r$   r#   r&   r'   r>   r@   rA   propertyrB   r   r   r   r   r      s*   
r   c                   @   s8   e Zd ZdZedddZedddZdd Zdd Zd	S )
HomebrewPrerequisiteZhomebrewFTr   c                 C   s   t dd k	S )Nr.   )shutilwhichr   r   r   r   r      s    z#HomebrewPrerequisite.darwin_checkerc                 C   s   t d d S )NzInstaller for homebrew is not yet supported on macOS,the nice news is that the installation process is easy!See: https://brew.sh for further instructions.r   r   r   r   r   r&      s    z"HomebrewPrerequisite.darwin_helperN)	rC   rD   rE   r   rG   r   r)   r   r&   r   r   r   r   rI      s
   rI   c                   @   sV   e Zd ZdZedddZedddZdZdd Zdd	d
Z	dd Z
dd Zdd ZdS )JDKPrerequisiteZJDKFTr      c                 C   s4   dt jkrtd t jd }n| jd d}| |S )N	JAVA_HOMEz.Found JAVA_HOME environment variable, using itversion)r   r   r   _darwin_get_libexec_jdk_path_darwin_jdk_is_supported)r   jdk_pathr   r   r   r      s
    
zJDKPrerequisite.darwin_checkerNc                 C   s2   g }|d k	rd|g}t jd|t jdj  S )Nz-v/usr/libexec/java_home)r0   )rU   )r2   runr4   r0   r8   r7   )r   rQ   Zversion_argsr   r   r   rR      s    z,JDKPrerequisite._darwin_get_libexec_jdk_pathc                 C   s   |sdS t j|dd}t j|s(dS tj|dgtjtjd}| \}}|jdkrbt	d dS |sj|}|
  }t|dd	 d
d }|| jkrtd|  dS t	d| j d dS d S )NFbinZjavacz-versionr/   r   z(Failed to run javac to check JDK version .zFound a valid JDK at TzJDK z or higher is required)r   pathjoinexistsr2   r3   r4   r5   r6   r   r8   r7   intsplitmin_supported_versionr   )r   rT   Z	javac_binr;   r<   r=   r!   major_versionr   r   r   rS      s.      

z(JDKPrerequisite._darwin_jdk_is_supportedc                 C   s   t d t d t d d S )Nztpython-for-android requires a JDK 11 or higher to be installed on macOS,but seems like you don't have one installed.zIf you think that a valid JDK is already installed, please verify that you have a JDK 11 or higher installed and that `/usr/libexec/java_home` shows the correct path.zIf you have multiple JDK installations, please make sure that you have `JAVA_HOME` environment variable set to the correct JDK installation.rL   r   r   r   r   r&      s    zJDKPrerequisite.darwin_helperc                 C   s   t d | jdd}| |st d d}t dkr<d}nd}t d	| d
|  tdd| | dd| g tj	d}t d| d|  t
| tddd| d|g | jdd}t d|  |tjd< d S )NzLLooking for a JDK 11 or higher installation which is not the default one ...z11+rP   zAWe're unlucky, there's no JDK 11 or higher installation availablezPhttps://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/Zarm64z2OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.2_8.tar.gzz.OpenJDK17U-jdk_x64_mac_hotspot_17.0.2_8.tar.gzzDownloading z from Zcurlz-Lz-oz/tmp/z"~/Library/Java/JavaVirtualMachineszExtracting z to tarZxzfz-Cz17.0.2+8zSetting JAVA_HOME to rO   )r   rR   rS   r   machiner2   check_outputr   r[   
expanduserr   r   )r   rT   base_urlfilenameZuser_library_java_pathr   r   r   r#      s<    


z JDKPrerequisite.darwin_installer)N)rC   rD   rE   r   rG   r   r)   r`   r   rR   rS   r&   r#   r   r   r   r   rM      s   
rM   c                   @   sD   e Zd ZdZdZedddZedddZdd Zdd	 Z	d
d Z
dS )OpenSSLPrerequisiteZopensslzopenssl@1.1FTr   c                 C   s   | j | jddd k	S )NTr9   )r>   rF   r   r   r   r   r     s     z"OpenSSLPrerequisite.darwin_checkerc                 C   s   t j| | jdS )Nzlib/pkgconfig)r   r[   r\   r>   rF   r   r   r   r   r@     s    
z.OpenSSLPrerequisite.darwin_pkg_config_locationc                 C   s   t d tdd| jg d S )NzInstalling OpenSSL ...r.   r%   )r   r2   rd   rF   r   r   r   r   r#     s    z$OpenSSLPrerequisite.darwin_installerN)rC   rD   rE   r   rF   rG   r   r)   r   r@   r#   r   r   r   r   rh     s   rh   c                   @   s8   e Zd ZdZedddZedddZdd Zdd Zd	S )
AutoconfPrerequisiteautoconfFTr   c                 C   s   | j dddd k	S )Nrk   Tri   r>   r   r   r   r   r   %  s    z#AutoconfPrerequisite.darwin_checkerc                 C   s   t d tdddg d S )NzInstalling Autoconf ...r.   r%   rk   r   r2   rd   r   r   r   r   r#   +  s    z%AutoconfPrerequisite.darwin_installerN	rC   rD   rE   r   rG   r   r)   r   r#   r   r   r   r   rj      s
   rj   c                   @   s8   e Zd ZdZedddZedddZdd Zdd Zd	S )
AutomakePrerequisiteautomakeFTr   c                 C   s   | j dddd k	S )Nrp   Tri   rl   r   r   r   r   r   5  s    z#AutomakePrerequisite.darwin_checkerc                 C   s   t d tdddg d S )NzInstalling Automake ...r.   r%   rp   rm   r   r   r   r   r#   ;  s    z%AutomakePrerequisite.darwin_installerNrn   r   r   r   r   ro   0  s
   ro   c                   @   s8   e Zd ZdZedddZedddZdd Zdd Zd	S )
LibtoolPrerequisitelibtoolFTr   c                 C   s   | j dddd k	S )Nrr   Tri   rl   r   r   r   r   r   E  s    z"LibtoolPrerequisite.darwin_checkerc                 C   s   t d tdddg d S )NzInstalling Libtool ...r.   r%   rr   rm   r   r   r   r   r#   K  s    z$LibtoolPrerequisite.darwin_installerNrn   r   r   r   r   rq   @  s
   rq   c                   @   s8   e Zd ZdZedddZedddZdd Zdd Zd	S )
PkgConfigPrerequisite
pkg-configFTr   c                 C   s   | j dddd k	S )Nrt   Tri   rl   r   r   r   r   r   U  s    z$PkgConfigPrerequisite.darwin_checkerc                 C   s   t d tdddg d S )NzInstalling Pkg-Config ...r.   r%   rt   rm   r   r   r   r   r#   [  s    z&PkgConfigPrerequisite.darwin_installerNrn   r   r   r   r   rs   P  s
   rs   c                   @   s8   e Zd ZdZedddZedddZdd Zdd Zd	S )
CmakePrerequisitecmakeFTr   c                 C   s   | j dddd k	S )Nrv   Tri   rl   r   r   r   r   r   e  s    z CmakePrerequisite.darwin_checkerc                 C   s   t d tdddg d S )NzInstalling cmake ...r.   r%   rv   rm   r   r   r   r   r#   k  s    z"CmakePrerequisite.darwin_installerNrn   r   r   r   r   ru   `  s
   ru   r	   c              	      s"    fddt tttttttfD S )Nc                    s    g | ]}|j  d r| qS )F)r   r   ).0Zprerequisite_clsr   r   r   
<listcomp>q  s   	z.get_required_prerequisites.<locals>.<listcomp>)rI   rj   ro   rq   rs   ru   rh   rM   rx   r   rx   r   get_required_prerequisitesp  s    
rz   c                  C   s\   g } t d t d ttjD ]}| s| | q| D ]}|  | r:|  q:d S )NzLprerequisites.py is experimental and does not support all prerequisites yet.zAPlease report any issues to the python-for-android issue tracker.)	r   rz   r   r   r   appendr(   r*   r%   )Zprerequisites_not_metZprerequisiter   r   r   'check_and_install_default_prerequisites  s    r|   __main__)r	   )r   r   rJ   r2   r   Zpythonforandroid.loggerr   r   r   Zpythonforandroid.utilr   objectr   rI   rM   rh   rj   ro   rq   rs   ru   rz   r|   rC   r   r   r   r   <module>   s&   yq
