
    @dy5                         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m	Z	m
Z
mZ d dlmZ d dlmZmZmZmZ  ej        d          Z ej        dej                  j        Zd Z G d	 d
          ZdS )    N)makedirschmodenviron)basenameexistsjoindirname)argv)DEPENDS_SUBSTVARSPKG_NAME_TPLSRT_LOCATIONSRT_TPLSdhpythonz[,\s]*
    (?P<name>[^ :]+)(?::any)?
    \s*
    \(?(?P<version>([>=<]{2,}|=)\s*[^\)]+)?\)?
    \s*
    (?:\[(?P<arch>[^\]]+)\])?
    c                  n    dg g ddd}|}|                     |            t          dt          f|          S )z'Build an Options object from kw optionsNF)archpackage
no_package	write_logremaining_packagesOptions)updatetypeobject)optionsdefault_optionsbuilt_optionss      */usr/share/dh-python/dhpython/debhelper.pybuild_optionsr   '   sN     # O $M!!!	F9m444    c                   P    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZdS )	DebHelperz>Reinvents the wheel / some dh functionality (Perl is ugly ;-P)cpython3c                    || _         i | _        i | _        d | _        || _        dddd|         | _        t                      }t          j                    D ] \  }}||k    r|	                    |           !t          |          }t          |         }|j        }|j        }	 t          ddd          5 }	i g}
d }t          |	d	          D ]\  }}|                    d
          r|                                s |
d         r|
                    i            d }O|d                                         r)|
d         |xx         |                                z  cc<   d|vrt+          d||fz            |                    dd	          \  }}|                                }|                                |
d         |<   	 d d d            n# 1 swxY w Y   n# t0          $ r t+          d          w xY w|
d         s|
                                 t5          |
          dk     rt+          d          |
d         d         | _        | j        dk    rXd|
d         v rN|
d         d         | _        t5          | j                            d                    dk    rt9          d          nF| j        dk    r;d|
d         v r|
d         d         | _        nd|
d         v r|
d         d         | _        g }dD ]-}||
d         v r!|                    |
d         |                    .d                    |          }|                    d          D ]}|                    d          D ]|}t=          |          }|ri|                                }|d         r|d                                         }nd g}|D ],}|d         | j                             |d         i           |<   -}t          |
d	d          d          D ]2\  }}d |vrt+          d!|z            |d          }|r1|                    |          rtB          "                    d"|           W|r||vr^|r||v re|j#        r| $                    |          ri i g |d#         d$}|j%        d%u r|d         d&k    s|j%        d'u r|d         d&k    r|                    t          |                   sN||&                    d(d)          vr6||&                    d*d)          vrtB          "                    d+||           (|| j        |<   4|	'                                 tB          "                    d,| j        tQ          | j        )                                                     d S )-N
dh_python2
dh_python3dh_pypy)cpython2r"   pypyzdebian/controlrutf-8encoding   #r   :z-Unable to parse line %i in debian/control: %szcannot find debian/control file   z<Unable to parse debian/control, found less than 2 paragraphssourcer"   zx-python3-version,zDtoo many arguments provided for X-Python3-Version: min and max only.r'   zx-python-versionzxs-python-version)zbuild-dependszbuild-depends-indepzbuild-depends-arch, |r   versionnamer   zBUnable to parse debian/control, paragraph %i missing Package fieldzskipping package: %sarchitecture)	substvarsautoscripts	rtupdatesr   FallTdepends 
recommendsz6skipping package %s (missing %s in Depends/Recommends)zsource=%s, binary packages=%s)*r   packagesbuild_dependspython_versionimplcommandsetr   itemsr   tupler   r   r   open	enumerate
startswithstripappendisspacerstrip	ExceptionsplitlowerIOErrorpoplensource_name
ValueErrorr   	parse_dep	groupdict
setdefaultlogdebugr   has_acted_on_packager   getcloselistkeys)selfr   rC   skip_tplr7   tplssubstvarpkgs	skip_pkgsfp
paragraphsfieldlinenolinevaluerA   dep1dep2detailsarchitecturesr   paragraph_no	paragraphbinary_packagepkgs                            r   __init__zDebHelper.__init__8   s   " 	$$
 
 	
 55'-// 	& 	&JD$t||%%%??$T*&		?&g>>> :" T
