o
    Wodr                     @  s  d dl mZ ddlmZmZmZ ddlmZ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 ddlm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!e!j"rodd
lm#Z# ddl$m%Z% ddl&m'Z' G dd de!j(Z)G dd deZ*dS )    )annotations   )ExternalDependencyDependencyExceptionDependencyTypeName   )
is_windowsMesonException
PerMachinestringlistifyextract_as_list)CMakeExecutorCMakeTraceParserCMakeExceptionCMakeToolchainCMakeExecScopecheck_cmake_argsresolve_cmake_trace_targetscmake_is_debug)mlogNPath)CMakeTarget)Environment)MachineInfoc                   @  s.   e Zd ZU ded< ded< ded< ded< dS )	CMakeInfoT.List[str]module_pathsstr
cmake_rootarchscommon_pathsN)__name__
__module____qualname____annotations__ r&   r&   |home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/dependencies/cmake.pyr   "   s
   
 r   c                      s8  e Zd ZU eddZded< dZg dZdZded< dYddZ	dZddZ
d[ddZd\ddZd\ddZd]ddZd^d_ fd'd(ZdZd)d*Zd`d-d.Zeejdd/dad2d3Zeejdd/dbd4d5Zdcd:d;Zddd>d?ZdedAdBZdfdDdEZ	dgdhdIdJZedZdKdLZdZdMdNZdddddddOdidWdXZ  ZS )jCMakeDependencyNz!PerMachine[T.Optional[CMakeInfo]]class_cmakeinfoz>=3.4) ZNinjazUnix MakefileszVisual Studio 10 2010T.Optional[str]class_working_generatormsgr   returnr   c                 C  s   t d| j d| S )NzDependency z not found: )r   name)selfr-   r&   r&   r'   _gen_exception2   s   zCMakeDependency._gen_exceptionc                 C     dS )NCMakeLists.txtr&   r0   r&   r&   r'   _main_cmake_file5      z CMakeDependency._main_cmake_filer   c                 C  s   g S Nr&   r4   r&   r&   r'   _extra_cmake_opts8   r6   z!CMakeDependency._extra_cmake_optsmodulesT.List[T.Tuple[str, bool]]
componentsc                 C     |S r7   r&   r0   r9   r;   r&   r&   r'   _map_module_list;   s   z CMakeDependency._map_module_listc                 C  s   |S r7   r&   r=   r&   r&   r'   _map_component_listD   s   z#CMakeDependency._map_component_listmodulec                 C  r<   r7   r&   )r0   r@   r&   r&   r'   _original_module_nameL   s   z%CMakeDependency._original_module_nameFr/   environment'Environment'kwargsT.Dict[str, T.Any]languageforce_use_global_compilersboolNonec                   s  g | _ |d u s	|r/d  |ddrjjj njjj g d}|  j  fdd|D 7  _ n|  j |g7  _ d| j v rD|  j dg7  _ tt| j | _ t j	t
d||d	 || _d| _d | _d | _j| _g | _d | _ttj| j| jd
| _| j sd | _d| j d}| jrt|t| d S t| j |  | j | _t!t"|d}t#|}tj$| j d u r| %|tj$| j< tj$| j | _| jd u r| &d|dd}	t'|	t(stddd t!t"|dD }
dd t!t"|dD }|dd t!t"|dD 7 }t!t"|d}fdd|D }|r#|)dd*|  | +||| j, j-| j s:td d S | .||	||
| d S )NZnativeF)ccppfortranobjcZobjcxxc                   s   g | ]}| v r|qS r&   r&   .0x)	compilersr&   r'   
<listcomp>\       z,CMakeDependency.__init__.<locals>.<listcomp>rL   rJ   cmake)rF   )silentzCMake binary for machine z not found. Giving up.Z
cmake_argsz)Unable to obtain CMake system informationZcmake_package_versionr*   z1Keyword "cmake_package_version" must be a string.c                 S     g | ]}|d fqS Tr&   rN   r&   r&   r'   rR          r;   c                 S  rV   rW   r&   rN   r&   r&   r'   rR      rX   r9   c                 S  rV   )Fr&   rN   r&   r&   r'   rR      rX   Zoptional_modulesZcmake_module_pathc                   s.   g | ]}t j|r|nt j  |qS r&   )ospathisabsjoinZget_source_dirrN   )rB   r&   r'   rR      s   . z-DCMAKE_MODULE_PATH=;z)Preliminary CMake check failed. Aborting.)/language_listgetZcoredatarQ   buildhostlistsetsuper__init__r   r/   Z
is_libtoolcmakebin	cmakeinfoZscratch_dircmake_root_dirfound_modulestraceparserr   r(   class_cmake_versionfor_machinerU   foundrequiredr   r   debugr   version_get_build_direnvr   r   r   r)   _get_cmake_infor1   
isinstancer   appendr\   _preliminary_find_checkZget_cmake_prefix_pathsZmachines_detect_dep)r0   r/   rB   rD   rF   rG   
candidatesr-   cm_argspackage_versionr;   r9   Zcm_path	__class__)rQ   rB   r'   re   Q   sd   






 
zCMakeDependency.__init__c              	   C  s(   d| j j d| j d| j d| j d	S )N< z: >)r|   r"   r/   is_foundZversion_reqsr4   r&   r&   r'   __repr__   s   (zCMakeDependency.__repr__ry   T.Optional[CMakeInfo]c              	   C  s  t d g }tjd ur|tjg7 }|tj7 }t| j |  | j	}t
| j| j	| jtj|  }|  |D ]V}t dt|dkrE|nd | |  dg }||7 }t|dkrdd|g| }| |d\}}}	|dkrv|t_ nt d| d	|  t d
| d|	 d q7|dkrd S z||	 W n
 ty   Y d S w d$dd}
