
    8xd                   $   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
mZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZ d dlmZmZ d d	lmZ d d
lmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* 	 d dl+Z+n# e,$ r  ej-        d           Y nw xY w	 e+j.        Z/n# e0$ r
 e+j/        Z/Y nw xY w G d de/          Z1e12                    d           e12                    d           e13                    d           e13                    d           ej4        dk    Z5dddZ6dZ7 ej8        dej9        ej:        z            Z; ej8        d          Z< ej8        d          Z= ej8        d          Z>i a?dd!Z@dd"ZA ej8        d#          ZBd$ ZCd% ZDd& ZEd' ZFd( ZGd) ZHd* ZIdd,ZJdd-ZKd. ZLd/ ZMdd0ZNh d1ZOh d2ZPdeQd3i d4dd5dd6eQd7dd8dd9eQd:dd;eQd<eQd=eQd>eQd?dd@ddAddBeQdCddDdddddeRdEi dFddGeQdHeRdIeSdJddKeRdLeRdMeSdNddOeSdPeRdQeQdReSdSddTddUddVeSi dWeRdXddYddZeRd[dd\eSd]eQd^eQd_dd`eQdaeRdbeRdceRddeRdeeTdfeTdgeReReSeQeQeQdddg dh	ddddddddddddddddieReReReReRdjdddddeSdkeReReReReReRdldddddddddeReReRddddmdnZUdoZVdp ZWdq ZXdr ZYds ZZdt Z[du Z\dv Z]dw Z^dx Z_ddyZ`	 	 	 dd{Zad| Zbdd}Zc ed~          d             Zdd Zed Zfd Zg G d d          ZhdS )    )annotationsN)OrderedDict)	lru_cache)isfilejoin)UnicodeDammit)environ
exceptionsutilsvariants)Configget_or_merge_config)feature_list)ensure_valid_license_family)HashableDictensure_listexpand_globsfind_recipeget_installed_packagesinsert_variant_versions   )	MatchSpec	envs_dirsmd5_filenon_x86_linux_machineszPError: could not import yaml (required to read meta.yaml files of conda recipes)c                  :    e Zd Zed             Zed             ZdS )StringifyNumbersLoaderc                    d| j         vr(d | j                                        D             | _        t          | j                  D ]0}fd| j        |         D             }|r|| j        |<   (| j        |= 1d S )Nyaml_implicit_resolversc                *    i | ]\  }}||d d          S N .0kvs      4lib/python3.11/site-packages/conda_build/metadata.py
<dictcomp>zCStringifyNumbersLoader.remove_implicit_resolver.<locals>.<dictcomp>4   s3     + + + Aq1QQQ4+ + +    c                *    g | ]\  }}|k    ||fS r"   r"   )r$   trtags      r'   
<listcomp>zCStringifyNumbersLoader.remove_implicit_resolver.<locals>.<listcomp>8   s'    XXXDAqqTWxx!Qxxxr)   )__dict__r   itemstuple)clsr-   ch	resolverss    `  r'   remove_implicit_resolverz/StringifyNumbersLoader.remove_implicit_resolver1   s    $CL88+ +$'$?$E$E$G$G+ + +C' 344 	4 	4BXXXXC,G,KXXXI 42;+B///33	4 	4r)   c                z    d| j         vr| j                                        | _        || j        v r
| j        |= d S d S )Nyaml_constructors)r/   r7   copy)r2   r-   s     r'   remove_constructorz)StringifyNumbersLoader.remove_constructor>   sM    cl22$'$9$>$>$@$@C!#'''%c*** ('r)   N)__name__
__module____qualname__classmethodr5   r9   r"   r)   r'   r   r   0   sH        
4 
4 [
4 + + [+ + +r)   r   ztag:yaml.org,2002:floatztag:yaml.org,2002:intwin32x86x86_64)3264)pythongenericTz9^\ +-\ +(?:name|type):.+?(?=^\w|\Z|^\ +-\ +(?:name|type))flagszD(numpy\s*x\.x)|pin_compatible\([\'\"]numpy.*max_pin=[\'\"]x\.x[\'\"]z?pin_\w+\([\'\"]numpy[\'\"].*((?<=x_pin=[\'\"])[x\.]*(?=[\'\"]))zpin_\w+\([\'\"]numpy[\'\"]configr   returndict[str, bool]c                x	   | j         }t          |                    d          t          |dk              t          |dk              |                    d          |                    d          |                    d          |                    d          t          |dk              t          |d	k              |                    d
          |                    d          t
          t
          j        t          t          t
          j                            dd                                        }t          j
        |           }| j                            d|d                   }t          |d          s|d         }t          d                    |                    d          d                             d          dd                             }| j        |d<   |                    t          |t          d|cxk    odk     nc           t          d|cxk    odk     nc           t          |dk              t          |dk              t          |dk              t          |dk              t          |dk              t          |d k              !	  	                   | j                            d"          }|sT|d"         }| j        rEt%          j        t(                                        d#                    |d"                              t          d                    |                    d          dd                             |d$<   | j                            d%|d%                   }||d&<   | j                            d'|d'                   }||d'<   t          |d         d(k              |d)<   t.          D ]*}t          |                    d*|z                      ||<   +t0          D ]
\  }	}
|
||	<   |                    t
          j                   | j                                        D ]|\  }}||vrs	 t          |          ||<   # t4          t6          f$ rK t9          |t:                    r.|                                d+v r|                                d,k    }|||<   Y xw xY w}|S )-a4  Aggregates selectors for use in recipe templating.

    Derives selectors from the config and variants to be injected
    into the Jinja environment prior to templating.

    Args:
        config (Config): The config object

    Returns:
        dict[str, bool]: Dictionary of on/off selectors for Jinja
    linux-zlinux-32zlinux-64z	linux-armosx-)rK   rL   zwin-zwin-32zwin-64)z-32-64rM   FEATURE_NOMKLF)linuxlinux32linux64armosxunixwinr>   win64r?   r@   osr	   nomklrC   splitr     .N   build_platform   (            !   "   #   $   )	pypy3kpy2kpy26py27py33py34py35py36numpyzaNo numpy version specified in conda_build_config.yaml.  Falling back to default numpy value of {}npperlpllua2luajitz-%s)falsetruery   )host_subdirdict
startswithboolendswithrW   r	   intgetr   get_default_variantvarianthasattrr   rY   build_subdirupdateverboser   
get_loggerr:   warnformatr   r   r0   	TypeError
ValueError
isinstancestrlower)rG   platddefaultsrh   rr   rt   ru   machinefeaturevaluer%   r&   s                r'   get_selectorsr   m   s[    Dooh''TZ'((TZ'((OOK((OOF##__/00OOF##48#$$48#$$MM.))}}U##
3rz~~ou==>>??	 	 	A" +F33H			Hhx&8	9	9B2w U 
RWWRXXc]]1%++C00!455	6	6B -AHHbBmmmmmmmm$$bBmmmmmmmm$$bBhbBhbBhbBhbBhbBh
	
 
	
 
	
   
		G	$	$B g> 	X&&++<<BF8GCT<U<U   "''"((3--+,,--AdG			FHV$4	5	5BAdG
.

UHUO
4
4CAeHs1v}%%AhK) : :$--8899'

&  '

HHRZ
 $$&&  1A::1vv!z*   a%% ,!''))7H*H*H		V+A!  Hs   QAR65R6c                T    t          j        dt                     t          |           S )Nz`conda_build.metadata.ns_cfg` is pending deprecation and will be removed in a future release. Please use `conda_build.metadata.get_selectors` instead.)warningsr   PendingDeprecationWarningr   rG   s    r'   ns_cfgr      s/    M	S!  
    r)   z+(.+?)\s*(#.*)?\[([^\[\]]+)\](?(2)[^\(\)]*)$c                    t          j        dt          |                     }t          |                                          dk    r|                    d          S dS )Nz'(.+?)'r   rZ   )researchr   lengroupsgroup)errorms     r'   parseNameNotFoundr      sG    
	)SZZ((A
188::!wwqzzrr)   c                ,   	 t          | |i           S # t          $ rv}t          |          }|r4t          j        t
                    }|                    d|z   dz              |                     |d          }t          |||          cY d }~S d }~ww xY w)NzTreating unknown selector 'z' as if it was False.False)	eval	NameErrorr   r   r   r:   debugreplaceeval_selector)selector_string	namespacevariants_in_placeemissing_varlognext_strings          r'   r   r      s    H OY333 H H H'** 	"8,,CII-;>UU   &--k7CC[)5FGGGGGGGGHs    
BA+BBBc           
        g }t          |                                           D ]\  }}|                                }d}|r|d         dv r|d         }|                                                    d          rXt
                              |          }|r|                    d          }	 t          |||          r+|	                    |                    d          |z              # t          $ r5}	t          j        d|dz   |t          |	          fz             Y d }	~	d }	~	ww xY w|	                    |            d                    |          dz   S )	NrZ   )'"#   r   zOError: Invalid selector in meta.yaml line %d:
offending line:
%s
exception:
%s

)	enumerate
splitlinesrstriplstripr|   sel_patmatchr   r   append	Exceptionsysexitr   r   )
datar   r   linesilinetrailing_quoter   condr   s
             r'   select_linesr      s|   ET__..//  4{{}} 	&DH
**!"XN;;==##C(( 	MM$ 	771::D y2CDD >LLn!<=== 
 
 
 1udCFF+,	 	 	 	 	 	 	 	
 LL99Ud""s   .<C++
D*5*D%%D*c                f   	 t          j        | t                    S # t           j        j        $ r}d| v r+	 dd l}| n## t          $ r t          j        |          w xY wt          dt          j                   t          | t          j                   t          j        |          d }~ww xY w)N)Loaderz{{r   )originalzProblematic recipe:file)yamlloadr   r   	YAMLErrorjinja2ImportErrorr
   UnableToParseMissingJinja2printr   stderrUnableToParse)r   r   r   s      r'   yamlizer   !  s    3y&<====: 
3 
3 
34<<H H H H ;QGGGGH##*5555d$$$$&2222
3s)    B0B+=B+ AAB++B0c                    |                      di                                dd          }|r|dvrt          d|z            d S d S )Nbuildpin_dependsrZ   )rZ   recordstrictz9build/pin_depends must be 'record' or 'strict' - not '%s')r   RuntimeError)metar   s     r'   ensure_valid_fieldsr   1  sb    ((7B''++M2>>K 
{*BBBJ[X
 
 	

 
BBr)   c           	        t          j        t                    }|                                 D ]\  }}t	          |d          rt          |          | |<   )|rt	          |d          st          |t                    rt          |t                    rd|v rd n|| |<   qg }t	          t          t          |                    d          r,|D ](}t          |          }|r|
                    |           )nd |D             }|| |<   |                    d                    |t          |                               | S )Nkeys__iter__Nonec                    g | ]}|d v|	S ))r   NoneTyper"   r$   r   s     r'   r.   z&_trim_None_strings.<locals>.<listcomp>K  s#    NNN!9M0M0MA0M0M0Mr)   z8found unrecognized data type in dictionary: {}, type: {})r   r   r:   r0   r   _trim_None_stringsr   r   nextiterr   r   r   type)	meta_dictr   keyr   keepr   trimmed_dicts          r'   r   r   9  sm   

8
$
$Coo''  
U5&!! 	/66IcNN 	wuj11 	Zs5K5K 	%%% &)/5e	# 4U,,f55 O" 6 6'9!'<'<' 6 KK5556 ONuNNND!%	#IIJQQ4;;    
 r)   c                    |                      di                                d          }|r |t          vrt          j        d|z            d S d S )Nr   noarchzInvalid value for noarch: %s)r   NOARCH_TYPESr
   CondaBuildException)r   build_noarchs     r'   ensure_valid_noarch_valuer   V  sb    88GR((,,X66L 
