
U]r)                 @   s   d  d l  Z  d  d l m Z m Z d  d l m Z m Z m Z d  d l m	 Z	 m
 Z
 m Z m Z e  j d  Z Gd d   d  Z d S)    N)makedirschmod)existsjoindirname)DEPENDS_SUBSTVARSPKG_NAME_TPLSRT_LOCATIONSRT_TPLSdhpythonc               @   sy   e  Z d  Z 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 S)	DebHelperz>Reinvents the wheel / some dh functionality (Perl is ugly ;-P)cpython3c             C   s  | |  _  i  |  _ d  |  _ d } d  } | |  _ t   } x3 t j   D]% \ } } | | k rF | j |  qF Wt |  } t	 | } | j
 }	 | j }
 y t d d d d } Wn t k
 r t d   Yn Xx| D]} | j d  r q | j   sd } d  } d } q | j   } | r| |  j k r5q | j d	  rn| d
 d   j   } | |  j | d <q | j t |  s| j d  r| | k rq d } q| r| j d$  sd } t j d | |  |  j | =q| | k rd  } q | j d  r| d d   j   } | rE| j |  rEt j d |  q |	 rZ| |	 k rZq |
 ro| |
 k roq d i  d i  d g  d d i |  j | <q | j d  r| d d   j   |  _ q | r&|  j d k r&| j d  r&| d d   |  _ t |  j j d   d k rt d   q | r |  j d k r | j d   rl|  j sl| d d   j   |  _ | j d!  r | d" d   j   |  _ q W| j   t j d# |  j t |  j j     d  S)%NTzdebian/controlrencodingzutf-8zcannot find debian/control file#Fzarchitecture:   archzdepends: 	z+skipping package %s (missing %s in Depends)zpackage:   zskipping package: %s	substvarsautoscripts	rtupdatesanyzsource:   r   zx-python3-version:   ,   zDtoo many arguments provided for X-Python3-Version: min and max only.Zcpython2zxs-python-version:zx-python-version:   zsource=%s, binary packages=%s)r   r   )optionspackagesZpython_versionimplsetr   itemsupdatetupler   packageZ
no_packageopenIOError	Exception
startswithstriplowerlogdebugZsource_namelensplit
ValueErrorcloselistkeys)selfr   r!   Zsource_sectionZbinary_packageZskip_tplnameZtplsZsubstvarZpkgsZ	skip_pkgsfplineZinside_depends_fieldZline_lr    r9   */usr/share/dh-python/dhpython/debhelper.py__init__    s    					
				
	$	
zDebHelper.__init__c             C   s(   |  j  | d j | g   j |  d S)zdebhelper's addsubstvarr   N)r    
setdefaultappend)r5   r&   r6   valuer9   r9   r:   addsubstvarw   s    zDebHelper.addsubstvarc             C   s4   |  j  | d j | i   j | g   j |  d S)zdebhelper's autoscriptr   N)r    r<   r=   )r5   r&   whentemplateargsr9   r9   r:   
autoscript{   s    zDebHelper.autoscriptc             C   s   |  j  | d j |  d  S)Nr   )r    r=   )r5   r&   r>   r9   r9   r:   add_rtupdate   s    zDebHelper.add_rtupdatec             C   s  x|  j  j   D]\ } } | j d  } | s4 q x| j   D]\ } } d | | f } t |  r t | d d d  } | j   } Wd  QRXn d } d }	 x | j   D] \ }
 } x | D] } t t t  d d |
  } t |  s d	 |
 } t | d d d  } | j   } Wd  QRX|  j	 j
 rM| rM| j d
 d  } n | j d |  } | j d |  } | | k r | |	 k r |	 d | 7}	 q Wq W|	 rA | d d j |	  7} t | d d d } | j |  | j   qA Wq Wd  S)Nr   zdebian/%s.%s.debhelperr   r   zutf-8 z..zautoscripts/%sz#/usr/share/debhelper/autoscripts/%sz-p #PACKAGE#z	#PACKAGE#z#ARGS#z
%sz#
# Automatically added by dhpython:z%{}
# End automatically added section
w)r    r#   getr   r'   readr   r   __file__r   compile_allreplaceformatwriter2   )r5   r&   settingsr   r@   Z	templatesfndatafiledataZnew_dataZtpl_namerB   iZfpathZtplfileZtplr7   r9   r9   r:   save_autoscripts   s>    
zDebHelper.save_autoscriptsc             C   s6  x/|  j  j   D]\ } } | j d  } | s4 q d | } t |  rx t | d d d  } | j   } Wd  QRXn d } xi| j   D][\ } } | j d |  }	 |	 d k r| |	 d   j d	  }
 | |	 t d |  |
 d k r |	 |
 n d   } d
 d   | j d  D } |
 d k rp| |	 |
 d   j	   rpd | d  |	  | |	 |
 d   f } q| d  |	  } n g  } x' | D] } | | k r| j
 |  qW| r | r| d	 7} | d | d j |  f 7} q W| j d d	  } | r t | d d d } | j |  | j   q Wd  S)Nr   zdebian/%s.substvarsr   r   zutf-8rE   z%s=   
c             S   s"   g  |  ] } | r | j     q Sr9   )r+   ).0rR   r9   r9   r:   
<listcomp>   s   	 z,DebHelper.save_substvars.<locals>.<listcomp>r   z%s
%sz%s=%s
z, z

rF   rX   rX   )r    r#   rG   r   r'   rH   findr/   r0   r+   r=   r   rK   rM   r2   )r5   r&   rN   r   rO   rP   rQ   r6   valuesper8   r#   jr7   r9   r9   r:   save_substvars   s@    
 &+
!zDebHelper.save_substvarsc          	   C   s\  xU|  j  j   D]D\ } } |  j j r. d n d | } | j d  } | sP q d j | t |  j  } t |  s t	 |  d | | f } t |  r t
 | d d d j   } n d	 } xS | D]K \ } }	 t |  j j d
 | d | d |	  }
 |
 | k r | d |
 7} q W| r t
 | d d d } | j |  | j   t | d  q Wd  S)NrE   z-p %sr   zdebian/{}/{}z%s/%s.rtupdater   r   zutf-8z#! /bin/sh
set -epkg_argdnamerB   z
%srF   i  )r    r#   r   rJ   rG   rL   r	   r!   r   r   r'   rH   r
   rM   r2   r   )r5   r&   rN   r_   rZ   drO   rQ   r`   rB   cmdr7   r9   r9   r:   save_rtupdate   s.    
	
zDebHelper.save_rtupdatec             C   s"   |  j    |  j   |  j   d  S)N)r^   rS   rc   )r5   r9   r9   r:   save   s    

zDebHelper.saveN)__name__
__module____qualname____doc__r;   r?   rC   rD   rS   r^   rc   rd   r9   r9   r9   r:   r      s   W'%r   )Zloggingosr   r   os.pathr   r   r   r   r   r   r	   r
   Z	getLoggerr-   r   r9   r9   r9   r:   <module>   s
   "