
    -PhQ             	      X   U d Z ddlm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
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lZddlZddlmZmZ 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$m%Z% d	d
l&m'Z'm(Z( ej)        rgddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8  G d de,          Z9 G d de,          Z: ej;        dej<        e9e:f                   Z=ej<        de>f         Z? ej;        d          Z@ ej;        d          ZAg dZB G d d          ZCi ZDdeEd <   dd!lFmFZF  eGed"d#          r
ejH        d$gZInejH        gZIdaJd%eEd&<    G d' d(e'          ZK G d) d*e'          ZL ejM        d+          ZNdQdRd6ZOdQdSd8ZPdQdTd9ZQdUd=ZRdVd>ZSdWdAZTdXdDZU G dE dFe(ejV        G          ZW G dH dI          ZXdJZY G dK de(          ZZdYdQZ[dZdUZ\dVdWgZ]dXdYgZ^ G dZ d[ej_                  Z` e#ja        d#d#\           G d] d^ejb        e@                               Zc e#ja        d#d#\           G d_ d`ece@                               Zd e#ja        d#d#\           G da dbeceje        e@                                        Zf e#ja        d#d#\           G dc ddefeje        e@                  edeje        e@                                        Zgd[deZhd[dfZid[dgZjd[dhZkd[diZld[djZmd[dkZnd[dlZod[dmZpd[dnZqd[doZrd[dpZsd[dqZtd[drZud[dsZvd[dtZwd[duZx edv          d\dy            Zyd]dzZze#ja         G d{ d|                      Z{d^dZ|d[dZ} ej~        d          Z G d d          Zd_dZd`dZdadZdbdZdcdZd]dZd]dZd]dZd]dZd]dZd]dZd]dZd]dZd]dZd]dZdddedZdfdZdgdhdZ en            r&dZ ej~        de d          j        ZdidZdjdZn
didZdjdZdkdZdldZdmdZdndZ	 dddodZ	 dddpdÄZdqdrdńZ	 dddsdȄZ	 dddtdɄZ	 dddudʄZ	 dvdwdτZdZdZdxdڄZdyd݄Zdzd߄Zd{d|dZdQd}dZdQd~dZddZddZddZddZdej        ej        ej        fddZdej        ej        ej        fddZdddZdd
ZddZddZddZddZddZddZ G d de          Z	 	 ddd Zdd#Z G d$ d%ej        e@                   Zdd(ZdQdd,ZdQdd-Z G d. d/ej_                  Z G d0 d1          Z	 dd2lmZ  G d3 d4eŦ          ZeZn# e$ r eZǐd5eEd6<   Y nw xY w G d7 d8ej                  Z	 dddd<Zːdd?Z̐ddBZ͐d{ddHZΐddMZϐddNZ G dO dPejb        e@                   ZdS (  z)A library of random helper functionality.    )annotations)PathN)	lru_cachewrapstee)TemporaryDirectoryNamedTemporaryFile)mlog   )MesonExceptionHoldableObject)LiteralProtocol   )ImmutableListProtocol)ConfigurationData)StrOrBytesPath)Environment)Compiler)
SubProjectc                      e Zd ZU ded<   dS )_EnvPickleLoadabler   environmentN__name__
__module____qualname____annotations__     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/utils/universal.pyr   r   *   s               r!   r   c                      e Zd ZU ded<   dS )_VerPickleLoadablestrversionNr   r    r!   r"   r$   r$   .   s         r!   r$   _PL)boundFile_T_U)hGITpython_commandNoProjectVersionproject_meson_versionsSecondLevelHolderr)   FileModeGitExceptionLibTypeMachineChoiceEnvironmentExceptionFileOrStringr2   dump_conf_header
OrderedSet
PerMachinePerMachineDefaultablePerThreeMachinePerThreeMachineDefaultableProgressBarRealPathActionTemporaryDirectoryWinProofVersioncheck_direntry_issuesclassify_unity_sourcescurrent_vs_supports_modulesdarwin_get_object_archsdefault_libdirdefault_libexecdirdefault_prefixdefault_datadirdefault_includedirdefault_infodirdefault_localedirdefault_mandirdefault_sbindirdefault_sysconfdirdetect_subprojects
detect_vcsdetermine_worker_countdo_conf_filedo_conf_strdo_replacementexpand_argumentsextract_as_listfirstgenerate_listget_compiler_for_sourceget_filenames_templates_dictget_rsp_thresholdget_variable_regexget_wine_shortpathgithas_path_sepis_aix
is_androidis_ascii_string	is_cygwinis_debianlikeis_dragonflybsd
is_freebsdis_haikuis_hurdis_irixis_linux	is_netbsd
is_openbsdis_osxis_parent_pathis_qnxis_sunos
is_windowsis_wsliter_regexin_iter	join_argslazy_propertylistifylistify_array_value	partitionpath_is_in_rootpickle_load
Popen_safePopen_safe_logged	quiet_git	quote_argrelative_to_if_possiblerelpathreplace_if_differentrun_onceget_meson_commandset_meson_command
split_argsstringlistifysubstitute_valuessubstring_is_in_listtypeslistifyverbose_gitversion_compare"version_compare_condition_with_minversion_compare_manysearch_versionwindows_detect_native_archwindows_proof_rmwindows_proof_rmtreec                      e Zd ZdS )r.   N)r   r   r   r    r!   r"   r.   r.      s        Dr!   r.   z+T.Dict[str, T.Union[str, NoProjectVersion]]r/   )globfrozenF	runpython(T.Optional['ImmutableListProtocol[str]']_meson_commandc                      e Zd ZdZdS )r5   zEExceptions thrown while processing and creating the build environmentN)r   r   r   __doc__r    r!   r"   r5   r5      s        OOOOr!   r5   c                  "     e Zd Zdd fdZ xZS )	r2   Nmsgr%   outputT.Optional[str]c                    t                                          |           |r|                                nd| _        d S )N )super__init__stripr   )selfr   r   	__class__s      r"   r   zGitException.__init__   s7    (.6fllnnnBr!   N)r   r%   r   r   r   r   r   r   __classcell__r   s   @r"   r2   r2      sB        7 7 7 7 7 7 7 7 7 7 7r!   r2   r^   cmdT.List[str]
workingdirr   checkboolkwargsT.Anyreturn(T.Tuple[subprocess.Popen[str], str, str]c                    t           
J d            t           g| } t          | fd|i|\  }}}|r+|j        dk    r t          dt	          |           z   |          |||fS )Nz"Callers should make sure it existscwdr   zGit command failed: )r,   r{   
returncoder2   r%   )r   r   r   r   poes          r"   r^   r^      sy    ??@???++C77*777GAq! A""1CHH<a@@@a7Nr!   T.Tuple[bool, str]c                    t           sd}|rt          |          d|fS t          | ||          \  }}}|j        dk    rd|fS d|fS )NGit program not found.Fr   Tr,   r2   r^   r   )r   r   r   mr   r   r   s          r"   r}   r}      sb     $ 	"q//!ax#z5))GAq!|qax7Nr!   c                    t           sd}|rt          |          dS t          | ||d d           \  }}}|j        dk    S )Nr   Fstdoutstderrr   r   )r   r   r   r   r   _s         r"   r   r      sS     $ 	"q//!u#z5dCCCGAq!<1r!   mainfiler%   Nonec                (   |                      d          s| ganLt          j                            |           r"|                      d          rt
          ddgz   ant
          | gz   adt          j        v rt          j        dt                     d S d S )Nz.pyzmesonmain.pyz-mzmesonbuild.mesonmainMESON_COMMAND_TESTSzmeson_command is )	endswithr   ospathisabsr-   environr   log)r   s    r"   r   r      s     U## 5"	x	 	  5X%6%6~%F%F 5'41G*HH (8*4
**7^7788888 +*r!   c                     t           S r   )r   r    r!   r"   r   r      s    r!   astringT.Union[str, bytes]c                    	 t          | t                    r|                     d           n*t          | t                    r|                     d           n# t
          $ r Y dS w xY wdS )NasciiFT)
isinstancer%   encodebytesdecodeUnicodeDecodeError)r   s    r"   rb   rb      sz    gs## 	$NN7####'' 	$NN7###   uu4s   AA 
A&%A&direntry_array4T.Union[T.Iterable[T.Union[str, bytes]], str, bytes]c           
     L   dd l }|                                }|                                dk    rot                      sct	          | t
          t          f          r| g} | D ]C}t          |          rt          j	        t          j        d|d|d                     @d S d S d S )Nr   UTF-8z
                You are using zr which is not a Unicode-compatible
                locale but you are trying to access a file system entry called zS which is
                not pure ASCII. This may cause problems.
                )localegetpreferredencodingupperrq   r   r%   r   rb   r   warningtextwrapdedent)r   r   r   des       r"   rA   rA     s    MMM
 	##%%AwwyyGJLLnsEl33 	.,-N  	 	Br"" L * * *PR* * *       	 	r!   c                  4    e Zd ZdZej        dd            ZdS )r0   z A second level object holder. The primary purpose
        of such objects is to hold multiple objects with one
        default option. r   r   c                    d S r   r    r   s    r"   get_default_objectz$SecondLevelHolder.get_default_object  s    47Cr!   N)r   r   )r   r   r   r   abcabstractmethodr   r    r!   r"   r0   r0     s6          	777 777r!   r0   )	metaclassc                  \    e Zd Z ej        d          Z	 	 dddZddZedd            Z	dS )r1   z*[r-][w-][xsS-][r-][w-][xsS-][r-][w-][xtT-]Npermsr   ownerT.Union[str, int, None]groupc                d    || _         |                     |          | _        || _        || _        d S r   )perms_sperms_s_to_bitsr   r   r   )r   r   r   r   s       r"   r   zFileMode.__init__7  s0    ))%00




r!   r   r%   c                R    d}|                     | j        | j        | j                  S )Nz!<FileMode: {!r} owner={} group={})formatr   r   r   r   rets     r"   __repr__zFileMode.__repr__>  s#    1zz$,
DJ???r!   r   intc                x   |dS d}t          |t                    st          d|          t          |          dk    s| j                            |          st          d|d|          d}|d         d	k    r|t          j        z  }|d
         dk    r|t          j        z  }|d         dk    r|t          j	        z  }nF|d         dk    r|t          j
        z  }n*|d         dk    r|t          j	        z  }|t          j
        z  }|d         d	k    r|t          j        z  }|d         dk    r|t          j        z  }|d         dk    r|t          j        z  }nF|d         dk    r|t          j        z  }n*|d         dk    r|t          j        z  }|t          j        z  }|d         d	k    r|t          j        z  }|d         dk    r|t          j        z  }|d         dk    r|t          j        z  }nF|d         dk    r|t          j        z  }n*|d         dk    r|t          j        z  }|t          j        z  }|S )z
        Does the opposite of stat.filemode(), converts strings of the form
        'rwxr-xr-x' to st_mode enums which can be passed to os.chmod()
        Nz	rwxr-xr-xz-Install perms must be a string. For example, 	   zFile perms z' must be exactly 9 chars. For example, r   rr   wr   xSs                  Tt)r   r%   r   lensymbolic_perms_regexmatchstatS_IRUSRS_IWUSRS_IXUSRS_ISUIDS_IRGRPS_IWGRPS_IXGRPS_ISGIDS_IROTHS_IWOTHS_IXOTHS_ISVTX)clsr   egr   s       r"   r   zFileMode.perms_s_to_bitsB  sT    ?2'3'' 	Y !WQS!W!WXXXw<<1C$<$B$B7$K$K !gw!g!gac!g!ghhh1:T\!E1:T\!E1:T\!EEQZ3T\!EEQZ3T\!ET\!E1:T\!E1:T\!E1:T\!EEQZ3T\!EEQZ3T\!ET\!E1:T\!E1:T\!E1:T\!EEQZ3T\!EEQZ3T\!ET\!Er!   )NNN)r   r   r   r   r   r   r   r%   )r   r   r   r   )