L88,*\9
 
 	

 
88r)   hostr   runc                    g }|D ]D}|                     | j                            di                               |g                      E|S )Nrequirements)extendr   r   )metadataenvsreqs_envs       r'   _get_all_dependenciesr   ^  sT    D I IHM%%nb99==dBGGHHHHKr)   c           	     Z   |r|j         |j        k    rd}nd}g }t          |                                           D ]\  }t	          |                                           |dz   d          D ]t          fdt          |          D                       ret          fdt          |          D                       r;|                                                                                    f           |r(d}|D ]}| dj	        | z  }t          j        |          d S )	N)r   r   r   r   r   r   c              3     K   | ]F}                                 |k    p)|                                                     d z             V  GdS r[   Nnamer|   )r$   depr   s     r'   	<genexpr>z.check_circular_dependencies.<locals>.<genexpr>o  s`         CA3>>!&&((S.#A#A     r)   )r   c              3     K   | ]F}                                 |k    p)|                                                     d z             V  GdS r  r  )r$   r  other_ms     r'   r  z.check_circular_dependencies.<locals>.<genexpr>r  sb         #%M8L)M)M     r)   z"Circular dependencies in recipe: 
z    {} <-> {}
)rz   r   r   valueslistanyr   r   r  r   r
   RecipeError)	render_orderrG   r   pairsidxr   pairr   r
  s	          @@r'   check_circular_dependenciesr  e  s    (&$(;;; 'EL//1122 	9 	9QL//11223799= 	9 	9G    0tDDD     9     0>>>    9 affhh7888	9  ,5 	5 	5D-&-t44EE$U+++	, ,r)   c                    d}| j         j                                        D ]+\  }}||j         j        v r||j         j        |         k    rd},|S )NTF)rG   r   r0   )r   output_metadatar   r   vals        r'   _variants_equalr  ~  s]    EO+1133  S?)111-5c:::ELr)   c           
        d}g }|                                  D ]\  }}|                                  D ]p\  }}||k    rc|j                            di                               dg           }t          |d          r,g }t          j        D ]}||                    |g           z   }|}t          ||          |z   }	|	D ]}
|
                    |                                dz             rt          |

                    d                    dk    r|

                    d          d         |                                k    r_t          ||          rO|                    |                                |                                |
|                                f           r|r+d}|D ]}| d	j        | z  }t          j        d
|z             d S )Nr  r   run_exportsr   r[   r   r   rZ   z?Mismatching package: {} (id {}); dep: {}; consumer package: {}
zMismatching hashes in recipe. Exact pins in dependencies that contribute to the hash often cause this. Can you change one or more exact pins to version bound constraints?
Involved packages were:
)r  r   r   r   r   RUN_EXPORTS_TYPESr   r|   r  r   rY   build_idr  r   r   r
   r  )r  r   	problemos_r   omr  run_exports_listexport_typedepsr  r   probs                r'   ensure_matching_hashesr#    s   !DI&&(( S S1$++-- 	S 	SEArBww gkk'266::="MM;// 3')$','>  +;koo'? ? ,(( #3K,R66D S SCqvvxx#~66S		#//144IIcNN2.!**,,>>+Ar22 ? "((!&&((AJJLL#rwwyy)QRRR%	S(  
 	 	D^W^ EE $( +00
 
 	

 
r)   c           
        t          | t          |          t          |j                            } t	          |           }|i }t
          D ]}||vr||         si ||<   |t          v rvt          ||         t                    sZt          ||         d          rt          ||         t                    r)t          d|d||         j        j        d|d          t          ||         t                    s)t          d|d||         j        j        d|d          t          |           t          |           t!          |           t#          |          S )Nr   r   zThe z. field should be a dict or list of dicts, not z	 in file r\   z field should be a dict, not )r   r   r}   r   r   FIELDSOPTIONALLY_ITERABLE_FIELDSr   r{   r   r   r   	__class__r:   r   r   r   sanitize)r   rG   pathresfields        r'   parser-    s   fv~..  D
 $--C
{  5z 	CJ...3u:t,,CJ
33<Fs5zSV<W<W #l(-s5z/C/L/L/LdddT  
 c%j$// "luuc%j2;;;TTTC   $$$c"""C==r)   >   yonyesry   >   nnooffrx   )r  versionfnurlmd5sha1sha256r*  path_via_symlinkgit_urlgit_tag
git_branchgit_rev	git_depthhg_urlhg_tagsvn_urlsvn_revsvn_ignore_externals)svn_usernamesvn_passwordfolderno_hoistpatchesnumberstringentry_points
osx_is_appdisable_pipfeaturestrack_featurespreserve_egg_dirno_linkbinary_relocationscriptr   noarch_pythonhas_prefix_filesbinary_has_prefix_filesignore_prefix_filesdetect_binary_files_with_prefixskip_compile_pycrpathsrpaths_patcher
script_envalways_include_filesskipmsvc_compilerr   include_recipepreferred_envpreferred_env_executable_pathsr  ignore_run_exportsignore_run_exports_fromrequires_featuresprovides_featuresforce_use_keys)	force_ignore_keysmerge_build_hostzpre-linkz	post-linkz
pre-unlinkmissing_dso_whitelisterror_overdependingerror_overlinkingoverlinking_ignore_patterns)r  r4  rJ  rL  rT  script_interpreterr   r   testaboutextrafilesr   r  target)r   r   r   	conflictsrun_constrained)entryiconsummaryr   cli_optsown_environment)requirescommandsrs  importssource_filesdownstreams)homedev_urldoc_urldoc_source_urllicense_urllicensery  descriptionlicense_familyidentifierstagskeywordslicense_fileprelink_messagereadme)packagesourcer   outputsr   apprp  rq  )r  r  c                    t           gt          gt          gd}|                                D ]E\  }}|| v r<|D ]9| |         }t          |d          r |          }nfd|D             }|| |<   :F| S )zE
    Sanitize the meta-data to remove aliases/handle deprecation
    )r  r  r   r   c                &    g | ]} |          S r"   r"   )r$   _dfuncs     r'   r.   zsanitize.<locals>.<listcomp>z  s!    #D#D#DDDHH#D#D#Dr)   )
_git_clean_str_versionr0   r   )r   sanitize_funssectionfunssection_datar  s        @r'   r)  r)  h  s    
 , > M
 ',,.. 
- 
-d?? - -#G}<00 E#'4#5#5LL $E#D#D#D|#D#D#DL ,WKr)   c                    d}d}|f|z   }t           fd|D                       }t          |          dk    rFd}|d                    d t          ||          D                       z  }t	          j        |                                            }t          |dd         |dd                   D ].\  }}|r||         ||d	         <   |                    |d           /|S )
z
    Reduce the redundancy in git specification by removing git_tag and
    git_branch.

    If one is specified, copy to git_rev.

    If more than one field is used to specified, exit
    and complain.
    )r=  r<  r>  c              3  ^   K   | ]'}t                              |d                     V  (dS )rZ   N)r}   r   )r$   r-   source_metas     r'   r  z_git_clean.<locals>.<genexpr>  s9      PPCkooc26677PPPPPPr)   r   zError: multiple git_revs:z, c              3  &   K   | ]\  }}|| V  d S r!   r"   )r$   r   hass      r'   r  z_git_clean.<locals>.<genexpr>  sA       
 
!c
H
 
 
 
 
 
r)   Nr   )r1   sumr   zipr   r   r8   pop)	r  git_rev_tags_oldr>  git_rev_tagshas_rev_tagsmsgret_metar   r  s	   `        r'   r  r    s    1G: 00LPPPP<PPPPPL
<1)tyy 
 
%(|%D%D
 
 
 
 
 	
 	 !!HQRR(,qrr*:;;    S 	6(0H\!_%S$Or)   c                    d| v r&t          |                     dd                    | d<   d| v r&t          |                     dd                    | d<   | S )Nr4  rZ   r`  )r   r   )package_metas    r'   r  r    sb    L  "%l&6&6y"&E&E"F"FY,&&(+L,<,<_b,Q,Q(R(R_%r)   c           	     ~    d}|dv r|dz  }|dk    r|dz  }|D ]#}|| v rt          j        d| d| d|             $d S )	Nz=@#$%^&*:;"'\|<>?/ )package/versionbuild/string-r  !Error: bad character 'z' in z: )r   r   )sr,  bad_chrscs       r'   check_bad_chrsr    s    &H333C!!!C D D66HBaBBeBBqBBCCCD Dr)   c                    d}| D ]_}|                                 d         |k    r?t          |                                           dk    r|                                 d         }`|S )NrZ   r   r   )rY   r   )
build_reqsr  r4  specs       r'   get_package_version_pinr    s^    G & &::<<?d""s4::<<'8'81'<'<jjll1oGNr)   c           
        | j                             di                               d          r|                     d          }ng }| j        rdnd}d |                     |          D             }| j                             di                               |g           }dD ]r\  }}}|                     d          D ]T}	t          |          D ]@}
|	j        |
k    r1|
|v r,|
d	k    r| j        s"| j        |
k    s|                     d
          r|
dk    r|	                    |           ^t          t          |                    }|                    d t          |          D                        |D ]J}t          ||          p3| j        j                            |                    dd          d          }|r nKd                    |g|                    d          d |         z             }||vr|	                    |           BVtt          |                     dg                     }|r|	                    d           |r*|                    d                    |          df           |	                    t%          |                                                      d                    |          }|S )Nr   rK  r  r   c                    g | ]	}|j         
S r"   r  r$   mss     r'   r.   z.build_string_from_metadata.<locals>.<listcomp>  s    PPPr27PPPr)   r   ))rr   rq   r]   )rh   rC   r]   )rt   rs   r   )ru   ru   r]   )r,   )r,   r-baser]   )mromro-baser   )r  zmro-base_implr   r   rq   build/noarch_pythonrC   c                B    g | ]}d |v |                     d d          S )r  r  r   )r$   _ns     r'   r.   z.build_string_from_metadata.<locals>.<listcomp>  s7     !" !" !"(*'*byy %'JJsC$8$8'0yyr)   r  r  rZ   r\   build/features)r   r   	get_valueis_cross
ms_dependsr   r  numpy_xxr   r   r  r   r  rG   r   r   r   rY   r   build_number)r   	build_strr+  build_or_hostbuild_pkg_names
build_depsr  namesplacesr  r  	pkg_namesr  variant_versionrw  rO  s                   r'   build_string_from_metadatar    s   }"%%))(33 9!&&~66		"*"3@PPX-@-@-O-OPPP]&&~r::>>}bQQ
!
 '	2 '	2Auf ))%00 2 2'.. 2 2Dw$4?+B+B7??83D?$#?d22$../DEE 3 $ 0 0JJqMMMM(,[-?-?(@(@I%,,!" !".9%.@.@!" !" !"   '0 * *2I$.3" 3" 3"%-_%<%@%@$&JJsC$8$8"&" &" !0
 $3 !*$)E!*$&GGQC/2G2G2L2LWfW2U,U$V$VE$C// #

5 1 1 1;22@ x112BBGGHH 	JJsOOO 	2JJ**C0111

3x,,..//000GGCLL	r)   c                   t           j                            |           sot          t                    t          j                    gz   D ]E}t           j                            ||           }t           j                            |          r|}  nFt           j                            | d          }t           j                            |          s&t          d| z             t          j	        d           | S )Nz
conda-metaz$Bootstrap environment '%s' not foundr   )
rW   r*  isdirr  r   getcwdr   r   r   r   )env_name_or_pathenvs_dirr*  bootstrap_metadirs       r'   _get_env_pathr    s    7==)** Y29;;-7 	 	H7<<*:;;Dw}}T"" #'  %5|DD7==*++ 47GGHHHr)   c           	         t          |           }t          |          }g }|                                D ];\  }}|                    d                    ||d         |d                              <dd|iiS )Nz{} {} {}r4  r   r   )r  r   r0   r   r   )r  r*  bootstrap_metadatabootstrap_requirementsr  r   s         r'   "_get_dependencies_from_environmentr    s    )**D 055+1133 
 
%%gtIWFF	
 	
 	
 	
 W&<=>>r)   c                    ddl m} d  D             }t                      }t                      }t                      }t	                                                     D ]\  }\  }}|                    dd                              d          r|                    dg           |                    dg           z   }	|j	        s)|	
                    |                    dg                      |d	         }
|||
<   t                      ||
<   |	D ]=}|                    d
          d         }||v r||
                             |f           >|                    |           t           ||                    } fd|D             }|
                     fd|D                        t                      }|D ]} |         ||<   |S )a  This function is used to work out the order to run the install scripts
    for split packages based on any interdependencies. The result is just
    a re-ordering of outputs such that we can run them in that order and
    reset the initial set of files in the install prefix after each. This
    will naturally lead to non-overlapping files in each package and also
    the correct files being present during the install and test procedures,
    provided they are run in this order.r   )	_toposortc                p    g | ]3}|                     d d                              d          +|d         4S )r   condar  )r   r|   )r$   output_ds     r'   r.   ztoposort.<locals>.<listcomp>&  sO       <<((33G<<  r)   r   r  requirements/runzrequirements/hostrequirements/buildr  r[   r   c                b    g | ]+}                                 D ]}d |v |d          |k    |,S r  r   r$   pkgnamer%   output_metadata_maps      r'   r.   ztoposort.<locals>.<listcomp>A  s]       $))++  Q;;1V9// 	
 0///r)   c                j    g | ]/}                                 D ]}d |v r|d          |k    sd |v|0S r  r  r  s      r'   r.   ztoposort.<locals>.<listcomp>J  sc     	
 	
 	
(--//	
 	
 !&	W 4 4q  :Ir)   )conda_interfacer  r{   setr   r0   r   r|   r  r  r   rY   r   addr  r   )r  r  these_packagestopodictorderendorderr  r  output_mr!  r  r  
