o
    WodD                     @  s  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
mZmZmZ ddl	mZmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZ dd
lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ej)rd dl*m+Z+ ddl	m,Z, ddlm-Z- ddlm.Z. G dd de+Z/G dd de+Z0G dd de.j1Z2g dZ3dZ4dZ5dZ6G dd deZ7G dd deZ8G dd de
Z9dd  Z:dS )!    )annotationsN   )ExtensionModuleModuleReturnValueModuleObject
ModuleInfo   )buildmesonlibmlogdependencies)TargetOptionscmake_defines_to_args)SubprojectHolder)REQUIRED_KWINSTALL_DIR_KWNoneTypein_set_validator)
FeatureNewFeatureNewKwargs
stringArgspermittedKwargs	noPosargsnoKwargsInvalidArgumentsInterpreterExceptiontyped_pos_argstyped_kwargs	KwargInfoContainerTypeInfo)	TypedDict)ModuleState)SingleTargetOptions)kwargsc                   @  s6   e Zd ZU ded< ded< ded< ded< ded< d	S )
WriteBasicPackageVersionFileboolarch_independentstrcompatibilityT.Optional[str]install_dirnameversionN__name__
__module____qualname____annotations__ r2   r2   whome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/modules/cmake.pyr$   4   s   
 r$   c                   @  s.   e Zd ZU ded< ded< ded< ded< d	S )
ConfigurePackageConfigFilez&T.Union[build.ConfigurationData, dict]configurationzT.Union[str, mesonlib.File]inputr)   r*   r'   r+   Nr-   r2   r2   r2   r3   r4   <   s
   
 r4   c                   @  s   e Zd ZU ded< ded< dS )
Subprojectz"T.Optional[CMakeSubprojectOptions]optionszT.List[str]cmake_optionsNr-   r2   r2   r2   r3   r7   C   s   
 r7   )AnyNewerVersionZSameMajorVersionZSameMinorVersionZExactVersiona@  
####### Expanded from \@PACKAGE_INIT\@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was @inputFileName@ ########

get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/@PACKAGE_RELATIVE_PATH@" ABSOLUTE)
as  
# Use original install prefix when loaded through a "/usr move"
# cross-prefix symbolic link such as /lib -> /usr/lib.
get_filename_component(_realCurr "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
get_filename_component(_realOrig "@absInstallDir@" REALPATH)
if(_realCurr STREQUAL _realOrig)
  set(PACKAGE_PREFIX_DIR "@installPrefix@")
endif()
unset(_realOrig)
unset(_realCurr)
a(  
macro(set_and_check _var _file)
  set(${_var} "${_file}")
  if(NOT EXISTS "${_file}")
    message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
  endif()
endmacro()

####################################################################################
c                      s   e Zd Zd fddZdd Zeedd Zed	d
dge	dhedd Z
eedd Zeedd Zeedd Zeedd Zeeedddd Z  ZS )CMakeSubprojectsubpr   c              
     sb   t |tsJ |jd usJ t   || _|j| _| j| j| j	| j
| j| j| j| jd d S )N)get_variable
dependencyinclude_directoriestargettarget_typetarget_listfound)
isinstancer   cm_interpretersuper__init__r<   methodsupdater=   r>   r?   r@   rA   rB   found_method)selfr<   	__class__r2   r3   rG   j   s   

zCMakeSubproject.__init__c                   sf   t |dkr
td|d }| j|  d u r$td| dd d t fdd	d
D s1J  S )Nr   z!Exactly one argument is required.r   zThe CMake target z does not exist
zP  Use the following command in your meson.build to list all available targets:

