
    e#I                       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jR                  rSd dl*m+Z+ ddl	m,Z, ddlm-Z- ddl.m/Z/ ddlm0Z0m1Z1 ddlm2Z2m3Z3  G d de+      Z4 G d de+      Z5 G d de1jl                        Z7g dZ8dZ9dZ:dZ; G d de      Z< G d de      Z= G d d e
      Z>d"d!Z?y)#    )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)Environment)Interpreterkwargs)TYPE_kwargsTYPE_varc                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y	)
WriteBasicPackageVersionFileboolarch_independentstrcompatibilityT.Optional[str]install_dirnameversionN__name__
__module____qualname____annotations__     :/usr/lib/python3/dist-packages/mesonbuild/modules/cmake.pyr*   r*   6   s    $$	r9   r*   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y	)
ConfigurePackageConfigFilez&T.Union[build.ConfigurationData, dict]configurationzT.Union[str, mesonlib.File]inputr/   r0   r-   r1   Nr3   r8   r9   r:   r<   r<   >   s    ==**$$	r9   r<   c                  "    e Zd ZU ded<   ded<   y)
Subprojectz"T.Optional[CMakeSubprojectOptions]optionsT.List[str]cmake_optionsNr3   r8   r9   r:   r@   r@   E   s    33""r9   r@   )AnyNewerVersionSameMajorVersionSameMinorVersion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                  .    e Zd Zd f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 xZS )CMakeSubprojectc           
     d   t        |t              sJ |j                  J t        |           || _        |j                  | _        | j                  j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  d       y )N)get_variable
dependencyinclude_directoriestargettarget_typetarget_listfound)
isinstancer   cm_interpretersuper__init__subpmethodsupdaterK   rL   rM   rN   rO   rP   found_method)selfrV   	__class__s     r:   rU   zCMakeSubproject.__init__l   s    $ 0111""...	"11T->->+/??484L4L'+{{,0,<,<,0,<,<&*&7&7 	 r9   c                    t        |      dk7  rt        d      |d   }| j                  j                  |      t        d| ddz   dz         t	        fdd	D              sJ 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  &   K   | ]  }|v  
 y wNr8   ).0xress     r:   	<genexpr>z0CMakeSubproject._args_to_info.<locals>.<genexpr>   s     J18Js   )incsrcdeptgtfunc)lenr   rS   target_infoall)rZ   argsrf   ra   s      @r:   _args_to_infozCMakeSubproject._args_to_info{   s    t9>&'JKK1g!!--c2;&):3%?P'Q'{(| (C(C D D
 J%IJJJJ
r9   c                :    | j                   j                  ||      S r^   )rV   get_variable_methodrZ   staterk   r&   s       r:   rK   zCMakeSubproject.get_variable   s     yy,,T6::r9   rL   z0.56.0include_typec                h   | j                  |      }|d   dk(  rt        |d    d      | j                  ||d   gi       }t        |t        j
                        sJ |j                  }d|v rD|d   |k7  r<t        j                  dj                  ||d                |j                  |d         S |S )Nrg   