topo_orderr   resultr   s   `               r'   toposortr    s:    +***** +  N
 vvHFFEuuH%./B/H/H/J/J%K%K  !!h<<((33G<< 	%%&8"==@R@R#RA A D $ JH../CRHHIIIF#DE$K UUHTN 2 2iinnQ'.((TN))3&1112
 LLii))**J   !  D 	KK	
 	
 	
 	
#	
 	
 	
   ]]F / /)#.sMr)   c                    |p                      d          }|sd                                 ig}nqt          |d          r
J d             j        rPt	           fd|D                       s5|                    t                                                                |D ]S}d                                 v r;|                    d                                           k    rt           |           T|S )Nr  r  r   zoutputs specified as dictionary, but must be a list of dictionaries.  YAML syntax is: 

outputs:
    - name: subpkg

(note the - before the inner dictionary)c              3  p   K   | ]0}                                 |                    d d          k    V  1dS )r  rZ   N)r  r   )r$   outr   s     r'   r  z1get_output_dicts_from_metadata.<locals>.<genexpr>f  sO       0
 0
7:HMMOOswwvr2220
 0
 0
 0
 0
 0
r)   r  package:)
get_sectionr  r   uses_subpackager  r   r   get_recipe_textr   &combine_top_level_metadata_with_output)r   r  r  s   `  r'   get_output_dicts_from_metadatar   W  s+   8--i88G >HMMOO,-7F++ 	
 	
7	
 	
 	
 # 	>C 0
 0
 0
 0
>E0
 0
 0
 -
 -
 	> NN;HMMOO<<<=== B B(2244448==??2228SAAANr)   Fc           
        ddl m} t                      }|                                D ]\  }                                r	 t          j        t                    }| j        j	        r*|
                    d                                            |                                 }	j        |	_        j        j        |	j        _        |	                                }
|	j                            |           d|	_        |	                                                              pd                                i}|	                    |          }	d }d|
j        j        v r|
j        j        d         }|
j        j        d= |
                                 |r||
j        j        d<   |s ||	|
|          n|	|                    d          r(|                    d                              d	          rF|f|                                t-          fd
                                D                       f<   # t0          j        $ r}|s t          j        t                    }|                    d                    |j                             |f|                                t-          fd                                D                       f<   Y d }~d }~ww xY w|| _        d| _        t                      }|                                D ]N\  }\  }|f|                                t-          fd                                D                       f<   O|S )Nr   )finalize_metadataz$Attempting to finalize metadata for Fr  replacements)parent_metadatapermit_unsatisfiable_variantsr   r  c                Z    i | ]'}|t          j        j        j        |                   (S r"   r8   deepcopyrG   r   )r$   r%   fms     r'   r(   z)finalize_outputs_pass.<locals>.<dictcomp>  s?       $% !"4=1B11E#F#F  r)   z;Could not finalize metadata due to missing dependencies: {}c                Z    i | ]'}|t          j        j        j        |                   (S r"   r  )r$   r%   r   s     r'   r(   z)finalize_outputs_pass.<locals>.<dictcomp>  s?       $% !"4=1H1K#L#L  r)   c                Z    i | ]'}|t          j        j        j        |                   (S r"   r  r$   r%   r   s     r'   r(   z)finalize_outputs_pass.<locals>.<dictcomp>  s/    VVVqQah&6q&9::VVVr)   )renderr  r   r  r_  r   r   r:   rG   r   infor  r8   other_outputsr   r   finalget_rendered_outputget_output_metadataparse_until_resolvedr   r|   r   get_used_varsr
   DependencyNeedsBuildingErrorr   r   packagesr0   )base_metadatar  pass_nor  r  bypass_env_checkr  r  r   r  r  r  r   final_outputsr%   out_dr	  r   r   s                   @@@r'   finalize_outputs_passr  s  s    *)))))mmG +1133 L) L)(==?? 	I	)"8,,C #+ SQQQRRR##%%B  (5B ( 7BI ggiiO##G,,,BH --hmmoo>> CH ''11BL!7!???.5=nM#*2>B00222 NAM&.~># &&$32O   <<'' #8<<+?+?+J+J7+S+S # rN 		$   )+)9)9););   
 6 	) 	) 	)0 )&x00
++   x(  $   )1)?)?)A)A   
 
 
 
 
 
	)* #*MMMMM   :E1 AJ 	VVVVAOODUDUVVV 	
 	
 s   G6I  K)BK$$K)c                j      }d v r+ fd|D             }t          |          dk    sJ |d         }|S )Nr  c                @    g | ]}d |v |d          d          k    |S r  r"   )r$   r  original_dicts     r'   r.   zBget_updated_output_dict_from_reparsed_metadata.<locals>.<listcomp>  s?     
 
 
}}Vf0E!E!E !E!E!Er)   r   r   )r   )r  new_outputsr  	output_dss   `   r'   .get_updated_output_dict_from_reparsed_metadatar"    sb    H
 
 
 
"
 
 
	
 9~~""""Q<Or)   c                    |rct          j        || t           j        t           j        z            }|r1d                    d |                                D                       nd} | S )NrE   r   c                    h | ]}||S r"   r"   )r$   rK  s     r'   	<setcomp>z&_filter_recipe_text.<locals>.<setcomp>  s    EEE&fEvEEEr)   rZ   )r   r   	MULTILINEDOTALLr   r   )textextract_patternr   s      r'   _filter_recipe_textr*    sf     
	/4r|bi7OPPPJOWDIIEEELLNNEEEFFFUW 	 Kr)   )maxsizec                    t          | d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   t	          |d          r|                                }|S )Nrbdecode)openr   readunicode_markupr   r.  )	meta_pathfrecipe_texts      r'   read_meta_filer5    s    	i		 =!#AFFHH--<= = = = = = = = = = = = = = ={H%% +!((**s   'AAAc                >   d}|D ]}| j                             |i           pi }|                    |i           pi }|dk    r(t          j        |                    |i                     }|                                D ]\  }}||vr|||<   |||<   || j         |<   dS )zJMerge top-level metadata into output when output is same name as top-level)r   r   rq  r   N)r   r   r   expand_reqsr0   )r   outputsectionsr  metadata_sectionoutput_sectionr%   r&   s           r'   r  r    s    1H 
0 
0#=,,Wb99?RGR006Bn$$".vzz'2/F/FGGN$**,, 	& 	&DAq&&$%q!(w!/g
0 
0r)   c                   t          j        | j                            di                     }t          j        |                    dg                     }t          j        |                    dg                     }|                    dg           }d |D             }d |D             }t                      }t          t          j        | j        j                            dg                               }|D ]M}||v r"||vr||vr||v r|	                    |           (||v r!||vr||v r||v r|	                    |           N||z
  S )zthings can be used as dependencies or elsewhere in the recipe.  If it's only used
    elsewhere, keep it. If it's a dep-related thing, only keep it if
    it's in the build deps.r   r   r   r   c                n    h | ]2}||                                 d                              dd          3S r   r  r  rY   r   r$   reqs     r'   r%  z'trim_build_only_deps.<locals>.<setcomp>  s9    PPPsCP#))++a.((c22PPPr)   c                n    h | ]2}||                                 d                              dd          3S r>  r?  r@  s     r'   r%  z'trim_build_only_deps.<locals>.<setcomp>  s9    NNNc#NQ''S11NNNr)   ignore_build_only_deps)
r   r7  r   r   r   r  sortedrG   r   r  )	r   requirements_usedoutput_reqsr  	host_reqsrun_reqs	to_removerC  r  s	            r'   trim_build_only_depsrJ    sv    #HM$5$5nb$I$IJJK";??7B#?#?@@J!+//&""="=>>Iub))HPPjPPPJNNYNNNII#(/1556NPRSSTT  ! # #(??:%%y((,,,c""" z!!y((,,,111c"""y((r)   c                    t          j        t          j        | d                                                    }d|                                 d |dz            S )NT)	sort_keyshr   )hashlibr8  jsondumpsencode	hexdigest)hashing_dependencieshash_lengthhash_s      r'   _hash_dependenciesrV  4  sV    L$8DIIIPPRRSSE #u  ""#4[1_#455r)   c                      e Zd ZdadZed             Zed             Zej        d             Zed             Zej        d             Z	 dbd	Z	ed
             Z
	 	 	 dcdZd Zd Z	 dddZeda fd	            Zeda fd	            Zd ZdedZd ZdbdZd Zd Zd ZdfdZd Zd Zd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd) Z(d* Z)	 	 	 	 	 	 dgd+Z*d, Z+d- Z,d. Z-ed/             Z.ed0             Z/ed1             Z0ed2             Z1ed3             Z2ed4             Z3ed5             Z4ed6             Z5	 dhd7Z6dbd8Z7did9Z8d: Z9d; Z:	 did<Z;ed=             Z<ed>             Z=ed?             Z>ed@             Z?dA Z@dB ZAedC             ZBeBj        dD             ZBedE             ZCeCj        dF             ZCedG             ZDedH             ZEedI             ZFdJ ZGdK ZHdL ZIdM ZJ	 	 	 dcdNZKdO ZLdddPZM	 djdQZNdjdRZOdjdSZPedT             ZQedU             ZRdddVZS	 dcdWZTdddXZUdY ZVdZ ZWd[ ZXd\ ZYed]             ZZed^             Z[d_ Z\d` Z] xZ^S )kMetaDataNc                0   g | _         t          ||          | _        t          |          rP|| _        t
          j                            |          | _        t
          j        	                    |          | _        nDt          |          | _        d| _        t
          j        	                    | j                  | _        t          | j        d          | _        t                      | _        |                     dd           | j        | j        _        d S )Nr   z	meta.yamlzrequirements.txtT)permit_undefined_jinjaallow_no_other_outputs)undefined_jinja_varsr   rG   r   
_meta_pathrW   r*  basename
_meta_namedirnamer   r2  r   requirements_pathr{   r   parse_againrN  )selfr*  rG   r   s       r'   __init__zMetaData.__init__=  s    $&!)&'BBB$<< 	8"DO g..t44DO--DII)$//DO)DO77DI!%di1C!D!D FF	 	TRRR"&"2r)   c                    t          |                     d                    pd| j                            di           v S )Nr   r   )r}   get_depends_top_and_outr   r   rd  s    r'   r  zMetaData.is_crossX  sE    D008899 
Vty}}BH
 H
 >
 	
r)   c                ,    |                      d          S )Nzextra/finalr  rh  s    r'   r  zMetaData.final^  s    ~~m,,,r)   c                Z    | j                             di           }||d<   || j         d<   d S )Nrr  r  r   r   )rd  booleanrr  s      r'   r  zMetaData.finalb  s2    	gr** g"	'r)   c                J    | j         j        pd| j        v od| j        d         v S Nr   rN  )rG   rN  r   rh  s    r'   rN  zMetaData.disable_piph  s/    {& 
ty H]di6H%H	
r)   c                r    || j         _        | j                            di           }||d<   || j        d<   d S ro  )rG   rN  r   r   rd  r   r   s      r'   rN  zMetaData.disable_pipn  s=    "'	gr**$m"	'r)   Fc                   t          |d          r|}nOt          |          5 }t          |                                | j                  }ddd           n# 1 swxY w Y   t          j        | j        || j        ||           dS )ai  Append to or replace subsections to meta.yaml

        This is used to alter input recipes, so that a given requirement or
        setting is applied without manually altering the input recipe. It is
        intended for vendors who want to extend existing recipes without
        necessarily removing information. pass merge=False to replace sections.
        r   r   N)mergeraise_on_clobber)	r   r/  r-  r0  rG   r   merge_or_update_dictr   r*  )rd  sections_file_or_dictrs  rt  build_config