zS    message('CMake targets:\n - ' + '\n - '.join(<cmake_subproject>.target_list()))c                 3  s    | ]}| v V  qd S Nr2   ).0xresr2   r3   	<genexpr>   s    z0CMakeSubproject._args_to_info.<locals>.<genexpr>)incsrcdeptgtfunc)lenr   rE   Ztarget_infoall)rK   argsrW   r2   rQ   r3   _args_to_infoy   s   zCMakeSubproject._args_to_infoc                 C  s   | j ||S rN   )r<   Zget_variable_methodrK   stater[   r#   r2   r2   r3   r=      s   zCMakeSubproject.get_variabler>   z0.56.0include_typec                 C  s   |  |}|d dkrt|d  d| ||d gi }t|tjs&J |j}d|v rE|d |krEtd	||d  |
|d S |S )NrX   
executabler   zU is an executable and does not support the dependency() method. Use target() instead.rV   r_   z6Current include type is {}. Converting to requested {})r\   r   r=   rD   r   Z
Dependencyr_   r   debugformatZgenerate_system_dependency)rK   r^   r[   r#   infoorigZactualr2   r2   r3   r>      s   
zCMakeSubproject.dependencyc                 C     |  |}| ||d g|S )NrT   r\   r=   rK   r^   r[   r#   rc   r2   r2   r3   r?         
z#CMakeSubproject.include_directoriesc                 C  re   )NrW   rf   rg   r2   r2   r3   r@      rh   zCMakeSubproject.targetc                 C  s   |  |}|d S )NrX   )r\   rg   r2   r2   r3   rA      s   
zCMakeSubproject.target_typec                 C  s
   | j  S rN   )rE   rB   r]   r2   r2   r3   rB      s   
zCMakeSubproject.target_listzCMakeSubproject.found()z0.53.2c                 C  s
   | j d uS rN   )r<   r]   r2   r2   r3   rJ      s   
zCMakeSubproject.found_method)r<   r   )r.   r/   r0   rG   r\   r   r   r=   r   r   r>   r?   r@   rA   r   rB   r   rJ   __classcell__r2   r2   rL   r3   r;   i   s4    r;   c                      s   e Zd Zd fddZddd	Zedd
dZeedhdddZ	edhdddZ
eedhdddZeedhdddZeedddZ  ZS )CMakeSubprojectOptionsreturnNonec              	     sB   t    g | _t | _| j| j| j| j	| j
| j| jd d S )N)add_cmake_definesset_override_optionset_installappend_compile_argsappend_link_argsclear)rF   rG   r9   r   target_optionsrH   rI   rm   rn   ro   rp   rq   rr   )rK   rL   r2   r3   rG      s   
zCMakeSubprojectOptions.__init__r#   dictr"   c                 C  s   d|v r| j |d  S | j jS )Nr@   )rs   global_options)rK   r#   r2   r2   r3   	_get_opts   s   z CMakeSubprojectOptions._get_optsc                 C  s   |  j t|7  _ d S rN   )r9   r   r]   r2   r2   r3   rm      s   z(CMakeSubprojectOptions.add_cmake_definesr@   c                 C  s2   t |dkr
td| ||d |d  d S )Nr   z8set_override_option takes exactly 2 positional argumentsr   r   )rY   r   rv   Zset_optr]   r2   r2   r3   rn      s   z*CMakeSubprojectOptions.set_override_optionc                 C  s:   t |dkst|d tstd| ||d  d S )Nr   r   z,set_install takes exactly 1 boolean argument)rY   rD   r%   r   rv   ro   r]   r2   r2   r3   ro      s   z"CMakeSubprojectOptions.set_installc                 C  s6   t |dk r
td| ||d |dd   d S )Nr   z9append_compile_args takes at least 2 positional argumentsr   r   )rY   r   rv   Zappend_argsr]   r2   r2   r3   rp      s   "z*CMakeSubprojectOptions.append_compile_argsc                 C  s    |st d| || d S )Nz5append_link_args takes at least 1 positional argument)r   rv   rq   r]   r2   r2   r3   rq      s   z'CMakeSubprojectOptions.append_link_argsc                 C  s   | j   t | _d S rN   )r9   rr   r   rs   r]   r2   r2   r3   rr      s   
zCMakeSubprojectOptions.clear)rk   rl   )r#   rt   rk   r"   )r.   r/   r0   rG   rv   r   rm   r   r   rn   ro   rp   rq   r   rr   ri   r2   r2   rL   r3   rj      s&    
rj   c                      sd  e Zd ZdZdZeddZ fddZdd Zd	d
 Z	e