|
|d}||
|d t|}dd |D }|
|d}g }dd |D D ]}dd |D D ]}|t|||j  qqt||}dd |D }|d}g d}|D ]}|tj d|g7 }q
t!||dd ||d}t d |j"  t d!|j#  t d"|j$  t d#|j%  |S )%Nz"Extracting basic cmake informationTry CMake generator: {}r   auto.-GzCMakePathInfo.txtz8CMake failed to gather system information for generator  with error code OUT:



ERR:


lr   r.   
T.Set[str]c                 S  s:   t  rdd | D }ndd | D }dd |D }t|S )Nc                 S  s   g | ]}| tjqS r&   )splitrY   pathseprN   r&   r&   r'   rR      rS   zJCMakeDependency._get_cmake_info.<locals>.process_paths.<locals>.<listcomp>c                 S  s   g | ]}t d |qS )z:|;)rer   rN   r&   r&   r'   rR      rS   c                 S  s   g | ]	}|D ]}|qqS r&   r&   )rO   ZsublistrP   r&   r&   r'   rR          )r   rc   )r   tmpZ	flattenedr&   r&   r'   process_paths   s
   z6CMakeDependency._get_cmake_info.<locals>.process_pathsZMESON_FIND_ROOT_PATHZMESON_CMAKE_SYSROOTc                 S     g | ]
}t j|r|qS r&   rY   rZ   isdirrN   r&   r&   r'   rR          z3CMakeDependency._get_cmake_info.<locals>.<listcomp>ZMESON_PATHS_LISTc                 S     g | ]}t |qS r&   r   rN   r&   r&   r'   rR      rX   c                 S  r   r&   r   rN   r&   r&   r'   rR      rX   c                 S  r   r&   r   rN   r&   r&   r'   rR      r   ZMESON_ARCH_LIST)libZlib32Zlib64Zlibx32sharer   ZMESON_CMAKE_ROOT)r   r   r    r!   z  -- Module search paths:    z  -- CMake root:             z  -- CMake architectures:    z  -- CMake lib search paths: )r   r   r.   r   )&r   ro   r(   r,   class_cmake_generatorsr   rf   rp   rq   rr   r   rl   r   
DEPENDENCYwriteformatlen
trace_argsget_cmake_args_call_cmakeparser	   get_cmake_varupdatesortedru   r   relative_toanchorunionrY   rZ   r\   r   r   r   r    r!   )r0   ry   gen_listZtemp_parser	toolchaini
cmake_optsret1out1err1r   Zroot_paths_setZ
root_pathsZmodule_paths_setZrooted_pathsjpr   r    r!   resr&   r&   r'   rs      sn   


 

zCMakeDependency._get_cmake_info)maxsizerZ   T.Tuple[T.Tuple[str, str], ...]c                 C  s4   zt dd t| D W S  ty   t   Y S w )Nc                 s  s     | ]}|t | fV  qd S r7   )r   lowerrN   r&   r&   r'   	<genexpr>   s    z2CMakeDependency._cached_listdir.<locals>.<genexpr>)tuplerY   listdirOSErrorrZ   r&   r&   r'   _cached_listdir   s
   