configfiles         r'   append_metadata_sectionsz!MetaData.append_metadata_sectionsu  s     (&11 	L0LL+,, L
$Z__%6%6t{KKKL L L L L L L L L L L L L L L"II-	
 	
 	
 	
 	
 	
s   )AAAc                    |                      d          }| j                            di                               di                               d          }t          |          o||k    S )NT)fail_okrr  parent_reciper  )r  r   r   r}   )rd  	self_nameparent_names      r'   	is_outputzMetaData.is_output  s`    IIdI++	immGR0044_bIIMMfUUK  =[I%==r)   c                   | j         r
J d            t          j        t                    }|r|                    d           d}d}| j        rt          |                     |||          | j        | j                  | _	        t          j                            | j        d          }t          j                            | j        d          }| j        j        p|}|r7t          j                            |          s|                    d|           d}| j        j        p|}|r7t          j                            |          s|                    d	|           d}|r|                     |d
           |r|                     |d           | j        j        r0t'          | j        j                  }|                     |d
           d| j	                            di           v r| j	        d         d         | j        _        d| j	                            di           v r| j	        d         d         | j        _        |                                  |                                  dS )a  Redo parsing for key-value pairs that are not initialized in the
        first pass.

        config: a conda-build Config object.  If None, the config object passed at creation
                time is used.

        permit_undefined_jinja: If True, *any* use of undefined jinja variables will
                                evaluate to an emtpy string, without emitting an error.
        z%modifying metadata after finalizationzjusing unsupported internal conda-build function `parse_again`.  Please use conda_build.api.render instead.Nr\  r  )rG   r*  zrecipe_append.yamlzrecipe_clobber.yamlz,input append sections file did not exist: %sz-input clobber sections file did not exist: %sT)rs  Frm  r   rl  )r  r   r   r:   r   r2  r-  _get_contentsrG   r   rW   r*  r   append_sections_filer   r   clobber_sections_filery  	bootstrapr  r   rm  rl  validate_featuresensure_no_pip_requirements)	rd  r[  r\  r  kwr   r  r  dependenciess	            r'   rc  zMetaData.parse_again  s     :FFFFFFx(( 	HH2  
  $ $> 	S""*+A%5 #  
 {^  DI $&7<<	;O#P#P $&GLL<Q$R$R!#{?WCW 	(7K(L(L 	(II>@T   $( K-F1F 	 ! 	)8M)N)N 	)II?AV   %)! 	L))*>d)KKK  	N))*?u)MMM;  	D=dk>STTL)),d)CCC$)--"<"<<<,0Ig,>?R,SDK) DIMM'2$>$>>>.2i.@AV.WDK+   '')))))r)   c                    d}|D ]?}t          d |                     |          pg D                       rt          d          @d S )N)r  r  test/requiresc              3  6   K   | ]}t          |d           V  dS )r   N)r   )r$   items     r'   r  z6MetaData.ensure_no_pip_requirements.<locals>.<genexpr>  s,      QQT74((QQQQQQr)   zDictionaries are not supported as values in requirements sections.  Note that pip requirements as used in conda-env environment.yml files are not supported by conda-build.)r  r  r   )rd  r   r   s      r'   r  z#MetaData.ensure_no_pip_requirements  sm    H 	 	CQQdnnS6I6I6ORQQQQQ  N  	 	r)   c                   | j                             di           }|                    dg           }t          |                     dd                    r)| j        j        dk    rd|vr|                    d           || j         d<   dS )zFFor dynamic determination of build or run reqs, based on configurationr   r   zbuild/osx_is_appFrS   z
python.appN)r   r   r}   r  rG   platformr   )rd  r   rH  s      r'   append_requirementszMetaData.append_requirements  s    y}}^R0088E2&& 2E::;;	.$--8++---$(	.!!!r)   c                    d}| j         }|                     d||           || _         t          |          t          | j                  k    rK| j        }|                     d||           || _         t          |          t          | j                  k    K|rD|                     d||           t	          j        d                    | j                             |                     d||           || _         dS )zcvariant contains key-value mapping for additional functions and values
        for jinja2 variablesr"   Tr[  r\  r  FzXUndefined Jinja2 variables remain ({}).  Please enable source downloading and try again.N)r  rc  r  r]  r   r   r   )rd  r\  r  r]  r  s        r'   r  zMetaData.parse_until_resolved  sJ     " 
#'#9- 	 	
 	
 	

 
&''3t/H+I+III#'#< '+'=!1    
 DJ &''3t/H+I+III   		','=!1    
 H44:F4;T4U4U   	#(#9- 	 	
 	
 	

 


r)   c                    t                                          |           }|st                      }t          ||d|          |_        ||_        |                    d           |S )NrZ   )rG   r*  r   Tr[  )super__new__r   r-  r   rG   rc  r2   r   rG   r   r   r(  s        r'   
fromstringzMetaData.fromstring  sa    GGOOC   	XXFxRIII	T222r)   c                    t                                          |           }d|_        d|_        d|_        t          |          |_        |st          |          }||_        g |_	        d|_
        |S )zG
        Create a MetaData object from metadata dict directly.
        rZ   rZ  F)r  r  r*  r^  rb  r)  r   r   rG   r]  r  r  s        r'   fromdictzMetaData.fromdict(  sr    
 GGOOC   (## 	-G,,,F!#r)   c                8    | j                             |i           S r!   rl  )rd  r  s     r'   r  zMetaData.get_section<  s    y}}Wb)))r)   Tc                   |                     d          }t          |          dv sJ d|z               t          |          dk    r|\  }}d}n;t          |          dk    r(|\  }}}|dk    sJ d|z               t          |          }|rJ|Ht                              |i                               |          rt          |         |                     }|                     |          }t          |t                    r|rJ d	| d
| d            nt          |t                    rz|4t          j
        t                    }	|	                    d| d           d}t          |          dk    ri }n.||         }t          |t                    sJ d| d| d            |                    ||          }
t          |
t                    r;|
                                t          v rd}
n|
                                t           v rd}
|
|}
|
S )a  
        Get a value from a meta.yaml.
        :param field: Field to return, e.g. 'package/name'.
                      If the section might be a list, specify an index,
                      e.g. 'source/0/git_url'.
        :param default: Default object to return if field doesn't exist
        :param autotype: If True, return the default type of field if one exists.
                         False will return the default object.
        :return: The named value from meta.yaml
        /)r]   r   zBad field name: r]   Nr   r  zSection is not a list: zGot non-zero index (z), but section z is not a list.z!No index specified in get_value('z'). Assuming index 0.r   z	Expected z to be a dictTF)rY   r   r   r&  r   r  r   r{   r  r   r   r:   r   r   r   TRUESFALSES)rd  r  defaultautotyper  r  r   indexr  r   r   s              r'   r  zMetaData.get_value?  sg    

35zzV###%7$%>###u::?? LGSEEZZ1__"'GUCh&&&(AG(K&&&JJE  	-FJJw,C,C,G,G,L,LWoc*,,G''00lD)) 	>U UTeTTGTTTU U U U d++ 	> }&x00SSSS   <  A%%!+E2! $  > >=w=====> > >   g.. eS!! 	{{}}%%&((=Er)   c                4   d }| j                                         D ]z\  }}|dk    r|t          vrt          d|z            |D ]P}|t          v r9t          |t                    r$|                                D ]} |||           D |||           Q{dS )Nc                N    | t           |         vrt          d|d|           d S )Nzin section z: unknown key )r&  r   )r   r  s     r'   check_fieldz*MetaData.check_fields.<locals>.check_field~  s8    &/)) !Ow!O!O!O!OPPP *)r)   rr  zunknown section: %sT)r   r0   r&  r   r'  r   r{   r   )rd  r  r  submetakey_or_dictr   s         r'   check_fieldszMetaData.check_fields}  s    	Q 	Q 	Q !%	 1 1 	6 	6GW'!!f$$ !6!@AAA& 6 6888Z> >8  +//11 2 2#C11112  KW55556 tr)   c                @   | j                             di                               dd          }|s|st          j        d| j        z             t          |          }||                                k    rt          j        d|z             t          |d           |S )Nr  r  rZ   z"Error: package/name missing in: %rz.Error: package/name must be lowercase, got: %rzpackage/name)r   r   r   r   r2  r   r   r  )rd  r{  r+  s      r'   r  zMetaData.name  s    immIr**..vr:: 	L7 	LH9DNJKKK#hh#))++HEKLLLsN+++
r)   c                    t          |                     d                    }|t          j        d| j        z             t          |d           | j        r%|                    d          rt          d|          |S )Nr  z%Error: package/version missing in: %rr\   z8Fully-rendered version can't start with period -  got %s)	r   r  r   r   r2  r  r  r|   r   )rd  r+  s     r'   r4  zMetaData.version  s    $..!23344;H<t~MNNNs-...: 	#..-- 	JC   
r)   c                    |                      d          }|sdS 	 t          |          S # t          t          f$ r t          d| d          w xY w)Nzbuild/numberr   z Build number was invalid value 'z'. Must be an integer.)r  r   r   r   )rd  rJ  s     r'   r  zMetaData.build_number  ss    //  	1	v;;I& 	 	 	Q6QQQ  	s	   * %Ac                    t                               d|z   g                     d d          }d |D             g } j        sy fd j                            dg           D             }|rPt          j        |d                             dg                                         |g           }fd|D             }d t          |          t          |          z  D             }|S )	Nrequirements/c                F    h | ]}||                                 d          S r   rY   r@  s     r'   r%  z3MetaData.get_depends_top_and_out.<locals>.<setcomp>  s)    HHHCHSYY[[^HHHr)   c                j    g | ]/}|                     d                                           k    -|0S r  r   r  r$   r  rd  s     r'   r.   z4MetaData.get_depends_top_and_out.<locals>.<listcomp>  s@       776??diikk11 111r)   r  r   r   c                L    g | ] }|                                 d          v|!S r  r  )r$   r  	req_namess     r'   r.   z4MetaData.get_depends_top_and_out.<locals>.<listcomp>  s6       Qy1P1PC1P1P1Pr)   c                    g | ]}||S r"   r"   r@  s     r'   r.   z4MetaData.get_depends_top_and_out.<locals>.<listcomp>  s-     
 
 


 
 
r)   )r   r  r  r   r   r   r7  r  )rd  typmeta_requirements
extra_reqsmatching_outputr  s   `    @r'   rg  z MetaData.get_depends_top_and_out  s3   '7Lb(Q(QRRSTSTSTUHH/@HHH	
~ 	   9==B77  O
  ".#A&**>2>> #c2,,    #-  

 
 122S__D
 
 
 ! r)   r   c           	         d} fd|D             } j         j                            d          r;|                    d j         j        d         fd j         j        d         fg           t	                      }t                               d|z   g                     D ]}|s	 t          |          }nS# t          $ r t          d|z            t          t          f$ r$}t          dt          |          z             d }~ww xY w|j                                         k    rD|d	k    r j         j         j         j        k    s$t          d
                                 z            |D ]\  }}	|j        |k    r j        rdD ]+}
|
|j        v r t#          j        d|
d|j        d           ,|                                }t)          |          dk    rp|d         dv rfd|d         d|j        d}t)          |          dk    r+|d                    |j        |d         |d                   z  }t#          j        |           |||<   t-          |                                          S )N)rC   rq   rs   ru   c                v    g | ]5}j         j                            |          !|j         j        |         f6S r"   )rG   r   r   )r$   r  rd  s     r'   r.   z'MetaData.ms_depends.<locals>.<listcomp>  sQ     
 
 
{"&&t,,
4;&t,-
 
 
r)   r_baser,   r  r  z!Invalid package specification: %rzuReceived dictionary as spec.  Note that pip requirements are not supported in conda-build meta.yaml.  Error message: r   z%s cannot depend on itselfz=!@#$%^&*:;"'\|<>?/r  z' in package name dependency 'r   r]   r   >   !=<===>=<=>z!' in package version dependency 'r   z
Perhaps you meant '{} {}{}')rG   r   r   r   r   r   r  r   AssertionErrorr   AttributeErrorr   r   r  rz   r   r   r   r   rY   r   r   r  r  )rd  r  r  name_ver_listspecsr  r  r   r  verr  partsr  s   `            r'   r  zMetaData.ms_depends  s   2
 
 
 

 
 

 ;""8,, 	  $+-h78t{28<=   /Db I IJJ '	 '	D t__! O O O"#F#MNNN"J/   "OQTUVQWQWX  
 w$))++%%w4;#:dk>V#V#V"#?$))++#MNNN* ! !	c7d??{ ! ,  <<HH-.QQ9   JJLLE5zzQ8FFFF .31XXXrwww@  5zzQ>EEGU1XuQx     HSMMME$KKELLNN###s   'B77,D#DDc                    t                                                     }t           |           g d}|                    t	           j        j                            dg                                d|v r* j        \  }} j	        s|r|s|
                    d           |r@t          j        d                    d |D                                  fd|D             }|dgk    ri }n fd|D             } j                            d	i                               d
g           }d |D             }|                    d |D                        |S )a  
        # A hash will be added if all of these are true for any dependency:
        #
        # 1. package is an explicit dependency in build, host, or run deps
        # 2. package has a matching entry in conda_build_config.yaml which is a pin to a specific
        #    version, not a lower bound
        # 3. that package is not ignored by ignore_version
        #
        # The hash is computed based on the pinning value, NOT the build
        #    dependency build string. This means hashes won't change as often,
        #    but it also means that if run_exports is overly permissive,
        #    software may break more often.
        #
        # A hash will also ALWAYS be added when a compiler package is a build
        #    or host dependency. Reasoning for that is that the compiler
        #    package represents compiler flags and other things that can and do
        #    dramatically change compatibility. It is much more risky to drop
        #    this info (by dropping the hash) than it is for other software.

        # used variables - anything with a value in conda_build_config.yaml that applies to this
        #    recipe.  Includes compiler if compiler jinja2 function is used.
        )rC   r  rs   ru   ignore_versionrq   |c              3      K   | ]	}| d V  