executabler   zU is an executable and does not support the dependency() method. Use target() instead.re   rq   z6Current include type is {}. Converting to requested {})rl   r   rK   rR   r   
Dependencyrq   r   debugformatgenerate_system_dependency)rZ   rp   rk   r&   infoorigactuals          r:   rL   zCMakeSubproject.dependency   s     !!$'<<'"d1gY  /D  $E  F  F  er:$ 7 7888""V#~(>&(HJJOVVW]_eft_uvw226.3IJJr9   c                R    | j                  |      }| j                  ||d   g|      S )Nrc   rl   rK   rZ   rp   rk   r&   rx   s        r:   rM   z#CMakeSubproject.include_directories   /     !!$'  ev>>r9   c                R    | j                  |      }| j                  ||d   g|      S )Nrf   r|   r}   s        r:   rN   zCMakeSubproject.target   r~   r9   c                .    | j                  |      }|d   S )Nrg   )rl   r}   s        r:   rO   zCMakeSubproject.target_type   s     !!$'F|r9   c                6    | j                   j                         S r^   )rS   rP   ro   s       r:   rP   zCMakeSubproject.target_list   s     ""..00r9   zCMakeSubproject.found()z0.53.2c                    | j                   d uS r^   )rV   ro   s       r:   rY   zCMakeSubproject.found_method   s     yy$$r9   )rV   r   )rk   rB   returnT.Dict[str, str])rp   r"   rk   rB   r&   r'   r   r(   )rp   r"   rk   rB   r&   r   r   zdependencies.Dependency)rp   r"   rk   rB   r&   r'   r   zbuild.IncludeDirs)rp   r"   rk   rB   r&   r'   r   zbuild.Target)rp   r"   rk   rB   r&   r'   r   r-   )rp   r"   rk   r(   r&   r'   r   rB   )rp   r"   rk   r(   r&   r'   r   r+   )r4   r5   r6   rU   rl   r   r   rK   r   r   rL   rM   rN   rO   r   rP   r   rY   __classcell__r[   s   @r:   rI   rI   k   s      ;  ; lH~.>?n%&
  ' @
 ?  ? ?  ?    1  1 )84% 5  %r9   rI   c                  \    e Zd Zd fdZddZ ede      edd              Z ede	e	       e
dh      dd              Z ed	e       e
dh      dd
              Z ede	e	d       e
dh      dd              Z ede	d       e
dh      dd              Zeedd              Z xZS )CMakeSubprojectOptionsc           	     
   t         |           g | _        t               | _        | j
                  j                  | j                  | j                  | j                  | j                  | j                  | j                  d       y )N)add_cmake_definesset_override_optionset_installappend_compile_argsappend_link_argsclear)rT   rU   rC   r   target_optionsrW   rX   r   r   r   r   r   r   )rZ   r[   s    r:   rU   zCMakeSubprojectOptions.__init__   sk    *,+o%)%;%;'+'?'?#//'+'?'?$($9$9		
r9   c                Z    d|v r| j                   |d      S | j                   j                  S )NrN   )r   global_options)rZ   r&   s     r:   	_get_optsz CMakeSubprojectOptions._get_opts   s2    v&&vh'788""111r9   z$subproject_options.add_cmake_defines)varargsc                F    | xj                   t        |d         z  c_         y Nr   )rC   r   ro   s       r:   r   z(CMakeSubprojectOptions.add_cmake_defines   s     	3DG<<r9   z&subproject_options.set_override_optionrN   c                R    | j                  |      j                  |d   |d          y Nr   r   )r   set_optro   s       r:   r   z*CMakeSubprojectOptions.set_override_option   s%     	v&&tAwQ8r9   zsubproject_options.set_installc                J    | j                  |      j                  |d          y r   )r   r   ro   s       r:   r   z"CMakeSubprojectOptions.set_install   s     	v**473r9   z&subproject_options.append_compile_argsr   )r   min_varargsc                R    | j                  |      j                  |d   |d          y r   )r   append_argsro   s       r:   r   z*CMakeSubprojectOptions.append_compile_args   s%     	v**47DG<r9   c                J    | j                  |      j                  |d          y r   )r   r   ro   s       r:   r   z'CMakeSubprojectOptions.append_link_args   s     	v//Q8r9   c                V    | j                   j                          t               | _        y r^   )rC   r   r   r   ro   s       r:   r   zCMakeSubprojectOptions.clear   s      	  "+or9   )r   None)r&   dictr   r#   )rp   r"   rk   z&T.Tuple[T.List[T.Dict[str, TYPE_var]]]r&   r'   r   r   )rp   r"   rk   zT.Tuple[str, str]r&   r'   r   r   )rp   r"   rk   zT.Tuple[bool]r&   r'   r   r   )rp   r"   rk   zT.Tuple[str, T.List[str]]r&   r'   r   r   )rp   r"   rk   zT.Tuple[T.List[str]]r&   r'   r   r   )rp   r"   rk   r(   r&   r'   r   r   )r4   r5   r6   rU   r   r   r   r   r   r-   r   r   r+   r   r   r   r   r   r   r   s   @r:   r   r      s   
 2
 :DI=  J= <c3GhZ 9 ! H9 4d;hZ 4 ! <4 <c3\]^hZ = ! _= <cWXYhZ 9 ! Z9 .  .r9   r   c                  n    e Zd ZdZdZ edd      Zd( fdZd)dZd*dZ	e
 ed ed	edd
       eded e ee                   eded       eded      e      d+d              Zd,dZe
 ed edej,                  efd       edeej2                   eeej2                        fdd d        eded      e      d-d              Z edd       ede       ede ede e!fd !       ed" eee      g dd d#$            d.d%                     Z" ed&d       e#e