zCMakeDependency._cached_listdirc                 C  s$   zt j| W S  ty   Y dS w NF)rY   rZ   r   r   r   r&   r&   r'   _cached_isdir   s
   zCMakeDependency._cached_isdirmodule_pathprefix_pathmachine'MachineInfo'c              	     s$  t  dfdd d fdd}|tjjjd	g D ]	} |r, d
S q#|D ]	}||r8 d
S q/g }tjdd	tj
D ]'}|dsR|drX|d d }|dsb|drh|d d }||g7 }qFjj| D ]n} |r} d
S ||r d
S |}tfdd|D }|D ]}	|tj||	d r  d
S q| r d dfD ]+}
|D ]&}	|	d |
krq tj||	d dsۈ tj||	d dr   d
S qqqttj d}|r |rd
S t d d }| | fD ]}| r d
S qdS ) NrZ   r   r.   rH   c                   st   | t j| dt j| dfD ](}|sq|}g d fdd D  t fdd|D r7 dS qd	S )
NrT   ZCMake)zFind{}.cmakez{}Config.cmakez{}-config.cmakec                   s   g | ]	}|   qS r&   )r   r   rN   r/   r&   r'   rR     r   zPCMakeDependency._preliminary_find_check.<locals>.find_module.<locals>.<listcomp>c                 3  s    | ]	}|d   v V  qdS r   Nr&   rN   rx   r&   r'   r     s    zOCMakeDependency._preliminary_find_check.<locals>.find_module.<locals>.<genexpr>TF)rY   rZ   r\   r   r   any)rZ   r   content)r/   r0   r   r'   find_module
  s   "

z<CMakeDependency._preliminary_find_check.<locals>.find_modulec                   s    fddj jD D ]\}|sqtj|d}|rC|}tfdd|D }|D ]}tj||d rB  dS q1|}tfdd|D }|D ]}tj||d rf  dS qUqd	S )
Nc                   s   g | ]	}t j |qS r&   )rY   rZ   r\   rN   r   r&   r'   rR     r   zTCMakeDependency._preliminary_find_check.<locals>.search_lib_dirs.<locals>.<listcomp>rT   c                 3  "    | ]}|d    r|V  qdS r   
startswithrN   lnamer&   r'   r   !       zSCMakeDependency._preliminary_find_check.<locals>.search_lib_dirs.<locals>.<genexpr>r   Tc                 3  r   r   r   rN   r   r&   r'   r   )  r   F)rg   r!   r   rY   rZ   r\   r   r   )rZ   r   Zcm_dirr   k)r   r   r0   r   r'   search_lib_dirs  s&   



z@CMakeDependency._preliminary_find_check.<locals>.search_lib_dirsModulesTPATHr*   z/binz\binz/sbinz\sbinc                 3  r   r   r   rN   r   r&   r'   r   L  r   z:CMakeDependency._preliminary_find_check.<locals>.<genexpr>r   z
.frameworkz.appr   Z	ResourcesVersionZ_DIRz.cmakepackagesFrZ   r   r.   rH   )r   r   rY   rZ   r\   rg   r   environr_   r   r   endswithr   r   r   Z	is_darwinr   homeexists)r0   r/   r   r   r   r   r   Z
system_envr   r   r   Zenv_pathZ	linux_regr   r&   )r   r   r/   r0   r'   rv     s`   
0

z'CMakeDependency._preliminary_find_checkrz   argsc           $        sr  t d | j  g }tjd ur|tjg7 }|tj7 }| ||}t	| j| j
| jtj|  }|  |D ]}	t dt|	dkrF|	nd g }
|
d  g7 }
|
dd| jjg7 }
|
d| g7 }
|
d	dd
d |D g7 }
|
|7 }
|
| j 7 }
|
| 7 }
|
|  7 }
|
dg7 }
t|	dkrd|	g|
 }