r   r   r   recompiler  r   r   classmethodr   r    r!   r"   r1   r1     s        , &2: '7 8 8 X\26    @ @ @ @ 2 2 2 [2 2 2r!   r1   a  You are using .C or .H files in your project. This is deprecated.
         Currently, Meson treats this as C++ code, but they
            used to be treated as C code.
         Note that the situation is a bit more complex if you are using the
         Visual Studio compiler, as it treats .C files as C code, unless you add
         the /TP compiler flag, but this is unreliable.
         See https://github.com/mesonbuild/meson/pull/8747 for the discussions.c                     e Zd Zd(dZd)dZd)d	Ze ed
          d*d                        Ze ed
          d+d                        Z	e ed
          d,d                        Z
ed-d            Z ed
          d.d            Z ed
          d/d            Zed)d            Zd0dZd1d2d!Zd1d2d"Zd3d%Zd4d&Z ed
          d)d'            Zd
S )5r)   is_builtr   subdirr%   fnamec                    |                     d          s|                     d          rt          j        t          d           || _        || _        || _        t          |||f          | _        d S )Nz.Cz.HT)once)r   r   r   dot_C_dot_H_warningr  r  r  hash)r   r  r  r  s       r"   r   zFile.__init__  sn    >>$ 	95>>$#7#7 	9L,48888 
(FE233			r!   r   c                *    |                                  S r   )relative_namer   s    r"   __str__zFile.__str__  s    !!###r!   c                v    d}| j         s|dz  }|dz  }|                    |                                           S )Nz
<File: {0}z (not built)>)r  r   r%  r   s     r"   r   zFile.__repr__  sB    } 	">!Cs
zz$,,..///r!   Nmaxsizesource_rootc                    t           j                            t           j                            | ||                    st	          d| d          t          d||          S )NzFile z does not exist.F)r   r   isfilejoinr   r)   )r+  r  r  s      r"   from_source_filezFile.from_source_file  sY     w~~bgll;FFGG 	B !@!@!@!@AAAE65)))r!   'File'c                $    t          d| |          S )NTr)   )r  r  s     r"   from_built_filezFile.from_built_file  s     D&%(((r!   relativec                |    t           j                            |           \  }}t                              ||          S r   )r   r   splitr)   r3  )r4  dirpart	fnameparts      r"   from_built_relativezFile.from_built_relative  s2      W]]844##GY777r!   c                $    t          dd|           S )NFr   r2  )r  s    r"   from_absolute_filezFile.from_absolute_file  s    E2u%%%r!   build_to_srcc                    | j         r|                                 S t          j                            || j        | j                  S r   )r  r%  r   r   r.  r  r  )r   r<  s     r"   rel_to_builddirzFile.rel_to_builddir  s;    = 	G%%'''7<<dk4:FFFr!   srcdirbuilddirc                |    |}| j         r|}t          j                            ||                                           S r   )r  r   r   r.  r%  )r   r?  r@  absdirs       r"   absolute_pathzFile.absolute_path  s8    = 	Fw||FD$6$6$8$8999r!   c                    t           j                            | j                  d         dd                                          S )Nr   )r   r   splitextr  lowerr   s    r"   suffixzFile.suffix  s4    w
++A.qrr288:::r!   endingT.Union[str, T.Tuple[str, ...]]c                6    | j                             |          S r   )r  r   )r   rH  s     r"   r   zFile.endswith  s    z""6***r!   r   r   maxsplitr   r   c                :    | j                             ||          S N)rK  )r  r6  r   r   rK  s      r"   r6  z
File.split  s    zH555r!   c                :    | j                             ||          S rM  )r  rsplitrN  s      r"   rP  zFile.rsplit  s    z  X 666r!   otherobjectc                    t          |t                    st          S | j        |j        k    rdS | j        | j        | j        f|j        |j        |j        fk    S )NF)r   r)   NotImplementedr#  r  r  r  r   rQ  s     r"   __eq__zFile.__eq__  sU    %&& 	"!!9
""5
DK7EKW\We;fffr!   c                    | j         S r   )r#  r   s    r"   __hash__zFile.__hash__  s
    yr!   c                V    t           j                            | j        | j                  S r   )r   r   r.  r  r  r   s    r"   r%  zFile.relative_name  s    w||DK444r!   )r  r   r  r%   r  r%   r  )r+  r%   r  r%   r  r%   r   r)   )r  r%   r  r%   r   r0  )r4  r%   r   r0  )r  r%   r   r0  )r<  r%   r   r%   )r?  r%   r@  r%   r   r%   )rH  rI  r   r   )r   )r   r%   rK  r   r   r   rQ  rR  r   r   r   r   )r   r   r   r   r&  r   staticmethodr   r/  r3  r9  r;  r>  rC  propertyrG  r   r6  rP  rV  rX  r%  r    r!   r"   r)   r)   ~  s8       4 4 4 4$ $ $ $0 0 0 0 Yt* * *  \*
 Yt) ) )  \) Yt8 8 8  \8 & & & \& YtG G G G Yt: : : : ; ; ; X;+ + + +6 6 6 6 67 7 7 7 7g g g g    Yt5 5 5 5 5 5r!   	compilersT.Iterable['Compiler']src'FileOrString'
'Compiler'c                b    | D ]}|                     |          r|c S t          d|          )zNGiven a set of compilers and a source, find the compiler for that source type.z&No specified compiler can handle file )can_compiler   )r^  r`  comps      r"   rY   rY     sL      C   	KKK	
I#II
J
JJr!   sourcesT.Sequence['FileOrString']*T.Dict['Compiler', T.List['FileOrString']]c                    i }|D ]8}t          | |          }||vr|g||<   ||                             |           9|S r   )rY   append)r^  rf  compsrclistr`  re  s        r"   rB   rB     sa    >@K * *&y#66{""!$K$$S))))r!   buildhostzbuild.r   c                  2    e Zd ZdZdZdZd
dZd
dZd
dZd	S )r4   zzEnum class representing one of the two abstract machine names used in
    most places: the build, and host, machines.
    r   r   r   r%   c                0    |                                   dS )Nz machine)get_lower_case_namer   s    r"   r&  zMachineChoice.__str__  s    **,,6666r!   c                &    t           | j                 S r   )MACHINE_NAMESvaluer   s    r"   rp  z!MachineChoice.get_lower_case_name  s    TZ((r!   c                &    t           | j                 S r   )MACHINE_PREFIXESrs  r   s    r"   
get_prefixzMachineChoice.get_prefix  s    
++r!   Nr  )	r   r   r   r   BUILDHOSTr&  rp  rv  r    r!   r"   r4   r4     sf          ED7 7 7 7) ) ) ), , , , , ,r!   r4   )eqorderc                  D    e Zd ZU ded<   ded<   ddZdd
ZddZddZdS )r9   r*   rl  rm  machiner4   r   c                4    | j         | j        g|j                 S r   )rl  rm  rs  r   r|  s     r"   __getitem__zPerMachine.__getitem__   s    
DI&w}55r!   valr   c                L    t          | |                                |           d S r   )setattrrp  )r   r|  r  s      r"   __setitem__zPerMachine.__setitem__  s&    g1133S99999r!   %PerMachineDefaultable[T.Optional[_T]]c                    t                      }| j        |_        | j        |_        |j        |j        k    rd|_        |S a  Unset definition duplicated from their previous to None

        This is the inverse of ''default_missing''. By removing defaulted
        machines, we can elaborate the original and then redefault them and thus
        avoid repeating the elaboration explicitly.
        N)r:   rl  rm  r   unfreezes     r"   miss_defaultingzPerMachine.miss_defaulting  s=     ;P:Q:Q	=HN** HMr!   c                "    || _         || _        d S r   )rl  rm  )r   rl  rm  s      r"   assignzPerMachine.assign  s    
			r!   N)r|  r4   r   r*   )r|  r4   r  r*   r   r   )r   r  )rl  r*   rm  r*   r   r   )r   r   r   r   r  r  r  r  r    r!   r"   r9   r9     sx         IIIHHH6 6 6 6: : : :        r!   r9   c                  .    e Zd ZU dZded<   ddZdd
ZdS )r;   zLike `PerMachine` but includes `target` too.

    It turns out just one thing do we need track the target machine. There's no
    need to computer the `target` field so we don't bother overriding the
    `__getitem__`/`__setitem__` methods.
    r*   targetr   ,'PerThreeMachineDefaultable[T.Optional[_T]]'c                    t                      }| j        |_        | j        |_        | j        |_        |j        |j        k    rd|_        |j        |j        k    rd|_        |S r  )r<   rl  rm  r  r  s     r"   r  zPerThreeMachine.miss_defaulting$  s]     @Z?[?[	+?hm++"HO=HN** HMr!   r|  r4   r   c                $    | j         | |         k    S r   )rl  r~  s     r"   matches_build_machinez%PerThreeMachine.matches_build_machine5  s    zT']**r!   N)r   r  )r|  r4   r   r   )r   r   r   r   r   r  r  r    r!   r"   r;   r;     sS           JJJ   "+ + + + + +r!   r;   c                  P    e Zd ZU dZdZded<   dZded<   ddZedd            Z	dS )r:   zCExtends `PerMachine` with the ability to default from `None`s.
    NT.Optional[_T]rl  rm  r   PerMachine[_T]c                t    | j         
J d            t          | j         | j        | j        n| j                   S )zDefault host to build

        This allows just specifying nothing in the native case, and just host in the
        cross non-compiler case.
        Nz0Cannot fill in missing when all fields are empty)rl  r9   rm  r   s    r"   default_missingz%PerMachineDefaultable.default_missingA  s<     z%%'Y%%%$*493HdiidjYYYr!   is_crossr   r*   c                R     | |          }|r||_         |                                S )a@  Easy way to get a defaulted value

        This allows simplifying the case where you can control whether host and
        build are separate or not with a boolean. If the is_cross value is set
        to true then the optional host value will be used, otherwise the host
        will be set to the build value.
        )rm  r  )r  r  rl  rm  r   s        r"   defaultzPerMachineDefaultable.defaultJ  s2     CJJ 	AF  """r!   )r   r  )r  r   rl  r*   rm  r*   r   r  )
r   r   r   r   rl  r   rm  r  r  r  r    r!   r"   r:   r:   9  s|           !E    DZ Z Z Z # # # [# # #r!   r:   c                  *    e Zd ZU dZdZded<   ddZdS )	r<   zHExtends `PerThreeMachine` with the ability to default from `None`s.
    Nr  r  r   PerThreeMachine[_T]c                    | j         
J d            | j        | j        n| j         }| j        | j        n|}t          | j         ||          S )zDefault host to build and target to host.

        This allows just specifying nothing in the native case, just host in the
        cross non-compiler case, and just target in the native-built
        cross-compiler case.
        Nz4Cannot default a PerMachine when all values are None)rl  rm  r  r;   )r   rm  r  s      r"   r  z*PerThreeMachineDefaultable.default_missing`  sU     z%%']%%% I1tyytz $ 7Ttz4888r!   )r   r  )r   r   r   r   r  r   r  r    r!   r"   r<   r<   Y  sG           "F!!!!