d/d'                     Z$ xZ%S )0CmakeModuleFNcmakez0.50.0c                    t         |   |       | j                  j                  | j                  | j
                  | j                  | j                  d       y )N) write_basic_package_version_fileconfigure_package_config_file
subprojectsubproject_options)rT   rU   rW   rX   r   r   r   r   )rZ   interpreterr[   s     r:   rU   zCmakeModule.__init__   sI    %040U0U-1-O-O//"&"9"9	
 	r9   c                    |j                   j                  j                  }|j                  dd       }|s|j                  dd       }|st	        j
                  d      |j                  dd|      d   S )Nccppz7Requires a C or C++ compiler to compute sizeof(void *).zvoid * r   )coredata	compilershostgetr   MesonExceptionsizeof)rZ   envr   compilers       r:   detect_voidp_sizezCmakeModule.detect_voidp_size  sg    LL**//	==d+ }}UD1H))*cddxS1!44r9   c                X   | j                   ry|j                  dd      }|j                         syt        j                  |j                         g dz         dd \  }}}|j                  dk7  r)t        j                  d|j                   d	| d
|        yt        j                  d|j                               }|st        j                  d       yt        j                  |j                  d            }t        j                   j"                  |j$                   | _        d| _         y)NTr   F)silent)z--system-informationz-GNinjar      z/error retrieving cmake information: returnCode=z stdout=z stderr=z
CMAKE_ROOT \"([^"]+)"
zunable to determine cmake rootr   )cmake_detectedfind_programrQ   r   
Popen_safeget_command
returncoder   logresearchstrippathlibPurePathgroupospathjoinparts
cmake_root)rZ   rp   cmakebinpstdoutstderrmatch	cmakePaths           r:   detect_cmakezCmakeModule.detect_cmake  s    %%ge%<~~$//0D0D0FIp0pqrstuv66<<1HHFq||nT\]c\ddlmsltuv		6GHH56$$U[[^4	'',,	8"r9   z&cmake.write_basic_package_version_filer,   0.62.0)defaultsincer.   rD   )r   	validatorr1   T)requiredr2   c                   |d   }|d   }|d   }|d   }| j                  |      st        j                  d      |d   x}}	|xt        j                  j                  |j                  j                  j                  t        j                  d            d|      }t        j                  j                  d	d|      }	t        j                  j                  | j                  d
d| d      }
t        j                  j                  |
      st        j                  d| d      t        j                  j                  |j                  j                  | d      }|t        | j                  |j                              |d}t        j                  |