| |
|  \}}}|dkr|	t_ nt d|	 d  d|  t d| d| d q8|dkrd S z| j| W n+ ty	 } z| t|}| jr g | _g | _ d| _!|| _"W Y d }~d S d }~ww | j#d| _!| j!sd S | j$d}t|dkr/|d | _%| j%&d | '||}d}t|dkrs| jj(D ]0}	|	) } ) }| d| |ks_||*ddkrqt d|	 d |	dfg}d} nqBt|dkrg }| jj(+ D ]\}}|) } ) }|,| dr||g7 }q|rt -t./d  ddd |D  d   d!  d"  d# t d$ |D ]}t | qd%d | j$d&D }d'd | j$d(D }d)d | j$d*D }g }d}t0| j
}|| dd+}|D ]}	|	) |v r||	)  }q|r||	g7 }d}qt|dkrd,d |D | | _g | _ |D ]+}t1|| j| j
| j2d-} |  j | j37  _ |  jd.d | j4D 7  _|  j| j57  _q4t d/   t d0|  t d1|  t d2|  d S d| _!| d3 t6| jj(7 g }g }!g }"|D ]c\}	}#|	| jj(vr|#st -d4t 8| 9|	d5t 8 d6 q| d7| 9|	 t6| jj(7 |s|  j:|	g7  _:t1|	| j| j
| j2 fd8d9d:} || j47 }|!| j57 }!|"| j3| j; 7 }"qt<t=|}t<t=|!}!t<t=|"}"t d0|  t d;|!  t d2|"  |!d<d |D  | _|"| _ d S )=Nz7
Determining dependency {!r} with CMake executable {!r}r   r   r   z-DNAME=z
-DARCHS={}r]   z
-DVERSION=z
-DCOMPS={}c                 S  s   g | ]}|d  qS )r   r&   rN   r&   r&   r'   rR     rX   z/CMakeDependency._detect_dep.<locals>.<listcomp>r   r   zCMake failed for generator z and package r   r   r   r   FZPACKAGE_FOUNDPACKAGE_VERSIONz"' z::r*   zGuessed CMake target ''TzL                    Could not find and exact match for the CMake dependency zd.

                    However, Meson found the following partial matches:

                        c                 S  s   g | ]}|j qS r&   r   rN   r&   r&   r'   rR     s    a  

                    Using imported is recommended, since this approach is less error prone
                    and better supported by Meson. Consider explicitly specifying one of
                    these in the dependency call with:

                        dependency('z', modules: ['zS::<name>', ...])

                    Meson will now continue to use the old-style z_LIBRARIES CMake
                    variables to extract the dependency information since no explicit
                    target is currently specified.

                z(More info for the partial match targets:c                 S     g | ]}|r|qS r&   r&   rN   r&   r&   r'   rR     rX   ZPACKAGE_INCLUDE_DIRSc                 S  r   r&   r&   rN   r&   r&   r'   rR     rX   ZPACKAGE_DEFINITIONSc                 S  r   r&   r&   rN   r&   r&   r'   rR     rX   ZPACKAGE_LIBRARIES)ro   Z	optimizedZgeneralc                 S     g | ]}d | qS z-Ir&   rN   r&   r&   r'   rR         )clib_compilerc                 S  r   r   r&   rN   r&   r&   r'   rR     r   z/using old-style CMake variables for dependency zInclude Dirs:         zCompiler Definitions: zLibraries:            zCMake: failed to guess a CMake target for {}.
Try to explicitly specify one or more targets with the "modules" property.
Valid targets are:
{}zCMake: T.Optional moduleforwas not foundzCMake: invalid module {} for {}.
Try to explicitly specify one or more targets with the "modules" property.
Valid targets are:
{}c                   s   t dt | dt  dS )NzCMake: Dependencyr   r   )r   warningbold)rP   r   r&   r'   <lambda>(  s   z-CMakeDependency._detect_dep.<locals>.<lambda>)r   Znot_found_warningzCompiler Options:     c                 S  r   r   r&   rN   r&   r&   r'   rR   8  r   )>r   ro   r   rf   Zexecutable_pathr(   r,   r   r?   r   rr   rl   r   r   rq   r   r   r\   rg   r    rj   r   r   r8   r   r5   r   r   r1   r   rn   Zcompile_argsZ	link_argsr   reasonZvar_to_boolr   rp   stripr>   targetsr   replaceitemsr   r   textwrapdedentr   r   r   	librariesZinclude_directoriesZpublic_compile_optsrb   keysr   rA   ri   Z
link_flagsr   rc   )$r0   r/   rz   r9   r;   r   r   Zcomp_mappedr   r   r   r   r   r   ee2Zvers_rawZautodetected_module_listtgr   Zpartial_modulesr   vZtgtZincDirsZdefsZlibs_rawZlibsZcfg_matchesZis_debugZ
cm_tag_mapr   ZrtgtZcompileOptionsr   rn   r&   r   r'   rw   g  s$  

  

