U
    |’“eù!  ã                   @   sn   d Z ddlZejdkredƒ‚ddlmZ ddlmZmZm	Z	m
Z
 ddlmZmZ G dd	„ d	eƒZd
d„ ZdS )z(
OSX target, based on kivy-sdk-packager
é    NÚdarwinzThis will only work on osx)ÚTarget)ÚexistsÚjoinÚabspathÚdirname)Ú
check_callÚcheck_outputc                   @   s¬   e Zd ZdZdd„ Zd*dd„Zdd„ Zd	d
„ Z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'„ Zd(d)„ ZdS ),Ú	TargetOSXÚosxc                 C   st   | j  d¡ tt| j jdƒƒr8| j  d | j j¡¡ d S | j  d¡ | j j}td|d td|d td|d d S )	Nz!Check if kivy-sdk-packager existsúkivy-sdk-packager-masterzkivy-sdk-packager found at {}z*kivy-sdk-packager does not exist, clone it)Úcurlz-Oú-Lz<https://github.com/kivy/kivy-sdk-packager/archive/master.zip©Úcwd)Zunzipú
master.zip)Úrmr   )Ú	buildozerÚinfor   r   Úplatform_dirÚformatr   )ÚselfZplatdir© r   ú9/tmp/pip-unpacked-wheel-ohd2lbr1/buildozer/targets/osx.pyÚ
ensure_sdk   s$    ÿÿÿýzTargetOSX.ensure_sdké   c                 C   sø   | j j dd¡}td |¡ƒrF| j  d¡ tddd |¡df|d n®tt|d	 |¡ƒƒsÄ| j  d
¡ tdddddd	 |¡d |||¡f|d}|dkrÄ| j  	d¡ tdd	 |¡f|d t
 d¡ | j  d¡ tdd|d |¡ fƒ td|d d S )NÚappzosx.kivy_versionz/Applications/Kivy{}.appz!Kivy found in Applications dir...Úcpú-aúKivy.appr   z
Kivy{}.dmgzDownloading kivy...r   r   z--write-outz%{http_code}z-oz6https://kivy.org/downloads/{}/Kivy-{}-osx-python{}.dmgZ404z“Unable to download the Kivy App. Check osx.kivy_version in your buildozer.spec, and verify Kivy servers are accessible. https://kivy.org/downloads/r   é   z!Extracting and installing Kivy...ZhdiutilÚattachz/Kivy{}.dmg)r   r   z/Volumes/Kivy/Kivy.appz
./Kivy.app)r   ÚconfigÚgetr   r   r   r   r   r	   ÚerrorÚsysÚexit)r   r   Ú	py_branchZcurrent_kivy_versÚstatus_coder   r   r   Údownload_kivy#   s<    ÿþ  ÿÿüÿ
zTargetOSX.download_kivyc                 C   s~   | j  d¡ t| j jddƒ}| j j dd¡}t|ƒdkrN| j  d¡ t 	d¡ t
t|d	ƒƒrn| j  d
| ¡ n|  ||¡ d S )Nz%check if Kivy.app exists in local dirr   r   r   zosx.python_version)r   é   z'incompatible python version... abortingr    r   zKivy.app found at )r   r   r   r   r"   r#   Úintr$   r%   r&   r   r)   )r   Zkivy_app_dirr'   r   r   r   Úensure_kivyapp@   s    
zTargetOSX.ensure_kivyappc                 C   s   |   ¡  |  ¡  d S ©N)r   r,   ©r   r   r   r   Úcheck_requirementsO   s    zTargetOSX.check_requirementsNc                 C   sF   |rB| j  d¡ | j  d t|ƒ¡¡ |D ]}t|ƒ q*t d¡ d S )Nz!Check target configuration tokensz({0} error(s) found in the buildozer.specr    )r   r   r$   r   ÚlenÚprintr%   r&   )r   Úerrorsr$   r   r   r   Úcheck_configuration_tokensS   s    ÿÿ
z$TargetOSX.check_configuration_tokensc              
   C   sØ  | j  d¡ | j j}|j}|ddƒ}|ddƒ}|ddƒ}tdƒ ¡ }| ddd¡}| j  ¡ }| dd	d¡}	| j  d
 |¡¡ t	| j j
ddƒ}
dd„ | d¡D ƒ}ddddg}| |¡ t||
d dd| j jd |¡d |¡d |¡d |¡d |¡g}|r| d |¡¡ |	r$| d |	¡¡ t||
d | j  d |¡¡ | j  d |¡¡ td d!d"|d# f|
d | j  d$ |¡¡ | j  d% |¡¡ t	| j jpªtt| j jƒƒd&ƒ}td'd(|d) |f|
d | j  d*¡ d S )+NzBuilding packager   zpackage.namezpackage.domainÚtitlezrequirements.txtzicon.filenameÚ ÚauthorzCreate {}.appr   r   c                 S   s"   g | ]}|  d ¡s|dkr|‘qS )ú#)Úkivyr5   )Ú
startswith)Ú.0Úar   r   r   Ú
<listcomp>n   s     
  z+TargetOSX.build_package.<locals>.<listcomp>Ú