edededddededeeedededdededded=ddZdd Ze
ededejefddedeejeeejfddd  d!d  d"ededded>d$d%Zed&d'ed(eed(eed)e e!fd*d+ed,eeeg dd*d-d.d?d7d8Z"ed9d*e#e
d@d;d<Z$  Z%S )ACmakeModuleFNcmakez0.50.0c                   s.   t  | | j| j| j| j| jd d S )N) write_basic_package_version_fileconfigure_package_config_file
subprojectsubproject_options)rF   rG   rH   rI   ry   rz   r{   r|   )rK   interpreterrL   r2   r3   rG      s   zCmakeModule.__init__c                 C  sF   |j jj}|dd }|s|dd }|std|dd|d S )Nccppz7Requires a C or C++ compiler to compute sizeof(void *).zvoid * r   )coredata	compilershostgetr
   MesonExceptionZsizeof)rK   envr   compilerr2   r2   r3   detect_voidp_size  s   

zCmakeModule.detect_voidp_sizec                 C  s   | j rdS |jddd}| sdS t| g d dd \}}}|jdkr:td|j d	| d
|  dS t	
d| }|sKtd dS t|d}tjj|j | _d| _ dS )NTrx   F)Zsilent)z--system-informationz-GZNinjar      z/error retrieving cmake information: returnCode=z stdout=z stderr=z
CMAKE_ROOT \"([^"]+)"
zunable to determine cmake rootr   )cmake_detectedZfind_programrC   r
   Z
Popen_safeZget_command
returncoder   logresearchstrippathlibPurePathgroupospathjoinparts
cmake_root)rK   r^   ZcmakebinpstdoutstderrmatchZ	cmakePathr2   r2   r3   detect_cmake  s"   $

zCmakeModule.detect_cmakez&cmake.write_basic_package_version_filer&   0.62.0)defaultsincer(   r:   )r   	validatorr+   T)requiredr,   r#   'WriteBasicPackageVersionFile'c                 C  s.  |d }|d }|d }|d }|  |std|d  }}	|d u r<tj|jjt	dd|}tjd	d|}	tj| j
d
d| d}
tj|
sXtd| dtj|jj| d}|dft| |jdf|dfd}t|
||d ttd|j |g||	d |j}t||gS )Nr&   r(   r+   r,   zUnable to find cmaker*   libdirrx   z{libdir}ModuleszBasicConfigVersion-z	.cmake.inz,your cmake installation doesn't support the z compatibilityzConfigVersion.cmaker   )ZCVF_VERSIONZCMAKE_SIZEOF_VOID_PZCVF_ARCH_INDEPENDENTZmesonT)r   r
   r   r   r   r   environmentr   
get_option	OptionKeyr   existsZscratch_dirr'   r   Zdo_conf_filer	   DataFileZget_scratch_dirr{   r   )rK   r^   r[   r#   r&   r(   r+   r,   ZpkgrootZpkgroot_nameZtemplate_fileZversion_fileconfrR   r2   r2   r3   ry   '  s*   


 &z,CmakeModule.write_basic_package_version_filec              
   C  s6  t d|}|dtj|}||7 }|t7 }zt|dd}| }W d    n1 s.w   Y  W n tyK }	 zt	
d| d|	d }	~	ww g }
t	d}|D ]}|d|}t	||d|\}}|
| qU|d	 }t|d
dd}||
 W d    n1 sw   Y  t|| t	|| d S )Nz@PACKAGE_RELATIVE_PATH@z@inputFileName@zutf-8)encodingzCould not read input file z: zcmake@z@PACKAGE_INIT@~w)PACKAGE_INIT_BASEreplacer   r   basenamePACKAGE_INIT_SET_AND_CHECKopen	readlines	Exceptionr
   r   Zget_variable_regexZdo_replacementappend