&





$



zCMakeDependency._detect_depr   c                 C  s(   t | jd| j  }|jddd |S )NZcmake_T)parentsexist_ok)r   rh   r/   mkdir)r0   	build_dirr&   r&   r'   rq   ;  s   zCMakeDependency._get_build_dir
cmake_filec                   s   |   }|d }|d }| r|  tj| dd tjjd|dd}dd	l	m
   fd
d| jD }|s=|dg7 }tdd|| }|d }|j|dd t|   |S )NzCMakeCache.txtZ
CMakeFilesT)ignore_errorszmesonbuild.dependencies.datazutf-8)encodingr   language_mapc                   s   g | ]
}| v r | qS r&   r&   rN   r   r&   r'   rR   V  r   z4CMakeDependency._setup_cmake_dir.<locals>.<listcomp>ZNONEzt
            cmake_minimum_required(VERSION ${{CMAKE_VERSION}})
            project(MesonTemp LANGUAGES {})
        r~   r3   )rq   r   unlinkshutilrmtreeas_posix	importlib	resources	read_textrT   r   r^   r   r   r   r\   
write_textr   Zcmd_ci_includeabsolute)r0   r   r   Zcmake_cacheZcmake_filesZ	cmake_txtZcmake_languageZcm_filer&   r   r'   _setup_cmake_dir@  s$   	
z CMakeDependency._setup_cmake_dirrr   T.Optional[T.Dict[str, str]].T.Tuple[int, T.Optional[str], T.Optional[str]]c                 C  s   |  |}| jj|||dS )N)rr   )r  rf   call)r0   r   r   rr   r   r&   r&   r'   r   e  s   
zCMakeDependency._call_cmakec                   C  r2   )NrT   r&   r&   r&   r&   r'   	log_triedl  s   zCMakeDependency.log_triedc                   s6    fdd j D }tt|}|rdd| S dS )Nc                   s   g | ]}  |qS r&   )rA   rN   r4   r&   r'   rR   q  r   z/CMakeDependency.log_details.<locals>.<listcomp>z	modules: z, r*   )ri   r   rc   r\   )r0   r9   r&   r4   r'   log_detailsp  s
   zCMakeDependency.log_details)rT   	pkgconfig
configtoolinternaldefault_valuepkgconfig_definerT   r  r  r  r  r  T.Optional[T.List[str]]c                C  sV   |r| j d urz| j j| }W n	 ty   Y nw d|S |d ur$|S td| )Nr]   z9Could not get cmake variable and no default provided for )rj   varsKeyErrorr\   r   )r0   rT   r  r  r  r  r  r   r&   r&   r'   get_variablew  s   
zCMakeDependency.get_variable)r-   r   r.   r   )r.   r   )r.   r   )r9   r:   r;   r:   r.   r:   )r@   r   r.   r   r   )r/   r   rB   rC   rD   rE   rF   r+   rG   rH   r.   rI   )ry   r   r.   r   )rZ   r   r.   r   r   )
r/   r   r   r   r   r   r   r   r.   rH   )r/   r   rz   r   r9   r:   r;   r:   r   r   r.   rI   )r.   r   )r   r   r.   r   r7   )r   r   r   r   rr   r  r.   r	  )rT   r+   r  r+   r  r+   r  r+   r  r+   r  r  r.   r   ) r"   r#   r$   r
   r)   r%   rk   r   r,   r1   r5   r8   r>   r?   rA   re   r   rs   staticmethod	functools	lru_cacher   r   rv   rw   rq   r  r   r  r  r  __classcell__r&   r&   r{   r'   r(   (   sF   
 




	

L
V



a 
U
(
r(   )+
__future__r   baser   r   r   Zmesonlibr   r	   r
   r   r   rT   r   r   r   r   r   r   r   r   r*   r   importlib.resourcesr  pathlibr   r  r   rY   r   r   typingTTYPE_CHECKINGr   rB   r   Z	envconfigr   
NamedTupler   r(   r&   r&   r&   r'   <module>   s&   (