9 
9 
9 
9 
9 
9r!   r<   c                 T    t          j                                                    dk    S )NsunosplatformsystemrF  r    r!   r"   rp   rp   m  !    ?""$$//r!   c                 T    t          j                                                    dk    S )Ndarwinr  r    r!   r"   rm   rm   q  !    ?""$$00r!   c                 T    t          j                                                    dk    S )Nlinuxr  r    r!   r"   rj   rj   u  r  r!   c                 T    t          j                                                    dk    S )Nandroidr  r    r!   r"   ra   ra   y  !    ?""$$	11r!   c                 T    t          j                                                    dk    S )Nhaikur  r    r!   r"   rg   rg   }  r  r!   c                 T    t          j                                                    dk    S )Nopenbsdr  r    r!   r"   rl   rl     r  r!   c                 X    t          j                                                    } | dk    S )Nwindowsr  )platnames    r"   rq   rq     s&      &&((Hy  r!   c                 l    t                      o&dt          j                                                    v S )N	microsoft)rj   r  releaserF  r    r!   r"   rr   rr     s+    ::C+)9););)A)A)C)CCCr!   c                 "    t           j        dk    S )Ncygwin)sysr  r    r!   r"   rc   rc     s    <8##r!   c                 @    t           j                            d          S )Nz/etc/debian_version)r   r   r-  r    r!   r"   rd   rd     s    7>>/000r!   c                 T    t          j                                                    dk    S )N	dragonflyr  r    r!   r"   re   re     s!    ?""$$33r!   c                 T    t          j                                                    dk    S )Nnetbsdr  r    r!   r"   rk   rk     r  r!   c                 T    t          j                                                    dk    S )Nfreebsdr  r    r!   r"   rf   rf     r  r!   c                 N    t          j                                        d          S )Nirix)r  r  
startswithr    r!   r"   ri   ri     s    ?''///r!   c                 T    t          j                                                    dk    S )Ngnur  r    r!   r"   rh   rh     !    ?""$$--r!   c                 T    t          j                                                    dk    S )Nqnxr  r    r!   r"   ro   ro     r  r!   c                 T    t          j                                                    dk    S )Naixr  r    r!   r"   r`   r`     r  r!   r)  objpath'ImmutableListProtocol[str]'c                .   t          dd| g          \  }}}|st          j        d|  d|            dS |                    dd          d         }dddd	d	d
|                                }fd|D             }d|v r|                    d           |S )z
    For a specific object (executable, static library, dylib, etc), run `lipo`
    to fetch the list of archs supported by it. Supports both thin objects and
    'fat' objects.
    lipoz-infozlipo : Nr   x86aarch64ppc)i386arm64arm64eppc7400ppc970c                <    g | ]}                     ||          S r    )get).0	lipo_archmap_archs     r"   
<listcomp>z+darwin_get_object_archs.<locals>.<listcomp>  s'    RRR)8<<	955RRRr!   armv7arm)r{   r   debugrP  r6  rj  )r  r   stdor   
lipo_archsmeson_archsr  s         @r"   rD   rD     s     !&'7!;<<OAtV 
.7..f..///t;;tQ"D  H JRRRRzRRRK $5!!!r!   c                    t           j        dk    rdS 	 ddl} |                                 }|                                 }| j        j        }|                     |                                          }|                    || 	                    |          | 	                    |                    r4|j
        dk    rdS |j
        dk    rdS |j
        d	k    rd
S |j
        dk    rdS n# t          t          f$ r Y nw xY wt          j                            dd                                          }|sC	 t          j        d                                         }n# t"          $ r t%          d          w xY w|S )zA
    The architecture of Windows itself: x86, amd64 or arm64
    win32r   r   Nid  amd64iL  r  id  r  i  r  PROCESSOR_ARCHITEW6432PROCESSOR_ARCHITECTUREz'Unable to detect native OS architecture)r  r  ctypesc_ushortwindllkernel32c_void_pGetCurrentProcessIsWow64Process2byrefrs  OSErrorAttributeErrorr   r   r  rF  KeyErrorr5   )r  process_archnative_archr  processarchs         r"   r   r     s    |wr((oo''=)//("<"<">">??##GV\\,-G-GVaIbIbcc 		 F**w"f,,u"f,,w"f,,u^$   
 :>>2B77==??D R	R:67==??DD 	R 	R 	R&'PQQQ	RKs0   B'C% =C% 
C% C% %C98C91$E E0c                  Z    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   d	Zd
ed<   d	S )VcsDatar%   namer   repo_dirr   get_rev	rev_regexdepNr   wc_dir)r   r   r   r   r  r    r!   r"   r  r    s\         IIIHHHMMMNNNHHH"F""""""r!   r  
source_dirT.Union[str, Path]T.Optional[VcsData]c                8   t          dddg ddd          t          ddd	g d
dd          t          dddddgdd          t          dddddgdd          g}t          | t                    rt          |           } t	          j        | j                  }|                    |            |D ]j}|D ]e}|j        }|j	        }|
                    |                                          r.t          j        |          rt          |          |_        |c c S fkd S )Nr^   z.git)r^   describez	--dirty=+z--alwaysz(.*)z.git/logs/HEAD)r  r   r  r  r  r  	mercurialhgz.hg)r  idz-iz.hg/dirstate
subversionsvnz.svninfozRevision: (.*)z
.svn/wc.dbbazaarbzrz.bzrrevno)r  r   r%   r   collectionsdequeparents
appendleftr  r   joinpathis_dirshutilwhichr  )r  vcs_systemsparent_paths_and_selfcurdirvcsrepodirr   s          r"   rP   rP     s   BBB"	
 	
 	
 	(((	
 	
 	
 	fo(	
 	
 	
 	g&	
 	
 	
3!KD *c"" &*%%
'-j.@AA $$Z000'   	 	ClG'Cw''..00 V\#5F5F  [[





	 4r!   c                    t           j                            dd          } |                     dd          }t	          |d                   }|dk    rdS |dk    rt	          |d	                   d
k    rdS |                     d          od| v S )N	VSCMD_VERr   .r   r      T   r   
   z16.9.0z-pre.)r   r   r  r6  r   r  )vsvernumsmajors      r"   rC   rC   +  s    JNN;++E;;sADQLLE{{t{{s47||r))tH%%:'U*::r!   z(\d+)|([a-zA-Z]+)c                  ^    e Zd ZddZddZddZddZddZddZddZ	ddZ
ddZddZdS )r@   r   r%   r   r   c                f    || _         d t                              |          D             | _        d S )Nc                    g | ]N}|                     d           r"t          |                     d                     n|                     d          OS )r   r   )r   r   )r  r   s     r"   r  z$Version.__init__.<locals>.<listcomp>>  sU     6 6 6 $%771::=AGGAJJ1771::6 6 6r!   )_s_VERSION_TOK_REfinditer_v)r   r   s     r"   r   zVersion.__init__9  s;    6 6(11!446 6 6r!   c                \    d                     | j        t          | j                            S )Nz	{} (V={}))r   r%  r%   r(  r   s    r"   r&  zVersion.__str__B  s"    !!$'3tw<<888r!   c                    d| j          dS )Nz
<Version: r(  )r%  r   s    r"   r   zVersion.__repr__E  s    &DG&&&&r!   rQ  rR  r   c                z    t          |t                    r |                     |t          j                  S t
          S r   )r   r@   _Version__cmpoperatorltrT  rU  s     r"   __lt__zVersion.__lt__H  0    eW%% 	2::eX[111r!   c                z    t          |t                    r |                     |t          j                  S t
          S r   )r   r@   r,  r-  gtrT  rU  s     r"   __gt__zVersion.__gt__M  r0  r!   c                z    t          |t                    r |                     |t          j                  S t
          S r   )r   r@   r,  r-  lerT  rU  s     r"   __le__zVersion.__le__R  r0  r!   c                z    t          |t                    r |                     |t          j                  S t
          S r   )r   r@   r,  r-  gerT  rU  s     r"   __ge__zVersion.__ge__W  r0  r!   c                Z    t          |t                    r| j        |j        k    S t          S r   r   r@   r(  rT  rU  s     r"   rV  zVersion.__eq__\  )    eW%% 	'7eh&&r!   c                Z    t          |t                    r| j        |j        k    S t          S r   r;  rU  s     r"   __ne__zVersion.__ne__a  r<  r!   	'Version'
comparator T.Callable[[T.Any, T.Any], bool]c                F   t          | j        |j                  D ]W\  }}t          |t                    }t          |t                    }||k    r |||          c S ||k    r |||          c S X |t	          | j                  t	          |j                            S r   )zipr(  r   r   r  )r   rQ  r@  ourstheirsours_is_inttheirs_is_ints          r"   __cmpzVersion.__cmpf  s    22 	0 	0LD&$T3//K&vs33Mm++!z+}=====v~~!z$///// 
 z#dg,,EH666r!   N)r   r%   r   r   r  rZ  )rQ  r?  r@  rA  r   r   )r   r   r   r   r&  r   r/  r3  r6  r9  rV  r>  r,  r    r!   r"   r@   r@   8  s        6 6 6 69 9 9 9' ' ' '   
   
   
   
   
   
7 7 7 7 7 7r!   r@   vstr2.T.Tuple[T.Callable[[T.Any, T.Any], bool], str]c                   |                      d          rt          j        }| dd          } n|                      d          rt          j        }| dd          } n|                      d          rt          j        }| dd          } n|                      d          rt          j        }| dd          } n|                      d          rt          j        }| dd          } nd|                      d          rt          j        }| dd          } n8|                      d	          rt          j        }| dd          } nt          j        }|| fS )
N>=r   <=!====r   r(  <)r  r-  r8  r5  nery  r2  r.  )rI  cmpops     r"   _version_extract_cmpoprT  w  sG    abb				$		 abb				$		 abb				$		 abb				#		 
abb				#		 abb				#		 abb	5>r!   vstr1c                r    t          |          \  }} |t          |           t          |                    S r   )rT  r@   )rU  rI  rS  s      r"   r   r     s1    +E22NUE5000r!   
conditionsT.Union[str, T.Iterable[str]]'T.Tuple[bool, T.List[str], T.List[str]]c                    t          |t                    r|g}g }g }|D ]=}t          | |          s|                    |           (|                    |           >| ||fS r   )r   r%   r   rj  )rU  rW  found	not_foundreqs        r"   r   r     s    *c"" " \
EI  uc** 	S!!!!LL=)U**r!   	conditionminimumc           	        |                      d          rt          j        }| dd          } n|                      d          rdS |                      d          rdS |                      d          rt          j        }| dd          } n{|                      d          rt          j        }| dd          } nO|                      d	          rt          j        }| dd          } n#|                      d
          rdS t          j        }|                                 } t          j        d|           r| dz  } t          j        d |t          |          t          |                               S )NrL  r   rM  FrN  rO  rP  r   r(  rQ  z	^\d+.\d+$z.0r   )
r  r-  r5  r.  r   r  r  r  castr@   )r^  r_  rS  s      r"   r   r     sg   D!! abbM					d	#	# u			d	#	# u			d	#	# abbM					c	"	" 	abbM					c	"	" abbM					c	"	" u !!I	xi(( T	6&%% 0 0')2D2DEEFFFr!   textc                   t          j        dt           j                  }|                    |           }|r|                    d          S t          j        d          }|                    |           }|r|                    d          S dS )NaS  
    (?<!                # Zero-width negative lookbehind assertion
        (
            \d          # One digit
            | \.        # Or one period
        )               # One occurrence
    )
    # Following pattern must not follow a digit or period
    (
        \d{1,2}         # One or two digits
        (
            \.\d+       # Period and one or more digits
        )+              # One or more occurrences
        (
            -[a-zA-Z0-9]+   # Hyphen and one or more alphanumeric
        )?              # Zero or one occurrence
    )                   # One occurrence
    r   z(\d{1,4}\.\d{1,4}\.?\d{0,4})zunknown version)r  r  VERBOSEsearchr   )rb  version_regexr  s      r"   r   r     s     J  " 
