a
    §dë%  ã                   @   sú   d dl mZmZmZmZ d dlZd dlZd dlmZ	 d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZdd„ Zddd„Zd	d
„ Zejdddfdd„Zdd„ Zd dd„Zdejfdd„Zdd„ Zdd„ Zejfdd„Zd!dd„Zd"dd„Zdd„ ZdS )#é    )Úabsolute_importÚdivisionÚprint_functionÚwith_statementNc                   C   s   t jdk rt  d¡ d S )Ni  z9Python version 2.6 or greater required to run this script)ÚsysÚ
hexversionÚexit© r	   r	   ú€/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/libtbx/auto_build/installer_utils.pyÚcheck_python_version   s    
r   TFc           
      C   sÊ   |d u rt j}|r&t| tƒr&d | ¡} |r2tj}n|}tj| ||dd |tjdd|d
}|r| 	¡ d u r|j 
¡ }|rZtd| ¡  ƒ | |¡ qZ| ¡  | ¡  | ¡  |j}	|	dkrÆtd| |	f ƒ‚d S )	Nú éÿÿÿÿTF)
ÚargsÚshellÚcwdÚbufsizeÚstdinÚstdoutÚstderrÚuniversal_newlinesÚ	close_fdsÚenvz: r   ú%Call to '%s' failed with exit code %d)r   r   Ú
isinstanceÚlistÚjoinÚ
subprocessÚPIPEÚPopenÚSTDOUTÚpollÚreadlineÚprintÚstripÚwriteÚflushÚwaitÚ
returncodeÚRuntimeError)
r   Úlogr   r   Úverboser   r   ÚpÚlineÚrcr	   r	   r
   Úcall   s<    
ö
r.   c               
   O   sŠ   zt j| dt ji|¤Ž}W nB ty\ } z*|jtjkrFtd| d  ƒ‚‚ W Y d }~n
d }~0 0 | ¡ \}}| ¡ }|r†td| |f ƒ‚|S )Nr   zNo such file or directory (%s)r   r   )	r   r   r   ÚOSErrorÚerrnoÚENOENTÚcommunicater    r(   )Ú	popenargsÚkwargsÚprocessÚexcÚoutputZ
unused_errÚretcoder	   r	   r
   Úcheck_output9   s    r9   c                 C   sB  t j | ¡sJ | ƒ‚d }}|r$d}|r,d}dd||f g}|  d¡rXdd||f g}n|  d¡rrdd	||f g}|| g }t jd
kr˜td |¡|ƒ nt | ¡}	|	 	¡  |	 
¡  t j | ¡ dd¡ dd¡ dd¡ dd¡}
|r>t j |
¡s2t d¡ t j |
¡s2t j |
 ¡ ¡r&|
 ¡ }
ntd|
 ƒ‚t j |
¡S d S )NÚ ÚvÚoÚtarzx%s%sfÚgzzzx%s%sfÚbz2zjx%s%sfÚntr   z.tar.bz2ú.tar.gzz.tgzz.taré   z"Expected directory '%s' not found!)ÚosÚpathÚisfileÚendswithÚnamer.   r   ÚtarfileÚopenÚ
extractallÚcloseÚbasenameÚreplaceÚisdirÚtimeÚsleepÚ
capitalizer(   Úabspath)Zpkg_namer)   r*   Zchange_ownershipZcheck_output_pathZverbose_flagZ
owner_flagÚcmdr   r=   Údir_namer	   r	   r
   ÚuntarG   sF    




ÿþýü

rU   c                  C   s(   t  ¡ } | d }| d¡\}}}t|ƒS )Né   Ú.)rC   ÚunameÚsplitÚint)rX   ÚversionÚmajorÚminorZrevr	   r	   r
   Údetect_osx_versionr   s    r^   c              	   C   s²   t j | ¡sJ ‚t| dƒH}t|dƒ}| | ¡ ¡ W d   ƒ n1 sJ0    Y  W d   ƒ n1 sh0    Y  t  | t j¡s„|r®t  |¡j	}t  
||tjB tjB tjB ¡ d S )NÚrbÚwb)rC   rD   rE   rI   r$   ÚreadÚaccessÚX_OKÚstatÚst_modeÚchmodÚS_IXUSRÚS_IXGRPÚS_IXOTH)Úsrc_pathÚ	dest_pathÚ
executableÚfiÚfoÚmoder	   r	   r
   Ú	copy_filex   s    Jrp   c                 C   s  t jdkrtj| |ddS tj | ¡s.J | ƒ‚tj |¡rBJ |ƒ‚|rVtd| |d t 	|¡ t 
| ¡D ] }tj | |¡}tj ||¡}tj |¡r®t |¡}t ||¡ qjtj |¡rÞ|rÒtd||f |d t||ƒ qjtj |¡röt||ƒ qj|rjtd| |d qjd S )Ni T)Úsymlinkszcreating %s©Úfilez  copy %s -> %sz  skipping %s)r   r   ÚshutilÚcopytreerC   rD   rN   Úexistsr"   ÚmakedirsÚlistdirr   ÚislinkÚreadlinkÚsymlinkrE   rp   Ú	copy_tree)rj   rk   r*   r)   Z	path_nameZnode_src_pathZnode_dest_pathZtarget_pathr	   r	   r
   r|   †   s*    