|t!        j"                  |      d       t!        j$                  t        j&                  d|j                  j)                         |      g||	d |j*                        }t-        ||g      S )Nr,   r.   r1   r2   zUnable to find cmaker0   libdirr   z{libdir}ModuleszBasicConfigVersion-z	.cmake.inz,your cmake installation doesn't support the z compatibilityzConfigVersion.cmake)CVF_VERSIONCMAKE_SIZEOF_VOID_PCVF_ARCH_INDEPENDENTmesonT)r   r   r   r   r   r   environmentr   
get_option	OptionKeyr   existsscratch_dirr-   r   do_conf_filer
   ConfigurationDataDataFileget_scratch_dirr   r   )rZ   rp   rk   r&   r,   r.   r1   r2   pkgrootpkgroot_nametemplate_fileversion_fileconfra   s                 r:   r   z,CmakeModule.write_basic_package_version_file#  s    ""45/f~#  '))*@AA!'!66,?ggll5#4#4#=#=#H#HI[I[\dIe#fhoquvG77<<
GTBLT__iCVWdVeenAopww~~m,)),YZgYhhv*wxxww||E$5$5$A$AdVK^C_` ##&t'='=e>O>O'P#Q$46

 	m\5;R;RSW;XZabjj(--e.?.?.O.O.QS_`acjlxz~  AF  AQ  AQ  R se,,r9   c                   t         j                  d|      }|j                  dt        j                  j	                  |            }||z  }|t
        z  }	 t        |d      5 }|j                         }d d d        g }
t        j                  d      }D ]@  }|j                  d|      }t        j                  ||d|      \  }}|
j                  |       B |d	z   }t        |d
d      5 }|j                  |
       d d d        t        j                   ||       t        j"                  ||       y # 1 sw Y   xY w# t        $ r }	t        j                  d| d|	      d }	~	ww xY w# 1 sw Y   nxY w)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   get_variable_regexdo_replacementappend
writelinesshutilcopymodereplace_if_different)rZ   infileoutfilePACKAGE_RELATIVE_PATHextraconfdatapackage_initfindataeresultregexline_missingoutfile_tmpfouts                   r:   create_package_filezCmakeModule.create_package_fileJ  si   (001JLab#++,=rww?O?OPV?WX22	Xfw/ '3}}'
 ++H5 	 D<< 0,?D%44UD(HUND(MM$		  m+sW5 	$OOF#	$ 	,%%g{;%' ' 	X)),FvhbQRPU*VWW	X	$ 	$s<   D= "D13D= *E)1D:6D= =	E&E!!E&)E2z#cmake.configure_package_config_filer=   r>   c                F    t        | t              rt        |       dk7  rdS d S )Nr   zrequires exactly one file)rR   listrh   r`   s    r:   <lambda>zCmakeModule.<lambda>k  s&    ZPQSWEX]`ab]cgh]h&A nr r9   c                0    t        | t              r| d   S | S r   )rR   r  r  s    r:   r  zCmakeModule.<lambda>l  s    jD.Aad q r9   )r   r   	convertorc                :   |d   }t        |t              r?t        j                  j	                  |j
                  j                  |j                  |      }|j                  |j
                  j                  |j
                  j                        }|d   }t        j                  j                  t        j                  j                  |j                  | d            \  }}t        j                  j                  |j
                  j                  ||      }	|d   }
|
Wt        j                  j                  |j
                  j                  j                  t        j                   d            d|      }
|d   }t        |t"              rBt%        j&                  dd	|j(                  |j*                  
       t-        j.                  |      }|j
                  j                  j                  t        j                   d            }|
}t        j                  j1                  |      s t        j                  j                  ||
      }t3        j4                  t        j                  j7                  ||            j9                         }d}t;        j<                  d|      r(t>        jA                  d|      }|jA                  d|      }| jC                  ||	|||       d|_"        t        j                  jG                  |jI                               }| jJ                  jL                  jO                  |       t-        jP                  t        j                  d||      g|
|
d |j(                        }| jJ                  j,                  jR                  jU                  |       |S )Nr>   r1   zConfig.cmaker0   r   r   r=   z9cmake.configure_package_config_file dict as configurationr   )locationprefixr   z^(/usr)?/lib(64)?/.+z@absInstallDir@z@installPrefix@T)+rR   r-   r   r   from_source_filer   
source_dirsubdirabsolute_path	build_dirr   r   splitr   r   r   r   r   r   
single_user   current_noder
   r   isabsr   r   relpathas_posixr   r   PACKAGE_INIT_EXTr   r  usednormpathrelative_namer   build_def_filesaddr   r  r   )rZ   rp   rk   r&   	inputfile	ifile_absr1   