writelinesshutilcopymodeZreplace_if_different)rK   infileoutfilePACKAGE_RELATIVE_PATHextraZconfdataZpackage_initZfindataeresultZregexlineZ_missingZoutfile_tmpZfoutr2   r2   r3   create_package_fileN  s2   

zCmakeModule.create_package_filez#cmake.configure_package_config_filer5   r6   c                 C  s   t | trt| dkrdS d S )Nr   zrequires exactly one file)rD   listrY   rP   r2   r2   r3   <lambda>o  s    zCmakeModule.<lambda>c                 C  s   t | tr	| d S | S )Nr   )rD   r   r   r2   r2   r3   r   p  s    )r   r   Z	convertor'ConfigurePackageConfigFile'c                 C  s  |d }t |trtj|jj|j|}||jj|jj	}|d }t
jt
j|j| d\}}t
j|jj	||}	|d }
|
d u rUt
j|jjtdd|}
|d }t |trntjdd	|j|jd
 t|}|jjtd}|
}t
j|st
j||
}t
j||}d}td|rtd|}|d|}| ||	||| d|_t
j |! }| j"j#$| t%td||g|
|
d |j}| j"jj&'| |S )Nr6   r+   zConfig.cmaker*   r   rx   r5   z9cmake.configure_package_config_file dict as configurationr   )locationprefixr   z^(/usr)?/lib(64)?/.+z@absInstallDir@z@installPrefix@T)(rD   r'   r
   r   Zfrom_source_filer   
source_dirZsubdirZabsolute_path	build_dirr   r   splitr   r   r   r   rt   r   Z
single_user{   Zcurrent_noder	   ConfigurationDataisabsrelpathr   r   PACKAGE_INIT_EXTr   r   usednormpathZrelative_namer}   Zbuild_def_filesaddr   r   r   )rK   r^   r[   r#   Z	inputfileZ	ifile_absr+   Z
ofile_pathZofile_fnameZ	ofile_absr*   r   r   Zabs_install_dirr   r   conffilerR   r2   r2   r3   rz   i  s<   
" 

 z)CmakeModule.configure_package_config_filer{   z0.51.0zcmake.subprojectr8   z0.55.0)r   r9   zUse options instead)r   ZlistifyZ
deprecatedZdeprecated_messager^   r!   r[   T.Tuple[str]kwargs_r7   rk   *T.Union[SubprojectHolder, CMakeSubproject]c                 C  sd   |d r|d d urt d|d }|d |d |d g g d}| j|d|}| s.|S t|S )Nr9   r8   z6"options" cannot be used together with "cmake_options"r   r   )r   r8   r9   Zdefault_optionsr,   rx   )r   r}   Zdo_subprojectrC   r;   )rK   r^   r[   r   dirnamekwr<   r2   r2   r3   r{     s   zCmakeModule.subprojectr|   rj   c                 C  s   t  S rN   )rj   r]   r2   r2   r3   r|     s   zCmakeModule.subproject_options)r#   r   )r#   r   )r^   r!   r[   r   r   r7   rk   r   )rk   rj   )&r.   r/   r0   r   r   r   INFOrG   r   r   r   r   r   r%   r'   r   setCOMPATIBILITIESr   ry   r   r	   r   rt   r
   r   r   r   rz   r   r   r   rj   r   r{   r   r|   ri   r2   r2   rL   r3   rw      sf    
	
+rw   c                  O  s   t | i |S rN   )rw   )r[   r#   r2   r2   r3   
initialize  s   r   );
__future__r   r   r   os.pathr   r   typingTr   r   r   r   r   r	   r
   r   r   rx   r   r   r}   r   Zinterpreter.type_checkingr   r   r   r   Zinterpreterbaser   r   r   r   r   r   r   r   r   r   r   r   TYPE_CHECKINGtyping_extensionsr    r!   r"   r#   r$   r4   ZExtractRequiredr7   r   r   r   r   r;   rj   rw   r   r2   r2   r2   r3   <module>   s8   8Q< O