B
    ›³ëbC&  ã               @   s°   d 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mZ ddlmZ ee dœdd„Zd	d
„ Zedœdd„Zdg fdd„Zddœdd„Zdd„ ZdS )zÀTool-specific initialization for jar.

There normally shouldn't be any need to import this module directly.
It will usually be imported through the generic SCons.Tool.Tool()
selection method.
é    N)ÚList)Ú_my_normcase)Úget_java_install_dirs)Úreturnc       
   	   C   sØ   y|d  W n t k
r$   d}Y n&X d}|jd| |d}|rJ|j |¡}g }x„|D ]|}| ¡ }| d¡rlqT|rv|}	n&y|jj}	W n tk
rš   d}	Y nX |	rÆt	j
 | |	¡¡}| d¡ | |	¡ | |¡ qTW |S )	z2Only include sources that are not a manifest file.ZJARCHDIRFTz	$JARCHDIR)ÚtargetÚsourcezManifest-VersionNz-C)ÚKeyErrorÚsubstÚfsÚDirÚget_text_contentsÚ
startswithZ
attributesZjava_classdirÚAttributeErrorÚSConsZSubstZLiteralZget_pathÚappend)
r   r   ÚenvÚfor_signatureZjarchdir_setZjarchdirÚresultÚsrcÚcontentsZ_chdir© r   ú-lib/python3.7/site-packages/SCons/Tool/jar.pyÚ
jarSources,   s2    





r   c             C   s(   x"|D ]}|  ¡ }| d¡r|S qW dS )z,Look in sources for a manifest file, if any.zManifest-VersionÚ )r   r   )r   r   r   r   r   r   r   r   r   ÚjarManifestL   s
    

r   c             C   sF   |j d| |d}x0|D ](}| ¡ }| d¡rd|kr<|d S P qW |S )zDIf we have a manifest, make sure that the 'm'
    flag is specified.z	$JARFLAGS)r   r   zManifest-VersionÚm)r	   r   r   )r   r   r   r   Zjarflagsr   r   r   r   r   ÚjarFlagsT   s    

r   c          	      s6  t j |¡r.|g kr.t j t jjd¡ |}d}t j |¡rvt j |¡rvg }x&|D ]}|ˆjˆ ||dœˆ—Ž7 }qPW |S |dkräy&tj 	t
|d ƒ¡d ˆ d¡ }W n>   t j t jjd¡ tj t
ˆ d¡ƒ¡ˆ d¡ }Y nX t j |¡sö|g}t j |¡s
|g}ˆ d¡}ˆ d	¡‰g }‡ ‡‡‡fd
d„}	‡ ‡‡fdd„}
xÚt j |¡D ]Ê}ˆ |¡}t|t jjjƒr¤t|t jjjƒr”| |	|ƒ¡ n| |
|ƒ¡ nvy| |	ˆj |¡ƒ¡ wRW n   Y nX y| |
ˆj |¡ƒ¡ wRW n   Y nX t j t jjdt
|ƒ d ¡ qRW ˆjˆ ||dœˆ—ŽS )z¡The Jar Builder.

    This is a pseudo-Builder wrapper around the separate jar builders
    depending on whether the sources are a file list or a directory.
    zAMaking implicit target jar file, and treating the list as sourcesN)r   r   r   z
$JARSUFFIXz<Could not make implicit target from sources, using directoryÚ.z$JAVACLASSSUFFIXz$JAVASUFFIXc                s4   t t| ƒƒ ˆ¡r&ˆjˆ d| iˆ—ŽS ˆj | ¡gS )Nr   )r   ÚstrÚendswithZJavaClassFiler
   ÚFile)r   )Úargsr   Újava_suffixÚkwr   r   Úfile_to_class›   s    zJar.<locals>.file_to_classc                s.   ˆj ˆ d| iˆ—Ž}|g kr*ˆj | ¡gS |S )Nr   )ZJavaClassDirr
   r   )r   Zdir_targets)r!   r   r#   r   r   Údir_to_class©   s    zJar.<locals>.dir_to_classzFile: z8 could not be identified as File or Directory, skipping.)r   ÚUtilZis_ListZWarningsÚwarnZSConsWarningÚJarÚosÚpathÚsplitextr   r	   Úbasenamer   ZflattenÚ
isinstanceZNodeZFSZBaser    Úextendr
   ZJarFile)r   r   r   r!   r#   ZjarsZsingle_targetZjava_class_suffixZtarget_nodesr$   r%   r   r   )r!   r   r"   r#   r   r(   `   s`    
&&


r(   c             C   sÈ   t j | ¡ t j | ¡ t j | ¡ t j | ¡ |  t¡ | d dkr|tdƒ}t jj	| d|d}|r|t
j |¡}|  d|¡ d| d< t j d¡| d< t| d	< t| d
< t| d< d| d< d| d< d| d< dS )zBAdd Builders and construction variables for jar to an Environment.ZPLATFORMZwin32Újar)Zdefault_pathsÚPATHZJARZcfZJARFLAGSZ	_JARFLAGSZ_JARMANIFESTZ_JARSOURCESz2$JAR $_JARFLAGS $TARGET $_JARMANIFEST $_JARSOURCESZ_JARCOMz$${TEMPFILE('$_JARCOM','$JARCOMSTR')}ZJARCOMz.jarZ	JARSUFFIXN)r   ZToolZCreateJarBuilderZCreateJavaFileBuilderZCreateJavaClassFileBuilderZCreateJavaClassDirBuilderZ	AddMethodr(   r   Zfind_program_pathr)   r*   ÚdirnameZAppendENVPathr&   ZCLVarr   r   r   )r   Úpathsr/   Zjar_bin_dirr   r   r   ÚgenerateØ   s&    
r3   c             C   s   dS )NTr   )r   r   r   r   Úexistsó   s    r4   )Ú__doc__r)   Útypingr   Z
SCons.Noder   ZSCons.Node.FSZSCons.SubstZ
SCons.ToolZ
SCons.UtilZSCons.Warningsr   ZSCons.Tool.JavaCommonr   r   r   r   r   r(   r3   r4   r   r   r   r   Ú<module>   s     x