# M$   &&E {{1~~ J>??M  &&E {{1~~r!   c                    t                      r	 t          j        ddgt          j        t          j                  } |                                 \  }}| j        dk    r+|                                                                }d|z   S n# t          $ r Y nw xY wt                      st                      rdS t          j                            d          r!t          j                            d          sdS dS )	Nzdpkg-architecturez-qDEB_HOST_MULTIARCHr   r   zlib/libz
/usr/lib64lib64)rd   
subprocessPopenPIPEDEVNULLcommunicater   r   r   	Exceptionrf   ri   r   r   isdirislink)pcr  r   archpaths       r"   rE   rE     s     
		!#68N"O)3)3);= = =B ((IT1}!!;;==..00(( "  	 	 	D	|| wyy u	w}}\"" 27>>,+G+G w5s   A9B 
BBc                 &    t                      rdS dS )Nrh  libexecrg   r    r!   r"   rF   rF     s    zz u9r!   c                 F    t                      rdS t                      rdS dS )Nzc:/z/boot/system/non-packagedz
/usr/local)rq   rg   r    r!   r"   rG   rG     s*    || uzz +**<r!   c                 &    t                      rdS dS )Ndatasharerv  r    r!   r"   rH   rH     s    zz v7r!   c                 &    t                      rdS dS )Nzdevelop/headersincluderv  r    r!   r"   rI   rI   !  s    zz !  9r!   c                 &    t                      rdS dS )Nzdocumentation/infoz
share/inforv  r    r!   r"   rJ   rJ   '  s    zz $##<r!   c                 &    t                      rdS dS )Nzdata/localezshare/localerv  r    r!   r"   rK   rK   -  s    zz }>r!   c                 &    t                      rdS dS )Nzdocumentation/manz	share/manrv  r    r!   r"   rL   rL   3  s    zz #"";r!   c                 &    t                      rdS dS )Nbinsbinrv  r    r!   r"   rM   rM   9  s    zz u6r!   c                 &    t                      rdS dS )Nsettingsetcrv  r    r!   r"   rN   rN   ?  s    zz z5r!   varnamesT.Optional[T.List[str]]r   c                b   d}| pg } |                      d           | D ]c}|t          j        v rS	 t          t          j        |                   }|dk     rt          ># t          $ r t          d| d           d}Y _w xY wd|dk    r'	 t          j                    }n# t          $ r d}Y nw xY w|S )Nr   MESON_NUM_PROCESSESzInvalid value in z, using 1 thread.r   )	rj  r   r   r   
ValueErrorprintmultiprocessing	cpu_countro  )r  num_workersvarnames      r"   rQ   rQ   E  s    K~2H OO)***    bj   !"*W"566??$$ #      D'DDDEEE  ! a	 *355KK 	 	 	KKK	s#   ,AA>=A>	B B,+B,parenttrialc                   t           j                            |           t           j                            |          k    sJ t                      r,|                     dd          } |                    dd          }|                     d          }|                    d          }d |D             }d |D             }t          |          }t          |          |k    o|d|         |k    S )a+  Checks if @trial is a file under the directory @parent. Both @trial and @parent should be
       adequately normalized, though empty and '.' segments in @parent and @trial are accepted
       and discarded, matching the behavior of os.path.commonpath.  Either both or none should
       be absolute.\/c                "    g | ]}||d k    
|S r  r    r  cs     r"   r  z"is_parent_path.<locals>.<listcomp>k  s"    >>>!q>Q#XXAXXXr!   c                "    g | ]}||d k    
|S r  r    r  s     r"   r  z"is_parent_path.<locals>.<listcomp>l  s"    <<<Q<1881888r!   N)r   r   r   rq   replacer6  r  )r  r  split_parentsplit_trial
componentss        r"   rn   rn   ^  s    
 7==  BGMM%$8$88888|| )c**dC((<<$$L++c""K>>|>>>L<<k<<<K\""J{z)Vk+:+.F,.VVr!   /\r  sepc                    |D ]	}|| v r dS 
dS )z@Checks if any of the specified @sep path separators are in @nameTFr    )r  r  eachs      r"   r_   r_   r  s+      4<<44 5r!   z 	
[z"]argc                    | rt          |           s| S d}d}| D ])}|dk    r|dz  }|dk    r|dz  dz   }||dz  |z   z  }d}*||dz  dz  dz   z  }|S )N"r   r  r   r   )_find_unsafe_char)r  resultnum_backslashesr  s       r"   r~   r~     s     	(-- 	J 		$ 		$ADyy1$88&5&9A&=O/D0144"# 	?Q&$.44r!   c                4   g }d}d}d}d}| D ]q}|dk    r|dz  }|dk    r|dz  s||dz  dz  z  }|dz  }| }nB|t           v r |s|s|r|                    |           d}d}n|dk    r|dz
  dz  }||dz  |z   z  }d}r|s|r|                    |           |S )Nr   r   Fr  r   r  r   )_whitespacerj  )r   r  r  r  
num_quotes	in_quotesr  s          r"   r   r     s    
	 	$ 	$ADyy1$88Oa$78Oq0D88C!OJ$-II+%%i% 'j 'c*** %&
Cxx+:Q+>1*D?T1A55C"# 	* 	MM#r!   c                *    t          j        |           S r   )shlexquote)r  s    r"   r~   r~         {3r!   c                *    t          j        |           S r   )r  r6  )r   s    r"   r   r     r  r!   argsT.Iterable[str]c                @    d                     d | D                       S )N c                ,    g | ]}t          |          S r    )r~   )r  r   s     r"   r  zjoin_args.<locals>.<listcomp>  s    000aYq\\000r!   )r.  )r  s    r"   rt   rt     s#    88004000111r!   regexT.Pattern[str]linevariable_format#Literal['meson', 'cmake', 'cmake@']confdataHT.Union[T.Dict[str, T.Tuple[str, T.Optional[str]]], 'ConfigurationData']T.Tuple[str, T.Set[str]]c                    |dk    rt          | ||          S |dv rt          | ||dk    |          S t          d          Nmeson>   cmakecmake@r  zInvalid variable format)do_replacement_mesondo_replacement_cmaker   )r  r  r  r  s       r"   rT   rT     sU     '!!#E4:::	/	/	/#E4H1LhWWW6777r!   c                `    t                      dfd}t          j        | ||          fS )Nr  T.Match[str]r   r%   c                   |                      d                              d          r3|                     d          |                     d          z
  }d|dz  z  S |                                                     d           |                      d          dd         dz   S |                      d          }d	}|v rl                    |          \  }}t          |t                    r|}nQt          |t                    rt          |          }n,d
|d|}t          |          
                    |           |S )Nr   r  r   escapedr   @variabler   Tried to replace variable 2 value with something other than a string or int: )r   r   endstart	groupdictr  r   r%   r   r   add)	r  num_escapesr  var_strvarr   r   r  missing_variabless	          r"   variable_replacez.do_replacement_meson.<locals>.variable_replace  sK   ;;q>>""4(( 	))A,,Q7K;!+,,__""9--9;;y))!B$/33 kk*--GG(""!g..Qc3'' .!GGS)) .!#hhGGKw K KCFK KC(---!%%g...Nr!   r  r  r   r%   setr  sub)r  r  r  r  r  s     ` @r"   r  r    sN    $'EE      2 6%)4002CCCr!   at_onlyc                d    t                      dfd}t          j        | ||          fS )Nr  r  r   r%   c                P   |                      d                              d          r3|                     d          |                     d          z
  }d|dz  z  S s|                      d          dk    rdS |                                                     d           |                      d          dd         d	z   S |                      d
          }|s|                      d          }d}|v r                    |          \  }}t          |t                    r|}nt          |t                    rt          t          |                    }nQt          |t                    rt          |          }n,d|d|}t          |          	                    |           |S )Nr   r  r   z\${z${r  r   r  r  r  cmake_variabler   r  r  )r   r   r  r  r  r  r   r%   r   r   r   r  )
r  r  r  r  r  r   r   r  r  r  s
          r"   r  z.do_replacement_cmake.<locals>.variable_replace  s   ;;q>>""4(( 	))A,,Q7K;!+,, 	U[[^^v554__""9--9;;y))!B$/33 kk*--G 8++&677G(""!g..Qc3'' 	.!GGT** .!#c((mmGGS)) .!#hhGGKw K KCFK KC(---!%%g...Nr!   r  r  )r  r  r  r  r  r  s     `` @r"   r  r    sU    $'EE               B 6%)4002CCCr!   'ConfigurationData'
subprojectT.Optional[SubProject]c                4   |                                 }t          |          dk    r$t          d|                                z            |d         }	 |                    |          \  }}n# t
          $ r d|z  cY S w xY wt          |t                    r3d| d|                                 dz   }t          | ||          \  }}|S t          |t                    r|rd|z  S d	|z  S t          |t                    rd
||fz  S t          d|z            )Nr   z4#mesondefine does not contain exactly two tokens: %sr   /* #undef %s */
#define r  
z#define %s
z
#undef %s
z#define %s %d
z.#mesondefine argument "%s" is of unknown type.)r6  r  r   r   r  r  r   r%   r  r   r   )	r  r  r  r  arrr  vr   r  s	            r"   do_define_mesonr    sO    **,,C
3xx1}}SVZV`V`VbVbbccc!fG-||G$$11 - - -"W,,,,- !S Y)G))a))//11D8(AA		At		 Y 	+!G++ 7**	As		 Y GQ<//MPWWXXXs   A. .B ?B c                   d|v dfd}|                                 }t          |          dk    r|dd	lm} |                    d
d|           |d         }	 |                    |          \  }	}
n# t          $ r rd|z  cY S d|z  cY S w xY ws|	sd|z  S  |||          }d| d|                                 dz   }t          | |||          \  }}
|S )Ncmakedefine01r  r%   r  r  r   c                   |                                  }rG|                    |d                   \  }}t          t          t	          |                              S g }|dd          D ]D}	 |                    |          \  }}|t          |          gz  }/# t
          $ r	 ||gz  }Y Aw xY wd                    |          S )Nr   r   r  )r6  r  r%   r   r   r  r.  )	r  r  r  r  descdefine_valuetokenr   cmake_bool_defines	           r"   get_cmake_definez)do_define_cmake.<locals>.get_cmake_define6  s    jjll 	% SV,,IQs477||$$$$&W 	( 	(E(||E**1Q( ( ( ('(xx%%%s   .+BB-,B-r   )