r|   c                  C   sV   t  ¡ } | d }| d dkrRt ¡ \}}}d | d¡d d… ¡}|sNJ dƒ‚|S |S )NrV   r   ÚDarwinrW   zCould not determine OSX version)rC   rX   ÚplatformÚmac_verr   rY   )rX   Zkernel_versionÚreleaseÚ_Zrelease_majorr	   r	   r
   Úget_os_version   s    r‚   c                  C   s¾   t jdkr.d} t ¡ \}}|dkr*| d7 } | S t ¡ }|d dkrHd} n|d dkrZd	} n|d } |d
 dkrx| d7 } nB| d	krº|d  d¡}t|d ƒ}|dkrª| d7 } |dkrº| d7 } | S )NÚwin32zintel-windowsÚ64bitz-x86_64r   ÚLinuxzintel-linux-2.6r}   zmac-intel-osxr   Zx86_64rV   rW   é
   é   z-10.9)r   r~   ÚarchitecturerC   rX   rY   rZ   )ÚmtypeZarchZos_typerX   Zversion_fieldsÚmajor_versionr	   r	   r
   Úmachine_type©   s,    

r‹   c                 C   sÎ   t  ¡ }t  | ¡ t  | ¡D ]¬}t | |¡}t |¡rt |¡}t ||g¡}t 	||¡}t 	||¡}dd„ t 
|¡D ƒdd… }	|	r’tj|	Ž }
nd}
t |
|¡}td| |d t  |¡ t  ||¡ qdS )z½
  Rewrite all symlinks in a directory with relative paths (allows later
  relocation).  This is mostly just for Mac OS where there are a lot of links
  into the Python.framework bundle.
  c                 S   s   g | ]}d ‘qS )z..r	   )Ú.0Údr	   r	   r
   Ú
<listcomp>Ò   ó    z0regenerate_relative_symlinks.<locals>.<listcomp>rB   NrW   z  creating symlink to %srr   )rC   ÚgetcwdÚchdirrx   Úopr   ry   ÚrealpathÚcommonprefixÚrelpathrY   r"   Úremover{   )rT   r)   Zold_cwdÚ	file_nameÚ	full_pathZ	real_pathÚprefixZrel_path_linkZrel_path_targetZparent_dirsZ
parent_dirÚnew_pathr	   r	   r
   Úregenerate_relative_symlinksÂ   s"    



r›   c           
      C   sª   g }t  | ¡D ]–\}}}|D ],}||krt ||¡}t |¡ | |¡ q|D ]T}	t ||	¡}|	|kr|t  |¡ | |¡ qN|durN|	 |¡rNt  |¡ | |¡ qNq|S )zË
  Recursively walk through a directory and delete any files (or directories)
  with the specified file name or extension.  Effectively equivalent to
  running 'find . -name "PATTERN" | xargs rm -rf'.
  N)	rC   Úwalkr’   r   rt   ÚrmtreeÚappendr–   rF   )
rT   r—   Úfile_extZdeletedÚdirnameÚdirnamesÚ	filenamesÚdnr˜   Úfnr	   r	   r
   Úfind_and_delete_filesÜ   s     


r¥   c              
   C   sf  t  | ¡} t  | ¡r | t ¡ ks$J ‚t  | ¡}t  t ¡ |¡}|rPt | |¡ n
t	| |ƒ t  
t  |d¡¡r´ztd||f tjd W n, ty² } zt|ƒ W Y d}~n
d}~0 0 t|dd t|dd t|dd t|dd	 t|d
d	 t|dd	 |rVt d| d¡}| |¡ | ¡  t  t ¡ |d ¡}t  |¡sHJ ‚t |¡ |S t  t ¡ |¡S )za
  Create a clean copy of a source repository, optionally bundling it as a
  gzipped tar file.
  z.svnzsvnversion %s > %s/.svnversion©r)   Nz.pyc)rŸ   z.pyoz.swp)r—   z.gitz	.sconsignz	%s.tar.gzzw:gzrA   )r’   rR   rN   rC   r   rL   r   rt   ru   r|   rv   r.   r   r   r(   r"   r¥   rH   rI   ÚaddrK   rE   r   )rT   Zcreate_tarfileZ
use_shutilZmodule_nameZ
local_pathÚer=   Ztar_filer	   r	   r
   Úarchive_distó   s:    


ÿ


r©   c              
   C   sl   t  | ¡D ]\\}}}|D ]L}t ||¡}| d¡rt |¡rztd| |d W q tyb   Y q0 qq
d S )Nz.sozstrip %sr¦   )rC   rœ   r’   r   rF   rE   r.   r(   )rT   r)   r    r¡   r¢   r¤   r˜   r	   r	   r
   Ú
strip_libs  s    rª   )NTNFN)N)NN)TT)Ú
__future__r   r   r   r   r0   rC   Zos.pathrD   r’   r~   rt   rd   r   r   rH   rO   r   r.   r9   r   rU   r^   rp   r|   r‚   r‹   r›   r¥   r©   rª   r	   r	   r	   r
   Ú<module>   s2   
%ÿ
+


%