dS )z[\s$]?.*Nr"   )r$   excs     r'   r  z-MetaData.get_hash_contents.<locals>.<genexpr>/  s+      LLsS***LLLLLLr)   c                f    g | ]-}                     |          rd j        j        |         v +|.S )r[   )r   rG   r   )r$   rA  exclude_patternrd  s     r'   r.   z.MetaData.get_hash_contents.<locals>.<listcomp>1  sQ       &,,S11 69DK<OPS<T5T5T 5T5T5Tr)   target_platformc                6    i | ]}|j         j        |         S r"   )rG   r   )r$   r   rd  s     r'   r(   z.MetaData.get_hash_contents.<locals>.<dictcomp>=  s%    SSSsS$+"5c":SSSr)   r   r   c                <    g | ]}|                     d           |S )__)r|   r@  s     r'   r.   z.MetaData.get_hash_contents.<locals>.<listcomp>A  s)    HHH3>>$3G3GHHHHr)   c                F    i | ]}|                     d           d         |S )r[   r   r  )r$   pkgs     r'   r(   z.MetaData.get_hash_contents.<locals>.<dictcomp>D  s)    MMMciinnQ/MMMr)   )r  r  rJ  r   r   rG   r   r   $uses_numpy_pin_compatible_without_xxr  r   r   compiler   r   r   )	rd  r  build_string_excludespin_compatiblenot_xxhash_contentsrH  virtual_pkgsr  s	   `       @r'   get_hash_contentszMetaData.get_hash_contents  s   . 4--//00T<000 !D C C$$+//0@"EEFF	
 	
 	
 l""%)%N"NF } 6 6 6%,,W555  	 jLL6KLLLLL O    '  L -...MMSSSSlSSSM 9==4488CCHHxHHH 	MMMMMNNNr)   c                j    d}|                                  }|rt          || j        j                  S |S )al  With arbitrary pinning, we can't depend on the build string as done in
        build_string_from_metadata - there's just too much info.  Instead, we keep that as-is, to
        not be disruptive, but we add this extra hash, which is just a way of distinguishing files
        on disk.  The actual determination of dependencies is done in the repository metadata.

        This was revised in conda-build 3.1.0: hashing caused too many package
            rebuilds. We reduce the scope to include only the pins added by conda_build_config.yaml,
            and no longer hash files that contribute to the recipe.
        rZ   )r  rV  rG   rT  )rd  rU  rS  s      r'   hash_dependencieszMetaData.hash_dependenciesG  s?     #5577 	U%&:DK<STTTr)   c                   |                      d          }|                                 }|s'|s%t          d|                                  d          |                                 }t	          j        d|          }|r0|rt	          j        d|j                  st          |d           |}n;t          |           }| j
        j        r| j        r|                                 }t	          j        d| j
        j        z  |          s|                    dd          }	 t!          |d	                    |r*d                    |t%          |d	                   f          nt%          |d	                   }n# t&          $ r |d	         |z   }Y nw xY wt)          |          dk    r!d                    |g|dd          z             }n#t	          j        d| j
        j        z  ||          }|S )
Nr  z%Couldn't extract raw recipe text for z outputz
\s*string:zh\{\{\s*PKG_HASH\s*\}\}zh[0-9a-f]{%s}r  r   r   )r  extract_package_and_build_textr   r  r   r   findallrK  r  r  rG   filename_hashingr  r  rT  rsplitr   r   r   r   r   sub)rd  manual_build_stringraw_recipe_textraw_manual_build_stringr  rU  rets          r'   r  zMetaData.build_idW  s   "nn^<< ==??" 	? 	L		LLL   ==??"$)M?"K"K 	X#	X
57N7UVV	X .???%CC -T22C{+ X
 X..00z/DK4K"KSQQ 
X**S!,,C-CF@EVchhs3q6{{';<<<3sSTv;;% - - -!!fun-3xx!||!hhus122w77&4;3J!JESVWWC
s   AE6 6FFc                    |                                   d|                                  d|                                  S )Nr  )r  r4  r  rh  s    r'   distzMetaData.dist{  s6    ))++BBBBBBBr)   c                0    d|                                  z  S )Nz
%s.tar.bz2)r  rh  s    r'   pkg_fnzMetaData.pkg_fn~  s    diikk))r)   c                F    t          |                     d                    S )N	app/entry)r}   r  rh  s    r'   is_appzMetaData.is_app  s    DNN;//000r)   c           	         ddi}|                      d          r;dt          t          | j        |                      d                              z  |d<   dD ]!\  }}|                      |          }|r|||<   "|S )Nr   r  zapp/iconz%s.pngrx  ))r  	app_entry)zapp/typeapp_type)zapp/cli_optsapp_cli_opts)zapp/summaryry  )zapp/own_environmentapp_own_environment)r  r   r   r*  )rd  r   r,  r   r   s        r'   app_metazMetaData.app_meta  s    UO>>*%% 	Y 8DDNN:<V<V,W,W#X#XXAfI
 		 		JE3 NN5))E #r)   c                   | j         j        dk    rdn| j         j        }t          |                                 |                                 |                                 |                                 | j         j        dk    r|dk    r| j         j        nd t          
                    ||          | j         j        t          d |                                 D                       t          t          j                    dz            	  	        }dD ]!}|                     d|z             }|r|||<   "|                     d          }|r||d<   t!          |                     d	                    }d
 |D             }|r||d<   |                     d          r+d                    |                     d                    |d<   |                     d          r+d                    |                     d                    |d<   |                     d          r|                     d          |d<   |                     d          r|                     d          |d<   | j        r+d x|d<   |d<   d|d<   |                     d          }|r||d<   |                                 r'|                    |                                            |S )Nr   c              3  n   K   | ]0}d                      |j                                                  V  1dS r  )r   r  rY   r  s     r'   r  z&MetaData.info_index.<locals>.<genexpr>  s8      QQ388BGMMOO44QQQQQQr)   i  )	r  r4  r   r  r  archsubdirdepends	timestamp)r  r  zabout/zbuild/preferred_envrb  zrequirements/run_constrainedc                    g | ]}||S r"   r"   )r$   r&   s     r'   r.   z'MetaData.info_index.<locals>.<listcomp>  s    111Aq1a111r)   
constrainsr  r[   rO  zbuild/track_featuresrP  zbuild/provides_featuresrg  zbuild/requires_featuresrf  r  r  r  build/noarch)rG   target_subdir	host_archr{   r  r4  r  r  host_platformARCH_MAPr   rD  r  r   timer  r   r   r   r  r   r  )rd  r  r   r   r   rb  r   r   s           r'   
info_indexzMetaData.info_index  s   1X==HH4;CX 	 LLNN--//**,,)X55$(:J:J [..dD));,QQt?P?PQQQQQ$)++,--
 
 
 1 	 	CNN8c>22E #'<== 	/!.Ao !0N!O!OPP
11111
 	)(AlO>>*++ 	GHHT^^4D%E%EFFAjM>>011 	S"%((4>>:P+Q+Q"R"RA>>344 	O%)^^4M%N%NA!">>344 	O%)^^4M%N%NA!"; 	+(,,AjMAfI"AhK  >>.99L +*(;;== 	&HHT]]__%%%r)   c                4   t          |                     dg                     }t          |t                    st	          d          t
          j        dk    r(t          d |D                       rt	          d          t          || j	        j
                  S )Nzbuild/has_prefix_filesz0build/has_prefix_files should be a list of pathsr>   c              3     K   | ]}d |v V  	dS \Nr"   r   s     r'   r  z,MetaData.has_prefix_files.<locals>.<genexpr>  &      **419******r)   zHbuild/has_prefix_files paths must use / as the path delimiter on Windowsr   r  r   r  r   r   r  r  r   rG   host_prefixrd  r  s     r'   rV  zMetaData.has_prefix_files  s    $..)A2FFGG#t$$ 	SQRRR<7""**c***** "7   C!8999r)   c                   |                      dd          }t          |          t          t          fvrt	          d          t
          j        dk    r>t          |          t          u r(t          d |D                       rt	          d          t          |          t          u rt          || j	        j
                  n|S )Nzbuild/ignore_prefix_filesFzQbuild/ignore_prefix_files should be boolean or a list of paths (optionally globs)r>   c              3     K   | ]}d |v V  	dS r
  r"   r   s     r'   r  z/MetaData.ignore_prefix_files.<locals>.<genexpr>  &      (@(@q(@(@(@(@(@(@r)   zKbuild/ignore_prefix_files paths must use / as the path delimiter on Windowsr  r   r  r}   r   r   r  r  r   rG   r  r  s     r'   rX  zMetaData.ignore_prefix_files  s    nn8%@@99T4L((%   <7""CyyD  S(@(@C(@(@(@%@%@ "7   >B#YY$=N=N|C!8999TWWr)   c                    t          |                     dg                     }t          d |D                       rt          d          t          rd |D             }t          || j        j                  S )Nzbuild/always_include_filesc              3     K   | ]}d |v V  	dS r
  r"   r   s     r'   r  z0MetaData.always_include_files.<locals>.<genexpr>  s&      ((Qtqy((((((r)   zLbuild/always_include_files paths must use / as the path delimiter on Windowsc                :    g | ]}|                     d d          S )r  r  r  )r$   r3  s     r'   r.   z1MetaData.always_include_files.<locals>.<listcomp>  s&    999aQYYsD))999r)   )r   r  r  r   on_winr   rG   r  )rd  rs  s     r'   r^  zMetaData.always_include_files  s    DNN+GLLMM((%((((( 	3    	:995999EE4;#:;;;r)   c                H    t          |                     dg                     S )Nzbuild/ignore_verify_codesr   r  rh  s    r'   ignore_verify_codeszMetaData.ignore_verify_codes  s    4>>*ErJJKKKr)   c                   |                      dd          }t          |          t          t          fvrt	          d          t
          j        dk    r>t          |          t          u r(t          d |D                       rt	          d          t          |          t          u rt          || j	        j
                  n|S )Nzbuild/binary_relocationTzObuild/binary_relocation should be boolean or a list of paths (optionally globs)r>   c              3     K   | ]}d |v V  	dS r
  r"   r   s     r'   r  z-MetaData.binary_relocation.<locals>.<genexpr>  r  r)   zIbuild/binary_relocation paths must use / as the path delimiter on Windowsr  r  s     r'   rS  zMetaData.binary_relocation  s    nn6==99T4L((%   <7""CyyD  S(@(@C(@(@(@%@%@ "7   >B#YY$=N=N|C!8999TWWr)   c                .    |                      dd          S )Nzbuild/include_recipeTrj  rh  s    r'   ra  zMetaData.include_recipe  s    ~~4d;;;r)   c                4   t          |                     dg                     }t          |t                    st	          d          t
          j        dk    r(t          d |D                       rt	          d          t          || j	        j
                  S )Nzbuild/binary_has_prefix_filesz7build/binary_has_prefix_files should be a list of pathsr>   c              3     K   | ]}d |v V  	dS r
  r"   r   s     r'   r  z3MetaData.binary_has_prefix_files.<locals>.<genexpr>  r  r)   zObuild/binary_has_prefix_files paths must use / as the path delimiter on Windowsr  r  s     r'   rW  z MetaData.binary_has_prefix_files  s    $..)H"MMNN#t$$ 	I   <7""**c***** "7   C!8999r)   c                .    |                      dd          S )Nz
build/skipFrj  rh  s    r'   r_  zMetaData.skip  s    ~~lE222r)   c                   	 ddl }n# t          $ r{ t          dt          j                   t          dt          j                   t          | j                  5 }	|	                                cddd           cY S # 1 swxY w Y   Y nw xY wddlm	}
m
}m} t          j                            | j                  \  }}|                    d          |                    |          g}t          j                            d          }|rt          j                            |          rtt          j                            |          }|                    d	d
          }|                    |          }|                    |                    d|i                     |j        }|r	g |_        |} |