FeatureNewz&cmakedefine without exactly two tokensz0.54.1r   z#define %s 0
r  r  r  r  )r  r%   r  r  r   r%   )	r6  r  interpreterbase.decoratorsr  
single_user  r  r   r  )r  r  r  r  r  r  r  r  r  r  r   r  r  s               @r"   do_define_cmaker  2  sU   '4/& & & & & &  **,,C
3xx1}}/;;;;;;FR\]]]!fG1||G$$11 1 1 1 	1#g----&0000	1  -Q -"W,,dH--F***&**0022T9F$UFGXFFIFAMs   A4 4BBBr  c                    | dv r t          j        dt           j                  }nt          j        dt           j                  }|S )N>   r  r  a  
            (?:\\\\)+(?=\\?@)  # Matches multiple backslashes followed by an @ symbol
            |                  # OR
            (?<!\\)@(?P<variable>[-a-zA-Z0-9_]+)@  # Match a variable enclosed in @ symbols and capture the variable name; no matches beginning with '\@'
            |                  # OR
            (?P<escaped>\\@[-a-zA-Z0-9_]+\\@)  # Match an escaped variable enclosed in @ symbols
        a  
            (?:\\\\)+(?=\\?(\$|@))  # Match multiple backslashes followed by a dollar sign or an @ symbol
            |                  # OR
            \\\${              # Match a backslash followed by a dollar sign and an opening curly brace
            |                  # OR
            \${(?P<cmake_variable>[-a-zA-Z0-9_]+)}  # Match a variable enclosed in curly braces and capture the variable name
            |                  # OR
            (?<!\\)@(?P<variable>[-a-zA-Z0-9_]+)@  # Match a variable enclosed in @ symbols and capture the variable name; no matches beginning with '\@'
            |                  # OR
            (?P<escaped>\\@[-a-zA-Z0-9_]+\\@)  # Match an escaped variable enclosed in @ symbols
        )r  r  rd  )r  r  s     r"   r\   r\   ]  sS    ---
  Z  
 
 Z
 
 Lr!   ry  &T.Tuple[T.List[str], T.Set[str], bool]c                    |dk    rt          | |||          S |dv rt          | |||dk    |          S t          d          r  )do_conf_str_mesondo_conf_str_cmaker   )r`  ry  r  r  r  s        r"   rS   rS   v  sZ     '!! dHjAAA	/	/	/ dHo6QS]^^^6777r!   c                   t          d          }d}g }t                      }|                                 }|D ]}	|	                                                    |          rd}t          ||	||          }	nYd|	v r(t          d|  d|	                                 d          t          ||	|          \  }	}
|	                    |
           |
rd}|
                    |	           |||fS )Nr  #mesondefineF#cmakedefineFormat error in : saw "z" when format set to "meson")r\   r  keyslstripr  r  r   r   r  updaterj  )r`  ry  r  r  r  search_tokenr  r  confdata_uselessr  missings              r"   r  r    s    w''E!LF$'EE $==??*  ;;==##L11 		)$"5$*EEDD%%$%n%n%nDJJLL%n%n%nooo0hGGMD'$$W--- )#( d$&666r!   c           
        d}|rd}t          |          }d}g }t                      }	|                                 }
|D ]}|                                                    |          rd}
t          |||||          }n]d|v r+t          d|  d|                                 d| d	          t          ||||          \  }}|		                    |           |rd}
|
                    |           ||	|
fS )
Nr  r  r  Fr  r  r  z" when format set to "r  )r\   r  r   r  r  r  r   r   r  r  rj  )r`  ry  r  r  r  r  r  r  r  r  r  r  r  s                r"   r  r    s/    3:O #"//E!LF$'EE $==??*  ;;==##L11 		)$"5$':NNDD%%$%z%z%zDJJLL%z%zhw%z%z%z{{{0gxPPMD'$$W--- )#( d$&666r!   utf-8dstencodingT.Tuple[T.Set[str], bool]c                ,   	 t          | |d          5 }|                                }d d d            n# 1 swxY w Y   n'# t          $ r}t          d|  d|          d }~ww xY wt	          | ||||          \  }	}
}|dz   }	 t          |d|d          5 }|                    |	           d d d            n# 1 swxY w Y   n'# t          $ r}t          d| d|          d }~ww xY wt          j        | |           t          ||           |
|fS )Nr   )r	  newlinezCould not read input file r  ~r   zCould not write output file )	open	readlinesro  r   rS   
writelinesr  copymoder   )r`  r  r  r  r	  r  fry  r   r  r  r  dst_tmps                r"   rR   rR     s   H#"555 	!;;==D	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! H H HF#FFFFGGGH 5@T8Udfp4q4q1V 0CiGJ'32>>> 	!!LL   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! J J JHCHH1HHIIIJ
OC!!!g&&&...sn   A 5A 9A 9A 
A%A  A%C B:.C :B>>C B>C 
C*C%%C*zc/*
 * Autogenerated by the Meson build system.
 * Do not edit, your changes will be lost.
 */

{}

zV; Autogenerated by the Meson build system.
; Do not edit, your changes will be lost.

ofileT.TextIOcdatar   output_formatLiteral['c', 'nasm']
macro_namer   c           	     $   |dk    rP|r.t                               d                    |                    }nt                               d          }d}d }nt          }d}d }|                     |           t	          |                                          D ]}|                    |          \  }}	|	r|                      ||	                     t          |t                    r:|r|                     | d| d	           m|                     | d
| d	           t          |t          t          f          r|                     | d| d| d	           t          d|z             |dk    r|r|                     d           d S d S d S )Nr  z#ifndef {0}
#define {0}z#pragma once#c                    d|  dS )Nz/* z */
r    r  s    r"   <lambda>z _dump_c_header.<locals>.<lambda>  s    #4#4#4#4 r!   %c                \    dd                     |                                           z   dz   S )Nz; z
; r  )r.  
splitlinesr  s    r"   r  z _dump_c_header.<locals>.<lambda>  s&    4&++doo6G6G*H*H#H4#O r!   zdefine z

zundef r  z/Unknown data type in configuration file entry: z#endif
)CONF_C_PRELUDEr   CONF_NASM_PRELUDEwritesortedr   r  r   r   r   r%   r   )
r  r  r  r  preludeprefixformat_desckr  r  s
             r"   _dump_c_headerr*    s   
  	<$++,F,M,Mj,Y,YZZGG$++N;;G44#OO	KKEJJLL!! X XIIaLL	D 	+KKD))***a 	X 6v55a5556666v44Q4445555C:&& 	XKK655!55a5556666 !RUV!VWWW
J r!   	ofilenameLiteral['c', 'nasm', 'json']c                *   | dz   }t          |dd          5 }|dk    r;d |j                                        D             }t          j        ||d           nt          ||||           d d d            n# 1 swxY w Y   t          | |           d S )	Nr  r   r  r	  jsonc                &    i | ]\  }}||d          S )r   r    )r  r)  r  s      r"   
<dictcomp>z$dump_conf_header.<locals>.<dictcomp>  s"    ===1Aqt===r!   T)	sort_keys)r  valuesitemsr/  dumpr*  r   )r+  r  r  r  ofilename_tmpr  ry  s          r"   r7   r7     s     OM	mS7	3	3	3 DuF""==(:(:(<(<===DIdET222225%
CCCD D D D D D D D D D D D D D D M22222s   AA88A<?A<r  c                   d}	 t          | d          5 }t          |d          5 }|                                |                                k    rd}d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n# t          $ r Y nw xY w|rt          j        ||            d S t          j        |           d S )NTrbF)r  readFileNotFoundErrorr   r  unlink)r  r  	differentf1f2s        r"   r   r     sH    I#t__ 	"D$$7$7 	"2wwyyBGGII%%!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"     

7C     
	'sW   B A5-AA5A"	"A5%A"	&A5)B 5A99B <A9=B 
BBTitemflattenT.List[T.Any]c                    t          | t                    s| gS g }| D ]C}|r*t          |t                    r|t          |d          z  }.|                    |           D|S )z
    Returns a list with all args embedded in a list if they are not a list.
    This function preserves order.
    @flatten: Convert lists of lists to a flat list
    Tr@  )r   listrv   rj  )r?  r@  r  is       r"   rv   rv     s}     dD!! vF   	z!T** 	ga....FFMM!Mr!   rs  rR  shlex_split_argsc                   t          | t                    r|                     d          r6	 t          j        |           }n# t
          $ r t          d|            w xY w| dk    rg }n]|rt          |           }nKd |                     d          D             }n+t          | t                    r| }nt          d|  d          t          |t                    sJ |S )Nr  zmalformed value r   c                6    g | ]}|                                 S r    )r   )r  r  s     r"   r  z'listify_array_value.<locals>.<listcomp>:  s     @@@!AGGII@@@r!   ,r  z)" should be a string array, but it is not)
r   r%   r  astliteral_evalr  r   r   r6  rD  )rs  rF  newvalues      r"   rw   rw   -  s   % SC   	AA+E22 A A A$%?%?%?@@@Ab[[HH A%e,,@@u{{3/?/?@@@	E4	 	  SQQQQRRRh%%%%%Os   A Adict_objectT.Dict[_T, _U]keypop
T.List[_U]c                Z    | j         }|r| j        }t           ||          pg d          S )zH
    Extracts all values from given dict_object and listifies them.
    TrC  )r  rP  rv   )rM  rO  rP  fetchs       r"   rV   rV   B  s:     #./E
  55::#T2222r!   'T.Union[_T, T.Sequence[_T]]'types*'T.Union[T.Type[_T], T.Tuple[T.Type[_T]]]'
T.List[_T]c           	     j   t          | |          rt          j        d| g          } t          | t                    s0t	          d                    |t          |                               | D ]D}|@t          ||          s0t	          d                    |t          |                              E| S )zi
    Ensure that type(@item) is one of @types or a
    list of items all of which are of type @types
    rW  z,Item must be a list or one of {!r}, not {!r}Nz'List item must be one of {!r}, not {!r})r   r  ra  rD  r   r   type)r?  rU  rE  s      r"   r   r   M  s     $ ,vlTF++dD!! gKRRSXZ^_cZdZdeefff c c=Au!5!5= !J!Q!QRWY]^_Y`Y`!a!abbbKr!   !T.Union[T.Any, T.Sequence[T.Any]]c                ,    t          | t                    S r   )r   r%   )r?  s    r"   r   r   ]  s    c"""r!   c                   g }| D ]}|                     d          s|                    |           -|dd          }	 t          |d          5 }|                                                                }d d d            n# 1 swxY w Y   ||z  }# t
          $ r6}t          j        d|d           t          j        |           Y d }~ d S d }~ww xY w|S )Nr  r   r  r.  z!Expanding command line arguments:z	not found)	r  rj  r  r9  r6  ro  r   error	exception)r  expended_argsr  	args_filer  extended_argsr   s          r"   rU   rU   a  s6   !#M  ~~c"" 	  %%%G		i'222 1a ! 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1]*MM 	 	 	J:YTTTN1444444	 s;   B'B5BB	BB		B
