a
    e                     @   sT   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 Zd dlZdd Zdd	 Z	dS )
    Nc                 C   sf   t | dd d}g }|D ]B}|d}|d d dkr|dd   d}||d	  q|S )
Nutf8)encoding
z 	
   z#define    r   )openreadsplitstripappend)filepathfalineslinekv r   FD:\CREALITY_CR4NTxxC10\buildroot\share\PlatformIO\scripts\signature.pyextract_defines   s    
r   c                    s\   t  }t| d2 t fdddD ]}|| q&W d    n1 sJ0    Y  | S )Nrbc                      s
     dS )Ni   )r	   r   r   r   r   <lambda>       z$get_file_sha256sum.<locals>.<lambda>r   )hashlibsha256r   iterupdate	hexdigest)r   Zsha256_hashZ
byte_blockr   r   r   get_file_sha256sum   s
    *r   c                 C   sN   t j|d dt jdd"}|j| t jdd W d    n1 s@0    Y  d S )Nz.zipw	   )compressioncompresslevel)compress_typer#   )zipfileZipFile	ZIP_BZIP2write)r   Z
outputbaseZzipfr   r   r   compress_file&   s    r)   c                 C   s2  d| v rd S ddg}t j| d | d }d}|D ]}|t|dd 7 }q2t j|d	}t j|d
}z`t|dB}t|}|d |krt|| W d    W d S W d    n1 s0    Y  W n   Y n0 ddlm	}	 |	| }
i }g }|D ]&}t
|}|| }|||dd < qtd}i }|
D ]}|dd    d}|d d|dd   }}t|dkr|dd dkrq0d|v rd|v rq0||rq0t|r|nd||< q0d|vrd S i }|D ]}|dd dkr
|dkr
q|dd  dkr*|dkr*q|dd  d kr@q||vrb|d!krb|d"krbq|| ||< qi }||d< |D ]}i ||< q|D ]0}|D ]$}||| v r|| || |< qqi |d#< |d! |d# d!< |d" |d# d"< z&tg d$ }| |d# d%< W n   Y n0 t|d& }tj||d'd( W d    n1 sV0    Y  t|| td)d*}|d+ |d, |d- |d. d}tt j|d/d0 D ]4}|d1|  |d7 }|d2 dkr|d3 q|d2 r|d4 |d5 W d    n1 s$0    Y  d S )6NZBUILD_SIGNATUREzMarlin/Configuration.hzMarlin/Configuration_adv.hPROJECT_BUILD_DIRPIOENV r   
   zmarlin_config.jsonZmcrZ__INITIAL_HASH)run_preprocessor/z\(+(\s*-*\s*_.*)\)+r   r         __()ZCONFIGURATION_EMBEDDING   ZBOARD_ZBOARD_INFO_NAMEZ_NAMEZCUSTOM_MACHINE_NAMEiZ_T_DECLAREDZDETAILED_BUILD_VERSIONZSTRING_DISTRIBUTION_DATEVERSION)gitZdescribez--match=NeVeRmAtChz--alwaysZGIT_REFr    ),:)
separatorszMarlin/src/mczip.hwbs+   #ifndef NO_CONFIGURATION_EMBEDDING_WARNING
sw     #warning "Generated file 'mc.zip' is embedded (Define NO_CONFIGURATION_EMBEDDING_WARNING to suppress this warning.)"
s   #endif
s*   const unsigned char mc_zip[] PROGMEM = {
 zmc.zipr   s    0x%02X,   s   
    
s   };
)ospathjoinr   r   jsonloadr)   preprocessorr/   r   r
   recompiler   decodelenmatch
subprocesscheck_outputdumpr(   r	   )envZfiles_to_keep	build_dirhashesheaderZmarlin_jsonZ
marlin_zipinfileZconfr/   Zcomplete_cfgZreal_definesZall_definesdefinesr.   r   Zkey_valkeyvalueZresolved_definesdataZcurverZoutfileZresult_filecountbr   r   r   compute_build_signature/   s    

4
 
0






rZ   )
rA   rL   rG   rD   r   r   r   r%   r)   rZ   r   r   r   r   <module>   s
   (
	