$-b!$4$4 : :LFDs++ ! ::<< !%b> )&--b111$(E Aw(( !"2u--->--- $;;'K%tn-. . . $(::c1#5#5LE5!KKMME,1KKMMJrN5))#:: : : : : : : : : : : : : : :*  	? 	? 	?=>>>	? "~ 	NNz??Q + , , , &a=29
""':jm'K'K",Q-0C"DD4&,,S1122Q66  "H I I I 7 Y*$$!Z]22&0m4F&G##$
155&0m4G&H#, 	; 	;E
1%%$$Z]5%9:::		-00!'',, 	L 	LD

3 
L 
L#D// L%//11Gv /(/(=(=(?(?)- - L L9@9K *55#FOR1 1157 7
L (1ABB'C'C %	0 %	0#L)	)) !8:F!G H H H&y1N N55h?? 		0.AAA d22 ^y88* --n==!!.1	 C %%#f+*>*>LD((S[E-A-A!,,]4-@AA 	 IMM)R$@$@@@$IMM,,K,KKKII 4,h8 8 8 ,/DM.))



		143Ct}))++,,	. 	. 	. 	. 	.s1   "G 4DG G GG GG G2c                 >   	 t          d                    |          d          5 }|D ]-}|                                | j        k    r d d d            dS .	 d d d            n# 1 swxY w Y   n-# t          $ r }|j        t
          j        k    r Y d }~nd }~ww xY wdS )Ndebian/{}.debhelper.logr*   r+   TF)rH   formatrK   rD   rR   errnoENOENT)ra   r   frk   es        r   r\   zDebHelper.has_acted_on_package   s(   	/66w??&( ( ( $+, $ $Dzz||t|33#	$ $ $ $ $ $ $ $ 4$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
  	 	 	w%,&& '&&&&	 usF   $A0 #A$	A0 A$A0 $A((A0 +A(,A0 0
B:BBc                 z    | j         |         d                             |g                               |           dS )zdebhelper's addsubstvarr9   Nr@   rY   rL   )ra   r   r7   rl   s       r   addsubstvarzDebHelper.addsubstvar   s8    g{+66tR@@GGNNNNNr   c                     | j         |         d                             |i                               |g                               |           dS )zdebhelper's autoscriptr:   Nr~   )ra   r   whentemplateargss        r   
autoscriptzDebHelper.autoscript   s@    g}-88rBBZ"%%ffTlllllr   c                 R    | j         |         d                             |           d S )Nr;   )r@   rL   )ra   r   rl   s      r   add_rtupdatezDebHelper.add_rtupdate   s(    g{+22599999r   c           
         | j                                         D ]I\  }}|                    d          }|s|                                D ]\  }}d|d|d}t          |          r?t	          |dd          5 }|                                }d d d            n# 1 swxY w Y   nd}d}	|                                D ]\  }
}|D ]}t          t          t                    d	d
|
z            }t          |          sd|
z  }t	          |dd          5 }|                                }d d d            n# 1 swxY w Y   | j	        j
        r|r|                    dd          }nK|d         dk    r|                    d|          }n(t          d         }|                    d|d|          }|                    d|          }||vr||	vr|	d|z  z  }	|	r|d                    t          t          d                             d                    |	          z   z  }t	          |dd          }|                    |           |                                 Kd S )Nr:   zdebian/.z
.debhelperr)   r*   r+   r>   z..zautoscripts/%sz#/usr/share/debhelper/autoscripts/%sz-p #PACKAGE#r   r<   z	#PACKAGE#DEB_HOST_ARCHr0   z#ARGS#
%sz
# Automatically added by {}r   z%{}
# End automatically added section
w)r@   rF   r]   r   rH   readr   r	   __file__r   compile_allreplacer   rx   r   r
   writer^   )ra   r   settingsr:   r   	templatesfndatafiledatanew_datatpl_namer   ifpathtplfiletplr   rg   s                     r   save_autoscriptszDebHelper.save_autoscripts   s   !%!4!4!6!6 '	 '	GX",,}55K #.#4#4#6#6 " "ii18$$$?":: b#888 /H'}}/ / / / / / / / / / / / / / / D&/oo&7&7 5 5NHd! 5 5 $WX%6%6%5%@!B !B%e}} U$IH$TE!%w??? 17"),,..C1 1 1 1 1 1 1 1 1 1 1 1 1 1 1<3 V V"%++nb"A"ACC%f-66"%++k7"C"CCC#*?#;D"%++kgggtt;T"U"UC!kk(A66d??s(/B/B$4H%5&  ;BB8DQRGCTCTUUELLXVVW WDb#888BHHTNNNHHJJJE"'	 '	s$   <BB!$B!D99D= D=c                 (   | j                                         D ]\  }}|                    d          }|sd|z  }t          |          r?t	          |dd          5 }|                                }d d d            n# 1 swxY w Y   nd}|                                D ]\  }}|                    d|z            }	|	dk    r||	d                              d	          }