C*CCpredT.Callable[[_T], object]iterableT.Iterable[_T]'T.Tuple[T.Iterator[_T], T.Iterator[_T]]c                `     t          |          \  }} fd|D              fd|D             fS )zUse a predicate to partition entries into false entries and true
    entries.

    >>> x, y = partition(is_odd, range(10))
    >>> (list(x), list(y))
    ([0, 2, 4, 6, 8], [1, 3, 5, 7, 9])
    c              3  2   K   | ]} |          |V  d S r   r    r  r  rb  s     r"   	<genexpr>zpartition.<locals>.<genexpr>}  s0      ))!a)A))))))r!   c              3  2   K   | ]} |          |V  d S r   r    ri  s     r"   rj  zpartition.<locals>.<genexpr>}  s0      +E+E!TT!WW+EA+E+E+E+E+E+Er!   r   )rb  rd  t1t2s   `   r"   rx   rx   t  sH     ]]FB))))r)))+E+E+E+Er+E+E+EEEr!   r$  stdin(T.Union[None, T.TextIO, T.BinaryIO, int]r   r   *T.Tuple['subprocess.Popen[str]', str, str]c           
        dd l }|                                }|t          j        }	 t          j        j        r|                                dk    rt          | f||||d|\  }}	}
n1t          j	        | fd|d|||d|}|
                    |          \  }	}
nA# t          $ r4}|j        t          j        k    rt          d| d         d           d }~ww xY wt          j                     ||	|
fS )	Nr   r   )r$  rn  r   r   TF)universal_newlinesr	  	close_fdsrn  r   r   zFailed running ze, binary or interpreter not executable.
Possibly wrong architecture or the executable bit is not set.)r   r   rj  rl  r  r   r	  r   Popen_safe_legacyrk  rn  r  errnoENOEXECr   r   setup_console)r  r$  rn  r   r   r   r   r	  r   r   r   oserrs               r"   r{   r{     sL   
 MMM**,,H z" 	(hnn&6&6'&A&A'oEv^doohnooGAq!!  V$]b',VFV VNTV VA==''DAq   ;%-''  "a47 "a "a "a b b b	 	a7Ns   A1B 
C$/CCc           	        t          j        | fdd|||d|}d }||                    d          }|                    |          \  }}	|vt          j        j        ;|                    t          j        j        d                              dd          }n*|                    d                              dd          }|	t          j	        Lt          j	        j        r;|	                    t          j	        j        d                              dd          }	n*|	                    d                              dd          }	|||	fS )	NF)rr  rs  rn  r   r   r  r  )r	  errorsz
r  )rz  )
rj  rk  r   rn  r  r   r	  r   r  r   )
r  r$  rn  r   r   r   r   input_r   r   s
             r"   rt  rt    s?   
 	 	N%5$VF	N 	NFL	N 	NA $Fg&&==  DAq}:*#*"5iHHPPQWY]^^AA	**2264@@A}:!cj&9!#*"5iHHPPQWY]^^AA	**2264@@Aa7Nr!   Calledr   c                "   	 t          | fi |\  }}}nP# t          $ rC}t          j        d           t          j        | dt	          |            d|             d}~ww xY w|j        |r|                                nd|r|                                nd}	}}t          j        d           t          j        | dt	          |            d|            |rt          j        d| d           |	rt          j        d|	 d           |||fS )zc
    Wrapper around Popen_safe that assumes standard piped o/e and logs this to the meson log.
    z-----------z: `z` -> Nzstdout:
z
-----------zstderr:
)r{   ro  r   r  rt   r   r   )
r  r   r   r   r   r   excprcouterrs
             r"   r|   r|     sD   T,,V,,1aa   
=!!!
c::ioo::D::;;;
 <a!9T;S177999tSBJ}J#44)D//4444555
 3
1s111222
 3
1s111222a7Ns    
A!>AA!	regexiteriniterc                    | D ]L}|D ]G}t          |t                    st          j        ||          }|r|                                c c S HMdS )z
    Takes each regular expression in @regexiter and tries to search for it in
    every item in @initer. If there is a match, returns that match.
    Else returns False.
    N)r   r%   r  re  r   )r  r  r  iir  s        r"   rs   rs     s{      % % 	% 	%Bb#&& IeR((E %{{}}$$$$$%		% 4r!   commandr3  &T.Dict[str, T.Union[str, T.List[str]]]c           
        g d}ddg}d|vr&t          ||           }|rt          d|d          nt          |d                   dk    r-t          |dd          |           }|rt          d|d          | D ]}t          |t                    st          j        |d	         |          }|r`|                                |vrJd
}t          |                    |                                t          |d                                       d|vr't          ||           }|rt          d|d          d S | D ]}t          |t                    st          j        |d	         |          }|r`|                                |vrJd}t          |                    |                                t          |d                                       d S )N)z@INPUT([0-9]+)?@@PLAINNAME@
@BASENAME@z@OUTPUT([0-9]+)?@@OUTDIR@@INPUT@zCommand cannot have z%, since no input files were specifiedr   z' when there is more than one input filer   z9Command cannot have {!r} since there are only {!r} inputs@OUTPUT@z since there are no outputsz:Command cannot have {!r} since there are only {!r} outputs)	rs   r   r  r   r%   r  re  r   r   )r  r3  inregexoutregexr  r  match2r   s           r"   _substitute_values_check_errorsr    s6   LLLG0*=H!'733 	h !f!f!f!fggg	h vi !!A%%%gabbk7;;E A$ &@E &@ &@ &@ A A A  	W 	WDdC(( Ywqz400F W&,,..66O$QXXfllnnc&BS>T>T%U%UVVV!(G44 	^ !\!\!\!\]]]	^ 	^  	X 	XDdC(( Yx{D11F X&,,..66P$QXXfllnnc&BT>U>U%V%VWWW	X 	Xr!   c                z   dfd}t          |            g }d D             }|r't          j        d                    |                    nd}| D ]f}d}t	          |t
                    s|                    |           nd	|v rgd	         }|d	k    r||z  }nt          |          d
k    r0|                    |                    d	|d                              nt          d          d|v rfd         }	|dk    r||	z  }nt          |	          d
k    r0|                    |                    d|	d                              nXt          d          |v r*|         }
t	          |
t
                    s
J d            |
}n|r|
                    ||          }n|}||                    |           h|S )a  
    Substitute the template strings in the @values dict into the list of
    strings @command and return a new list. For a full list of the templates,
    see get_filenames_templates_dict()

    If multiple inputs/outputs are given in the @values dictionary, we
    substitute @INPUT@ and @OUTPUT@ only if they are the entire string, not
    just a part of it, and in that case we substitute *all* of them.

    The typing of this function is difficult, as only @OUTPUT@ and @INPUT@ can
    be lists, everything else is a string. However, TypeDict cannot represent
    this, as you can have optional keys, but not extra keys. We end up just
    having to us asserts to convince type checkers that this is okay.

    https://github.com/python/mypy/issues/4617
    r   r  r   r%   c                |    |                      d                   }t          |t                    s
J d            |S )Nr   for mypy)r   r   r%   )r   r  r3  s     r"   r  z"substitute_values.<locals>.replace  s:    1771::!S!!--:---r!   c                >    g | ]}|d vt          j        |          S ))r  r  )r  escape)r  rO  s     r"   r  z%substitute_values.<locals>.<listcomp>!  s+    VVV#3>U3U3Ury~~3U3U3Ur!   |Nr  r   r   zFCommand has '@INPUT@' as part of a string and more than one input filer  zHCommand has '@OUTPUT@' as part of a string and more than one output filer  )r   r  r   r%   )r  r  r  r.  r   r%   rj  r  r  r   r  )r  r3  r  outcmdrx_keysvalue_rxvvmoreinputsoutputsr   s    `         r"   r   r     s    $      $GV444 FVVVVVG07Arz#((7++,,,TH $  $  $"c"" 	MM""__I&FY& V!!bjjF1I>>????$ &K L L L2Z(GZ'!W""bjjWQZ@@AAAA$ &L M M M
 6\\r
Aa%%11z111DD 	<<,,DDDMM$Mr!   r  r  c                   i }| r| |d<   t          |           D ]b\  }}||d| d<   t          j                            |          }||d| d<   t          j                            |          d         |d| d<   ct          |           dk    rRt          j                            | d                   x|d<   }t          j                            |          d         |d	<   |r\||d
<   t          |          D ]\  }}||d| d<   t          j                            |d                   |d<   |d         dk    rd|d<   |S )a  
    Create a dictionary with template strings as keys and values as values for
    the following templates:

    @INPUT@  - the full path to one or more input files, from @inputs
    @OUTPUT@ - the full path to one or more output files, from @outputs
    @OUTDIR@ - the full path to the directory containing the output files

    If there is only one input file, the following keys are also created:

    @PLAINNAME@ - the filename of the input file
    @BASENAME@ - the filename of the input file with the extension removed

    If there is more than one input file, the following keys are also created:

    @INPUT0@, @INPUT1@, ... one for each input file
    @PLAINNAME0@, @PLAINNAME1@, ... one for each input file
    @BASENAME0@, @BASENAME1@, ... one for each input file

    If there is more than one output file, the following keys are also created:

    @OUTPUT0@, @OUTPUT1@, ... one for each output file
    r  z@INPUTr  z
@PLAINNAMEr   z	@BASENAMEr   r  r  r  z@OUTPUTr  r   r  )	enumerater   r   basenamerE  r  dirname)r  r  r3  r  r  plains         r"   rZ   rZ   L  ss   0 68F >"y!&)) 	C 	CHR%'F>B>>>"G$$R((E).F%%%%&(*(8(8(?(?(BF$r$$$%%v;;!,.G,<,<VAY,G,GGF=!E#%7#3#3E#:#:1#=F<  	%$z!'** 	) 	)HR&(F?R???##W__WQZ88z*##!$F:Mr!   topdirc                   t          j        |           D ]\  }}}t          j        |t          j        |          j        t          j        z  t          j        z             |D ]}t           j                            ||          }t           j        	                    |          set           j        
                    |          rFt          j        |t          j        |          j        t          j        z  t          j        z             d S r   )r   walkchmodr	  st_modeS_IWRITES_IREADr   r.  rq  r-  )r  dr   filesr  fpaths         r"   _make_tree_writabler    s     wv W W1e
BGAJJ&6EFFF 	W 	WEGLLE**E7>>%(( WRW^^E-B-B W 6 F UVVV	WW Wr!   r  c                F   g d}d}|D ]}	 |st          |            d}n$# t          $ r t          j        |           Y 7w xY w	 t	          j        |             d S # t          $ r Y  d S t          $ r t          j        |           Y w xY wt	          j        |            d S )N皙?r  皙?r  r        ?r  r   r   r   r   r   FT)r  PermissionErrortimesleepr  rmtreer:  r  )r  delayswritabler  s       r"   r   r     s    
 @??FH  	  #A&&& 	 	 	JqMMMH		M!FF  	 	 	FFF 	 	 	JqMMMMM	 M!s'    A AA
B
*B
	B
r  c                   t           j                            |           rFt          j        | t          j        |           j        t          j        z  t          j        z             g d}|D ]J}	 t          j        |             dS # t          $ r Y  dS t          $ r t          j        |           Y Gw xY wt          j        |            dS )z1Like windows_proof_rmtree, but for a single file.r  N)r   r   r-  r  r	  r  r  r  r;  r:  r  r  r  )r  r  r  s      r"   r   r     s    	w~~e O
.>MNNN???F  	IeFF  	 	 	FFF 	 	 	JqMMMMM	Ies   /B
B4B43B4c                  0     e Zd ZdZd
 fdZd fd	Z xZS )r?   zX
    Like TemporaryDirectory, but cleans things up using
    windows_proof_rmtree()
    excr   rs  tbr   r   c                    	 t                                          |||           d S # t          $ r t          | j                   Y d S w xY wr   )r   __exit__r  r   r  )r   r  rs  r  r   s       r"   r  z#TemporaryDirectoryWinProof.__exit__  s^    	,GGS%,,,,, 	, 	, 	, ++++++	,s   #( A
	A
c                    	 t                                                       d S # t          $ r t          | j                   Y d S w xY wr   )r   cleanupr  r   r  )r   r   s    r"   r  z"TemporaryDirectoryWinProof.cleanup  sV    	,GGOO 	, 	, 	, ++++++	,s    % AA)r  r   rs  r   r  r   r   r   r   r   )r   r   r   r   r  r  r   r   s   @r"   r?   r?     se         
, , , , , ,, , , , , , , , , ,r!   r?   
spdir_namecurrent_dirr  $T.Optional[T.Dict[str, T.List[str]]]T.Dict[str, T.List[str]]c                   |i }t           j                            ||           }t           j                            |          s|S t	          t           j                            |d                    D ]}t           j                            |          }|dk    r(d}t           j                            |          rt          | ||           n\|                    d          rEt           j        	                    |          r&t           j        
                    |          d         }nd}|r&||v r||                             |           |g||<   |S )N*packagecacheTz.wrapr   F)r   r   r.  existsr   r  rp  rO   r   r-  rE  rj  )r  r  r  spdirr  r  append_thiss          r"   rO   rO     sA   ~GLLj11E7>>%   bgll5#..// + +7##E**N""7== 	 z5&9999^^G$$ 	 )>)> 	 w''11!4HHK 	+6!!x ''....$)7x Mr!   substrstrlistc                    |D ]	}| |v r dS 