|                    |          | j                  }|                    ||          }|j                            t?          | j                             |j                            t#          j         | |                     |j                            ddi           |j                             || || j        |||||                     |r|j                            d|i           	 |r|!                    |          }n-|r|"                    |          }n|!                    d          }dt          j        d<   |#                    |          }|r|j        | _$        ng | _$        nd# |j%        $ rW}dtM          |          v rd}t          j'        d(                    | j        tM          |                               Y d}~nd}~ww xY wdt          j        v rt          j        d= n # dt          j        v rt          j        d= w xY w|S )ao  
        Get the contents of our [meta.yaml|conda.yaml] file.
        If jinja is installed, then the template.render function is called
        before standard conda macro processors.

        permit_undefined_jinja: If True, *any* use of undefined jinja variables will
                                evaluate to an emtpy string, without emitting an error.
        r   Nz$There was an error importing jinja2.r   zBPlease run `conda install jinja2` to enable jinja template support)FilteredLoaderUndefinedNeverFailcontext_processorconda_buildCONDA_DEFAULT_ENVr  r  z$CONDA_DEFAULT_ENVr   )loader	undefined)r   skip_build_idCONDA_BUILD_STATERENDER)rG   r[  r\  r  r)  r   PKG_NAMErZ   )environmentz'None' has not attributez$Failed to run jinja context functionz0Error: Failed to render jinja template in {}:
{}))r   r   r   r   r   r/  r2  r0  conda_build.jinja_contextr"  r#  r$  rW   r*  rY   PackageLoaderFileSystemLoaderr	   r   r  abspathr   r   PrefixLoaderStrictUndefinedall_undefined_namesChoiceLoaderrG   Environmentglobalsr   r   get_dictfrom_stringget_or_select_templater  r]  TemplateErrorr   r   r   )rd  r[  r\  r  template_stringr)  alt_namer   r   fdr"  r#  r$  r*  filenameloadersconda_env_path
env_loaderundefined_typer'  envtemplaterenderedexs                           r'   r  zMetaData._get_contents  s   $		!MMMM 	! 	! 	!8szJJJJTZ    dn%% !wwyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	!	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 t~66h  //##D))
 
 
  	TbgmmN;; 	TW__^<<N+33D#>>N00@@JNN6..0Dj/QRRSSS/! 	0 682/N 3 3G < <T[QQQ  . II=556667+d-PPPQQQ/:;;;{'='=!1+	 	 		
 	
 	
  	7K
H5666	4 /???;; /55h????2...6BJ*+377H% /,>,R)),.)# 	 	 	)SWW44;HCJJNCGG        	 #bj00J23 #bj00J233333sf    ABA>/B>B	BB	BB1B L2 1N2 2
N<AN	N2 NN2 2Oc                *    t          | j                  S z8
        String representation of the MetaData.
        )r   r/   rh  s    r'   __unicode__zMetaData.__unicode__  s     4=!!!r)   c                *    |                                  S r!   )rJ  rh  s    r'   __str__zMetaData.__str__  s    !!!r)   c                *    |                                  S rI  )rL  rh  s    r'   __repr__zMetaData.__repr__  s     ||~~r)   c                8   | j         pB| j                            di                               di                               dd          }|rMt          j                            |          | j        k    r%t          j                            || j                  }|S )Nrr  r|  r*  rZ   )r^  r   r   rW   r*  r_  r`  r   )rd  r2  s     r'   r2  zMetaData.meta_path  s    O ty}}Wb'A'A'E'ER(
 (

#fb// 	  	A)))44GGY@@Ir)   c                    d}| j         rSt          | j         d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   d|v pd|v S )NrZ   r-  load_setup_py_dataload_setuptoolsr2  r/  r   r0  r1  rd  	meta_textr3  s      r'   uses_setup_py_in_metazMetaData.uses_setup_py_in_meta  s    	> 	Cdnd++ Cq)!&&((33B	C C C C C C C C C C C C C C C#y0R4E4RR   'AAAc                    d}| j         rSt          | j         d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   d|v S )NrZ   r-  load_file_regexrS  rT  s      r'   uses_regex_in_metazMetaData.uses_regex_in_meta  s    	> 	Cdnd++ Cq)!&&((33B	C C C C C C C C C C C C C C C I--rW  c                    d}| j         rSt          | j         d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   d|v S )NrZ   r-  load_file_datarS  rT  s      r'   uses_load_file_data_in_metaz$MetaData.uses_load_file_data_in_meta  s    	> 	Cdnd++ Cq)!&&((33B	C C C C C C C C C C C C C C C9,,rW  c                :    | j         p| j        p| j        p| j        S r!   )uses_vcs_in_metarV  rZ  r]  rh  s    r'   needs_source_for_renderz MetaData.needs_source_for_render  s2     ! 0)0&0 /		
r)   c                
   | j         sdS t          | j         d          5 }t          |                                          j        }t          j        d|          }d d d            n# 1 swxY w Y   t          |          dk    S )NFr-  z{{.*}}r   )r2  r/  r   r0  r1  r   r  r   )rd  r3  rU  matchess       r'   
uses_jinjazMetaData.uses_jinja  s    ~ 	5$.$'' 	71%affhh//>IjI66G	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 7||as   <A''A+.A+c                   d}g d}| j         rt          | j         d          5 }t          |                                          j        }|D ]b}t          j        |                                 d|          }t          |          dk    r#|| j	        d         d         k    r|dk    rd	}|} ncddd           n# 1 swxY w Y   |S )
zreturns name of vcs used if recipe contains metadata associated with version control systems.
        If this metadata is present, a download/copy will be forced in parse_or_try_download.
        Ngitsvnhgr-  z_[^\.\s\'\"]+r   r  r  rh  	mercurial)
r2  r/  r   r0  r1  r   r  upperr   r   )rd  vcs	vcs_typesr3  rU  _vcsrb  s          r'   r_  zMetaData.uses_vcs_in_meta  s   
 (((	> 		dnd++ q)!&&((33B	%  D jTZZ\\)H)H)H)TTG7||a''DDIi4H4P,P,P4<<#.D"               
s   BB;;B?B?c                F   t           rdnd}t          j                            | j        |          }|| j        fD ]}t          j                            |          rg d}t          | j        d          5 }t          |                                          j	        }|D ]j}t          j        | d|t          j                  }t          |          dk    r1|| j        d         d	         k    r|d
k    rd}|c cd d d            c S k	 d d d            n# 1 swxY w Y   d S )Nbld.batbuild.shre  r-  z"(?:\.exe)?(?:\s+\w+\s+[\w\/\.:@]+)rE   r   r  r  rh  ri  )r  rW   r*  r   r2  r   r/  r   r0  r1  r   r  
IGNORECASEr   r   )rd  build_scriptrecipe_filerl  r3  rk  rb  s          r'   uses_vcs_in_buildzMetaData.uses_vcs_in_build  s    %+:yy
w||DI|<<($.9 	' 	'Kw~~k** '000	$.$// '1#0#:#:#IL( ' '
 #%* #GGG("$-# # #
 w<<!++ty7KF7S0S0S"d{{&1#&JJ' ' ' ' ' ' ' ' ' ''' ' ' ' ' ' ' ' ' ' ' ' ' ' '  ts   4BDDD	D	c                   | j         }|rPt          |          }| j        r9|s7|                     |                                 t          | dd                     }nddlm}  ||           }t          ||          }|r;t          |t          | j                  t          | j        j                            }|                                S )Nr   r   )output_yamlr%  )r2  r5  r  extract_single_output_textr  getattrconda_build.renderrv  r*  r   r   rG   r}   r   r   )rd  r)  force_top_levelapply_selectorsr2  r4  rv  s          r'   r  zMetaData.get_recipe_text  s     N	 		,(33K~ o "==IIKKvt!<!<  766666%+d++K)+GG 	&dk**"&t{':";";  K
 !!###r)   c                h    d}d|                      |          v rd}|                      ||          S )NzT(^\s*requirements:.*?)(?=^\s*test:|^\s*extra:|^\s*about:|^\s*-\s+name:|^outputs:|\Z)r  rz  z:(^requirements:.*?)(?=^test:|^extra:|^about:|^outputs:|\Z)r  )rd  rz  r3  s      r'   extract_requirements_textz"MetaData.extract_requirements_text  sD    c--o-NNNN NA##A#GGGr)   c                2    |                      dd|          S )Nz+(^outputs:.*?)(?=^test:|^extra:|^about:|\Z)Trz  r{  r~  )rd  r{  s     r'   extract_outputs_textzMetaData.extract_outputs_text!  s(    ##: + $ 
 
 	
r)   c                ,    |                      d          S )NzM(\s*source:.*?)(?=^build:|^requirements:|^test:|^extra:|^about:|^outputs:|\Z)r~  rh  s    r'   extract_source_textzMetaData.extract_source_text(  s    ##\
 
 	
r)   c                ,    |                      d          S )Nz<(^.*?)(?=^requirements:|^test:|^extra:|^about:|^outputs:|\Z)r~  rh  s    r'   r  z'MetaData.extract_package_and_build_text-  s    ##K
 
 	
r)   c                                          |          }t                              |          } j                            d          pt           d          r j        nd }|sd                                 ig}	 |r& fd|D             }|                    ||f          }n# fd|D             }|                    |          }|r||         nd}	n# t          $ r~  j
        s` j                            di                               d	          r2t          j        t                                        d
|            d}	n                                 }	Y nw xY w|	S )Nr{  r  parent_outputsr  c                    g | ]R}|                     d                                           |                     dj        j        dk    rdnd          fSS )r  r   rv   conda_v2r  )r   r  rG   conda_pkg_formatr  s     r'   r.   z7MetaData.extract_single_output_text.<locals>.<listcomp>A  st     ! ! !  		44"#{;sBB 'J!(	 ! ! !r)   c                `    g | ]*}|                     d                                           +S r  r  r  s     r'   r.   z7MetaData.extract_single_output_text.<locals>.<listcomp>O  s/     Q Q Q#!=!= Q Q Qr)   rZ   rr  r|  z<Didn't match any output in raw metadata.  Target value was: )r  	output_rer  r   r   r   r  r  r  r   r*  r   r   r:   r   )
rd  output_nameoutput_typer{  r4  output_matchesr  output_tuplesoutput_indexr8  s
   `         r'   rw  z#MetaData.extract_single_output_text2  s   
 ///PP"**;77)--	** 
#*41A#B#BLD 	  	.		,-G	% @! ! ! !  '! ! !  -22K3MNN Q Q Q Q Q Q Q,22;??5CK^L11FF 	% 	% 	%9 %w!;!;!?!?!P!P % **//`S^``   	% s   ?AC BEEc                |    |                                  }t          t                              |                    }|S )zThis is legacy syntax that we need to support for a while.  numpy x.x means
        "pin run as build" for numpy.  It was special-cased to only numpy.)r  r}   numpy_xx_rer   )rd  r(  uses_xxs      r'   r  zMetaData.numpy_xx\  s5     --//{))$//00r)   c                   |                                  }t                              |          }d }|rt                              |          }t	          |          |r,|                    d                              d          dk    ndfS )Nr   xr]   T)r  numpy_compatible_rer   numpy_compatible_x_rer}   r   count)rd  r(  compatible_searchmax_pin_searchs       r'   r  z-MetaData.uses_numpy_pin_compatible_without_xxd  s    --///66t<< 	@299$??N
 "##7EON  ##))#..!334
 	
r)   c                   |                      d          }d}|D ]e}d|v r_t          j        d                    |d                             t	          fd|                     d          D                       }|r nfd}|s4| j        r-|                     d          }|rt          j        d	|          }|pt          |          S )
Nr  Fr  z^{}(\s|\Z|$)c              3  B   K   | ]}                     |          V  d S r!   r   )r$   rA  name_res     r'   r  z+MetaData.uses_subpackage.<locals>.<genexpr>z  s@        +.GMM#&&     r)   r   Tr}  z{{\s*pin_subpackage\(.*\)\s*}})
r  r   r  r   r  rg  r2  r  r   r}   )rd  r  in_reqsr  subpackage_pinr   r  s         @r'   r  zMetaData.uses_subpackages  s   ""9-- 	 	C}}*_%;%;CK%H%HII    262N2Nu2U2U      E 	T4> 	T11$1GGD T!#+Ld!S!S.$~...r)   c                n    |                                  }t          t          j        d|                    S )Nz\{\{\s*compiler\(.*\)\s*\}\})r  r}   r   r   )rd  r(  s     r'   "uses_new_style_compiler_activationz+MetaData.uses_new_style_compiler_activation  s.    --//BI=tDDEEEr)   c                    t          d t          |                     d                    D                       rt          d          d S )Nc              3     K   | ]}d |v V  	dS )r  Nr"   )r$   r   s     r'   r  z-MetaData.validate_features.<locals>.<genexpr>  s7       
 
&C7N
 
 
 
 
 
r)   r  zV- is a disallowed character in features.  Please change this character in your recipe.)r  r   r  r   rh  s    r'   r  zMetaData.validate_features  sh     
 
*5dnnEU6V6V*W*W
 
 
 
 
 	 ,  	 	r)   c                F   t          j         |           }| j                                         |_        t          j        | j        j                  |j        _        t          j        | j                  |_        t          | d| j        j        dk    rdnd          |_        |S )Nr   rv   r  r  )r8   rG   r  r   r   rx  r  r   )rd  news     r'   r8   zMetaData.copy  s    ioo[%%''
