
@K7]c        (   @` s  d  d l  m Z m Z m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l m Z m Z d  d l Z d  d l Z d  d l Z d  d l m Z d d l m Z m Z m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d  d l m Z m Z m Z m  Z  d  d l! m" Z" d  d l# m$ Z$ d  d l% m& Z& m' Z' d  d l( m) Z) m* Z* m+ Z+ m, Z, m- Z- m. Z. d  d l/ m0 Z0 y d  d l1 Z1 Wn e2 k
 re j3 d  n Xy e1 j4 Z5 Wn e1 j6 Z5 n Xe j7 d k Z8 i d d 6d d 6Z9 d d e: f Z; e j< d d e j= e j> BZ? e j< d  Z@ e j< d  ZA e j< d  ZB i  aC d    ZD e j< d!  ZE d"   ZF d#   ZG d$   ZH d%   ZI d&   ZJ d'   ZK d(   ZL d d,  ZM d-   ZN d.   ZO d/   ZP d d0  ZR d1 d2 d3 d4 h ZS d5 d6 d7 d8 h ZT i4 eU d9 6eU d: 6eU d; 6eU d< 6eU d= 6eU d> 6eU d? 6eV d@ 6eV dA 6eV dB 6e dC 6eV dD 6eV dE 6eV dF 6eU dG 6e dH 6eU dI 6eU dJ 6eW dK 6eW dL 6e dM 6e dN 6e dO 6e dP 6e dQ 6eU dR 6eU dS 6eV dT 6e dU 6eU dV 6eU dW 6eU dX 6eU dY 6eU dZ 6eU d[ 6eU d\ 6eU d] 6eU d^ 6eU d_ 6eU d` 6e da 6e db 6e dc 6e dd 6e de 6e df 6e dg 6e dh 6eV di 6eU dj 6eU dk 6eU dl 6ZX dm   ZY dn   ZZ do   Z[ i dp dq h dr 6ds dt du dv dw dx dy dz d{ d| d} d~ d d d d d d d h d 6d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d h' d* 6dp dq d d d d* d d d d d h d 6d* d) d+ d d h d 6d d d d d d h d 6d d d d d d h d 6d d d d d d d d d d d d d d h d 6Z\ d Z] d   Z^ d   Z_ d   Z` d   Za d   Zb d   Zc d d  Zd d ee ee d  Zf d   Zg d d  Zh e" d    Zi d   Zj d   Zk e jl d    Zm d en f d     YZo d S(   i    (   t   absolute_importt   divisiont   print_function(   t   OrderedDictN(   t   isfilet   join(   t   UnicodeDammiti   (   t	   iteritemst   PY3t	   text_type(   t   md5_file(   t   non_x86_linux_machines(   t	   MatchSpec(   t	   envs_dirs(   t   string_types(   t
   exceptionst   utilst   variantst   environ(   t   memoized(   t   feature_list(   t   Configt   get_or_merge_config(   t   ensure_listt   find_recipet   expand_globst   get_installed_packagest   HashableDictt   insert_variant_versions(   t   ensure_valid_license_familysP   Error: could not import yaml (required to read meta.yaml files of conda recipes)t   win32t   x86t   32t   x86_64t   64t   pythont   generics9   ^\ +-\ +(?:name|type):.+?(?=^\w|\Z|^\ +-\ +(?:name|type))t   flagssD   (numpy\s*x\.x)|pin_compatible\([\'\"]numpy.*max_pin=[\'\"]x\.x[\'\"]s?   pin_\w+\([\'\"]numpy[\'\"].*((?<=x_pin=[\'\"])[x\.]*(?=[\'\"]))s   pin_\w+\([\'\"]numpy[\'\"]c      !   C` s  |  j  } t d | j d  d t | d k  d t | d k  d | j d  d	 | j d
  d | j d=  d | j d  d t | d k  d t | d k  d | j d>  d | j d  d t d t j d t t t j j d t	     } t
 j |   } |  j j d | d  } t | d  s7| d } n  t d j | j d  d    } | j t d  | d! t d" | k od# k  n  d$ t d% | k od" k  n  d& t | d' k  d( t | d) k  d* t | d+ k  d, t | d- k  d. t | d/ k  d0 t | d1 k   	 |  j j d2  } | ss| d2 } |  j rst j t  j d3 j | d2   qsn  t d j | j d  d    | d4 <|  j j d5 | d5  } | | d6 <|  j j d7 | d7  } | | d7 <t | d d8 k  | d9 <x( t D]  } t | d: | k  | | <q Wx t D] \ }	 }
 |
 | |	 <q+W| j t j  x |  j j   D] \ } } | | k rey t |  | | <Wqt t f k
 rt | t  r| j   d? k r| j   d< k } n  | | | <qXqeqeW| S(@   Nt   linuxs   linux-t   linux32s   linux-32t   linux64s   linux-64t   arms	   linux-armt   osxs   osx-t   unixt   wins   win-R   s   win-32t   win64s   win-64R   s   -32s   -64R!   t   osR   t   nomklt   FEATURE_NOMKLR#   t   spliti    t    t   .i   t   pyt   py3ki   i(   t   py2ki   t   py26i   t   py27i   t   py33i!   t   py34i"   t   py35i#   t   py36i$   t   numpysa   No numpy version specified in conda_build_config.yaml.  Falling back to default numpy value of {}t   npt   perlt   plt   luat   2t   luajits   linux-%st   falset   true(   s   linux-s   osx-(   s   -32s   -64(   RD   RE   (   t   host_subdirt   dictt
   startswitht   boolt   endswithR.   R   t   intt   gett   FalseR   t   get_default_variantt   variantt   hasattrR   R1   t   updatet   verboseR   t
   get_loggert   __name__t   warnt   formatR   R   t   itemst	   TypeErrort
   ValueErrort
   isinstanceR   t   lower(   t   configt   platt   dt   defaultsR4   R>   R@   RA   t   machinet   featuret   valuet   kt   v(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   ns_cfgI   sp    		$"""
	&

!s+   (.+?)\s*(#.*)?\[([^\[\]]+)\](?(2)[^\(\)]*)$c         C` sE   t  j d t |    } t | j    d k r= | j d  Sd Sd  S(   Ns   '(.+?)'i   R2   (   t   ret   searcht   strt   lent   groupst   group(   t   errort   m(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   parseNameNotFound   s    c         C` s   y t  |  | i   SWnk t k
 r } t |  } | r_ t j t  } | j d | d  n  |  j | d  } t | | |  SXd  S(   Ns   Treating unknown selector 's   ' as if it was False.RM   (	   t   evalt	   NameErrorRn   R   RS   RT   t   debugt   replacet   eval_selector(   t   selector_stringt	   namespacet   variants_in_placet   et   missing_vart   logt   next_string(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyRs      s    c   
      C` s+  g  } xt  |  j    D] \ } } | j   } d } | rZ | d d
 k rZ | d } n  | j   j d  ru q n  t j |  } | r	| j d  } y3 t | | |  r | j	 | j d  |  n  Wqt
 k
 r}	 t j d | d | t |	  f  qXq | j	 |  q Wd	 j |  d	 S(   NR2   it   't   "t   #i   i   sO   Error: Invalid selector in meta.yaml line %d:
offending line:
%s
exception:
%s
s   
(   R{   R|   (   t	   enumeratet
   splitlinest   rstript   lstripRH   t   sel_patt   matchRk   Rs   t   appendt	   Exceptiont   syst   exitRh   R   (
   t   dataRu   Rv   t   linest   it   linet   trailing_quoteRm   t   condRw   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   select_lines   s&    !%c         C` s   y- t     t j |  d t } Wd  QX| SWn t j j k
 r } d |  k r y d d  l } | Wq t k
 r t j	 d |   q Xn  t
 d d t j t
 |  d t j t j d |   n Xd  S(   Nt   Loaders   {{i    t   originals   Problematic recipe:t   file(   t   stringify_numberst   yamlt   loadt   loaderRl   t	   YAMLErrort   jinja2t   ImportErrorR   t   UnableToParseMissingJinja2t   printR   t   stderrt   UnableToParse(   R   t   loaded_dataRw   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   yamlize   s    
c         C` sG   |  j  d i   j  d d  } | rC | d k rC t d |   n  d  S(   Nt   buildt   pin_dependsR2   t   recordt   stricts9   build/pin_depends must be 'record' or 'strict' - not '%s'(   R2   R   R   (   RL   t   RuntimeError(   t   metaR   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   ensure_valid_fields   s    c         C` sL  t  j t  } x6|  j   D](\ } } t | d  rJ t |  |  | <q | r_ t | d  sn t | t  r%t | t  r d | k r d  n | |  | <qDg  } t t	 t
 |   d  r xX | D]( } t |  } | r | j |  q q Wn% g  | D] } | d k r | ^ q } | |  | <q | j d j | t |    q W|  S(   Nt   keyst   __iter__t   Nonet   NoneTypes:   found unrecognized data type in dictionary: {0}, type: {1}(   R   R   (   R   RS   RT   RW   RP   t   _trim_None_stringsRZ   R   R   t   nextt   iterR   Rq   RV   t   type(   t	   meta_dictRy   t   keyRb   t   keepR^   t   trimmed_dictR   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR      s$    $%c         C` sG   |  j  d i   j  d  } | rC | t k rC t j d |   n  d  S(   NR   t   noarchs   Invalid value for noarch: %s(   RL   t   NOARCH_TYPESR   t   CondaBuildException(   R   t   build_noarch(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   ensure_valid_noarch_value  s    t   hostR   t   runc         C` sC   g  } x6 | D]. } | j  |  j j d i   j | g    q W| S(   Nt   requirements(   t   extendR   RL   (   t   metadatat   envst   reqst   _env(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   _get_all_dependencies  s    ,c         ` s   g  } x t  |  j    D] \ }   x t |  j    | d D]l  t   f d   t   D  r@ t  f d   t    D  r@ | j   j    j   f  q@ q@ Wq W| r d } x! | D] } | d j |   7} q Wt j	 |   n  d  S(   Ni   c         3` s:   |  ]0 }   j    | k p1 | j   j    d   Vq d S(   t    N(   t   nameRH   (   t   .0t   dep(   Rm   (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s   c         3` s:   |  ]0 }   j    | k p1 | j   j    d   Vq d S(   R   N(   R   RH   (   R   R   (   t   other_m(    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>   s   s"   Circular dependencies in recipe: 
s       {0} <-> {1}
(
   R~   t   valuest   listt   anyR   R   R   RV   R   t   RecipeError(   t   render_ordert   pairst   idxRl   t   pair(    (   Rm   R   s3   lib/python2.7/site-packages/conda_build/metadata.pyt   check_circular_dependencies  s    !*c         C` s^   t  } xQ |  j j j   D]= \ } } | | j j k r | | j j | k r t } q q W| S(   N(   t   TrueR\   RO   RW   RM   (   R   t   output_metadataR   R   t   val(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   _variants_equal*  s
    (c         C` s  d } g  } xO|  j    D]A\ } } x2|  j    D]$\ } } | | k r2 | j j d i   j d g   } t | d  r | j d g   | j d g   } n  t | |  | } x | D] } | j | j   d  r t | j d   d	 k r | j d  d
 | j	   k r t
 | |  r | j | j   | j	   | | j   f  q q Wq2 q2 Wq W| rd }	 x! | D] }
 |	 d j |
   7}	 qqWt j d |	   n  d  S(   NR   R   R   t   run_exportsR   t   strongt   weakR   i   iR2   s?   Mismatching package: {} (id {}); dep: {}; consumer package: {}
s   Mismatching 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   RL   RP   R   RH   R   Ri   R1   t   build_idR   R   RV   R   R   (   R   R   t	   problemost   _Rm   t   omR   t   depsR   Rl   t   prob(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   ensure_matching_hashes2  s&    !%4.=	c         C` sO  t  |  t |  d t | j  }  t |   } | d  k rE i  } n  x t D] } | | k rd qL n  | | s{ i  | | <n  | t k r t | | t	  p t
 | | d  o t | | t  s#t d | | | j j | f   q#qL t | | t	  sL t d | | | j j | f   qL qL Wt |  t |  t |  t |  S(   NRv   R   sB   The %s field should be a dict or list of dicts, not %s in file %s.s1   The %s field should be a dict, not %s in file %s.(   R   Re   RI   RO   R   R   t   FIELDSt   OPTIONALLY_ITERABLE_FIELDSRZ   RG   RP   R   R   t	   __class__RT   R   R   R   t   sanitize(   R   R\   t   patht   rest   field(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   parseK  s*    $	
&#$


t   yt   onRE   t   yest   nt   noRD   t   offs   build/entry_pointss   build/featuress   source/patchess   build/scripts   build/script_envs   build/run_exportss   build/track_featuress   build/osx_is_apps   build/preserve_egg_dirs   build/binary_relocations   build/noarchs   build/noarch_pythons%   build/detect_binary_files_with_prefixs
   build/skips   build/skip_compile_pycs   build/preferred_envs$   build/preferred_env_executable_pathss   build/ignore_run_exportss   build/requires_featuress   build/provides_featuress   build/pre-links   build/post-links   build/pre-unlinks   build/strings   build/pin_dependss   build/force_use_keyss   build/force_ignore_keyss   build/merge_build_hosts   build/msvc_compilers   requirements/builds   requirements/hosts   requirements/runs   requirements/conflictss   requirements/run_constraineds   test/requiress
   test/filess   test/source_filess   test/commandss   test/importss   test/downstreamss   package/versions   source/svn_revs   source/git_tags   source/git_branchs
   source/md5s   source/git_revs   source/paths   source/git_urls   app/own_environments   about/identifierss   about/keywordss
   about/tagsc         C` s   i t  g d 6t g d 6t g d 6} x | j   D]} \ } } | |  k r1 xb | D]W } |  | } t | d  r~ | |  } n g  | D] } | |  ^ q } | |  | <qP Wq1 q1 W|  S(   sE   
    Sanitize the meta-data to remove aliases/handle deprecation
    t   sourcet   packageR   R   (   t
   _git_cleant   _str_versionRW   RP   (   R   t   sanitize_funst   sectiont   funst   funct   section_datat   _d(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s    $
c   	      ` s   d
 } d } | f | } t    f d   | D  } t |  d k r d } | d j d   t | |  D  7} t j |  n    j   } xP t | d | d  D]7 \ } } | r | | | | d	 <n  | j | d  q W| S(   s   
    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.
    t
   git_brancht   git_tagt   git_revc         3` s*   |  ]  } t    j | t     Vq d  S(   N(   RI   RL   R	   (   R   t   tag(   t   source_meta(    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s   i   s   Error: multiple git_revs:s   , c         s` s*   |  ]  \ } } | r d  j  |  Vq d S(   s   {}N(   RV   (   R   R   t   has(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    	i    (   R   R   N(	   t   tuplet   sumR   t   zipR   R   t   copyt   popR   (	   R   t   git_rev_tags_oldR   t   git_rev_tagst   has_rev_tagst   msgt   ret_metaR   R   (    (   R   s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s     $c         C` sZ   d |  k r+ t  |  j d d   |  d <n  d |  k rV t  |  j d d   |  d <n  |  S(   Nt   versionR2   t   msvc_compiler(   Rh   RL   (   t   package_meta(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s
    R   R  R   t   fnt   urlt   md5t   sha1t   sha256R   t   path_via_symlinkst   git_urlR   R   R   t	   git_deptht   hg_urlt   hg_tagt   svn_urlt   svn_revt   svn_ignore_externalst   foldert   patchesR   t   numbert   stringt   entry_pointst
   osx_is_appt   disable_pipt   featurest   track_featurest   preserve_egg_dirt   no_linkt   binary_relocationt   scriptR   t   noarch_pythont   has_prefix_filest   binary_has_prefix_filest   ignore_prefix_filest   detect_binary_files_with_prefixt   skip_compile_pyct   rpathst   rpaths_patchert
   script_envt   always_include_filest   skipR  R   t   include_recipet   preferred_envt   preferred_env_executable_pathsR   t   ignore_run_exportst   requires_featurest   provides_featurest   force_use_keyst   force_ignore_keyst   merge_build_hosts   pre-links	   post-links
   pre-unlinkt   missing_dso_whitelistt   script_interpreterR   t   testt   aboutt   filesR   t   outputst	   conflictst   run_constrainedt   entryt   icont   summaryt   cli_optst   own_environmentt   appt   requirest   commandst   importst   source_filest   downstreamst   homet   dev_urlt   doc_urlt   doc_source_urlt   license_urlt   licenset   descriptiont   license_familyt   identifierst   tagst   keywordst   license_filet   readmec         C` sv   d } | d k r | d 7} n  | d k r8 | d 7} n  x7 | D]/ } | |  k r? t  j d | | |  f  q? q? Wd  S(   Ns   =@#$%^&*:;"'\|<>?/ s   package/versions   build/stringt   -t   !s#   Error: bad character '%s' in %s: %s(   s   package/versions   build/string(   R   R   (   t   sR   t   bad_chrst   c(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   check_bad_chrs  s    c         C` s\   d } xO |  D]G } | j    d | k r t | j     d k r | j    d } q q W| S(   NR2   i    i   (   R1   Ri   (   t
   build_reqsR   R  t   spec(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_package_version_pin  s
    .c      	   C` s  |  j  j d i   j d  r0 |  j d  } ng  } |  j rE d n d } g  |  j |  D] } | j ^ q[ } |  j  j d i   j | g   } xd d d d  d d! d f d" d# f D]\ } } }	 x|  j d  D]n} xet |  D]W}
 | j |
 k r |
 | k r |
 d k r%|  j r%q n  |  j |
 k sO|  j d  r_|
 d
 k r_| j	 |  q?t
 t |   } | j g  t |  D]$ } d | k r| j d d  ^ q xK | D]C } t | |  p|  j j j | j d d  d  } | rPqqWd j | g | j d  |	   } | | k r?| j	 |  q?q q Wq Wq Wt |  j d g    } | ry| j	 d  n  | r| j d j |  d f  n  | j	 d j |  j   r|  j   n d   d j |  } | S($   NR   R  s   build/stringR   R   R>   R=   i   R4   R#   R@   R?   RA   t   rs   r-baset   mros   mro-basei   s   mro-base_implR   s   build/noarch_pythonRU  R   R2   R3   s   build/featuress   {0}i    (   R>   R=   i   (   R4   R#   i   (   R@   R?   i   (   RA   RA   i   (   R^  s   r-base(   R_  s   mro-basei   (   R_  s   mro-base_impli   (   R   RL   t	   get_valuet   is_crosst
   ms_dependsR   R   t   numpy_xxR   R   R   R   Rr   R]  R\   RO   R   R1   RV   t   build_number(   R   t	   build_strR   t   build_or_hostt   mst   build_pkg_namest
   build_depsRW  t   namest   placesR   t	   pkg_namest   _nt   variant_versionR=  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   build_string_from_metadata  sJ    %!	5	#.c         C` s   t  j j |   sj xU t t  t  j   g D]7 } t  j j | |   } t  j j |  r, | }  Pq, q, Wn  t  j j |  d  } t  j j |  s t d |   t j	 d  n  |  S(   Ns
   conda-metas$   Bootstrap environment '%s' not foundi   (
   R.   R   t   isdirR   R   t   getcwdR   R   R   R   (   t   env_name_or_patht   envs_dirR   t   bootstrap_metadir(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   _get_env_pathP  s     c         C` so   t  |   } t |  } g  } x< | j   D]. \ } } | j d | | d | d f  q+ Wi i | d 6d 6S(   Ns   %s %s %sR  R   R   (   Ru  R   RW   R   (   Rr  R   t   bootstrap_metadatat   bootstrap_requirementsR   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt"   _get_dependencies_from_environment^  s    &c         C` sG  d d l  m } g  |  D]+ } | j d d  j d  r | d ^ q } t   } t   } t   } x t |  j    D] \ } \ } } | j d d  j d  rU| j d g   | j d g   }	 | j	 s |	 j
 | j d g    n  | d }
 | | |
 <t   | |
 <xT |	 D]< } | j d	  d
 } | | k r| |
 j | f  qqWqv | j |  qv Wt | |   } g  | D]; } |  j   D]( } d | k r| d | k r| ^ qq} | j
 g  | D]G } |  j   D]4 } d | k r| d | k sd | k r| ^ qq t   } x | D] } |  | | | <q+W| S(   s  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.i   (   t	   _toposortR   t   condaR   s   requirements/runs   requirements/hosts   requirements/buildR   i    (   t   conda_interfaceRy  RL   RH   RG   t   setR~   RW   R`  Ra  R   R1   RQ   t   addR   R   R   (   t   output_metadata_mapRy  t   output_dt   these_packagest   topodictt   ordert   endorderR   t   output_mR   R   R   t
   topo_ordert   pkgnameRc   R   t   resultR   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   toposorti  s:    +			%	

+#8	c         ` s   | p   j  d  } | s4 i   j   d 6g } na t | d  sP t d     j r t   f d   | D  r | j t d   j     n  xK | D]C } d   j   k r | j	 d    j   k r t
   |  q q W| S(   NR:  R   R   s   outputs specified as dictionary, but must be a list of dictionaries.  YAML syntax is: 

outputs:
    - name: subpkg

(note the - before the inner dictionary)c         3` s-   |  ]# }   j    | j d  d  k Vq d S(   R   R2   N(   R   RL   (   R   t   out(   R   (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s   s   package:(   t   get_sectionR   RP   t   AssertionErrort   uses_subpackageR   R   R   t   get_recipe_textRL   t&   combine_top_level_metadata_with_output(   R   R:  R  (    (   R   s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_output_dicts_from_metadata  s    -c         ` s  d d l  m } t   } x	| j   D]\ }   j   rD q& n  yXt j t  } |  j j	 r | j
 d j  j     n  |  j   }	  j |	 _  j j |	 j _ |	 j   }
 |	 j j |  t |	 _ |	 j  j    p i  j   d 6} |	 j |  }	 |
 j   | s2| |	 d |
 d |   n |	   | j d  s`| j d  j d  r|   f |   j   t   f d	     j   D  f <n  Wq& t j k
 r } | s  q!t j t  } | j d
 j | j   |  f |  j   t  f d    j   D  f <q& Xq& W| |  _ t |  _ t   } xX | j   D]J \ } \ }  |  f |  j   t  f d    j   D  f <qMW| S(   Ni   (   t   finalize_metadatas&   Attempting to finalize metadata for {}R   t   parent_metadatat   permit_unsatisfiable_variantsR   Rz  c         ` s#   i  |  ] }   j  j | |  q S(    (   R\   RO   (   R   Rc   (   t   fm(    s3   lib/python2.7/site-packages/conda_build/metadata.pys
   <dictcomp>  s   	s;   Could not finalize metadata due to missing dependencies: {}c         ` s#   i  |  ] }   j  j | |  q S(    (   R\   RO   (   R   Rc   (   R   (    s3   lib/python2.7/site-packages/conda_build/metadata.pys
   <dictcomp>  s   	c         ` s#   i  |  ] }   j  j | |  q S(    (   R\   RO   (   R   Rc   (   Rm   (    s3   lib/python2.7/site-packages/conda_build/metadata.pys
   <dictcomp>  s   	(   t   renderR  R   R   R+  R   RS   RT   R\   RR   t   infoRV   R   R   t   other_outputsRO   RQ   RM   t   finalt   get_rendered_outputt   get_output_metadatat   parse_until_resolvedRL   RH   R   t   get_used_varsR   t   DependencyNeedsBuildingErrorRU   t   packagesRW   (   t   base_metadataR   t   pass_noR:  R  t   bypass_env_checkR  R  Ry   R   R  Rw   t   final_outputsRc   t   out_d(    (   R  Rm   R   s3   lib/python2.7/site-packages/conda_build/metadata.pyt   finalize_outputs_pass  sJ    		(
(?@			<c         C` st   |  } d |  k rp g  | D], } d | k r | d |  d k r | ^ q } t  |  d k sc t  | d } n  | S(   NR   i   i    (   Ri   R  (   t   original_dictt   new_outputsR  R  t	   output_ds(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt.   get_updated_output_dict_from_reparsed_metadata  s     c         C` s`   | r\ t  j | |  d t  j t  j B} | rS d j t d   | j   D   n d }  n  |  S(   NR%   s   
c         s` s   |  ] } | r | Vq d  S(   N(    (   R   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    R2   (   Rf   Rg   t	   MULTILINEt   DOTALLR   R|  Rj   (   t   textt   extract_patternR   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   _filter_recipe_text  s    "4c         C` sU   t  |  d   } t | j    j } Wd  QXt rQ t | d  rQ | j   } n  | S(   Nt   rbt   decode(   t   openR   t   readt   unicode_markupR   RP   R  (   t	   meta_patht   ft   recipe_text(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   read_meta_file  s
    c         C` s   d } x | D] } |  j  j | i   p+ i  } | j | i   pC i  } | d k rp t j | j | i    } n  x3 | j   D]% \ } } | | k r} | | | <q} q} W| | | <| |  j  | <q Wd S(   sJ   Merge top-level metadata into output when output is same name as top-levelR   R   R8  N(   R   R   R8  (   R   RL   R   t   expand_reqsRW   (   R   t   outputt   sectionsR   t   metadata_sectiont   output_sectionRc   Rd   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    
c   	      C` sL  t  j |  j j d i    } t  j | j d g    } t  j | j d g    } | j d g   } d   | D } d   | D } t   } t  j |  j j j d g    } x | D] } | | k r | | k r@| | k r@| | k r@| j |  q@q | | k r | | k r | | k r | | k r | j |  q q W| | S(   s   things 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         S` s2   h  |  ]( } | r | j    d  j d d   q S(   i    RU  R   (   R1   Rr   (   R   t   req(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <setcomp>   s   	 c         S` s2   h  |  ]( } | r | j    d  j d d   q S(   i    RU  R   (   R1   Rr   (   R   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <setcomp>!  s   	 t   ignore_build_only_deps(	   R   R  R   RL   R   R|  R\   RO   R}  (	   R   t   requirements_usedt   output_reqsR[  t	   host_reqst   run_reqst	   to_removeR  R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   trim_build_only_deps  s(    	!c          c` s   t  j j   }  x0 t d  D]" } | t  j k r t  j | =q q Wd  Vx4 t d  D]& } | |  k rT |  | t  j | <qT qT Wd  S(   Nu
   0123456789(   R   t   yaml_implicit_resolversR   R   (   t   implicit_resolver_backupt   ch(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR   7  s    t   MetaDatac           B` s  e  Z d\ d\ d   Z e d    Z e d    Z e j d    Z e d    Z e j d    Z e	 d  Z
 e d    Z e	 e	 e	 d  Z d	   Z d
   Z e	 e	 d  Z e d\ d\ d   Z e d\ d\ d   Z d   Z d\ e d  Z d   Z e	 d  Z d   Z d   Z d   Z d 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* d&   Z+ e	 e	 d\ e	 d\ d\ d'  Z, d(   Z- d)   Z. d*   Z/ e d+    Z0 e d,    Z1 e d-    Z2 e d.    Z3 e d/    Z4 e d0    Z5 e d1    Z6 d\ e	 e d2  Z7 e	 d3  Z8 e d4  Z9 d5   Z: d6   Z; e d7  Z< e d8    Z= e d9    Z> e d:    Z? e d;    Z@ d<   ZA d=   ZB e d>    ZC eC j d?    ZC e d@    ZD eD j dA    ZD e dB    ZE e dC    ZF e dD    ZG dE   ZH dF   ZI dG   ZJ dH   ZK e	 e	 e	 dI  ZL dJ   ZM e	 e	 dK  ZN e	 d\ dL  ZO e	 d\ dM  ZP e	 d\ dN  ZQ e dO    ZR e dP    ZS e	 e	 dQ  ZT e	 e	 e	 dR  ZU e	 e	 dS  ZV dT   ZW dU   ZX dV   ZY dW   ZZ e dX    Z[ e dY    Z\ dZ   Z] d[   Z^ RS(]   c         C` s   g  |  _  t | d | |  _ t |  r` | |  _ t j j |  |  _ t j j	 |  |  _ n0 t
 |  |  _ d |  _ t j j	 |  j  |  _ t |  j d  |  _ t   |  _ |  j d t d t  |  j |  j _ d  S(   NRO   s	   meta.yamls   requirements.txtt   permit_undefined_jinjat   allow_no_other_outputs(   t   undefined_jinja_varsR   R\   R   t
   _meta_pathR.   R   t   basenamet
   _meta_namet   dirnameR   R  R   t   requirements_pathRG   R   t   parse_againR   R  (   t   selfR   R\   RO   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   __init__F  s    			c         C` s.   t  |  j d   p- d |  j j d i   k S(   NR   R   (   RI   t   get_depends_top_and_outR   RL   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyRa  b  s    c         C` s   |  j  d  S(   Ns   extra/final(   R`  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  g  s    c         C` s0   |  j  j d i   } | | d <| |  j  d <d  S(   Nt   extraR  (   R   RL   (   R  t   booleanR  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  k  s    
c         C` s,   |  j  j p+ d |  j k o+ d |  j d k S(   NR   R  (   R\   R  R   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  q  s    c         C` s<   | |  j  _ |  j j d i   } | | d <| |  j d <d  S(   NR   R  (   R\   R  R   RL   (   R  Rb   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  v  s    
c      	   C` sq   t  | d  r | } n0 t |  " } t | j   d |  j } Wd QXt j |  j | |  j d | d | d S(   si  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\   Nt   merget   raise_on_clobber(	   RP   R  R   R  R\   R   t   merge_or_update_dictR   R   (   R  t   sections_file_or_dictR  R  t   build_configt
   configfile(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   append_metadata_sections}  s    	!c         C` sR   |  j  d t  } |  j j d i   j d i   j d  } t |  oQ | | k S(   Nt   fail_okR  t   parent_recipeR   (   R   R   R   RL   RI   (   R  t	   self_namet   parent_name(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt	   is_output  s    *c   	      K` s;  |  j  s t d   t j t  } | r; | j d  n  d } d } |  j r t |  j	 | d | d | d |  j
 d |  j |  _ t j j |  j d  } t j j |  j d  } n  |  j
 j p | } | r t j j |  r | j d	 |  d } n  |  j
 j p| } | rAt j j |  rA| j d
 |  d } n  | r]|  j | d t n  | ry|  j | d t n  |  j
 j rt |  j
 j  } |  j | d t n  |  j j d i   j d t  r|  j d d |  j
 _ n  |  j j d i   j d t  r#|  j d d |  j
 _ n  |  j   |  j   d S(   s  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.
        s%   modifying metadata after finalizationsj   using unsupported internal conda-build function `parse_again`.  Please use conda_build.api.render instead.R  R  R\   R   s   recipe_append.yamls   recipe_clobber.yamls,   input append sections file did not exist: %ss-   input clobber sections file did not exist: %sR  R   t   error_overlinkingt   error_overdependingN(   R  R  R   RS   RT   RU   R   R  R   t   _get_contentsR\   R   R.   R   R   t   append_sections_fileR   Rq   t   clobber_sections_fileR  R   RM   t	   bootstrapRx  RL   R  R  t   validate_featurest   ensure_no_pip_requirements(	   R  R  R  R  t   kwRy   R  R  t   dependencies(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    sF    					!!
c         C` sO   d } xB | D]: } t  d   |  j |  p. g  D  r t d   q q Wd  S(   Ns   requirements/builds   requirements/runs   test/requiresc         s` s   |  ] } t  | d   Vq d S(   R   N(   RP   (   R   t   item(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    s   Dictionaries 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.(   s   requirements/builds   requirements/runs   test/requires(   R   R`  RY   (   R  R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    %c         C` s   |  j  j d i   } | j d g   } t |  j d t   rp |  j j d k rp d | k rp | j d  qp n  | |  j  d <d S(   sF   For dynamic determination of build or run reqs, based on configurationR   R   s   build/osx_is_appR*   s
   python.appN(   R   RL   RI   R`  RM   R\   t   platformR   (   R  R   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   append_requirements  s    *c         C` s   d } |  j  } |  j d t d | d |  | |  _  xM t |  t |  j  k r |  j } |  j d t d | d |  | |  _  q7 W| r |  j d t d | d |  t j d j |  j   n  |  j d t d | d |  | |  _  d S(   sc   variant contains key-value mapping for additional functions and values
        for jinja2 variablesR  R  R  sX   Undefined Jinja2 variables remain ({}).  Please enable source downloading and try again.N(    (	   R  R  R   R|  R  RM   R   R   RV   (   R  R  R  R  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s*    			c         C` sh   t  t |   j |   } | s* t   } n  t | d | d d d | | _ | | _ | j d t  | S(   NR\   R   R2   RO   R  (	   t   superR  t   __new__R   R   R   R\   R  R   (   t   clsR   R\   RO   Rm   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt
   fromstring  s    !	c         C` sy   t  t |   j |   } d | _ d | _ d | _ t |  | _ | sZ t d |  } n  | | _	 g  | _
 t | _ | S(   sG   
        Create a MetaData object from metadata dict directly.
        R2   RO   (   R  R  R  R   R  R  R   R   R   R\   R  RM   R  (   R  R   R\   RO   Rm   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   fromdict  s    						c         C` s   |  j  j | i   S(   N(   R   RL   (   R  R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    c         C` s+  | j  d  } t |  d k s1 t d |   t |  d k rX | \ } } d } nL t |  d k r | \ } } } | d k s t d |   t |  } n  | d | } | r | d k r | t k r t |   } n  |  j |  }	 t |	 t  r | st d j	 | |    n t |	 t
  r| d k rit j t  }
 |
 j d j	 |   d	 } n  t |	  d	 k ri  }	 q|	 | }	 t |	 t  st d
 j	 | |    n  |	 j | |  } t | t  r| j   t k rt } q| j   t k rt } qn  | d k r'| } n  | S(   s  
        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
        t   /i   i   s   Bad field name: R   s   Section is not a list: s6   Got non-zero index ({}), but section {} is not a list.s8   No index specified in get_value('{}'). Assuming index 0.i    s   Expected {}/{} to be a dict(   i   i   N(   R1   Ri   R  R   RK   t   default_structsR  RZ   RG   RV   R   R   RS   RT   RU   RL   R	   R[   t   truesR   t   falsesRM   (   R  R   t   defaultt   autotypeRj  R   R   t   indexR   R   Ry   Rb   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR`    sF    "	
		
		c         C` s   d   } x t  |  j  D] \ } } | d k r7 q n  | t k rV t d |   n  x] | D]U } | t k r t | t  r x1 | j   D] } | | |  q Wq] | | |  q] Wq Wt S(   Nc         S` s-   |  t  | k r) t d | |  f   n  d  S(   Ns   in section %r: unknown key %r(   R   RY   (   R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   check_fieldY  s    R  s   unknown section: %s(	   R   R   R   RY   R   RZ   RG   R   R   (   R  R  R   t   submetat   key_or_dictR   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   check_fieldsX  s    	c         C` s   |  j  j d i   j d d  } | rF | rF t j d |  j  n  t |  } | | j   k rx t j d |  n  t | d  | S(   NR   R   R2   s"   Error: package/name missing in: %rs.   Error: package/name must be lowercase, got: %rs   package/name(   R   RL   R   R   R  R	   R[   RZ  (   R  R  R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR   k  s    !c         C` ss   t  |  j d   } | d  k r8 t j d |  j  n  t | d  |  j ro | j d  ro t	 d |   n  | S(   Ns   package/versions%   Error: package/version missing in: %rR3   s8   Fully-rendered version can't start with period -  got %s(
   Rh   R`  R   R   R   R  RZ  R  RH   RY   (   R  R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  u  s    c         C` sC   |  j  d  } y t |  } Wn t t f k
 r> d } n X| S(   Ns   build/numberR2   (   R`  RK   RY   RX   (   R  R  t	   build_int(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyRd  ~  s    
c   	      C` s  t  |  j d | g    } t d   | D  } g  } |  j s g  |  j j d g   D]' } | j d  |  j   k rX | ^ qX } | r t j | d j d g    j | g   } g  | D]" } | j	   d | k r | ^ q } q n  g  t |  t |  BD] } | r| ^ q} | S(   Ns   requirements/c         s` s%   |  ] } | r | j    d  Vq d S(   i    N(   R1   (   R   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    R:  R   i    R   (
   R   R`  R|  R  R   RL   R   R   R  R1   (	   R  t   typt   meta_requirementst	   req_namest
   extra_reqsR  t   matching_outputR   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    	'%5/R   c      	   C` s  d } g  | D]1 } |  j  j j |  r | |  j  j | f ^ q } |  j  j j d  r | j d |  j  j d f d |  j  j d f g  n  t   } xt |  j d | g    D]} | s q n  y t |  } WnC t k
 r t	 d	 |   n# t
 t f k
 rt	 d
   n X| j |  j   k rKt	 d |  j     n  x5 | D]- \ } } | j | k rR|  j rqRqqRqRWx: d D]2 }	 |	 | j k rt j d |	 | j f  qqW| j   }
 t |
  d k rd|
 d d d d d d d d h k rdd |
 d | j f } t |
  d k rQ| d | j |
 d |
 d f 7} n  t j |  qdn  | | | <q Wt | j    S(   NR#   R=   R?   RA   t   r_baseR^  s   r-bases   requirements/s!   Invalid package specification: %rsd   Received dictionary as spec.  Note that pip requirements are not supported in conda-build meta.yaml.s   %s cannot depend on itselfs   =!@#$%^&*:;"'\|<>?/s9   Error: bad character '%s' in package name dependency '%s'i   i   t   >s   >=t   =s   ==s   !=t   <s   <=s<   Error: bad character '%s' in package version dependency '%s'i   s   
Perhaps you meant '%s %s%s'(   R#   R=   R?   RA   (   R\   RO   RL   R   R   R   R`  R   R  R   t   AttributeErrorRY   R   R   R   R   R1   Ri   R   R   (   R  R  Rj  R   t   name_ver_listt   specsR\  Rg  t   verRY  t   partsR  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyRb    sL    
1	#		%c         ` s  t    j    } t   |  d d d d d g } | j t   j j j d g     d | k r   j \ } }   j	 s | r | r | j
 d  q n  | r t j d j d	   | D   } g  | D] } | j |  s | ^ q } n    f d
   | D S(   s  
        # 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.
        R#   R  R?   RA   t   target_platformt   ignore_versionR=   t   |c         s` s   |  ] } d  j  |  Vq d S(   s
   {}[\s$]?.*N(   RV   (   R   t   exc(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s   c         ` s#   i  |  ] }   j  j | |  q S(    (   R\   RO   (   R   R   (   R  (    s3   lib/python2.7/site-packages/conda_build/metadata.pys
   <dictcomp>  s   	 (   R|  R  R  R   R   R\   RO   RL   t$   uses_numpy_pin_compatible_without_xxRc  R   Rf   t   compileR   R   (   R  R  t   build_string_excludest   pin_compatiblet   not_xxt   exclude_patternR  (    (   R  s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_hash_contents  s    %+c         C` sf   d } |  j    } | rb t j t j | d t j    } d j | j    |  j	 j
 d  } n  | S(   sl  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.
        R2   t	   sort_keyss   h{0}i   (   R  t   hashlibR
  t   jsont   dumpsR   t   encodeRV   t	   hexdigestR\   t   hash_length(   R  t   hash_t   hashing_dependencies(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   hash_dependencies  s    
$&c         C` s  |  j  d  } |  j   } | rG | rG t d j |  j      n  |  j   } t j d |  } | r | o t j d | j  r t	 | d  | } nt
 |   } |  j j r|  j r|  j   } t j d |  j j |  s| j d d  } yG t | d  | r.d j | t | d  f  n t | d  } Wn t k
 r`| d | } n Xt |  d k rd j | g | d  } qqt j d |  j j | |  } n  | S(	   Ns   build/strings.   Couldn't extract raw recipe text for {} outputs
   \s*string:s   h\{\{\s*PKG_HASH\s*\}\}s   h[0-9a-f]{%s}R   i   i    (   R`  t   extract_package_and_build_textR   RV   R   Rf   Rg   t   findallR  RZ  Ro  R\   t   filename_hashingR  R!  R  t   rsplitRK   R   Rh   RY   Ri   t   sub(   R  t   manual_build_stringt   raw_recipe_textt   raw_manual_build_stringR  R  t   ret(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s0    	9 "c         C` s#   d |  j    |  j   |  j   f S(   Ns   %s-%s-%s(   R   R  R   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   dist#  s    c         C` s   d |  j    S(   Ns
   %s.tar.bz2(   R+  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   pkg_fn&  s    c         C` s   t  |  j d   S(   Ns	   app/entry(   RI   R`  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   is_app)  s    c         C` s   i d d 6} |  j  d  rH d t t |  j |  j  d    | d <n  xE d d d d d g D]. \ } } |  j  |  } | r^ | | | <q^ q^ W| S(   NRB  R   s   app/icons   %s.pngR>  s	   app/entryt	   app_entrys   app/typet   app_types   app/cli_optst   app_cli_optss   app/summaryR?  s   app/own_environmentt   app_own_environment(   s	   app/entryR.  (   s   app/typeR/  (   s   app/cli_optsR0  (   s   app/summaryR?  (   s   app/own_environmentR1  (   R`  R
   R   R   (   R  R^   R   R   Rb   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   app_meta,  s    	#c   	      C` s  |  j  j d k r d n	 |  j  j } t d |  j   d |  j   d |  j   d |  j   rf |  j   n d d |  j  j d k r | d k r |  j  j n d  d t
 j | |  d	 |  j  j d
 t d   |  j   D  d t t j   d   	} x4 d D], } |  j d |  } | r | | | <q q W|  j d  } | rH| | d <n  t |  j d   } g  | D] } | rd| ^ qd} | r| | d <n  |  j d  rd j |  j d   | d <n  |  j d  rd j |  j d   | d <n  |  j d  r|  j d  | d <n  |  j d  r5|  j d  | d <n  |  j rd  | d <| d <d | d	 <|  j d  } | r| | d <qn  |  j   r| j |  j    n  | S(    NR   R   R  R   Rd  i    R  t   archt   subdirt   dependsc         s` s'   |  ] } d  j  | j j    Vq d S(   R   N(   R   R\  R1   (   R   Rg  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>G  s   t	   timestampi  RM  RO  s   about/s   build/preferred_envR-  s   requirements/run_constrainedt
   constrainss   build/featuresR   R  s   build/track_featuresR  s   build/provides_featuresR1  s   build/requires_featuresR0  s   build/noarch(   RM  RO  (   R\   t   target_subdirt	   host_archRG   R   R  R   Rd  R  R   t   ARCH_MAPRL   t   sortedRb  RK   t   timeR`  R   R   R   R-  RQ   R2  (	   R  R3  R^   R   Rb   R-  R7  Rd   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt
   info_index<  sR    $		
c         C` s   t  |  j d g    } t | t  s6 t d   n  t j d k rm t d   | D  rm t d   qm n  t | |  j	 j
  S(   Ns   build/has_prefix_filess0   build/has_prefix_files should be a list of pathsR   c         s` s   |  ] } d  | k Vq d S(   s   \N(    (   R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>t  s    sH   build/has_prefix_files paths must use / as the path delimiter on Windows(   R   R`  RZ   R   R   R   R  R   R   R\   t   host_prefix(   R  R*  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR"  o  s    c         C` s   |  j  d t  } t |  t t f k r9 t d   n  t j d k r t |  t k r t d   | D  r t d   q n  t |  t k r t	 | |  j
 j  S| S(   Ns   build/ignore_prefix_filessQ   build/ignore_prefix_files should be boolean or a list of paths (optionally globs)R   c         s` s   |  ] } d  | k Vq d S(   s   \N(    (   R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    sK   build/ignore_prefix_files paths must use / as the path delimiter on Windows(   R`  RM   R   R   RI   R   R   R  R   R   R\   R>  (   R  R*  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR$  y  s    (c         C` s~   t  |  j d g    } t d   | D  r= t d   n  t rk g  | D] } | j d d  ^ qJ } n  t | |  j j  S(   Ns   build/always_include_filesc         s` s   |  ] } d  | k Vq d S(   s   \N(    (   R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    sL   build/always_include_files paths must use / as the path delimiter on WindowsR  s   \(	   R   R`  R   R   t   on_winRr   R   R\   R>  (   R  R9  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR*    s    (c         C` s   t  |  j d g    S(   Ns   build/ignore_verify_codes(   R   R`  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   ignore_verify_codes  s    c         C` s   |  j  d t  } t |  t t f k r9 t d   n  t j d k r t |  t k r t d   | D  r t d   q n  t |  t k r t	 | |  j
 j  S| S(   Ns   build/binary_relocationsO   build/binary_relocation should be boolean or a list of paths (optionally globs)R   c         s` s   |  ] } d  | k Vq d S(   s   \N(    (   R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    sI   build/binary_relocation paths must use / as the path delimiter on Windows(   R`  R   R   R   RI   R   R   R  R   R   R\   R>  (   R  R*  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    (c         C` s   |  j  d t  S(   Ns   build/include_recipe(   R`  R   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR,    s    c         C` s   t  |  j d g    } t | t  s6 t d   n  t j d k rm t d   | D  rm t d   qm n  t | |  j	 j
  S(   Ns   build/binary_has_prefix_filess7   build/binary_has_prefix_files should be a list of pathsR   c         s` s   |  ] } d  | k Vq d S(   s   \N(    (   R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    sO   build/binary_has_prefix_files paths must use / as the path delimiter on Windows(   R   R`  RZ   R   R   R   R  R   R   R\   R>  (   R  R*  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR#    s    c         C` s   |  j  d t  S(   Ns
   build/skip(   R`  RM   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR+    s    c         C` sE  y d d l  } WnY t k
 rk t d d t j t d d t j t |  j   }	 |	 j   SWd QXn Xd d l m	 }
 m
 } m } t j j |  j  \ } } | j d  | j |  g } t j j d  } | r>t j j |  r>t j j |  } | j d	 d
  } | j |  } | j | j i | d 6  n  | j } | r_g  | _ | } n  | | j |  d |  j } | j d | d |  } | j j t |  j   | j j t j  d |  d |   | j j i d d 6 | j j |
 |  | d |  j d | d | d | d | d |  | rG| j j i | d 6 n  z y | re| j! |  } n' | r}| j" |  } n | j! d  } d t j d <| j# d |  } | r| j |  _$ n	 g  |  _$ WnS | j% k
 r} d t& |  k rd } n  t j' d j( |  j t& |    n XWd d t j k r@t j d =n  X| S(   so  
        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.
        i    Ns$   There was an error importing jinja2.R   sB   Please run `conda install jinja2` to enable jinja template support(   t   context_processort   UndefinedNeverFailt   FilteredLoadert   conda_buildt   CONDA_DEFAULT_ENVs   \R  s   $CONDA_DEFAULT_ENVR\   R   t	   undefinedRm   t   skip_build_idt   RENDERt   CONDA_BUILD_STATER  R  R  RO   t   PKG_NAMER2   t   environments   'None' has not attributes$   Failed to run jinja context functions0   Error: Failed to render jinja template in {}:
{}()   R   R   R   R   R   R  R  R  t   conda_build.jinja_contextRA  RB  RC  R.   R   R1   t   PackageLoadert   FileSystemLoaderR   RL   Rp  t   abspathRr   R   t   PrefixLoadert   StrictUndefinedt   all_undefined_namest   ChoiceLoaderR\   t   Environmentt   globalsRQ   Re   t   get_dictt   from_stringt   get_or_select_templateR  R  t   TemplateErrorRh   R   RV   (   R  R  R  R  t   template_stringRG  t   alt_nameRO   R   t   fdRA  RB  RC  R   t   filenamet   loaderst   conda_env_patht
   env_loadert   undefined_typeR   t   envt   templatet   renderedt   ex(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    sj     			"	 	c         C` s   t  |  j  S(   s8   
        String representation of the MetaData.
        (   R	   t   __dict__(   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   __unicode__  s    c         C` s'   t  r |  j   S|  j   j d  Sd  S(   Ns   utf-8(   R   Rg  R  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   __str__  s    
c         C` s
   |  j    S(   s8   
        String representation of the MetaData.
        (   Rh  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   __repr__  s    c         C` sv   |  j  p3 |  j j d i   j d i   j d d  } | rr t j j |  |  j k rr t j j | |  j  } n  | S(   NR  R  R   R2   (   R  R   RL   R.   R   R  R  R   (   R  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    6!c         C` sX   d } |  j  rB t |  j  d   } t | j    j } Wd  QXn  d | k pW d | k S(   NR2   R  u   load_setup_py_datau   load_setuptools(   R  R  R   R  R  (   R  t	   meta_textR  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   uses_setup_py_in_meta!  s
    	c         C` sL   d } |  j  rB t |  j  d   } t | j    j } Wd  QXn  d | k S(   NR2   R  t   load_file_regex(   R  R  R   R  R  (   R  Rj  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   uses_regex_in_meta)  s
    	c         C` s   |  j  p |  j p |  j S(   N(   t   uses_vcs_in_metaRk  Rm  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   needs_source_for_render1  s    c         C` s_   |  j  s t St |  j  d  . } t | j    j } t j d |  } Wd  QXt |  d k S(   NR  s   {{.*}}i    (	   R  RM   R  R   R  R  Rf   R#  Ri   (   R  R  Rj  t   matches(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt
   uses_jinja5  s    	c         C` s   d
 } d d d g } |  j r t |  j d   } t | j    j } xw | D]o } t j d j | j	    |  } t
 |  d k rO | |  j d d k rO | d k r d	 } n  | } PqO qO WWd
 QXn  | S(   s   returns 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.
        t   gitt   svnt   hgR  s   {}_[^\.\s\'\"]+i    R   R   t	   mercurialN(   R   R  R  R   R  R  Rf   R#  RV   t   upperRi   R   (   R  t   vcst	   vcs_typesR  Rj  t   _vcsRp  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyRn  >  s    	!)	c         C` s  t  r d n d } t j j |  j |  } x | |  j f D] } t j j |  r: d d d g } t |  j d   } t | j    j	 } xt | D]l } t
 j d j |  | d t
 j } t |  d	 k r | |  j d
 d k r | d k r d } n  | Sq WWd  QXq: q: Wd  S(   Ns   bld.bats   build.shRr  Rs  Rt  R  s$   {}(?:\.exe)?(?:\s+\w+\s+[\w\/\.:@]+)R%   i    R   R   Ru  (   R?  R.   R   R   R  R   R  R   R  R  Rf   R#  RV   t
   IGNORECASERi   R   R   (   R  t   build_scriptt   recipe_fileRx  R  Rw  Rp  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   uses_vcs_in_buildR  s    )	c         C` s   |  j  } | rU t |  } |  j rq | rq |  j |  j   t |  d d    } qq n d d l m } | |   } t	 | |  } | r t
 | t |  j  d t |  j j  } n  | j   S(   NR   i    (   t   output_yamlRv   (   R  R  R  t   extract_single_output_textR   t   getattrR   t   conda_build.renderR~  R  R   Re   R\   RI   RO   R   (   R  R  t   force_top_levelt   apply_selectorsR  R  R~  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  h  s    	*c         C` s:   d } d |  j  d |  k r' d } n  |  j  | d | S(   NsT   (^\s*requirements:.*?)(?=^\s*test:|^\s*extra:|^\s*about:|^\s*-\s+name:|^outputs:|\Z)s   package:R  s:   (^requirements:.*?)(?=^test:|^extra:|^about:|^outputs:|\Z)(   R  (   R  R  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   extract_requirements_textw  s    	c         C` s   |  j  d d t d | S(   Ns+   (^outputs:.*?)(?=^test:|^extra:|^about:|\Z)R  R  (   R  R   (   R  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   extract_outputs_text  s    c         C` s   |  j  d  S(   NsM   (\s*source:.*?)(?=^build:|^requirements:|^test:|^extra:|^about:|^outputs:|\Z)(   R  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   extract_source_text  s    c         C` s   |  j  d  S(   Ns<   (^.*?)(?=^requirements:|^test:|^extra:|^about:|^outputs:|\Z)(   R  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR"    s    c         C` s  |  j  d |  } t j |  } |  j j d  pN t |  d  rK |  j n d  } | sp i |  j   d 6g } n  y | r g  | D]H } | j d |  j    | j d |  j	 j
 d k r d n d  f ^ q } | j | | f  }	 n: g  | D] } | j d |  j    ^ q } | j |  }	 | r0| |	 n d	 }
 Wnm t k
 r|  j r|  j j d
 i   j d  rt j t  j d j |   d	 }
 q|  j   }
 n X|
 S(   NR  R:  t   parent_outputsR   R   RB   t   conda_v2Rz  R2   R  R  s>   Didn't match any output in raw metadata.  Target value was: {}(   R  t	   output_reR#  R   RL   RP   R  R   R   R\   t   conda_pkg_formatR  RY   R   R   RS   RT   RU   RV   (   R  t   output_namet   output_typeR  R  t   output_matchesR:  R  t   output_tuplest   output_indexR  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s&    0R+(	c         C` s%   |  j    } t t j |   } | S(   s   This 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  RI   t   numpy_xx_reRg   (   R  R  t   uses_xx(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyRc    s    c         C` sm   |  j    } t j |  } d  } | r9 t j |  } n  t |  | rf | j d  j d  d k n t f S(   Ni   t   xi   (	   R  t   numpy_compatible_reRg   R   t   numpy_compatible_x_reRI   Rk   t   countR   (   R  R  t   compatible_searcht   max_pin_search(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    	c         ` s   |  j  d  } t } xh | D]` } d | k r t j d j | d     t   f d   |  j d  D  } | r| Pq| q q Wt } | r |  j r |  j d t	  } | r t j
 d |  } q n  | p t |  S(   NR:  R   s   ^{}(\s|\Z|$)c         3` s   |  ] }   j  |  Vq d  S(   N(   R   (   R   R  (   t   name_re(    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    R   R  s   {{\s*pin_subpackage\(.*\)\s*}}(   R  RM   Rf   R  RV   R   R  R  R  R   Rg   RI   (   R  R:  t   in_reqsR  t   subpackage_pinR   (    (   R  s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    %c         C` s"   |  j    } t t j d |   S(   Ns   \{\{\s*compiler\(.*\)\s*\}\}(   R  RI   Rf   Rg   (   R  R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt"   uses_new_style_compiler_activation  s    c         C` s8   t  d   t |  j d   D  r4 t d   n  d  S(   Nc         s` s   |  ] } d  | k Vq d S(   RU  N(    (   R   Ra   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    s   build/featuressV   - is a disallowed character in features.  Please change this character in your recipe.(   R   R   R`  RY   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    %c         C` s   t  j  |   } |  j j    | _ t  j |  j j  | j _ t  j |  j  | _ t |  d |  j j d k rr d n d  | _ | S(   NR   RB   R  Rz  (   R   R\   t   deepcopyRO   R   R  R  R   (   R  t   new(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s    !c         C` s   |  j  d  S(   Ns   build/noarch(   R`  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s    c         C` sf   |  j  j d i   } | | d <| |  j  d <|  j rM | rM |  j j   n | rb d |  j _ n  d  S(   NR   R   (   R   RL   R!  R\   t   reset_platformt   host_platform(   R  Rb   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s    
c         C` s   |  j  d  S(   Ns   build/noarch_python(   R`  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR!    s    c         C` sf   |  j  j d i   } | | d <| |  j  d <|  j rM | rM |  j j   n | rb d |  j _ n  d  S(   NR   R!  R   (   R   RL   R   R\   R  R  (   R  Rb   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR!    s    
c         C` s   |  j  j } i  |  j  _ |  j d t d t d t  t |  j  } | |  j  _ x> | t | j    @D]& } t j d | |  j	    rf t Sqf Wt
 S(   NR  R  R  s   \s*\{\{\s*%s\s*(?:.*?)?\}\}(   R\   RO   R  R   R|  R  R   Rf   Rg   R  RM   (   R  RO   t   vars_in_recipeR   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   variant_in_source  s    c         C` s   |  j  d d  j   S(   Ns   build/pin_dependsR2   (   R`  R[   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR     s    c         C` sP   t  |  j j d   pO t j j |  j j  oO t t j	 |  j j   d k S(   NR   i    (
   RI   R   RL   R.   R   Rp  R\   t   work_dirRi   t   listdir(   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   source_provided  s    c         C` s  | j  d |  j    | j d d <| j j  d i   } | j  d  |  j   k sr | j  d  pn | j  d  r d | k r | d =n  d | k r | d =q n  | j j  d i   } d } xA | D]9 } | | k r | | | | <q | | k r | | =q q W| | j d <d | _ d  S(   NR   R   R7  R   R9  RD  RE  R   R  R   R2   (   R  R   R   (   RL   R   R   R  (   R  R   t   output_dictR7  R   t   transfer_keysR   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt#   reconcile_metadata_with_output_dict  s"    #*
c         C` s  | j  d  |  j   k rW |  j   } | j  d |  j j d k rH d n d  | _ n|  j   } t j | j  d i    } | j  d g   } | j  d g   } | j  d	 g   } | j  d
 g   } d   | j   D } | j  d  r | d | j _	 n  |  j   | j  d  k s7| j  d  s7| j  d  rJ|  j
 | |  n  | j  d |  j j d k rkd n d  | _ d | k r5t j d j | d   }	 | rg  | D] }
 |	 j |
  s|
 ^ q} n  | rg  | D] }
 |	 j |
  s|
 ^ q} n  | r5g  | D] }
 |	 j |
  s|
 ^ q} q5n  i  } | rW| j i | d 6 n d  | rw| j i | d 6 n d  | r| j i | d	 6 n d  | r| j i | d
 6 n d  | j |  | | j d <| j  d  p|  j   | j d d <t | _ | j  d t  | _ | j  d t  | _ | j p=| j rn|  j j | j j k rn|  j j | j _ n  | j j  d i   } d | k r| d | d <n  d | k r| d | d <n  d | k r| d r| d | d <n  d | k r| d r| d | d <n  d | k r2| d r2| d | d <n  d | k r| d } | d  k r]i  } n  d | k r| j  d | j    | d <qn  | | j d <d | k r| d | j d <n  d | k r| d | j d <n  |  j |  | S(   NR   R   RB   R  Rz  R   R   R   R   R<  c         S` s+   i  |  ]! \ } } | d k r | |  q S(   R   R   R   R<  (   R   R   R   R<  (    (   R   Rc   Rd   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys
   <dictcomp>@  s   	 t   targetR   R9  s   (?:^{}(?:\s|$|\Z))R  R   R   R!  R  R  R   R  R  R7  R8  (   RL   R   R   R\   R  R   R   R  RW   R8  R  Rf   R  RV   R   RQ   R   R   R  RM   R  R   R!  R  Rd  t   append_parent_metadata(   R  R  R   R  R[  R  R  t   constrain_reqst
   other_reqst   subpackage_patternR  R   R   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  2  s~    !9!++.    &	
	"c         C` sT   |  j  j d i   } i |  j d 6|  j   d 6|  j   d 6| d <| | j  d <d  S(   NR  R   R   R  R  (   R   RL   R   R   R  (   R  t   out_metadataR  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    c         ` s  t  j |  j j   } | j   } t |  j j  d j    t |  } |  j j j d g   } | r t | d t	  r | g n | } g  | D]( } t
 t |  t |  @ r | ^ q } | j d g   } g  | D]5   t
   f d   | D  r   | k r   ^ q } xs | D]k   | j    }	 |	 d  k	 rt |	  rt |	 d  r  d k rt j t t |	    |   <qqWt  j |  }
 |
 S(   Ni    t   zip_keyst   extend_keysc         3` s   |  ] }   | k Vq d  S(   N(    (   R   Rk   (   R   (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    R   (   R   t   list_of_dicts_to_dict_of_listsR\   R   R|  R   RO   RL   RZ   R   R   R   Ri   RP   R   R   R   R   t   dict_of_lists_to_list_of_dicts(   R  t   used_variablest   full_collapsed_variantst   reduced_collapsed_variantst   reduce_keyst   zip_key_groupsRk   t   used_zip_key_groupsR  R   R  (    (   R   s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_reduced_variant_set  s"    &"%&4&c      	   ` s  d d l  m } i  } |  j rA t |   d } | |  f g } nOt   } |  j d t  }	 |  j |	  px |  j j	 d  }
 xt
 |  j d  r |  j j	 r |
 n |  j j g D]} |  j   } | | j _ | j r|  j r| j   t j | j j  | |  | j   n  y | j d t d t  Wn t k
 r@n Xt |  } y x | D] } | j d  } | rt j |  } x d D] } t | | |  qW| | d <n  | j |   |  f |  j   t  f d    j   D  f < | t |  <| | _  _ qWWWq t k
 r@| s7  n  i  } q Xq W| sWt d   t |  } t |  t   } g  } x| j    D]x\ }   | j d  s| d d k r|   f |   j   t   f d     j   D  f <q| j d  d k r| j d i   j d	  s@t! d   | d d	 D  r| j d i   j d	 g   } | j" d d j#   j j d  g  | j d i   | d <| | d d	 <  j$ j d i     j$ d <|   j$ d d	 <n  | j% |   f  q| j% |   f  qW| rG| j&   rGt' | | d d d | d | } t( |  n  g  } x6 | j)   D]( \ }   t   _ | j% |   f  qZW| | } | S(   Ni    (   t   providet   force_globali   R   R  R  R   R   R   R   c         ` s#   i  |  ] }   j  j | |  q S(    (   R\   RO   (   R   Rc   (   R  (    s3   lib/python2.7/site-packages/conda_build/metadata.pys
   <dictcomp>  s   	s   Error: output metadata set is empty.  Please file an issue on the conda-build tracker at https://github.com/conda/conda-build/issuesR   Rz  R  c         ` s#   i  |  ] }   j  j | |  q S(    (   R\   RO   (   R   Rc   (   Rm   (    s3   lib/python2.7/site-packages/conda_build/metadata.pys
   <dictcomp>  s   	t   wheelc         s` s   |  ] } d  | k Vq d S(   t   pipN(    (   R   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    R  s	   python {}R#   R  R  (   R   R   R   (   Rz  R  (*   t   conda_build.sourceR  R  R  R   t   get_used_loop_varsR   R  R\   R   RP   RO   R   Ro  R  R  R   t   rm_rfR  R  t
   SystemExitRL   R  R   R  R   R   R  R  R  R  R   RW   R   R   RV   R   R   R+  R  R   R   (   R  R  R  R  R  t   out_metadata_mapR:  R  t   all_output_metadataR  t   top_loopRO   t   ref_metadataR  R   Rb  R   t   conda_packagest   non_conda_packagesR  R[  t   final_conda_packagesR  (    (   Rm   R  s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_output_metadata_set  s    		:

	8
	 ;&		
c         C` s=   t  |  j d  r |  j j n	 |  j j } t j | d t S(   Nt   input_variantst	   loop_only(   RP   R\   R  R   t   get_varsR   (   R  t	   _variants(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_loop_vars  s    c         ` s&     f d     j  d | d |  D S(   Nc         ` s(   h  |  ] } |   j    k r |  q S(    (   R  (   R   t   var(   R  (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <setcomp>  s   	 R  R  (   R  (   R  R  R  (    (   R  s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    c         C` sI   |  j  d | d t  j   } t j |  j d | d | d t   pH i  S(   NR  R  R  RZ  RG  (   R  R   R   R   t	   safe_loadR  RM   (   R  R  R  RZ  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_rendered_recipe_text  s
    c         C` s   d } d j  |  j d | d t  |  j   f  j   } t j |  j d | d | d t d | d	 |   po i  j	 d
 g   } t
 |  d
 | S(   Ns   (.*)package:s   
R  R  R  RZ  RG  R  RO   R:  (   R   R  R   R  R   R   R  R  RM   RL   R  (   R  R  RO   R  RZ  R:  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_rendered_outputs_section"  s    c         C` sL   d } x? |  j d | d |  D]% } | j d  | k r | } Pq q W| S(   s1  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.R  RO   R   N(   R   R  RL   (   R  R   R  RO   R  t   output_(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  2  s    c         C` s   t  |  j d   S(   Ns   build/force_ignore_keys(   R   R`  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR3  ?  s    c         C` s   t  |  j d   S(   Ns   build/force_use_keys(   R   R`  (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR2  C  s    c      	   ` s    j  } t   j d  r*   j j } ns  j   | | |   j j t   j j  f t k r t   j   | | |   j j t   j j  f } n  j	 d | d |  } d   j
   k } | r   j   } n   j   } | | B} d   j j k r4t   f d     j   d D  r4| j d  n    j sF  j ri| t   j  t   j  B} n  | t   j   | | |   j j t   j j  f <| S(   Nt	   used_varsR  R  s   package:R  c         3` s!   |  ] } |   j  j k Vq d  S(   N(   R\   R4  (   R   R]   (   R  (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>_  s    (   R   RP   R\   R  R   R4  R   RO   t   used_vars_cachet   _get_used_vars_meta_yamlR  t   _get_used_vars_output_scriptt   _get_used_vars_build_scriptsR   t   get_variants_as_dict_of_listsR}  R2  R3  R|  (   R  R  R  t
   recipe_dirR  t   meta_yaml_reqsR  t   script_reqs(    (   R  s3   lib/python2.7/site-packages/conda_build/metadata.pyR  G  s.    		
#4c         C` s  | r' |  j  d | d |  } | } n |  j rd | rd |  j |  j   t |  d d   d | } n^ |  j  d | d |  j |  j d |  j   d  |  j |  j   t |  d d   d | } t	 j
 d d t	 j t	 j B} | j |  } | r| j   n d } | | f S(   NR  R  R   R2   s/   requirements:.+?(?=^\w|\Z|^\s+-\s(?=name|type))R%   (   R  R  R  R   R  R   Rr   R  t   stripRf   R  t   Mt   SRg   Rk   (   R  R  R  R  R  t	   reqs_textt   reqs_re(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   _get_used_vars_meta_yaml_helperj  s$    		!		!
c         C` s   t  t |  j j j     } |  j d | d | d t  \ } } t j | | d t	 } |  j d | d | d t	  \ } } t j | | d t } | j
 |  } | r | }	 n5 t j | |  }
 | |
 } t |  |
  }
 | |
 B}	 |	 S(   NR  R  R  t	   selectors(   R   R;  R\   RO   R   R  RM   R   t   find_used_variables_in_textR   t   unionR  (   R  R  R  t   variant_keysR  R  t   all_used_selectorst   all_used_reqst   all_usedt   usedR  t   outside_reqs_used(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s"    					

c         C` s   t    } t j j |  j d  } t j j |  rU | j t j |  j j	 |   n  t j j |  j d  } |  j j
 d k r t j j |  r | j t j |  j j	 |   n  | S(   Ns   build.shs   bld.batR,   (   R|  R.   R   R   R   RQ   R   t#   find_used_variables_in_shell_scriptR\   RO   R  t#   find_used_variables_in_batch_script(   R  R  t   buildsht   bldbat(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    	$c         C` s   |  j  |  j   d t p i  } t   } d | k r t j j |  j | d  } t j j |  d d k r | j t	 j
 |  j j |   q t j j |  d d k r | j t	 j |  j j |   q t j t  } | j d j |   n  | S(   NR  R   i   s   .shs   .batst   Not detecting used variables in output script {}; conda-build only knows how to search .sh and .bat files right now.(   R  R   R   R|  R.   R   R   t   splitextRQ   R   R  R\   RO   R  R   RS   RT   RU   RV   (   R  t   this_outputR  R   Ry   (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    	c         C` s   t  j |  j j   S(   N(   R   R  R\   (   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    c         C` s   |  j  j   d S(   s;   This ensures that clean is called with the correct build idN(   R\   t   clean(   R  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    c         C` sb   |  j  j d i   p i  } |  j p6 | j d  t k	 } t |  j j oK |  oa |  j   d k S(   NR   t   activate_in_scriptRz  (   R   RL   R  RM   RI   R\   t   activateR   (   R  t   bt   should_activate(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   activate_build_script  s    c         C` s   |  j  j d i   j d  t k p- |  j j } |  j  j d i   j d  t k } | p |  j j o | o d |  j  j d i   k o |  j S(   NR   R4  R   R   (   R   RL   R   R\   t   build_is_hostRM   t   subdirs_sameR  (   R  t   manual_overridest   manually_disabled(    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR    s    0$c         C` s   |  j  d t  j |  j   d  } i  } |  j j d i   j d i   } |  j r^ | d n d  } | r t j	 |  j
 t d | d |  } n  | p i  S(   NR  R2   R  R  R   RZ  R[  (   R  R   Rr   R  R   RL   R  R   R   R  R  RM   (   R  t   recipe_no_outputst   top_no_outputsR  R[  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt$   get_top_level_recipe_without_outputs  s    !c         C` s   d |  j    |  j   |  j   f g } | j d   |  j d  D  | t j |  j d g    7} | r} | d g 7} n  | r | d g 7} n  | r | d g 7} n  | r t d   | D  r | d	 g 7} n  | j t j |  j	 j
   | S(
   Ns   %s %s %sc         s` s   |  ] } | j  Vq d  S(   N(   R\  (   R   Rg  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    R   s   test/requiresR#   R?   RA   c         s` s%   |  ] } | j    d  d k Vq d S(   i    s   r-bases   mro-baseN(   s   r-bases   mro-base(   R1   (   R   RW  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pys	   <genexpr>  s    s   r-base(   R   R  R   R   Rb  R   R   R`  R   R\   t
   extra_deps(   R  t   py_filest   pl_filest	   lua_filest   r_filesR
  (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   get_test_deps  s    ( N(_   RT   t
   __module__R   R  t   propertyRa  R  t   setterR  RM   R  R  R  R  R  R  t   classmethodR  R  R  R   R`  R  R   R  Rd  R  Rb  R  R!  R   R+  R,  R-  R2  R=  R"  R$  R*  R@  R  R,  R#  R+  R  Rg  Rh  Ri  R  Rk  Rm  Ro  Rq  Rn  R}  R  R  R  R  R"  R  Rc  R  R  R  R  R   R   R!  R  R   R  R  R  R  R  R  R  R  R  R  R  R3  R2  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyR  E  s   7			 		;	
					,	-		 					3	
		
				
		Z									

		V		h	#					(   R   R   R   (   R   R:  (p   t
   __future__R    R   R   t   collectionsR   t
   contextlibR   R  R  R.   t   os.pathR   R   Rf   R   R<  t   bs4R   R{  R   R   R	   R
   R   R   R   R   RD  R   R   R   R   t   conda_build.conda_interfaceR   t   conda_build.featuresR   t   conda_build.configR   R   t   conda_build.utilsR   R   R   R   R   R   t   conda_build.license_familyR   R   R   R   t   CLoaderR   R   R  R?  R:  R   R   R  R  R  R  R  R  R  R  Re   R   Rn   Rs   R   R   R   R   R   R   R   R   R   R   R   R  R  R   RI   RG   R  R   R   R   R   R   RZ  R]  Ro  Ru  Rx  R  R  RM   R  R  R  R  R  R  t   contextmanagerR   t   objectR  (    (    (    s3   lib/python2.7/site-packages/conda_build/metadata.pyt   <module>   s@  ".

		R			 							
		%	
	
							
				2			.=	
			"