dS )NTFr    )r  r  r   s      r"   r   r     s+      Q;;44 5r!   c                      e Zd ZdZd d!dZd"d
Zd#dZd$dZd%dZd#dZ	d&dZ
d&dZd'd(dZd'd)dZd*dZd+dZd*dZdS ),r8   zUA set that preserves the order in which items are added, by first
    insertion.
    Nrd  T.Optional[T.Iterable[_T]]c                h    t          j                    | _        |r|                     |           d S d S r   )r  OrderedDict_OrderedSet__containerr  )r   rd  s     r"   r   zOrderedSet.__init__  s=    4?4K4M4M 	"KK!!!!!	" 	"r!   rs  rR  r   r   c                    || j         v S r   r  r   rs  s     r"   __contains__zOrderedSet.__contains__  s    (((r!   T.Iterator[_T]c                N    t          | j                                                  S r   )iterr  r   r   s    r"   __iter__zOrderedSet.__iter__  s    D$))++,,,r!   r   c                *    t          | j                  S r   )r  r  r   s    r"   __len__zOrderedSet.__len__  s    4#$$$r!   r%   c                    | j         rId                    d                    d | j                                         D                                 S dS )NzOrderedSet([{}])z, c              3  4   K   | ]}t          |          V  d S r   )repr)r  r   s     r"   rj  z&OrderedSet.__repr__.<locals>.<genexpr>   s(      CCa$q''CCCCCCr!   zOrderedSet())r  r   r.  r   r   s    r"   r   zOrderedSet.__repr__  s[     	E%,,		CC4+;+@+@+B+BCCCCCE E E~r!   c                N    t          | j                                                  S r   )reversedr  r   r   s    r"   __reversed__zOrderedSet.__reversed__  s    (--//000r!   r*   r   c                    d | j         |<   d S r   r  r  s     r"   r  zOrderedSet.add  s    "&r!   c                ,    || j         v r
| j         |= d S d S r   r  r  s     r"   discardzOrderedSet.discard	  s)    D$$$ ''' %$r!   Tlastc                <    | j                             ||           d S r   )r  move_to_end)r   rs  r  s      r"   r  zOrderedSet.move_to_end  s!    $$UD11111r!   c                @    | j                             |          \  }}|S r   )r  popitem)r   r  r?  r   s       r"   rP  zOrderedSet.pop  s!    "**400ar!   re  c                $    |D ]}d | j         |<   d S r   r  r   rd  r?  s      r"   r  zOrderedSet.update  s+     	* 	*D%)DT""	* 	*r!   set_'OrderedSet[_T]'c                L     t          |           fd| D                       S )Nc              3  $   K   | ]
}|v|V  d S r   r    )r  r   r  s     r"   rj  z(OrderedSet.difference.<locals>.<genexpr>  s'      ;;Qd]]!]]]];;r!   )rY  )r   r  s    `r"   
differencezOrderedSet.difference  s.    tDzz;;;;T;;;;;;r!   c                :    |D ]}|                      |           d S r   )r  r  s      r"   difference_updatezOrderedSet.difference_update  s0     	 	DLL	 	r!   r   )rd  r  )rs  rR  r   r   )r   r  r[  r  )rs  r*   r   r   T)rs  r*   r  r   r   r   )r  r   r   r*   )rd  re  r   r   )r  re  r   r  )r   r   r   r   r   r  r  r  r   r  r  r  r  rP  r  r  r  r    r!   r"   r8   r8     s1        " " " " "
) ) ) )- - - -% % % %   1 1 1 1' ' ' '( ( ( (2 2 2 2 2    * * * *< < < <     r!   r8   r   r  c                    	 t           j                            | |          S # t          t          f$ r t          |           cY S w xY wr   )r   r   r   	TypeErrorr  r%   )r   r  s     r"   r   r     sO    wtU+++z"   4yys   "  AAr   rootresolvec                    	 |r:|                                                      |                                            n|                     |           n# t          $ r Y dS w xY wdS )NFTr  relative_tor  r   r  r  s      r"   ry   ry   (  sr     	#LLNN&&t||~~6666T"""   uu4s   AA 
A"!A"c                    	 |r9|                                                      |                                           S |                     |          S # t          $ r | cY S w xY wr   r  r  s      r"   r   r   3  sk     	*<<>>--dllnn===##D)))   s   :A A A! A!c                  "    e Zd ZdZdZdZdZdZdS )r3   zEnumeration for library types.r   r   r   r   N)r   r   r   r   SHAREDSTATICPREFER_SHAREDPREFER_STATICr    r!   r"   r3   r3   <  s(        ((FFMMMMr!   r3   c                  J    e Zd ZdZ	 	 	 dddZddZddZddZddZddZ	dS )ProgressBarFallbacka  
    Fallback progress bar implementation when tqdm is not foundclass OptionType(enum.IntEnum):

    """Enum used to specify what kind of argument a thing is."""

    BUILTIN = 0
    BACKEND = 1
    BASE = 2
    COMPILER = 3
    PROJECT = 4

# This is copied from coredata. There is no way to share this, because this
# is used in the OptionKey constructor, and the coredata lists are
# OptionKeys...
_BUILTIN_NAMES = {
    'prefix',
    'bindir',
    'datadir',
    'includedir',
    'infodir',
    'libdir',
    'licensedir',
    'libexecdir',
    'localedir',
    'localstatedir',
    'mandir',
    'sbindir',
    'sharedstatedir',
    'sysconfdir',
    'auto_features',
    'backend',
    'buildtype',
    'debug',
    'default_library',
    'errorlogs',
    'genvslite',
    'install_umask',
    'layout',
    'optimization',
    'prefer_static',
    'stdsplit',
    'strip',
    'unity',
    'unity_size',
    'warning_level',
    'werror',
    'wrap_mode',
    'force_fallback_for',
    'pkg_config_path',
    'cmake_prefix_path',
    'vsenv',
}


    Since this class is not an actual iterator, but only provides a minimal
    fallback, it is safe to ignore the 'Iterator does not return self from
    __iter__ method' warning.
    Nrd  T.Optional[T.Iterable[str]]totalT.Optional[int]bar_typer   r  disableT.Optional[bool]c                    |t          |          | _        d S || _        d| _        d| _        |t          j                     n|| _        | j        s:| j        r|dk    rt          d| j                   |rt          | dd           d S d S d S )Nr   downloadzDownload size:r  r   r  )	r  rd  r  doneprinted_dotsr   colorize_consoler  r  )r   rd  r  r
  r  r  s         r"   r   zProgressBarFallback.__init__  s      NNDMF
	6=o4022227| 	+z 4h*44&
333 +kkkr******		+ 	++ +r!   r   T.Iterator[str]c                    | j         S r   )rd  r   s    r"   r  zProgressBarFallback.__iter__  s
    }r!   r%   c                *    t          | j                  S r   )nextrd  r   s    r"   __next__zProgressBarFallback.__next__  s    DM"""r!   r   c                    | j         s/t          dd           t          j                                         | xj        dz  c_        d S )Nr  r   r  r   )r  r  r  r   flushr  r   s    r"   	print_dotzProgressBarFallback.print_dot  sM    | 	#2JQr!   progressr   c                    | xj         |z  c_         | j        s|                                  d S t          | j         | j        z  dz            }| j        |k     r!|                                  | j        |k     d S d S )Nr  )r  r  r  r   r  )r   r  ratios      r"   r  zProgressBarFallback.update  s    		X		z 	NNFDI
*R/00%''NN %''''''r!   c                4    | j         st                       d S d S r   )r  r  r   s    r"   closezProgressBarFallback.close  s#    | 	GGGGG	 	r!   )NNNNN)
rd  r  r  r	  r
  r   r  r   r  r  )r   r  r  r  )r  r   r   r   )
r   r   r   r   r   r  r  r  r  r  r    r!   r"   r  r  F  s        9 9t _cKO-1+ + + + +$   # # # #           r!   r  )tqdmc                  &     e Zd Zddd fd
Z xZS )ProgressBarTqdmN)r
  r  r   r
  r   r   r   r   c                   |dk    r|                     dddddd           n|                     ddd	            t                      j        |i | d S )
Nr  BT   z<{l_bar}{bar}| {n_fmt}/{total_fmt} {rate_fmt} eta {remaining})unit
unit_scaleunit_divisorleave
bar_formatFz1{l_bar}{bar}| {n_fmt}/{total_fmt} eta {remaining})r)  r*  )r  r   r   )r   r
  r  r   r   s       r"   r   zProgressBarTqdm.__init__  s    :%%s-1/3(,-k	! ! " " " " -`! ! " " " EGGd-f-----r!   )r  r   r
  r   r   r   r   r   r   r   s   @r"   r"  r"    sJ        EI 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.r!   r"  z=T.Union[T.Type[ProgressBarFallback], T.Type[ProgressBarTqdm]]r=   c                  .     e Zd Zdd fd	Z	 dddZ xZS )r>   r  option_stringsr   destr%   r  r   r   c                    t           j                            t           j                            |                    } t	                      j        ||fd |d| d S )N)nargsr  )r   r   abspathrealpathr   r   )r   r,  r-  r  r   r   s        r"   r   zRealPathAction.__init__  sT    '//"'"2"27";";<<UT7UUfUUUUUr!   Nparserargparse.ArgumentParser	namespaceargparse.Namespacer3  %T.Union[str, T.Sequence[T.Any], None]option_stringr   r   r   c           	         t          |t                    sJ t          || j        t          j                            t          j                            |                               d S r   )r   r%   r  r-  r   r   r0  r1  )r   r2  r4  r3  r7  s        r"   __call__zRealPathAction.__call__  sP    &#&&&&&	49bgoobg6F6Fv6N6N&O&OPPPPPr!   r  )r,  r   r-  r%   r  r%   r   r   r   )
r2  r3  r4  r5  r3  r6  r7  r   r   r   )r   r   r   r   r9  r   r   s   @r"   r>   r>     sr        V V V V V V V
 bfQ Q Q Q Q Q Q Q Qr!   r>   winecmd
wine_pathsworkdirc                   t          t          |                    }d                    |          }t          |          dk    r|S ddlm}  |d| d          }t          |                                d          r|S g }|rsg }|D ]l}	 t          |          	                    |          }	|
                    t          |	                     H# t          $ r |
                    |           Y iw xY w|}|r*t          d	d
dd          5 }
|
                    d           ddd           n# 1 swxY w Y   	 t          j        | dd|
j        gz   |z   dt          j                  }|                    d          }|r|                    d          }nt+          j        d           n@# t          j        $ r.}t+          j        dt          |                      Y d}~nd}~ww xY wt1          j        |
j                   n# t1          j        |
j                   w xY wd                    ||z             }t          |          dk    rt+          j        d           |S )a  
    WINEPATH size is limited to 1024 bytes which can easily be exceeded when
    adding the path to every dll inside build directory. See
    https://bugs.winehq.org/show_bug.cgi?id=45810.

    To shorten it as much as possible we use path relative to `workdir`
    where possible and convert absolute paths to Windows shortpath (e.g.
    "/usr/x86_64-w64-mingw32/lib" to "Z:\usr\X86_~FWL\lib").

    This limitation reportedly has been fixed with wine >= 6.4
    ;r%  r   )ExternalProgramwineT)silentz>=6.4r   z.batr  F)rG  r	  deletezt
            @ECHO OFF
            for %%x in (%*) do (
                echo|set /p=;%~sx
            )
            Nr   z/C)r	  r   z(Could not shorten WINEPATH: empty stdoutzCould not shorten WINEPATH: z9WINEPATH exceeds 1024 characters which could cause issues)rD  r8   r.  r  programsr?  r   get_versionr   r  rj  r%   r  r
   r$  rj  check_outputr  rm  r   r6  r   r   CalledProcessErrorr   r;  )r:  r;  r<  	wine_pathr?  r@  	rel_paths	abs_pathsr   relbat_filer   r   s                r"   r]   r]     s    j,,--J $$I