!]4;+>??
=++&(D(K(K**QX
 
 
r)   c                ,    |                      d          S )Nr  rj  rh  s    r'   r   zMetaData.noarch  s    ~~n---r)   c                    | j                             di           }||d<   || j         d<   | j        s|s| j                                         d S |rd| j        _        d S d S )Nr   r   )r   r   rU  rG   reset_platformr  rq  s      r'   r   zMetaData.noarch  sz    	gr**h"	'! 	1% 	1K&&((((( 	1(0DK%%%	1 	1r)   c                ,    |                      d          S )Nr  rj  rh  s    r'   rU  zMetaData.noarch_python  s    ~~3444r)   c                    | j                             di           }||d<   || j         d<   | j        s|s| j                                         d S |rd| j        _        d S d S )Nr   rU  r   )r   r   r   rG   r  r  rq  s      r'   rU  zMetaData.noarch_python  sz    	gr**!&o"	'{ 	15 	1K&&((((( 	1(0DK%%%	1 	1r)   c                N   | j         j        }i | j         _        |                     ddd           t          | j                  }|| j         _        |t          |                                          z  D ]/}t          j        d|z  |                                           r dS 0dS )NTr  z\s*\{\{\s*%s\s*(?:.*?)?\}\}F)	rG   r   rc  r  r]  r   r   r   r  )rd  r   vars_in_reciper   s       r'   variant_in_sourcezMetaData.variant_in_source  s    +% #'#'! 	 	
 	
 	

 T677%!C$7$77 	 	C y.4d6N6N6P6P   tt ur)   c                R    |                      dd                                          S )Nzbuild/pin_dependsrZ   )r  r   rh  s    r'   r   zMetaData.pin_depends  s#    ~~1266<<>>>r)   c                   t          | j                            d                     pWt          j                            | j        j                  o.t          t          j	        | j        j                            dk    S )Nr  r   )
r}   r   r   rW   r*  r  rG   work_dirr   listdirrh  s    r'   source_providedzMetaData.source_provided  sb    	h//000 
GMM$+.// :BJt{344559	
r)   c                   |                     d|                                           |j        d         d<   |j                             di           }|                     d          |                                 k    s*|                     d          s#|                     d          sd|v r|d= d|v r|d= |j                             di           }d	}|D ]}||v r||         ||<   ||v r||= ||j        d<   d
|_        d S )Nr  r  rp  rT  rs  r}  r~  r   )rL  r  rT  rZ   )r   r  r   r^  )rd  r  output_dictrp  r   transfer_keysr   s          r'   #reconcile_metadata_with_output_dictz,MetaData.reconcile_metadata_with_output_dict  s)   2=//&$))++2V2VY'/ #''33??6""diikk11OOH%% 2)4)A)A 2 T!!$D  O  $(("55?  	 	Ck!!(-c

#J(-W% &("""r)   c                	   |                     d          |                                 k    rC|                                 }|                     d| j        j        dk    rdnd          |_        n|                                 }t          j        |                     di                     }|                     dg           }|                     dg           }|                     d	g           }|                     d
g           }d |                                D             }|                     d          r|d         |j        _	        |                                 |                     d          k    s*|                     d          s|                     d          r| 
                    ||           |                     d| j        j        dk    rdnd          |_        d|v r]t          j        d                    |d                             |rfd|D             }|rfd|D             }|rfd|D             }i }	|r|	                    d|i          nd  |r|	                    d|i          nd  |r|	                    d	|i          nd  |r|	                    d
|i          nd  |	                    |           |	|j        d<   |                     d          p|                                 |j        d         d<   d|_        |                     dd          |_        |                     dd          |_        |j        s7|j        s0| j        j        |j        j        k    r| j        j        |j        _        |j                             di           }
d|v r|d         |
d<   d|v r|d         |
d<   d|v r|d         r|d         |
d<   d|v r|d         r|d         |
d<   d|v r|d         r|d         |
d<   d|v r;|d         }
|
i }
d|
vr+|                     d|                                          |
d<   |
|j        d<   d|v r|d         |j        d<   d|v r|d         |j        d<   |                     |           |S )Nr  r   rv   r  r  r   r   r   r   rv  c                "    i | ]\  }}|d v	||S ))r   r   r   rv  r"   r#   s      r'   r(   z0MetaData.get_output_metadata.<locals>.<dictcomp>	  s4       AqGGG 1GGGr)   rt  rT  rs  z(?:^{}(?:\s|$|\Z))c                >    g | ]}                     |          |S r"   r  r$   rA  subpackage_patterns     r'   r.   z0MetaData.get_output_metadata.<locals>.<listcomp>	  s>     " " " #9K9Q9QRU9V9V"" " "r)   c                >    g | ]}                     |          |S r"   r  r  s     r'   r.   z0MetaData.get_output_metadata.<locals>.<listcomp>"	  s>     ! ! ! #8J8P8PQT8U8U!! ! !r)   c                >    g | ]}                     |          |S r"   r  r  s     r'   r.   z0MetaData.get_output_metadata.<locals>.<listcomp>&	  s>           #7I7O7OPS7T7T      r)   r4  r  Fr   rU  rJ  rK  r  rP  rO  rp  rq  )r   r  r8   rG   r  r   r   r7  r0   r  r  r   r  r   r   r   r4  r  r   rU  r  r  append_parent_metadata)rd  r8  r  rF  r  rG  rH  constrain_reqs
other_reqsr   r   r  s              @r'   r  zMetaData.get_output_metadata  sQ   ::f,,"iikkO#)::dk&Bc&I&I

w$ $O  
 #iikkO+FJJ~r,J,JKKK$"55J#33I"ub11H(__->CCN '--//  J zz(## H7=h7G&4yy{{fjj0000

8$$ 1(.

7(;(; 1 88&QQQ#)::dk&Bc&I&I

w$ $O   &(Z)00@@& &"  " " " "'1" " "J  ! ! ! !'0! ! !I         '/     H L:DNL* 5666$8AKL 3444t6>HL 1222D  *L"N3  %)
+++3?O 0 

9%%7  +I6 %*O!%+ZZ%%@%@O",2JJ,N,NO) %+G/>/LGK(O,B,KKK26+2F&/#(,,Wb99E 6!!"("2h6!!"("2h&&6-+@&'-m'<m$6))f5E.F)*01A*B&'V##z(:#$*:$6j! &  w=E5((&,jj /">">"@"@' 'E(O -2O )/5f~$V,&  06w$W-''888r)   c                    | j                             di           }| j        |                                 |                                 d|d<   ||j         d<   d S )Nrr  )r*  r  r4  r|  )r   r   r*  r  r4  )rd  out_metadatarr  s      r'   r  zMetaData.append_parent_metadatab	  sX    	gr**IIIKK||~~"
 "
o
 &+'"""r)   c                  	
 t          j        | j        j                   }|                                }t	          | j        j         d                                                   t	                    z
  }| j        j                            dg           }|rt          |d         t                    r|gn|}fd|D             
|                    dg           		
fd|D             }|D ]o}|                    |          }|Vt          |          rGt          |d          s7|dk    r1t          j        t          t          |                              ||<   pt          j        |          }|S )Nr   zip_keysc                l    g | ]0}t          t          |          t                    z            .|1S r"   )r  r  )r$   r   used_variabless     r'   r.   z4MetaData.get_reduced_variant_set.<locals>.<listcomp>y	  sI     
 
 
SZZ#nBUBU5U1V1V

 
 
r)   extend_keysc                T    g | ]#t          fd D                       sv!$S )c              3      K   | ]}|v V  	d S r!   r"   )r$   r   r   s     r'   r  z>MetaData.get_reduced_variant_set.<locals>.<listcomp>.<genexpr>	  s'      EEse|EEEEEEr)   )r  )r$   r   r  used_zip_key_groupss    @r'   r.   z4MetaData.get_reduced_variant_set.<locals>.<listcomp>~	  sY     
 
 
EEEE1DEEEEE
 ;&&  '&&r)   r   )r   list_of_dicts_to_dict_of_listsrG   r8   r  r   r   r   r   r   r   r   r   r   r   r   dict_of_lists_to_list_of_dicts)rd  r  full_collapsed_variantsreduced_collapsed_variantsreduce_keyszip_key_groupsr   r  r  r  r  s    `       @@r'   get_reduced_variant_setz MetaData.get_reduced_variant_setk	  s   "*"IK #
 #
 &=%A%A%C%C"$+.q1668899C<O<OO,00R@@  ",^A->"D"D ^ 	

 
 
 
-
 
 
 .11-DD
 
 
 
 
"
 
 
  		X 		XC,0055F"KK #// # :%% 382CDfDVDV2W2W*3/56PQQ
r)   c           
     	   ddl m} i }| j        rt          |           d         }|| fg}nt	                      }|                     d          }	|                     |	          p| j        j        d d         }
t          | j        d          r| j        j        r|
n| j        j
        gD ]}|                                 }||j        _
        |j        rX| j        rQ|                                 t          j        |j        j                    ||           |                                 	 |                    dd           n# t&          $ r Y nw xY wt          |          }	 |D ]}|                    d          }|r/t          j        |          }d	D ]}t-          |||           ||d<   |                    |          |f|                                t3          fd
                                D                       f<   |t3          |          <   |x|_        _        Đ# t&          $ r	 |s i }Y w xY w|s