||	t          d|z            z   |
dk    r|	|
z   nd          }d
 |                    d          D             }|
dk    r:||	|
z   d          	                                r|d |	         d	||	|
z   d          }n|d |	         }ng }|D ]}||vr|
                    |           |r%|r|d	z  }||dd                    |          d	z  }|                    dd	          }|r;t	          |dd          }|                    |           |                                 d S )Nr9   zdebian/%s.substvarsr)   r*   r+   r>   z%s=r/   
c                 :    g | ]}||                                 S  )rK   ).0r   s     r   
<listcomp>z,DebHelper.save_substvars.<locals>.<listcomp>  s%    EEE11EQWWYYEEEr   r3   =r4   z

r   )r@   rF   r]   r   rH   r   findrT   rP   rK   rL   r   r   r   r^   )ra   r   r   r9   r   r   r   r7   valuespr|   rk   rF   jrg   s                  r   save_substvarszDebHelper.save_substvars   s   !%!4!4!6!6 "	 "	GX [11I &0Bbzz "cG444 +#==??D+ + + + + + + + + + + + + + +  ) 1 1 A AfIIedl++r66QRRd++AC$5$5 5)*RAT!: ;DEE

3EEEE2vv$q1uvv,"4"4"6"6v+/888T!a%&&\\B#BQBxE ( (A~~Q A %tyy/?/?/?/?@@D<<--D "cG444


E"	 "	s   A??B	B	c                    | j                                         D ]<\  }}| j        j        rdnd|z  }|                    d          }|s1d                    |t          | j                           }t          |          st          |           |d|d}t          |          r%t          |dd	                                          }nd
}|D ]9\  }}	t          | j                                     |||	          }
|
|vr|d|
z  z  }:|rKt          |dd	          }|                    |           |                                 t          |d           >d S )Nr>   z-p %sr;   zdebian/{}/{}/z	.rtupdater)   r*   r+   z#! /bin/sh
set -e)pkg_argdnamer   r   r   i  )r@   rF   r   r   r]   rx   r   rC   r   r   rH   r   r   r   r^   r   )ra   r   r   r   r   dr   r   r   r   cmdrg   s               r   save_rtupdatezDebHelper.save_rtupdate!  s}   !%!4!4!6!6 	! 	!GX L4Kbb'G:KG\\+..F %%g|DI/FGGA!99 %&QQ0Bbzz ,Bg666;;==+% ) )tdi(//6;59 0 ; ; d??FSL(D !"cG444


b%   /	! 	!r   c                    | j         j        sd S | j                                        D ]_\  }}t	          d                    |          dd          5 }|                    | j        dz              d d d            n# 1 swxY w Y   `d S )Nrw   ar*   r+   r   )r   r   r@   rF   rH   rx   r   rD   )ra   r   r   r{   s       r   save_logzDebHelper.save_log;  s    |% 	F!%!4!4!6!6 	- 	-GX/66w??G- - - -01t+,,,- - - - - - - - - - - - - - -	- 	-s   A<<B 	B 	c                     |                                   |                                  |                                  |                                  d S )N)r   r   r   r   )ra   s    r   savezDebHelper.saveC  sI    r   N)r"   )__name__
__module____qualname____doc__ru   r\   r   r   r   r   r   r   r   r   r   r   r   r!   r!   5   s        HH@. @. @. @.D
 
 
O O O3 3 3
: : :( ( (T# # #J! ! !4- - -    r   r!   )ry   loggingreosr   r   r   os.pathr   r   r   r	   sysr
   r   r   r   r   r   	getLoggerrZ   compileVERBOSEmatchrW   r   r!   r   r   r   <module>r      s  *   				 ' ' ' ' ' ' ' ' ' ' 3 3 3 3 3 3 3 3 3 3 3 3       L L L L L L L L L L L Lg
##BJ  
   
5 5 5R R R R R R R R R Rr   