z"Kivy.app/Contents/Resources/scriptz-mÚpipÚinstallr   Úpythonzpackage_app.pyz--appname={}z--bundlename={}z--bundleid={}z--bundleversion={}z--displayname={}z	--icon={}z--author={}z{}.app created.zCreating {}.dmgÚshz-xzcreate-osx-dmg.shz.appz{}.dmg createdzmoving {}.dmg to bin.Úbinr   r   z.dmgz	All Done!)r   r   r"   r#   ÚopenÚreadZ
getdefaultÚget_versionr   r   r   ÚsplitÚextendr	   Zapp_dirÚappendZuser_build_dirr   r   Zspecfilename)r   ZbcZbcgÚpackage_nameÚdomainr4   Zapp_depsZiconÚversionr6   r   ÚcmdZbinpathr   r   r   Úbuild_package^   sh    



  þ
  úþ
 þþzTargetOSX.build_packagec                 C   s   d S r-   r   r.   r   r   r   Úcompile_platform•   s    zTargetOSX.compile_platformc                 C   s"   |   ¡  | jj d| jji¡ d S )NZPACKAGES_PATH)r3   r   ÚenvironÚupdateZglobal_packages_dirr.   r   r   r   Úinstall_platform˜   s
     ÿzTargetOSX.install_platformc                 C   sV   g }t | ƒD ]D}| d¡sq|dd … | jjkr2q| |dd … t| |ƒjf¡ q|S )NZcmd_é   )Údirr9   r   Zstandard_cmdsrH   ÚgetattrÚ__doc__)r   ÚresultÚxr   r   r   Úget_custom_commands¡   s    
 zTargetOSX.get_custom_commandsc                 C   s   dgS )Nr8   r   r.   r   r   r   Úget_available_packages«   s    z TargetOSX.get_available_packagesc           
      C   s*  |s$| j  d¡ | j  ¡  t d¡ g }g }|D ]Z}| d¡s\|rP| |¡ g }| |¡ q0|s€| j  d¡ | j  ¡  t d¡ | |¡ q0|rš| |¡ d}|D ]‚}|d |dd …  }}t| d |¡ƒsè| j  d |¡¡ t d¡ t	| d |¡ƒ}t|d	ƒ }	|	r|sd
}|  
¡  ||ƒ q¢d S )NzMissing target commandr    z--z!Argument passed without a commandFr   zcmd_{0}zUnknown command {0}Z__no_configT)r   r$   Úusager%   r&   r9   rH   Úhasattrr   rT   r3   )
r   ÚargsrV   Zlast_commandÚargZconfig_checkÚitemÚcommandÚfuncZneed_config_checkr   r   r   Úrun_commands®   s>    







zTargetOSX.run_commandsc                 C   s
   d| _ d S )NF)Z_build_preparedr.   r   r   r   Úcheck_build_preparedÖ   s    zTargetOSX.check_build_preparedc                 G   s   | j  ¡  d S r-   )r   Zclean_platform©r   r\   r   r   r   Ú	cmd_cleanÙ   s    zTargetOSX.cmd_cleanc                 G   s   d| _ | j ¡  d S )NT)Zplatform_updater   Úprepare_for_buildrc   r   r   r   Ú
cmd_updateÜ   s    zTargetOSX.cmd_updatec                 G   s&   | j  ¡  d| _|  ¡  | j  ¡  d S )NÚdebug)r   re   Ú
build_moderb   Úbuildrc   r   r   r   Ú	cmd_debugà   s    
zTargetOSX.cmd_debugc                 G   s   | j  ¡  d| _| j  ¡  d S )NÚrelease)r   re   rh   ri   rc   r   r   r   Úcmd_releaseæ   s    
zTargetOSX.cmd_releasec                 G   s   | j  ¡  d S r-   ©r   re   rc   r   r   r   Ú
cmd_deployë   s    zTargetOSX.cmd_deployc                 G   s   | j  ¡  d S r-   rm   rc   r   r   r   Úcmd_runî   s    zTargetOSX.cmd_runc                 G   s   | j  ¡  d S r-   )r   Ú	cmd_serverc   r   r   r   rp   ñ   s    zTargetOSX.cmd_serve)r   )N)Ú__name__Ú
__module__Ú__qualname__Z
targetnamer   r)   r,   r/   r3   rM   rN   rQ   rX   rY   ra   rb   rd   rf   rj   rl   rn   ro   rp   r   r   r   r   r
      s(   

7	
(r
   c                 C   s   t | ƒS r-   )r
   )r   r   r   r   Ú
get_targetõ   s    rt   )rU   r%   ÚplatformÚNotImplementedErrorZbuildozer.targetr   Úos.pathr   r   r   r   Ú
subprocessr   r	   r
   rt   r   r   r   r   Ú<module>   s   
 h