J d            t9          |          }t;          || j                   t	                      }g }|                                D ]\  }|                    d          r
|d         dv rG|f|                                t3          fd                                D                       f<   l|                    d          dk    r"|                    di                               d          r%t?          d |d         d         D                       s|                    di                               dg           }|                     dd!                    j        j
        d                   g           |                    di           |d<   ||d         d<   j"                            di           j"        d<   |j"        d         d<   |#                    |f           |#                    |f           |s7|$                                s#tK          ||d||          }tM          |           g }|'                                D ]#\  }d_        |#                    |f           $||z   }|S )Nr   )provideT)force_globalr   r   r  r   r  c                Z    i | ]'}|t          j        j        j        |                   (S r"   r  )r$   r%   r  s     r'   r(   z4MetaData.get_output_metadata_set.<locals>.<dictcomp>	  sA     %& %& %&,- )*4=9L9TUV9W+X+X%& %& %&r)   zError: output metadata set is empty.  Please file an issue on the conda-build tracker at https://github.com/conda/conda-build/issuesr   r   )r  r  c                Z    i | ]'}|t          j        j        j        |                   (S r"   r  r  s     r'   r(   z4MetaData.get_output_metadata_set.<locals>.<dictcomp>	  s?       $% !"4=1A!1D#E#E  r)   wheelr   c              3     K   | ]}d |v V  	dS )pipNr"   r@  s     r'   r  z3MetaData.get_output_metadata_set.<locals>.<genexpr>	  s?       T T),T T T T T Tr)   r  z	python {}rC   )r  r  r  )(conda_build.sourcer  r  r   r   get_used_loop_varsr  rG   r   r   r   r8   r`  r  rc  r   rm_rfr  r  
SystemExitr   r7  r   r  r  r   r  r  r  r  r0   r  r   r   r   r   r_  r  r#  r  )rd  r[  r  r  r  out_metadata_mapr  r  all_output_metadatar  top_loopr   ref_metadatar  r   rD  r  conda_packagesnon_conda_packagesr  r  final_conda_packagesr  r   r  s                          @@r'   get_output_metadata_setz MetaData.get_output_metadata_set	  s    	/.....: G	F4T::1=G%t_-MM"---!44$4GGN,,^<<X@TUWVWUW@X  DK44+9=9M+k)*5* 5*
  $yy{{.5#+7 /D<R / ,,...K 3 <===GL))) ,,... 55/3d 6     "   D8FF!*& 0 0'*ww~'>'>' ?+0+<\+J+JL'? T T 7gs S S S S2>C/'3'G'G'L'L" !,/ , , 1 1 3 3 ,%& %& %& %&1=1K1K1M1M%& %& %&!" !"
 ?K(c):):; 002(6670: " * * *1 ')$$$*
 $  ]   $$455L'T[IIII(]]N!#+1133 != !=!||F++  =x/? D 0 0 "1 #$   )*):):     \\&))W44#<<;;??HH 
EPS T T080H0QT T T Q Q 
E &.\\."%E%E%I%I'SU%V%V
"))"K$6$6qx7G7Q$R$RS   4<<<PR3S3S0<F0912NB1O1O~.:D~.w7&--xm<<<< '--xm<<<< * 
7,2C2C2E2E 
7!6 "2O%5" " " '~666#% *1133 8 8q $++UAJ777703EEMs%   .E
EE&CH..I Ic                    t          | j        d          r| j        j        n| j        j        }t          j        |d          S )Ninput_variantsT)	loop_only)r   rG   r  r   get_vars)rd  	_variantss     r'   get_loop_varszMetaData.get_loop_vars%
  sH     t{$455&DK&&% 	
  d;;;;r)   c                J      fd                      ||          D             S )Nc                @    h | ]}|                                 v |S r"   )r  )r$   varrd  s     r'   r%  z.MetaData.get_used_loop_vars.<locals>.<setcomp>.
  s>     
 
 
 d((****	  +**r)   rz  r  )r  )rd  rz  r  s   `  r'   r  zMetaData.get_used_loop_vars-
  sH    
 
 
 
)) /l *  
 
 
 	
r)   c                    |                      |d                                          }t          j        |                     ||d                    pi S )NTr)  rz  F)r[  r<  r)  )r  r   r   	safe_loadr  )rd  r[  r)  r<  s       r'   get_rendered_recipe_textz!MetaData.get_rendered_recipe_text6
  sp     ..+T / 
 

&(( 	
 N""+A$3"' #     		
r)   c           	     L   d}d                     |                     |d          |                                 f                                          }t	          j        |                     ||d||                    pi                     dg           }t          | |          S )	Nz(.*)package:r   Tr  F)r[  r<  r)  r\  r   r  )r  )	r   r  r  r   r   r  r  r   r   )rd  r[  r   r)  r<  r  s         r'   get_rendered_outputs_sectionz%MetaData.get_rendered_outputs_sectionH
  s    )))$$$3T %  
 ))++	
 	
 &(( 	 N""+A$3"'+A# #    	 
#i

 	 .dGDDDDr)   c                x    d}|                      ||          D ]}|                    d          |k    r|} n |S )a1  This is for obtaining the rendered, parsed, dictionary-object representation of an
        output. It's not useful for saying what variables are used. You need earlier, more raw
        versions of the metadata for that. It is useful, however, for getting updated, re-rendered
        contents of outputs.N)r[  r   r  )r  r   )rd  r  r[  r   r8  output_s         r'   r  zMetaData.get_rendered_outputc
  sa    
 88#97 9 
 
 	 	G {{6""d**  + r)   c                F    t          |                     d                    S )Nzbuild/force_ignore_keysr  rh  s    r'   ri  zMetaData.force_ignore_keysq
  s    4>>*CDDEEEr)   c                F    t          |                     d                    S )Nzbuild/force_use_keysr  rh  s    r'   rh  zMetaData.force_use_keysu
  s    4>>*@AABBBr)   c                   | j         }t          t          j        | j        j                            }t          | j        d          r| j        j        }nl|                                 |||| j        j	        |ft          v r1t          |                                 |||| j        j	        |f         }n|                     ||          }d|                                 v}|r|                                 }n|                                 }||z  }d| j        j        v r| j        s|                    d           d| j        j        v r|                    d           | j        s| j        r,|t'          | j                  z
  t'          | j                  z  }|t          |                                 |||| j        j	        |f<   |S )N	used_varsr  r  r  channel_targets)r*  r   r8   r  rG   r   r   r  r  r  used_vars_cache_get_used_vars_meta_yamlr  _get_used_vars_output_script_get_used_vars_build_scriptsr   r  rh  ri  r  )	rd  rz  r  
recipe_dirhashed_variantsr  meta_yaml_reqsr  script_reqss	            r'   r  zMetaData.get_used_varsy
  s   Y
 't}T[5H'I'IJJ4;,, 5	-IIIIKKK
   (IIKK# K&#	II ":: /l ;  N #$*>*>*@*@@I B"??AA"??AA&4I DK$7777/000 DK$777/000" d&< &T-C)D)DD'I I 	  IIKK# K&#	 r)   c           	        |r|                      ||          }|}n(| j        r<|s:|                     |                                 t	          | dd           |          }n|                      ||                              |                     |                                          d          |                     |                                 t	          | dd           |          z   }t          j	        dt          j
        t          j        z            }|                    |          }|r|                                nd}||fS )Nr  r   r  rZ   z/requirements:.+?(?=^\w|\Z|^\s+-\s(?=name|type))rE   )r  r  rw  r  rx  r   r  stripr   r  MSr   r   )rd  rz  r  r{  r4  	reqs_textreqs_res          r'   _get_used_vars_meta_yaml_helperz(MetaData._get_used_vars_meta_yaml_helper
  sk     	?.. / /  K
 $II~ o "==IIKKD&$//$3 >   #22$3_ 3  '--o-NNTTVV  33IIKKD&$//$3 4  	 jB"$QSQU+  G  {33I-6>	)))BI+%%r)   c                   t          t          | j        j                                                            }|                     ||d          \  }}t          j        ||d          }|                     ||d          \  }}t          j        ||d          }|                    |          }|r|}	n/t          j        ||          }
||
z
  }t          | |
          }
||
z  }	|	S )NF)rz  r  r{  T)selectors_only)
r1   rD  rG   r   r   r  r   find_used_variables_in_textunionrJ  )rd  rz  r  variant_keysr  r4  all_used_selectorsall_used_reqsall_usedusedrE  outside_reqs_useds               r'   r  z!MetaData._get_used_vars_meta_yaml
  s+   VDK$7$<$<$>$>??@@!%!E!E+%! "F "
 "
	; &A+d
 
 
 "&!E!E+%  "F "
 "
	;
 !<+e
 
 
 !&&'9::  		9DD ( Di! ! !)+< < 4T;L M M$'88Dr)   c                   t                      }t          j                            | j        d          }t          j                            |          r2|                    t          j        | j        j	        |                     t          j                            | j        d          }| j        j
        dk    rQt          j                            |          r2|                    t          j        | j        j	        |                     |S )Nrp  ro  rU   )r  rW   r*  r   r   r   r   #find_used_variables_in_shell_scriptrG   r   r  #find_used_variables_in_batch_script)rd  r  buildshbldbats       r'   r  z%MetaData._get_used_vars_build_scripts  s    EE	',,ty*557>>'"" 	<K'   
 di33;5((RW^^F-C-C(<K'   
 r)   c                   |                      |                                 d          pi }t                      }d|v r$t          j                            | j        |d                   }t          j                            |          d         dk    r3|                    t          j	        | j
        j        |                     nt          j                            |          d         dk    r3|                    t          j        | j
        j        |                     nAt          j        t                    }|                    d                    |                     |S )NTr  rT  r   z.shz.batztNot detecting used variables in output script {}; conda-build only knows how to search .sh and .bat files right now.)r  r  r  rW   r*  r   splitextr   r   r  rG   r   r  r   r   r:   r   r   )rd  this_outputr  rT  r   s        r'   r  z%MetaData._get_used_vars_output_script  sN   $$TYY[[$NNTRT 	 EE	{""W\\$)[-BCCFw''*e33  @+V    
 !!&))!,66  @+V     &x00BBH&..   r)   c                >    t          j        | j        j                   S r!   )r   r  rG   rh  s    r'   get_variants_as_dict_of_listsz&MetaData.get_variants_as_dict_of_lists3  s    6t{7KLLLr)   c                8    | j                                          dS )z;This ensures that clean is called with the correct build idN)rG   cleanrh  s    r'   r$  zMetaData.clean6  s    r)   c                    | j                             di           pi }|                    d          du}t          | j        j        o|          S )Nr   activate_in_scriptF)r   r   r}   rG   activate)rd  bshould_activates      r'   activate_build_scriptzMetaData.activate_build_script:  sK    IMM'2&&,"%% 455UBDK(<_===r)   c                F   | j                             di                               d          du p| j        j        }| j                             di                               d          du }|p3| j        j        o'| o$d| j                             di           vo| j         S )Nr   rj  TFr   r   )r   r   rG   build_is_hostsubdirs_samer  )rd  manual_overridesmanually_disableds      r'   r,  zMetaData.build_is_host@  s     IMM'2&&**+=>>$F ){( 	 !IMM'266::;MNNRWW 
K$ <%%<dimmNB???< ;;		
r)   c                ^   |                      d                              |                                 d          }i }| j                            di                               di           }| j        r|d         nd }|r*t          j        |                     d||                    }|pi S )	NTr}  rZ   rr  r|  r  F)r<  r=  )	r  r   r  r   r   r  r   r  r  )rd  recipe_no_outputstop_no_outputsr|  r=  s        r'   $get_top_level_recipe_without_outputsz-MetaData.get_top_level_recipe_without_outputsN  s     000FFNN%%''
 
 
 	gr2266KK,0ND=(( 	!^""+<x #   N
 ##r)   c                   |                                   d|                                  d|                                  g}|                    d |                     d          D                        |t          j        |                     dg                     z  }|r|dgz  }|r|dgz  }|r|dgz  }|rt          d |D                       s|d	gz  }|                    t          j        | j	        j
                             |S )
Nr[   c              3  $   K   | ]}|j         V  d S r!   )r  r  s     r'   r  z)MetaData.get_test_deps.<locals>.<genexpr>e  s$      >>RW>>>>>>r)   r   r  rC   rs   ru   c              3  N   K   | ] }|                                 d          dv V  !dS )r   )r  r  Nr  )r$   r  s     r'   r  z)MetaData.get_test_deps.<locals>.<genexpr>s  s4      UU!qwwyy|/EEUUUUUUr)   r  )r  r4  r  r   r  r   r   r  r  rG   
extra_deps)rd  py_filespl_files	lua_filesr_filesr  s         r'   get_test_depszMetaData.get_test_depsa  s!   IIKKDD$,,..DD4==??DDE 	>>tu'='=>>>>>>"4>>/2#F#FGGG 	  hZE 	fXE 	eWE 	 3UUuUUUUU 	 hZEU&t{'=>>???r)   )NN)F)FFF)FF)NT)r   )FFNFNN)NFT)T)FN)_r:   r;   r<   re  propertyr  r  setterrN  ry  r  rc  r  r  r  r=   r  r  r  r  r  r  r4  r  rg  r  r  r  r  r  r  r  r  r  rV  rX  r^  r  rS  ra  rW  r_  r  rJ  rL  rN  r2  rV  rZ  r]  r`  rc  r_  rt  r  r  r  r  r  rw  r  r  r  r  r  r8   r   rU  r  r   r  r  r  r  r  r  r  r  r  r  r  ri  rh  r  r  r  r  r  r"  r$  r*  r,  r3  r<  __classcell__)r(  s   @r'   rX  rX  <  s       3 3 3 36 
 
 X

 - - X- \# # \#
 
 
 X

 # # # >C
 
 
 
. > > X>  %$	G* G* G* G*R  
) 
) 
) >C+ + + +Z      [      [&* * *< < < <|  *   	 	 	  ! ! !.8$ 8$ 8$ 8$t? ? ?B   " " "HC C C* * *1 1 1  "3 3 3j
: 
: 
:X X X
< 
< 
<L L LX X X< < <: : :3 3 3  %t t t tl" " "" " "     X S S XS . . X. - - X- 
 
 X
     X    X&   X4 LP$ $ $ $.H H H H
 
 
 

 
 


 
 
 9=( ( ( (T   X 
 
 X
 / / X/$ F F XF     . . X. ]1 1 ]1 5 5 X5 1 1 1   X* ? ? X? 
 
 X
( ( (4k k kZ+ + +% % %R  %&+	Q Q Q Qf< < <
 
 
 
 =A
 
 
 
$E E E E6    F F XF C C XC? ? ? ?D JO"& "& "& "&H& & & &P  $  6M M M   > > X>
 
 
 X
$ $ $&      r)   rX  )rG   r   rH   rI   )r   r!   )NFF)i
__future__r   r8   rN  rO  rW   r   r   r  r   collectionsr   	functoolsr   os.pathr   r   bs4r   r%  r	   r
   r   r   conda_build.configr   r   conda_build.featuresr   conda_build.license_familyr   conda_build.utilsr   r   r   r   r   r   r  r   r   r   r   r   r   r   CLoaderr   r  r   r5   r9   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*  r5  r  rJ  rV  rX  r"   r)   r'   <module>rJ     st	   # " " " " "    				 				 



   # # # # # #                             < < < < < < < < < < < < : : : : : : : : - - - - - - B B B B B B                T S S S S S S S S S S SKKKK   CH	"    \FF   [FFF+ + + + +V + + +,  / /0I J J J  / /0G H H H  ) )*C D D D  ) )*A B B B		  x((* BJ@rt  	 bjK 
 #
F   !bj!>??  [ [ [ [|! ! ! !$ "*C
D
D  H H H  #  #  #F3 3 3 
 
 
  :
 
 
   , , , ,2  #
 #
 #
L$ $ $ $N 	#""	$	$	$  dt 	s 		
 	$ 	 	D 	3 	3 	c 	3 	T 	$ 	$ 	3  	4!" 	#$ -  0,$,#, 	, 	d	,
 	t, 	D, 	$, 	D, 	4, 	T, 	$, 	#, 	, 	D, 	"4,  	t!," 	*4#, ,$ 	D%,& 	$',( 	$),* 	d+,, 	-,. 	/,0 	1,2 	s3,4 	$5,6 	7,8 	)$9,: 	t;,< 	d=,> 	"4?,@ 	TA,B 	TC,D 	$E, ,F " !%#!')W, , ,\ " $       ' eG
 G
T 3   ." " "J  D D D  ; ; ;@  
? 
? 
?: : :z   @ "'g g g gT
 
 
    4  0 0 0 %) %) %)P6 6 6| | | | | | | | | |s$   >B BBB' 'B65B6