9~~ +*****?674888Dt''))733   I !#	 	$ 	$A$1gg))'22  S**** $ $ $  #####$
 %FWUSSS 	W_NN    	 	 	 	 	 	 	 	 	 	 	 	 	 	 		%,WtX]7S-SV`-`6=jFXZ Z ZF\\#&&F I#\\#..

GHHH, 	B 	B 	BL@A@@AAAAAAAA	B Ihm$$$$BIhm$$$$Z/00I
9~~PQQQsV   
ACC10C1D..D25D2:A0F+ *H +G(:$G#H #G((H H funcT.Callable[..., _T]c                F     g t                     d fd            }|S )Nr  r   r   r   r*   c                 V    rd         S  | i |}                     |           |S )Nr   )rj  )r  r   r  rL  r   s      r"   wrapperzrun_once.<locals>.wrapper	  s<     	q6MdD#F##

3
r!   )r  r   r   r   r   r*   r   )rL  rP  r   s   ` @r"   r   r   	  sC    C
4[[      [ Nr!   ,T.Callable[..., T.Generator[_T, None, None]]T.Callable[..., T.List[_T]]c                >     t                     d fd            }|S )Nr  r   r   r   rW  c                 .    t           | i |          S r   )rD  )r  r   rL  s     r"   rP  zgenerate_list.<locals>.wrapper$	  s     DD$)&))***r!   )r  r   r   r   r   rW  rQ  )rL  rP  s   ` r"   rX   rX   #	  s8    
4[[+ + + + + [+ Nr!   filenameobject_nameobject_typeT.Type[_PL]suggest_reconfigurec                   | d| d}|rdnd}	 t          | d          5 }t          j        |          }d d d            n# 1 swxY w Y   nZ# t          j        t          f$ r t          ||z             t          t          t          f$ r t          | d| d|z             w xY wt          ||          st          ||z             t          |d          rt          j        d|          j        }n$t          j        d	|          j        j        j        }d
dlm}	 d
dlm}
m}  |
||	          r |||	|          |S )Nz file z is corrupted.zG Consider reconfiguring the directory with "meson setup --reconfigure".r   r8  zz references functions or classes that don't exist. This probably means that it was generated with an old version of meson.r&   r$   r   r   )r&   )major_versions_differMesonVersionMismatchException)r  pickleloadUnpicklingErrorEOFErrorr   r  ModuleNotFoundErrorr  r   hasattrr  ra  r&   r   coredatar\  r]  )rV  rW  rX  rZ  load_fail_msg	extra_msgr  objr&   coredata_versionr\  r]  s               r"   rz   rz   +	  s   "DD(DDDM]pxYYvxI	-(D!! 	!Q+a..C	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!"H- 8 8 8]Y6777*N; - - -    (      "+,- - 	-- c;'' 8]Y6777 sI Q&-s33;&-s33?HP666666OOOOOOOOW&677 R++G5EyQQQJs.   A AA AA A	A AB$r  	predicateT.Callable[[_T], bool]r  c                .    | D ]} ||          r|c S dS )a8  Find the first entry in an iterable where the given predicate is true

    :param iter: The iterable to search
    :param predicate: A finding function that takes an element from the iterable
        and returns True if found, otherwise False
    :return: The first found element, or None if it is not found
    Nr    )r  ri  rE  s      r"   rW   rW   L	  s6       9Q<< 	HHH	4r!   c                     t                      rd} nd} | dz  } t          t          j                            d|                     S )zReturn a conservative estimate of the commandline size in bytes
    above which a response file should be used.  May be overridden for
    debugging by setting environment variable MESON_RSP_THRESHOLD.i    i   r   MESON_RSP_THRESHOLD)rq   r   r   r   r  )limits    r"   r[   r[   Z	  sJ    
 || 	   QJErz~~3U;;<<<r!   c                  *    e Zd ZdZddZddZddZdS )ru   a  Descriptor that replaces the function it wraps with the value generated.

    This property will only be calculated the first time it's queried, and will
    be cached and the cached value used for subsequent calls.

    This works by shadowing itself with the calculated value, in the instance.
    Due to Python's MRO that means that the calculated value will be found
    before this property, speeding up subsequent lookups.
    rL  T.Callable[[T.Any], _T]r   r   c                "    d | _         || _        d S r   )_lazy_property__name_lazy_property__func)r   rL  s     r"   r   zlazy_property.__init__y	  s    '+r!   r   r   r  r%   c                @    | j         	|| _         d S || j         k    sJ d S r   )rr  )r   r   r  s      r"   __set_name__zlazy_property.__set_name__}	  s.    ;DKKK4;&&&&&&r!   instancerR  r  T.Typer*   c                \    |                      |          }t          || j        |           |S r   )rs  r  rr  )r   rv  r  rs  s       r"   __get__zlazy_property.__get__	  s,    H%%$+u---r!   N)rL  rp  r   r   )r   r   r  r%   r   r   )rv  rR  r  rw  r   r*   )r   r   r   r   r   ru  ry  r    r!   r"   ru   ru   o	  sZ            ' ' ' '     r!   ru   )F)
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r%   r   r   )r   r   )r   r   r   r   )r   r   r   r   )r^  r_  r`  ra  r   rb  )r^  r_  rf  rg  r   rh  )r   r   )r  r%   r   r  r  )r  r  r   r   )rI  r%   r   rJ  )rU  r%   rI  r%   r   r   )rU  r%   rW  rX  r   rY  )r^  r%   r_  r%   r   r   )rb  r%   r   r%   r   )r  r  r   r   )r  r%   r  r%   r   r   )r  )r  r%   r  r%   r   r   )r  r%   r   r%   )r   r%   r   r   )r  r  r   r%   )
r  r  r  r%   r  r  r  r  r   r  )r  r  r  r%   r  r  r   r  )
r  r  r  r%   r  r   r  r  r   r  )
r  r  r  r%   r  r  r  r  r   r%   )r  r  r  r%   r  r  r  r   r  r  r   r%   )r  )r  r  r   r  )r`  r%   ry  r   r  r  r  r  r  r  r   r  )
r`  r%   ry  r   r  r  r  r  r   r  )r`  r%   ry  r   r  r  r  r   r  r  r   r  )r  N)r`  r%   r  r%   r  r  r  r  r	  r%   r  r  r   r
  )
r  r  r  r   r  r  r  r   r   r   )
r+  r%   r  r   r  r,  r  r   r   r   )r  r%   r  r%   r   r   r  )r?  r   r@  r   r   rA  )rs  rR  rF  r   r   r   )rM  rN  rO  r*   rP  r   r   rQ  )r?  rT  rU  rV  r   rW  )r?  rZ  r   r   )r  r  r   r  )rb  rc  rd  re  r   rf  )r  r   r$  r   rn  ro  r   ro  r   ro  r   r   r   rp  )r|  )r  r   r   r%   r   r   r   rp  )r  r  r  r  r   r   )r  r   r3  r  r   r   )r  r   r3  r  r   r   )r  r   r  r   r   r  )r  r  r   r   )r  r  r   r   )r  r  r   r   )r   N)r  r%   r  r%   r  r  r   r  )r  r%   r  r   r   r   )r   r  r  r  r   r%   )r   r   r  r   r  r   r   r   )r   r   r  r   r  r   r   r   )r:  r   r;  r   r<  r   r   r%   )rL  rM  r   rM  )rL  rR  r   rS  )
rV  r%   rW  r%   rX  rY  rZ  r   r   r'   )r  re  ri  rj  r   r  r[  )r   
__future__r   pathlibr   argparserJ  enumr  r	  r  r   r  r  rj  r-  r   r  r  r  r  	functoolsr   r   	itertoolsr   tempfiler	   r
   typingr  r   r^  ru  r/  dataclasses
mesonbuildr   corer   r   TYPE_CHECKINGtyping_extensionsr   r   _typingr   rl  r   rd  r   r   r   compilers.compilersr   interpreterbase.baseobjectsr   r   r$   TypeVarUnionr'   r%   r6   r*   r+   __all__r.   r/   r   r   getattr
executabler-   r   r5   r2   r  r,   r^   r}   r   r   r   rb   rA   ABCMetar0   r1   r"  r)   rY   rB   rr  ru  IntEnumr4   	dataclassGenericr9   r;   Optionalr:   r<   rp   rm   rj   ra   rg   rl   rq   rr   rc   rd   re   rk   rf   ri   rh   ro   r`   rD   r   r  rP   rC   r  r&  r@   rT  r   r   r   r   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rQ   rn   r_   r  re  r  r~   r   rt   rT   r  r  r  r  r\   rS   r  r  rR   r"  r#  r*  r7   r   rv   rw   rV   r   r   rU   rx   rm  rl  r{   rt  r|   rs   r  r   rZ   r  r   r   r?   rO   r   
MutableSetr8   r   ry   r   r3   r  r   r"  r=   ImportErrorActionr>   r]   r   rX   rz   rW   r[   ru   r    r!   r"   <module>r     s  
 0 / / " " " " " "        



  



   



     < < < < < < < < < < < < < < < < < < < < < < < < < < < <     & & & & & & & &       ; ; ; ; ; ; ; ;                   0 0 0 0 0 0 0 0? R33333333//////))))))))))))))))))......888888! ! ! ! !X ! ! !    X    !)E);=O)O!P
Q
Q
QCwvs{#QYt__QYt__i i iX	 	 	 	 	 	 	 	 GI  H H H H      
73%   &
 nk2NNn%N;? ? ? ? ?P P P P P> P P P7 7 7 7 7> 7 7 7
 fl5    	 	 	 	 	    9 9 9 9"         &8 8 8 8 8#+ 8 8 8 8X X X X X X X XtS P5 P5 P5 P5 P5> P5 P5 P5fK K K K    &!b> , , , , ,DL , , ,& %u---    2   .-: %u---+ + + + +jn + + .-+> %u---# # # # #Jqz"~6 # # .-#> %u---9 9 9 9 9!6qz"~!FXYXbceXfHg 9 9 .-9&0 0 0 01 1 1 10 0 0 02 2 2 20 0 0 02 2 2 2! ! ! !D D D D$ $ $ $1 1 1 14 4 4 41 1 1 12 2 2 20 0 0 0. . . .. . . .. . . . 4   :# # # #J # # # # # # # #1 1 1 1f; ; ; ; "*122<7 <7 <7 <7 <7 <7 <7 <7~   81 1 1 1

+ 
+ 
+ 
+$G $G $G $GL) ) ) )X   &                               2W W W W(     :<< F  K"
#7#7#7#788?   ,! ! ! ! !F              2 2 2 28 8 8 8D D D D>%D %D %D %DP :>Y Y Y Y Y8 :>) ) ) ) )V    6 6:8 8 8 8 8 <@7 7 7 7 78 <@7 7 7 7 7B PT/ / / / /( 
           F3 3 3 3             *3 3 3 3 3    # # # #   &	F 	F 	F 	F <@AKASBL/BL/    @ CGHRHZISIS    0    *    %X %X %X %XPD D D DN1 1 1 1hW W W W   6    , , , , ,!3 , , ,& <>FJ    4   3 3 3 3 3b! 3 3 3j   	 	 	 	 	        dl   e e e e e e e eN"
. . . . .$ . . .  "KK)  e e eQdKdddddde.Q Q Q Q QX_ Q Q Q 37@ @ @ @ @F          B   = = = =*    AIbM     s   #V= =WW