ofile_pathofile_fname	ofile_absr0   r   r  abs_install_dirr  r  conffilera   s                     r:   r   z)CmakeModule.configure_package_config_filee  s    7O	i% 66u7H7H7S7SUZUaUaclmI++E,=,=,H,H%J[J[JeJef	f~$&GGMM"'',,u||PTvUaMb2c$d![GGLL!2!2!<!<j+V	]+'',,u'8'8'A'A'L'LXM_M_`hMi'jlsuyzKo&dD!!!"]_giniyiy  EJ  EW  EW  X**40D""++66x7I7I(7ST%ww}}_- ggll6;?O !( 0 01Y Z c c e88*O<$,,->PEMM"3V<E  I7LeUYZ	77##I$;$;$=>((,,X6jj(--j+FGVacginiyiyz##**3/
r9   r   z0.51.0zcmake.subprojectrA   z0.55.0)r   rC   zUse options instead)r   listify
deprecateddeprecated_messagec                    |d   r|d   t        d      |d   }|d   |d   |d   i g d}| j                  j                  ||d      }|j                         s|S t	        |      S )	NrC   rA   z6"options" cannot be used together with "cmake_options"r   r   )r   rA   rC   default_optionsr2   r   )force_method)r   r   do_subprojectrQ   rI   )rZ   rp   rk   kwargs_dirnamekwrV   s          r:   r   zCmakeModule.subproject  s      ?#	(:(F&'_``q'
+y)$_5!#
 --gr-Pzz|Kt$$r9   r   c                    t               S r^   )r   ro   s       r:   r   zCmakeModule.subproject_options  s     &''r9   )r   r%   r   r   )r   r$   r   int)rp   r"   r   r+   )rp   r"   rk   r(   r&   z'WriteBasicPackageVersionFile'r   r   )r  r-   r  r-   r  r-   r  r-   r  zbuild.ConfigurationDatar   r   )rp   r"   rk   r(   r&   z'ConfigurePackageConfigFile'r   z
build.Data)rp   r"   rk   zT.Tuple[str]r9  r@   r   z*T.Union[SubprojectHolder, CMakeSubproject])rp   r"   rk   r(   r&   r'   r   r   )&r4   r5   r6   r   r   r   INFOrU   r   r   r   r   r   r+   r-   r   setCOMPATIBILITIESr   r   r  r
   r   r   r   r   r    r  r   r   r   r   r   r   r   r   r   r   r   s   @r:   r   r      s   NJgx(D	5. 0$dEJ/30AM]^abq^rMst&#-)S40- -<<6 -/E$;$;T#BTR''8x}}'MNY]rH	J 	&#-	*	 *X h'&,)4h?xPdC(4	
	% - (%  $h/(   0(r9   r   c                     t        | i |S r^   )r   )rk   r&   s     r:   
initializerB    s    '''r9   )rk   T.Anyr&   rC  r   r   )@
__future__r   r   r   os.pathr   r   typingTr   r   r   r   r   r
   r   r   r   r   r   r   r   r   interpreter.type_checkingr   r   r   r   interpreterbaser   r   r   r   r   r   r   r   r   r   r   r    TYPE_CHECKINGtyping_extensionsr!   r"   r#   r   r$   r%   r&   r'   r(   r*   r<   ExtractRequiredr@   r@  r   r%  r   rI   r   r   rB  r8   r9   r:   <module>rM     s    # 	     J J 2 2 8 * _ _   $ ??++)17y Y #V++ # ^ 
 	 N%l N%b3.\ 3.lM(/ M(^(r9   