o
    e)                     @  s   d dl mZ d dlmZ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lZdddZdddZedkrJeeejdd  dS dS )    )annotations)environmentmesonlibNoutputsT.List[str]source_rootstrsubproject_root
build_rootlog_diruse_llvm_covboolreturnintc                  C  s2  g }d}t  \}}	}
}}}tj|d}tj|r d|g}ng }|
r/t|dr/ddg}nddg}dt	|g}|rVt|	d	rV|d
||g}tjtj|drUg }n|d
|g}|rdd|d g}ng }| rld| v r|rt|	drt
|| ddtj|dg |  |dt|df n| rtd d}| rd| v r|rt|	d	rt
|| ddtj|dg |  |dt|df n| rtd d}| rd| v r|rt|	drt
|| dtj|dg |  |dt|df n	| rtd d}| rd| v rs|
r,|r,tj|d }tj|d!}|d" }|d# }|d$ }g }tj|rA|tj|d% |rt rrtj|d&}t|d'd(d)}|d*| d+ W d    n	1 slw   Y  n5tj|d,}t|d'd(d)}|d-| d. W d    n	1 sw   Y  t|t|jtjB  d/|g}ng }t
|
d0|d1d2d3|g| |  t
|
d0|d1d3|d4g|| |  t
|
d5|d5|g|d||  t
|
d6|tj|d%g|d3||  t
|
d7|g||d8d9d3||  t
|d:|d:|d;|d<d=d>d?d@|g |dAt|dBf nG|rjt|	drjtj|d }tj|sIt| t
|| dCdDdEdtj|dBg |  |dAt|dBf n	| rstdF d}| s|stdG d}|rtdH |D ]\}}t|dI |  q|S )JNr   z.lcovrcz--config-filez>=2.0z--rczbranch_coverage=1zlcov_branch_coverage=1z-ez>=4.2z-rz	gcovr.cfgz--gcov-executablez gcovxmlz>=3.3z-xz-ozcoverage.xmlZXmlz3gcovr >= 3.3 needed to generate Xml coverage report   	sonarqube--sonarqubezsonarqube.xmlZ	Sonarqubez3gcovr >= 4.2 needed to generate Xml coverage reporttextzcoverage.txtTextz4gcovr >= 3.3 needed to generate text coverage reporthtmlZcoveragereportzcoverage.infoz.initialz.runz.raw*zllvm-cov.batwzutf-8)encodingz@"z	" gcov %*zllvm-cov.shz#!/usr/bin/env sh
exec "z	" gcov $@z--gcov-toolz--directoryz	--capturez	--initialz--output-filez--no-checksumz-az	--extractz--removez--ignore-errorsZunusedz--prefixz--output-directoryz--titlezCode coveragez--legendz--show-detailsz--branch-coverageZHtmlz
index.html--htmlz--html-detailsz--print-summaryzDlcov/genhtml or gcovr >= 3.3 needed to generate Html coverage reportz;Need gcovr or lcov/genhtml to generate any coverage reports z  coverage report can be found at)r   Zfind_coverage_toolsospathjoinexistsr   Zversion_comparereescape
subprocess
check_callappendpathlibPathprintZ
is_windowsopenwritechmodstatst_modeS_IEXECisdirmkdiras_uri) r   r   r	   r
   r   r   outfilesexitcodeZ	gcovr_exeZgcovr_versionZlcov_exeZlcov_versionZgenhtml_exeZllvm_cov_exeZlcovrcZlcov_configZlcov_exe_rc_branch_coverageZgcovr_configZgcovr_base_cmdZgcov_exe_argsZ
htmloutdirZcovinfoZinitial_tracefileZrun_tracefileZraw_tracefileZlcov_subpoject_excludeZllvm_cov_shim_pathZllvm_cov_batZllvm_cov_shZgcov_tool_argsZfiletyper    r3   @/usr/lib/python3.10/site-packages/mesonbuild/scripts/coverage.pycoverage   sj  







		

r5   argsc                 C  s   t jdstd dS tjdd}|jdddd	d
d |jdddddd |jdddddd |jdddddd |jdddd |d |d |d |d || }t|j	|j
|j|j|j|jS )Nzbuild.ninjaz5Coverage currently only works with the Ninja backend.r   zGenerate coverage reports)descriptionz--textr   Zappend_constr   zgenerate Text report)destactionconsthelpz--xmlr   zgenerate Xml reportr   r   zgenerate Sonarqube Xml reportr   r   zgenerate Html reportz--use_llvm_cov
store_truezuse llvm-cov)r9   r;   r   r	   r
   r   )r   r   isfiler'   argparseArgumentParseradd_argument
parse_argsr5   r   r   r	   r
   r   r   )r6   parseroptionsr3   r3   r4   run   s8   









rD   __main__r   )r   r   r   r   r	   r   r
   r   r   r   r   r   r   r   )r6   r   r   r   )
__future__r   Z
mesonbuildr   r   r>   r    sysr   r"   r%   r+   typingTr5   rD   __name__exitargvr3   r3   r3   r4   <module>   s   8
 
&