ó
@K7]c        	   @` sþ  d  d l  m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l	 Z	 d  d l
 Z
 d  d l m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d d l m Z m Z m Z m Z d d l m Z 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% d  d l& m' Z' m( Z( d  d l) j* Z* d  d l+ m, Z, m- Z- m. Z. d  d l/ m0 Z0 d  d l1 m2 Z2 y d  d l3 m4 Z4 Wn* e5 k
 rd  d l3 m6 Z6 e6 f Z4 n Xd „  Z7 e j8 e9 e j: j; j< ƒ e j8 e= e j: j; j< ƒ e j8 e e7 ƒ d „  Z> d „  Z? d „  Z@ d eB eC d „ ZD d „  ZE d „  ZF d „  ZG eB d „ ZH e! d „  ƒ ZI d eB d „ ZJ d „  ZK d  „  ZL d! „  ZM d" „  ZN d eB d# „ ZO eB d$ „ ZP d% „  ZQ eB eB eB d& „ ZR d' „  ZS eB d eC eC eB d( „ ZT d) d* d+ d, d- d. d/ d0 d1 g	 ZU d2 eV f d3 „  ƒ  YZW d4 „  ZX d5 „  ZY d6 e jZ f d7 „  ƒ  YZ[ e j8 eW eX ƒ e rÛe j8 e\ eY ƒ d Z] n e j8 e] eY ƒ d eB d8 „ Z^ d S(9   i    (   t   absolute_importt   divisiont   print_function(   t   OrderedDictt   defaultdict(   t   getpreferredencodingN(   t   isdirt   isfilet   abspathi   (   t   PY3t   UnsatisfiableErrort   ProgressiveFetchExtractt   TemporaryDirectory(   t   execute_actions(   t	   pkgs_dirs(   t   conda_43(   t   specs_from_url(   t   memoized(   t
   exceptionst   utilst   environ(   t   MetaDatat&   combine_top_level_metadata_with_output(   t   get_package_variantst   list_of_dicts_to_dict_of_listst   filter_by_key_value(   t   DependencyNeedsBuildingError(   t   get_build_index(   t   CONDA_TARBALL_EXTENSIONS(   t   CONDA_TARBALL_EXTENSIONc         C` s   |  j  | j ƒ  ƒ S(   N(   t   represent_dictt   items(   t   dumpert   data(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   odict_representer1   s    c         C` s  |  j  s |  j r d n	 |  j j } t |  d ƒ sW |  j j d k rN d } q` d } n	 |  j } | d k r¡ t j j	 |  j j
 | d |  j ƒ  t d f ƒ } np | d k rÞ t j j	 |  j j
 | d |  j ƒ  d f ƒ } n3 d	 j |  j |  j ƒ  t j j	 |  j j
 | ƒ ƒ } | S(
   sI   
    Returns path to built package's tarball given its ``Metadata``.
    t   noarcht   typet   2t   conda_v2t   condas   %s%si    s   .condas   {} file for {} in: {}(   R#   t   noarch_pythont   configt   host_subdirt   hasattrt   conda_pkg_formatR$   t   ost   patht   joint   output_foldert   distR   t   formatt   name(   t   mt   subdirt   pkg_typeR.   (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   bldpkg_path:   s    $			513c         C` sv   g  } t  r d „  } n	 d „  } d |  k rr g  |  d D]1 } d j | | ƒ j ƒ  d j d d ƒ ƒ ^ q8 } n  | S(   Nc         S` s   |  j  S(   N(   t	   dist_name(   t   x(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   <lambda>U   t    c         S` s
   t  |  ƒ S(   N(   t   str(   R9   (    (    s1   lib/python2.7/site-packages/conda_build/render.pyR:   W   R;   t   LINKt    i    t   -i   (   R   R/   t   splitt   rsplit(   t   actionst   specst	   spec_namet   spec(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   actions_to_pinsR   s    	Ec         C` s{  g  } g  } g  } t  j d ƒ } xJ| D]B} | sE | j | ƒ rKt }	 | j ƒ  d }
 x] |  j d ƒ D]L } | j d ƒ } | |
 k rk | j d j | |  j	 ƒ  f ƒ ƒ t
 }	 qk qk W|	 sÑ | j | ƒ n  x– | j ƒ  D]f \ } } | j d | ƒ | j d |
 ƒ k rÞ t  j d |
 | ƒ rÞ | j d j |
 | f ƒ ƒ qÞ qÞ Wq( | j | ƒ r( | j | ƒ q( q( W| | | f S(   Ns   [-_]i    t   outputsR3   R>   R;   s   %s\s+[0-9a-zA-Z\_\.\<\>\=\*](   t   ret   compilet   matcht   FalseR@   t   get_sectiont   gett   appendR/   t   versiont   TrueR   t   subt   search(   R4   RC   t   exclude_patternt   variantt   subpackagest   dependenciest   pass_through_depst   dash_or_underRE   t   is_subpackageRD   t   entryR3   t   keyt   value(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   _categorize_deps]   s,    "$&c         C` sT  |  j  | ƒ } | d k r g  } xb | D]Z } d | k ru | j ƒ  d }	 | j d j |	 | j |	 d ƒ f ƒ ƒ q( | j | ƒ q( W| } n  t |  | | | ƒ \ }
 } } t | ƒ } d  } d j d „  t d ƒ Dƒ ƒ } t	 d	 d
 d | ƒ } y² t
 j | t | ƒ | d t |  j d j | ƒ ƒ d |  j j d |  j j d |  j j d t |  j j ƒ d |  j j d |  j j d |  j j d |  j j d t |  j j ƒ ƒ
} WnX t t f k
 r} t | d ƒ räd j | j ƒ } n	 | j } | rüi  } q‚  n XWd  QXt | ƒ } t j  | |
 | pG|  j! j d i  ƒ j | g  ƒ ƒ | | f S(   Nt   buildt   hosts    x.xi    R>   R;   c         s` s(   |  ] } t  j t j t j ƒ Vq d  S(   N(   t   randomt   choicet   stringt   ascii_uppercaset   digits(   t   .0t   _(    (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>Œ   s   i
   t   prefixRf   t   suffixR5   s	   {}_subdirt   debugt   verboset   lockingt   bldpkgs_dirst   timeoutt   disable_pipt   max_env_retryR0   t   channel_urlst   packagess   , t   requirements(   R^   R_   ("   t   get_depends_top_and_outR@   RN   R/   RM   R]   t   sett   Nonet   rangeR   R   t   get_install_actionst   tuplet   getattrR)   R2   Ri   Rj   Rk   Rl   Rm   Rn   Ro   R0   Rp   R
   R   R+   Rq   t   messageRF   R   t   ensure_listt   meta(   R4   t   envRT   RS   t   permit_unsatisfiable_variantst!   merge_build_host_on_same_platformRC   t   no_xx_specsRE   t   pkg_nameRU   RV   RW   t   unsatt   random_stringt   tmpdirRB   t   e(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   get_env_dependenciesy   sL    +			!c         C` sD   t  |  d ƒ r |  j ƒ  }  n  d |  k r@ |  j d ƒ d }  n  |  S(   Nt   decodet   :s   ::iÿÿÿÿ(   R+   R‡   R@   (   t   spec_str(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   strip_channel¬   s
    c   	      C` sš  | j  ƒ  } | d } d } t | ƒ d k r; | d } n  d  } | j | ƒ pb |  j j j | ƒ } | r| |  j j j d i  ƒ k r| d k o¤ |  j p¤ |  j r| | k r|  j j d | } t | t	 ƒ rï t
 d | d | ƒ } n  t j | j  ƒ  d |  } na | j d	 ƒ rod
 | k ro| j | ƒ sGt d ƒ ‚ n  t j | j  ƒ  d d d
 d d
 ƒ} n  | r–d j | | | f ƒ j ƒ  } n  | S(   Ni    R;   i   i   t   pin_run_as_buildt   pythont   min_pint   max_pint   numpys   x.xs9   numpy x.x specified, but numpy not in build requirements.R>   (   R@   t   lenRu   RM   R)   RT   R#   R(   t
   isinstanceR<   t   dictR   t   apply_pin_expressionst
   startswitht
   ValueErrorR/   t   strip(	   R4   t   dept   build_dep_versionst	   dep_splitt   dep_nameR^   t   pinRO   t   pin_cfg(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   get_pin_from_build´   s*    
$$(!c         ` s’   i  } x… |  j  ƒ  D]w \ } } xh | D]` ‰  t ˆ  d ƒ rJ ˆ  j ƒ  ‰  n  t ‡  f d †  | Dƒ ƒ s& | j | g  ƒ ˆ  g | | <q& q& Wq W| S(   NR‡   c         3` s:   |  ]0 } | d  k p1 ˆ  | k p1 ˆ  j  | d ƒ Vq d S(   t   *R>   N(   R”   (   Re   t   ignore_spec(   RE   (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>Ó   s   (   R   R+   R‡   t   anyRM   (   RC   t   ignore_listt   filtered_specst   agentt
   specs_list(    (   RE   s1   lib/python2.7/site-packages/conda_build/render.pyt   _filter_run_exportsÍ   s    (c      
   C` sl  t  t | j j ƒ } d  } xI| D]A} t j j | |  ƒ } t j j | |  t d ƒ } | r~ t j j	 | ƒ r~ | } Pq# t j j
 | ƒ rš | } Pq# | r# t j j	 | ƒ r# | } t j | d ƒ C } x9 t j | ƒ D]( }	 | j t j j | |	 ƒ d |	 ƒqÝ WWd  QXt j j | j j | j j ƒ }
 t j j |
 t j j | ƒ ƒ } t j | | ƒ q# q# W| S(   Ni    s   w:bz2t   arcname(   R   t   listR)   Rl   Ru   R-   R.   R/   R   R   R   t   tarfilet   opent   listdirt   addt   crootR*   t   basenamet   shutilt   move(   t   pkg_distR4   t
   files_onlyt
   _pkgs_dirst   pkg_loct   pkgs_dirt   pkg_dirt   pkg_filet   archiveRZ   t
   pkg_subdir(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt!   find_pkg_dir_or_file_in_pkgs_dirsÙ   s(    ,!!c   
      C` st  i  } |  rt  j j |  ƒ rt  j j |  d ƒ } t  j j | ƒ r‰ t | ƒ 3 } i g  | j ƒ  D] } | j ƒ  ^ qd d 6} Wd  QXqt  j j | d ƒ rÊ t | d ƒ  } t j	 | ƒ } Wd  QXqt  j j | d ƒ rt | d ƒ  } t
 j | ƒ } Wd  QXqn  | rp|  rpt  j j |  ƒ rpt j |  d ƒ } t j |  d ƒ } t | d ƒ rr| j d ƒ } n  | rŠt
 j | ƒ } qp| r¢t j	 | ƒ } qpt j |  d ƒ } | rpt ƒ  }	 t | d ƒ rä| j d ƒ } n  xj | j ƒ  D]\ } t | d ƒ r| j d ƒ } n  | j | j d	 d
 ƒ d ƒ sñ|	 j | j ƒ  ƒ qñqñWi t t |	 ƒ ƒ d 6} qpn  | S(   Ns   info/run_exportst   weaks   .yamls   .jsons   info/run_exports.yamls   info/run_exports.jsonR‡   s   utf-8R?   i   i    (   R-   R.   R   R/   R   R©   t	   readlinest   rstript   yamlt	   safe_loadt   jsont   loadR   t   package_has_fileR+   R‡   t   loadsRt   t
   splitlinesR”   RA   R«   t   sortedR§   (
   R³   R°   RC   t   downstream_filet   fRE   t
   specs_yamlt
   specs_jsont   legacy_specst
   weak_specs(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   _read_specs_from_packageñ   sB    5	c         C` sã  t  t |  j d j | ƒ ƒ d |  j j d |  j j d |  j j d |  j j d |  j j d |  j j	 d |  j j
 ƒ\ } } } d	 „  | j ƒ  Dƒ } d
 | k s¬ d | k rÈ t | | d |  j j ƒn  i  } | j d g  ƒ }	 t j | ƒ } t ƒ  }
 | r‡x} | D]u } t | d ƒ r9| |	 k rz|
 j | ƒ qzq| j ƒ  d } x. |	 D]& } | | j k rP|
 j | ƒ PqPqPWqW|
 }	 n  xU|	 D]M} t | d ƒ r¯| j } n t | ƒ } | j d ƒ d } t | |  d | ƒ} | rËt rËyF g  | D] } | j | k rú| ^ qúd } t d | | f ƒ } Wn) t k
 rat d | g d | ƒ } n Xt j ƒ   | j ƒ  Wd  QXxI t D]> } t j j  | | | j! ƒ } t j j" | ƒ r†| } Pq†q†Wn  | | f | | <qŽW| S(   Ns	   {}_subdirt   bldpkgs_dirR0   Rp   Ri   Rj   Rk   Rm   c         S` s+   i  |  ]! \ } } | d k r | | “ q S(   t   FETCHt   EXTRACTt   PREFIX(   RÍ   RÎ   RÏ   (    (   Re   t   kt   v(    (    s1   lib/python2.7/site-packages/conda_build/render.pys
   <dictcomp>#  s   	 RÍ   RÎ   R=   R3   i    R8   R>   R±   t
   link_prefst
   link_distst   index(#   R   Ry   R)   R2   RÌ   R0   Rp   Ri   Rj   Rk   Rm   R   R   RM   R   R{   Rt   R+   R«   R@   R3   R8   RŠ   R¹   R   R   t	   TypeErrort   LoggingContextt   executeR   R-   R.   R/   t   fnR   (   R4   RB   R}   t   package_subsett   require_filesRÔ   Rf   t   download_actionst	   pkg_filesRq   t   selected_packagest   pkgR   t   link_pkgR°   R³   t
   pkg_recordt   pfeRµ   t   _loc(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   execute_download_actions  sV    *$		,c         C` s  |  j  j d i  ƒ j | g  ƒ } | rM g  | D] } | j d ƒ d ^ q. n g  } | j d g  ƒ } g  | D] } | j | k rl | ^ ql } t j |  j d ƒ ƒ } i  }	 xë | D]ã } d
 }
 |  j j	 r(t j
 | j ƒ } d | k r(| d j | j i  ƒ } | j d i  ƒ j | j i  ƒ }
 q(n  |
 d
 k rkt |  | d | d	 | ƒ| \ } } t | | ƒ }
 n  t |
 | ƒ } | r² t j |	 | ƒ }	 q² q² W|	 S(   s’   Download packages from specs, then inspect each downloaded package for additional
    downstream dependency specs.  Return these additional specs.Rr   R>   i    R=   s   build/ignore_run_exportsRq   t   run_exportsR}   RÙ   N(   R|   RM   R@   R3   R   R{   t	   get_valueRu   R)   t   use_channeldatat   download_channeldatat   channelRO   Rã   RË   R¥   t   merge_dicts_of_lists(   R4   RB   R}   t	   env_specst   reqt   explicit_specst   linked_packagesRÞ   R¡   t   additional_specsRä   t   channeldatat   pkg_datat   locR1   RC   (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   get_upstream_pinsZ  s(    !2('%c         C` sv   t  |  | |  j j | d | ƒ\ } } } t |  | | ƒ } t t | ƒ ƒ pl |  j j d i  ƒ j | g  ƒ | | f S(   NR~   Rr   (   R†   R)   RT   Rò   R§   Rt   R|   RM   (   R4   R}   R~   RS   t   depsRB   R‚   t   extra_run_specs(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   _read_upstream_pin_filesw  s
    c         C` s…  |  j  j d i  ƒ } t |  d | | ƒ \ } } } |  j ryt j |  j d ƒ ƒ } |  j  j d i  ƒ } | | d <| sg  |  j  j d g  ƒ D]' } | j d ƒ |  j ƒ  k r | ^ q }	 |	 rt j	 |	 d j d i  ƒ ƒ } | |	 d d <| j d g  ƒ } qn  | j
 | j d g  ƒ ƒ t |  d | | ƒ \ }
 } } t | j d g  ƒ | j d	 g  ƒ | j d g  ƒ ƒ } nˆ g  }
 g  } t | j d g  ƒ ƒ } |  j ré| j | j d	 g  ƒ ƒ t | pËg  ƒ j | j d	 g  ƒ ƒ } n t | j d g  ƒ ƒ }
 | t t j | j d
 ƒ ƒ ƒ B} xH d | f d |
 f d
 | f f D]% \ } } | rEt | ƒ | | <qEqEW| |  j  d <| | f S(   s@   Applies run_exports from any build deps to host and run sectionsRr   R^   s   requirements/hostR_   RG   R3   i    t   strongRº   t   run(   R|   RM   Rõ   t   is_crossR   R{   Rå   t
   setdefaultR3   t   expand_reqst   extendRt   t   build_is_hostt   updateR§   (   R4   R~   RS   Rr   t
   build_depst   build_unsatt   extra_run_specs_from_buildt	   host_reqst   outt   matching_outputt	   host_depst
   host_unsatt   extra_run_specs_from_hostRô   t   run_depst   sectionRó   (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   add_upstream_pins  sB    		
'		*".c   
      ` s)  |  j  j d i  ƒ } x d D]ø} t j | j | g  ƒ ƒ } t t ƒ } xh | D]` } t j | ƒ j ƒ  } | d ‰ t | ƒ d k rŸ | ˆ j	 | d ƒ qP | ˆ j	 g  ƒ qP Wg  } x8| j
 ƒ  D]*\ ‰ } g  ‰  xk | D]c } t | ƒ d k rà | d  \ ‰ }	 t ‡ f d †  d Dƒ ƒ p-d |	 k sCˆ  j	 | ƒ qCqà qà Wt | ƒ d k rvt | ƒ rv| j	 ˆ ƒ qÇ ˆ  rÔt ‡  f d †  ˆ  Dƒ ƒ s°t d j ˆ  ƒ ƒ ‚ qñ| j	 d j ˆ g ˆ  d ƒ ƒ qÇ | j ‡ f d †  | Dƒ ƒ qÇ W| | k r | r | | | <q q W| |  j  d <d S(   sr   
    For metapackages that are pinned exactly, we want to bypass all dependencies that may
    be less exact.
    Rr   R^   R_   R÷   i    i   i   c         3` s   |  ] } | ˆ  k Vq d  S(   N(    (   Re   t   c(   RO   (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>Ì  s    t   >t   <Rž   c         3` s   |  ] } | ˆ  d  k Vq d S(   i    N(    (   Re   R›   (   t
   exact_pins(    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>Ñ  s    s   Conflicting exact pins: {}R>   c         3` s+   |  ]! } | r d  j  ˆ  g | ƒ Vq d S(   R>   N(   R/   (   Re   R—   (   R3   (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>Ö  s    N(   R^   R_   R÷   (   R  R  Rž   (   R|   RM   R   R{   R   R§   t   ensure_valid_specR@   R   RN   R   R    t   allR•   R2   R/   Rû   (
   t   metadataRr   R  Ró   t	   deps_dictR—   t
   spec_partst	   deps_listt   valuesR^   (    (   R  R3   RO   s1   lib/python2.7/site-packages/conda_build/render.pyt   _simplify_to_exact_constraints´  s8    
($!c         ` s¼  | s ˆ } n  ˆ j  ƒ  r' t ˆ _ n‚d$ } t ˆ j j j d g  ƒ ƒ } xB ˆ j j j d i  ƒ j ƒ  D]" } | | k rj | j	 | ƒ qj qj Wt ƒ  } t
 ˆ d ƒ rÊ t d „  ˆ j j ƒ  Dƒ ƒ } n  | sÖ | rÿ t j d j d „  | | BDƒ ƒ ƒ } n  ˆ j j d i  ƒ j d i  ƒ } | j ˆ j ƒ  d	 ˆ j j ƒ} t }	 | rÙd
 | k sed | k r{i ˆ j ƒ  d 6} n t }	 | sž| d ˆ j ƒ  k r®t ˆ | ƒ n  t j | j d i  ƒ ƒ }
 |
 ˆ j d <n  ˆ j j d ƒ r.t j ˆ j d ˆ j j d ƒ t j ˆ j d ˆ j j d ƒ n  | j ˆ j ˆ j ƒ  ƒ ƒ ‰ t ˆ | | ƒ \ } } ˆ j j d i  ƒ }
 | r¤t j d j d „  | Dƒ ƒ ƒ } n  ˆ j r³d n d } |
 j | g  ƒ } | rd | k r| j d j ˆ j j d ƒ ƒ | ˆ j d | <n  t ˆ | ˆ j j d | d | ƒ\ } } } d „  | Dƒ ‰  t ˆ j ƒ rƒ|
 j d ƒ rƒt ˆ j ƒ |
 d <n  |
 j d g  ƒ } g  | D] } t  ˆ | ˆ  ƒ ^ qœ} g  | D] } t j! | d t ƒ^ qÁ} | |
 | <| |
 d <|
 ˆ j d <ˆ j" ƒ  ˆ j# d k r<t$ j% ˆ d ƒ ˆ j d d <n  ˆ j& d ƒ } | r¬t' ‡  ‡ f d †  | Dƒ ƒ } g  | D] } t j! | d t ƒ^ qw} | ˆ j d d <n  ˆ j j d i  ƒ } ˆ j j( | d <| ˆ j d <ˆ j j d ƒ ród ˆ j d k róˆ j d d } t) j* j+ | ƒ t) j* j, | ƒ sht) j* j- t) j* j ˆ j* | ƒ ƒ ˆ j d d <qðd ˆ j d k rðt) j* j, ˆ j d d ƒ p¬d  ˆ j d d k rðt) j* j- t) j* j ˆ j* ˆ j d d ƒ ƒ ˆ j d d <qðqón  ˆ j j d ƒ si  ˆ j d <n  t. ˆ ƒ | s+| r t ˆ _ t j/ t0 ƒ } | j1 d! j ˆ j2 ƒ  ƒ ƒ | r~| j1 d" j | ƒ ƒ n  | r©| j1 d# j | ƒ ƒ q©n	 t ˆ _ |	 r¸ˆ } n  ˆ S(%   sE   Fully render a recipe.  Fill in versions for build/host dependencies.t   ignore_versionR‹   t   other_outputsc         s` s   |  ] \ } } | Vq d  S(   N(    (   Re   R3   RT   (    (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>ì  s    t   |c         s` s   |  ] } d  j  | ƒ Vq d S(   s   (?:^{}(?:\s|$|\Z))N(   R2   (   Re   t   exc(    (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>ï  s   t   extrat   parent_recipeRT   t   packageR3   Rr   R^   R_   c         s` s   |  ] } d  j  | ƒ Vq d S(   s   (?:^{}(?:\s|$|\Z))N(   R2   (   Re   R  (    (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>  s   RŒ   s	   python {}RS   R~   c         S` s6   i  |  ], } d  j  | j ƒ  d ƒ | j ƒ  d “ q S(   R>   i   i    (   R/   R@   (   Re   R—   (    (    s1   lib/python2.7/site-packages/conda_build/render.pys
   <dictcomp>'  s   	R÷   t   warnt   stricts   test/requiresc         ` s"   h  |  ] } t  ˆ | ˆ  ƒ ’ q S(    (   R   (   Re   R—   (   t   full_build_dep_versionsR4   (    s1   lib/python2.7/site-packages/conda_build/render.pys	   <setcomp>?  s   	t   testt   requirest   copy_test_source_filest   sourceR.   t   git_urlRˆ   sN   Returning non-final recipe for {}; one or more dependencies was unsatisfiable:s	   Build: {}s   Host: {}N(3   t   skipRP   t   finalRu   Rt   R)   RT   RM   t   keyst   removeR+   R  RH   RI   R/   R|   t   get_rendered_outputR3   RK   R   R   Rú   t   insert_variant_versionst   get_output_metadataR	  Rø   RN   R2   R†   R   t   requirements_pathR   R   R  t   append_requirementst   pin_dependsR   t   get_pinned_depsRå   R§   R"  R-   R.   t
   expandusert   isabst   normpathR  t
   get_loggert   __name__R  R1   (   R4   t   parent_metadataR~   RS   t   excludesR[   t   output_excludesR  t   outputt   is_top_levelRr   Rÿ   R  t   pinning_envt
   build_reqst   full_build_depsRf   R  R—   t   versioned_run_depsRE   t	   test_depst   versioned_test_depsR  t   source_patht   log(    (   R  R4   s1   lib/python2.7/site-packages/conda_build/render.pyt   finalize_metadataÜ  sÌ    	%	"!! 	
"%


%	)	:
			c         C` s–   |  j  r\ | r\ y t j |  ƒ Wq\ t j k
 rX } t d ƒ t d ƒ t | ƒ q\ Xn  |  j  s’ | rz t d ƒ ‚ q’ | r’ t d ƒ ‚ q’ n  d  S(   Nsg   Warning: failed to download source.  If building, will try again after downloading recipe dependencies.s   Error was: s   no_download_source specified, but can't fully render recipe without downloading source.  Please fix the recipe, or don't use no_download_source.sB   Failed to download or patch source. Please see build log for info.(   t   source_providedR#  t   providet
   subprocesst   CalledProcessErrort   printR•   t   RuntimeError(   R  t   no_download_sourcet   raise_errort   error(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   try_downloado  s    

	c         C` s    t  |  _ t j j d |  j j ƒ t j j d |  j j ƒ d j |  j j	 d j
 d ƒ d  ƒ } t j j d t j |  j j | ƒ ƒ |  j ƒ  t |  ƒ }  |  S(   sc   Some things need to be parsed again after the build environment has been created
    and activated.i    t   .RŒ   i   (   RK   R&  t   sysR.   t   insertR)   t   build_prefixt   host_prefixR/   RT   R@   R   t   get_site_packagest   parse_until_resolvedRB  (   R  t   py_ver(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   reparse„  s    	&%
c         ` sW  i  } t  } |  j s |  j r> t | d | d d d ƒ } n  | |  j _ | |  j _ |  j ƒ  } |  j ƒ  } | | }	 t	 rœ t
 |	 d ƒ rœ |	 j ƒ  }	 n% t	 rÁ t
 |	 d ƒ rÁ |	 j ƒ  }	 n  | d |  j _ |  j d t ƒ }
 |  j |
 ƒ } xR| D]J} |  j ƒ  ‰  | ˆ  j _ | j d i  ƒ } ˆ  j rYd | k rYi d	 d
 6d	 d 6| d <n  i  } x |
 D] } | | | | <qfWxG | j ƒ  D]9 \ } } t ˆ  j j | | d ƒ p»ˆ  j j ˆ  j _ q‹W| j d i  ƒ } ˆ  j r
d | k r
i d	 d
 6d	 d 6| d <n  g  } x+ ˆ  j j D] } | | d <| j | ƒ qW| ˆ  j _ t ˆ  j j ƒ ˆ  j _ ˆ  j r«ˆ  j r«ˆ  j ƒ  t j ˆ  j j ƒ t j ˆ  ƒ ˆ  j ƒ  n  y ˆ  j  d | d | ƒ Wn t! k
 rØn Xˆ  j pêˆ  j" } ˆ  | d  f | ˆ  j$ ƒ  ˆ  j j j d ˆ  j j% ƒ t& ‡  f d †  ˆ  j' ƒ  Dƒ ƒ f <qù Wt( | j) ƒ  ƒ S(   NRŒ   i    t   noarch_reductionR‡   t   encodet   force_globalR‹   R   s   x.xR   RŽ   t   distribute_variants_reductiont   allow_no_other_outputst   bypass_env_checkt   target_platformc         3` s*   |  ]  } | ˆ  j  j j | ƒ f Vq d  S(   N(   R)   RT   RM   (   Re   t   var(   t   mv(    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>Ü  s   (*   RP   R#   R(   R   R)   t   variantst   input_variantst   extract_requirements_textt   extract_package_and_build_textR	   R+   R‡   RW  RT   t   get_used_loop_varsRK   t   get_reduced_variant_sett   copyRM   t   numpy_xxR   RN   R   t   squished_variantst   needs_source_for_rendert   variant_in_sourcet   parse_againR   t   rm_rft   work_dirR#  RD  RS  t
   SystemExitRC  Ru   R1   R5   Rx   t   get_used_varsR§   R  (   R  R_  R~   RZ  R[  t   rendered_metadatat   need_source_downloadt   recipe_requirementst   recipe_package_and_build_textt   recipe_textt   used_variablest   top_loopRT   R‹   t   conform_dictR[   R  t   numpy_pinned_variantst   _variant(    (   R^  s1   lib/python2.7/site-packages/conda_build/render.pyt   distribute_variants‘  sh    
	

Zc         C` sr   t  ƒ  } xV |  D]N \ } } } x< | j ƒ  j d t ƒ D]" \ } } | | f | | j ƒ  <q8 Wq Wt | j ƒ  ƒ S(   sV   Obtain all metadata objects for all outputs from recipe.  Useful for outputting paths.R~   (   R   Re  t   get_output_metadata_setRK   R1   R§   R  (   t   metadata_tuplest   expanded_outputst   _mt   downloadRU  t   output_dictR4   (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   expand_outputså  s
    	%c      	   C` sª  |  } t  s' | j t ƒ  p d ƒ } n  t | ƒ rÂ | j d ƒ rƒ t j ƒ  } t j | d ƒ }	 |	 j	 d | ƒ |	 j
 ƒ  t }
 qÔ | j d ƒ r­ t j j | ƒ } t }
 qÔ t d	 | ƒ d Sn t | ƒ } t }
 t | ƒ sô t j d
 | ƒ n  y t | d | ƒ} Wn9 t j k
 rE} t j j | j ƒ  ƒ t j d ƒ n Xi  } | j rt| j j | j ƒ  d | ƒn  | j  rš| j! ršt" | d | ƒn  | j# r]t$ | j d ƒ sÃ| j j% rHt | j _& t j j t j j' | j d ƒ ƒ rt j j' | j d ƒ g | j _( n  t) | d | ƒ| j _* | j j* d | j _% n  | t t f g } n3 t) | d | ƒ} t+ | | d | d t d | ƒ} |
 r¦t, j- | ƒ n  | S(   sï   Returns a list of tuples, each consisting of

    (metadata-object, needs_download, needs_render_in_env)

    You get one tuple per variant.  Outputs are not factored in here (subpackages won't affect these
    results returned here.)
    s   utf-8s   .tars   .tar.gzs   .tgzs   .tar.bz2s   r:*R.   s   .yamls   Ignoring non-recipe: %ss   Error: no such directory: %sR)   i   t   resetRI  R_  s   conda_build_config.yamli    R~   RZ  R[  (   s   .tars   .tar.gzs   .tgzs   .tar.bz2N(   NN(.   R	   R‡   R   R   t   endswitht   tempfilet   mkdtempR¨   R©   t
   extractallt   closeRP   R-   R.   t   dirnameRK   RG  Ru   R   R   RN  t   exitR   R   t   YamlParsingErrort   stderrt   writet	   error_msgt   set_build_idR)   t   compute_build_idR3   Rh  RC  RL  R&  R+   RT   t   ignore_system_variantsR/   t   variant_config_filesR   R_  Ry  R   Rk  (   t   recipe_pathR)   RI  R_  R~   t   reset_build_idR[  t   argt
   recipe_dirt   tt   need_cleanupR4   R…   Ro  (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   render_recipeï  sX    	
				 $$R  R#  R^   Rr   R   t   appRG   t   aboutR  t	   _MetaYamlc           B` s   e  Z e Z d  „  Z RS(   c         C` s0   g  t  j D]" } | |  k r
 | |  | f ^ q
 S(   N(   Rš  t   fields(   t   selft   field(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   to_omapB  s    (   R4  t
   __module__t   FIELDSR›  Rž  (    (    (    s1   lib/python2.7/site-packages/conda_build/render.pyRš  ?  s   c         C` s   |  j  d | j ƒ  ƒ S(   Nu   tag:yaml.org,2002:map(   t   represent_mappingRž  (   R    R!   (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   _represent_omapF  s    c         C` s   t  j d d d | ƒ } | S(   Nt   tagu   tag:yaml.org,2002:strR\   (   R½   t
   ScalarNode(   R    t   unit   node(    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   _unicode_representerJ  s    t   _IndentDumperc           B` s    e  Z e e d  „ Z d „  Z RS(   c         C` s   t  t |  ƒ j | t ƒ S(   N(   t   superR¨  t   increase_indentRK   (   Rœ  t   flowt
   indentless(    (    s1   lib/python2.7/site-packages/conda_build/render.pyRª  P  s    c         C` s   t  S(   N(   RP   (   Rœ  R!   (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   ignore_aliasesS  s    (   R4  RŸ  RK   Rª  R­  (    (    (    s1   lib/python2.7/site-packages/conda_build/render.pyR¨  O  s   c         ` sü   |  j  ƒ  } t j | j ƒ | rG | j rG d | j k rG | j d =n  t j t | j ƒ d t d t	 d d ƒ} ˆ  rô t
 ‡  f d †  d Dƒ ƒ rÇ y t j t j j ˆ  ƒ ƒ WqÇ t k
 rÃ qÇ Xn  t ˆ  d	 ƒ  } | j | ƒ Wd  QXd
 ˆ  S| Sd  S(   NRG   t   Dumpert   default_flow_stylet   indenti   c         3` s   |  ] } | ˆ  k Vq d  S(   N(    (   Re   t   sep(   t   filename(    s1   lib/python2.7/site-packages/conda_build/render.pys	   <genexpr>g  s    s   \t   /t   ws   Wrote yaml to %s(   s   \R³  (   Re  R   t   trim_empty_keysR|   t	   is_outputR½   t   dumpRš  R¨  RK   R    R-   t   makedirsR.   R‡  t   OSErrorR©   R‹  (   R  R²  t   suppress_outputst   local_metadataR8  RÆ   (    (   R²  s1   lib/python2.7/site-packages/conda_build/render.pyt   output_yaml_  s     (_   t
   __future__R    R   R   t   collectionsR   R   t   localeR   R¿   R-   t   os.pathR   R   R   R`   RH   R®   Rb   RE  RN  R¨   Rƒ  R½   t   conda_interfaceR	   R
   R   R   R   R   R   R   R   t   conda_buildR   R   R   t   conda_build.metadataR   R   t   conda_build.sourceR#  t   conda_build.variantsR   R   R   t   conda_build.exceptionsR   t   conda_build.indexR   t   conda.base.constantsR   t	   ExceptionR   R"   t   add_representerRt   t   representert   SafeRepresentert   represent_listRx   R7   RF   R]   Ru   RK   RP   R†   RŠ   R   R¥   R¹   RË   Rã   Rò   Rõ   R	  R  RB  RL  RU  Ry  R€  R—  R   R’   Rš  R¢  R§  R®  R¨  R<   t   unicodeR¼  (    (    (    s1   lib/python2.7/site-packages/conda_build/render.pyt   <module>   sŒ   "				1			*?		
	3	(“	S	
J!			