ó
;”Q]c           @   sÇ  d  Z  d d l m Z d d l m Z d d l Z 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 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 i d j e j j e j j ƒ d 6d d 6d d 6d d 6e r=d n d d 6d d 6e d e d d d d ƒ ƒ d 6g  d 6d d g d 6d d d d  g d  6d! d" 6Z e d d d d ƒ e d d# <i i i d$ d% 6d& d' 6d& d 6d( d 6d) 6i d$ d% 6d& d' 6d& d 6d( d 6d* 6i d+ d% 6d, d' 6d, d 6d- d 6d. 6d/ d0 6d1 6i d2 d) 6d3 d* 6d/ d0 6d4 6i d5 d) 6d6 d* 6d/ d0 6d7 6Z e j  d8 d9 ƒ d Z! i d d: 6d d; 6d d< 6d d= 6d d> 6Z" e d? „  ƒ Z# d@ „  Z$ dA „  Z% dB „  Z& d e( d dC „ Z) d d d e* dD „ Z+ e* dE „ Z, dF „  Z- dG „  Z. dH „  Z/ dI „  Z0 dJ „  Z1 dK „  Z2 dL „  Z3 e dM „  ƒ Z4 d dN „ Z5 dO „  Z6 d d dP „ Z7 dQ „  Z8 d d dR „ Z9 e( dS „ Z: e e( dT „ ƒ Z; dU „  Z< dV „  Z= d S(W   si   This file handles the parsing of feature specifications from files,
ending up with a configuration matrixiÿÿÿÿ(   t   OrderedDict(   t   productN(   t   abspatht
   expandusert
   expandvars(   t   parse_version(   t   ensure_listt   trim_empty_keyst
   get_logger(   t   string_types(   t   subdir(   t   cc_conda_build(   t   memoized(   t   on_wins   {0}.{1}t   pythons   1.11t   numpys   5.26.0t   perlt   5t   luas   3.4s   3.5t   r_baset   noconat   cpu_optimization_targett   min_pins   x.xt   max_pint   pin_run_as_buildt   ignore_versiont   ignore_build_only_depst   extend_keyss   https://cran.r-project.orgt   cran_mirrors   r-baset   vs2008s   2.7t   vs2010s   3.3t   vs2017t   ct   cxxt   9t   10t   14t   vct   gfortrant   fortrant   wint   gcct   gxxt   linuxt   clangt   clangxxt   osxt   -i   t   PYt   NPYt   LUAt   PERLt   Rc         C   sÄ   t  |  j ƒ  } |  d k r… t | ƒ t d ƒ k r= d } n! t | ƒ t d ƒ k r^ d } n  | d | | d <| d | | d <n  d „  | j ƒ  Dƒ } |  d k rÀ t  |  d | | d <n  | S(	   NR(   s   3.5s   3.2s   2.7R    R!   c         S   s/   i  |  ]% \ } } | d  k r | | d “ q S(   R%   t	   _compiler(    (   t   .0t   langt   pkg_name(    (    s3   lib/python2.7/site-packages/conda_build/variants.pys
   <dictcomp>a   s   	R%   (   t   DEFAULT_COMPILERSt   copyR   t   items(   t   platformt   py_vert	   compilers(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   _get_default_compilersW   s    		c         C   sp   t  j ƒ  } |  j | d <t |  d ƒ s< |  j j d ƒ rF | d n
 |  j d } | j t |  j | ƒ ƒ | S(   Nt   target_platformt   variantR   (	   t   DEFAULT_VARIANTSR:   R
   t   hasattrRA   t   gett   updateR?   R<   (   t   configt   baseR   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   get_default_varianti   s    *c         C   s   d d l  m } m } t |  ƒ  } | j ƒ  } Wd  QX| | | | ƒ d t ƒ} t j | d t j j	 ƒpp i  } t
 | ƒ | S(   Niÿÿÿÿ(   t   select_linest   ns_cfgt   variants_in_placet   Loader(   t   conda_build.metadataRI   RJ   t   opent   readt   Falset   yamlt   loadt   loadert
   BaseLoaderR   (   t   pathRF   RI   RJ   t   ft   contentst   content(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   parse_config_filer   s    !
c         C   s×   g  } x3 |  D]+ } d | k r | j  d j | ƒ ƒ q q Wt |  ƒ } xj | D]b } xY | D]Q } xH | j d ƒ D]7 } | |  k rr | j  d j | | j d ƒ ƒ ƒ qr qr Wq\ WqO W| rÓ t d j | ƒ ƒ ‚ n  d  S(   NR/   s;   "-" is a disallowed character in variant keys.  Key was: {}t   #s7   zip_key entry {} in group {} does not have any settingss!   Variant configuration errors: 
{}(   t   appendt   formatt   _get_zip_groupst   splitt
   ValueError(   t   spect   errorst   keyt
   zip_groupst   groupt	   group_keyt   variant_key(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   validate_spec|   s    %c   
      C   sŠ  g  | p g  D]$ } t  j j t  j j | ƒ ƒ ^ q } | rð | rð t j d ƒ rs t t t t d ƒ ƒ ƒ } n t  j j t d ƒ d ƒ } t  j j | ƒ r° | j	 | ƒ n  t  j j t  j
 ƒ  d ƒ } t  j j | ƒ rð | j	 | ƒ qð n  t |  d ƒ rt  j j |  j d ƒ } n t  j j |  d ƒ } t  j j | ƒ rQ| j	 | ƒ n  | r†| j g  | D] }	 t  j j |	 ƒ ^ qdƒ n  | S(   s°   Find files to load variables from.  Note that order here determines clobbering.

    Later files clobber earlier ones.  order is user-wide < cwd < recipe dir < additional filest   config_filet   ~s   conda_build_config.yamlRU   (   t   osRU   R   R   R   RD   R   t   joint   isfileR[   t   getcwdRC   t   extend(
   t   metadata_or_patht   additional_filest   ignore_system_configt   exclusive_config_filesRh   t   filest   system_patht   cwdt   recipe_configt   additional_file(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   find_config_files   s&    4/c            sò  i  ‰ t  | ƒ } t  | ƒ } xÍ|  j ƒ  D]¿\ } ‰ ˆ r+ | rh t t ƒ } | j d j | ƒ ƒ n  xˆ j ƒ  D]n\ ‰  } | s” ˆ  | k ru ˆ  | k rEt | d ƒ rõ ˆ  ˆ k râ t ˆ ˆ  d ƒ râ ˆ ˆ  j | ƒ qB| j ƒ  ˆ ˆ  <qàt  ˆ j	 ˆ  g  ƒ ƒ ˆ ˆ  <ˆ ˆ  j
 t  | ƒ ƒ t t ˆ ˆ  ƒ ƒ ˆ ˆ  <qãˆ  d k rüg  | D] }	 |	 rX|	 ^ qX} t | d t ƒ r¤t | d t ƒ r¤| g } n  ˆ j	 ˆ  g  ƒ ˆ ˆ  <ˆ ˆ  j
 | ƒ t d „  t d „  ˆ ˆ  Dƒ ƒ Dƒ ƒ ˆ ˆ  <qãt | d ƒ r| j ƒ  ˆ ˆ  <qãˆ  g }
 | rWx' | D] } ˆ  | k r4| }
 Pq4q4Wn  t ‡ f d †  |
 Dƒ ƒ rxj|
 D]‚ } t t  ˆ | ƒ ƒ t t  | ƒ ƒ k rèt d j | ˆ  | t t  | ƒ ƒ t t  ˆ | ƒ ƒ ƒ ƒ ‚ n  t  ˆ | ƒ ˆ | <qzWqãˆ  ˆ k rãxŽ |
 D]v } | ˆ k rTt t  ˆ | ƒ ƒ t t  | ƒ ƒ k rTPn  | ˆ k rt t  ˆ | ƒ ƒ t t  | ƒ ƒ k rPqqW| j ƒ  ˆ ˆ  <t ‡  ‡ f d	 †  t  | ƒ Dƒ ƒ ràt d
 j | ƒ ƒ ‚ qàqãqu qu Wq+ q+ Wˆ S(   Ns   Adding in variants from {}t   keyst   zip_keysi    c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   list(   R6   t	   set_group(    (    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>Ò   s    c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   tuple(   R6   Rd   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>Ò   s   c         3   s   |  ] } | ˆ  k Vq d  S(   N(    (   R6   t
   group_item(   R`   (    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>ã   s    sn   All entries associated by a zip_key field must be the same length.  In {}, {} and {} are different ({} and {})c         3   s   |  ] } | ˆ ˆ  k Vq d  S(   N(    (   R6   t   subvalue(   t   kt   values(    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>ö   s   s   variant config in {} is ambiguous because it does not fully implement all zipped keys, or specifies a subspace that is not fully implemented.(   R   R;   R   t   __name__t   infoR\   RC   RE   R:   RD   Rn   R{   t   sett
   isinstanceR}   t   allt   lenR_   t   any(   t   specsR   t   filter_keysRz   t
   log_outputRy   t   spec_sourcet   logt   vt   subvalt   keys_in_groupRd   R~   (    (   R€   R`   R   s3   lib/python2.7/site-packages/conda_build/variants.pyt   _combine_spec_dictionaries°   sp    (	(		((	 c         C   s¢   t  d } | j g  |  j ƒ  D]. } | r t | j d ƒ ƒ D] } | ^ q= q ƒ t |  d | d d g d | ƒj d g  ƒ } t |  d | d | d | ƒ} | S(   sŒ  With arbitrary sets of sources, combine into a single aggregate spec.

    Later specs in the input set have priority and overwrite duplicate entries.

    specs: list of dictionaries.  Keys are arbitrary, but correspond to variable
           names used in Jinja2 templated recipes.  Values can be either single
           values (strings or integers), or collections (lists, tuples, sets).
    R   RŠ   Rz   R‹   (   RB   Rn   R   R   RD   R‘   (   R‰   R‹   R   R`   Rb   Rz   R   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   combine_specs  s    	)		c         C   s•   d „  t  j ƒ  Dƒ } i  } xr | j ƒ  D]d \ } } | |  k r) t |  | ƒ } | d k r| d j | j d ƒ d  ƒ } n  | | d | <q) q) W| S(   s   Given args passed into conda command, set language env vars to be made available.

    Search terms: CONDA_PY, CONDA_R, CONDA_PERL, CONDA_LUA, CONDA_NPY
    c         S   s   i  |  ] \ } } | | “ q S(    (    (   R6   R€   RŽ   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pys
   <dictcomp>  s   	 R0   t    t   .i   t   CONDA_(   t
   SUFFIX_MAPR;   t   strRk   R^   (   RA   t   inverse_mapt   envt   variant_namet   env_var_namet   value(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   set_language_env_vars  s    c            s6   t  ƒ  ‰  d  } t ‡  f d †  |  Dƒ ƒ } | p5 | S(   Nc         3   s7   |  ]- } | D]  } | ˆ  k p+ ˆ  j  | ƒ Vq q d  S(   N(   t   add(   R6   t   _sett   item(   t   seen(    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>-  s    (   R„   t   NoneRˆ   (   t   _listR    t   unique(    (   R¡   s3   lib/python2.7/site-packages/conda_build/variants.pyt
   all_unique*  s    	c         C   s6   t  d „  |  Dƒ ƒ } t  d „  |  Dƒ ƒ } | | f S(   Nc         s   s   |  ] } t  | t ƒ Vq d  S(   N(   R…   R	   (   R6   Rb   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>2  s    c         s   s.   |  ]$ } t  | d  ƒ o% t | t ƒ Vq d S(   t   __iter__N(   RC   R…   R	   (   R6   Rb   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>3  s   (   R†   (   Rz   t
   is_stringst   is_list_of_strings(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   _get_zip_key_type1  s    	c            s*  ˆ  j  d ƒ } t ƒ  } | rt | d ƒ r= t | t ƒ sI t d ƒ ‚ t | ƒ \ } } | ss | ss t d ƒ ‚ t ƒ  } | r¤ t | ƒ d k r¤ | j | ƒ qt	 | ƒ } | t
 k	 rÔ t d j | ƒ ƒ ‚ n  x9 | D]. } t | ƒ d k rÛ | j t | ƒ ƒ qÛ qÛ Wn  ‡  f d †  | Dƒ } | S(   s/   Used to exclude particular keys from the matrixRz   R¦   sK   zip_keys must be uniformly a list of strings, or a list of lists of stringsi   sX   All packages in zip keys must belong to only one group.  '{}' is in more than one group.c            s"   h  |  ] } | ˆ  k r | ’ q S(    (    (   R6   Rb   (   t   combined_variant(    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <setcomp>Q  s   	 (   RD   R„   RC   R…   R	   t   AssertionErrorR©   R‡   RE   R¥   t   TrueR_   R\   (   Rª   Rz   t   key_setR§   R¨   t   _all_uniquet   ks(    (   Rª   s3   lib/python2.7/site-packages/conda_build/variants.pyt   _get_zip_key_set8  s&    	"			c   	      C   s  g  | D] } | |  k r | ^ q } i  } | rd j  | ƒ } t t |  | d ƒ ƒ } x[ | D]S } t t |  | ƒ ƒ | k sa t d j | d |  | d | |  | ƒ ƒ ‚ qa qa Wt t g  | D] } t |  | ƒ ^ qÅ Œ  ƒ } g  | D] } d j  | ƒ ^ qî } i | | 6} n  | S(   NRZ   i    sy   zip field {} ({}) length does not match zip field {} ({}) length.  All zip fields within a group must be the same length.(   Rk   R‡   R   R_   R\   R{   t   zip(	   Rª   t   list_of_stringsRb   t	   used_keyst   outt   dict_keyt   lengthR   Rœ   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   _get_zip_dict_of_listsU  s    %	/"c         C   sƒ   |  j  d ƒ } g  } | r t | ƒ \ } } | rL | j t |  | ƒ ƒ q | r x' | D] } | j t |  | ƒ ƒ qY Wq n  | S(   sJ   returns a list of dictionaries - each one is a concatenated collection of Rz   (   RD   R©   R[   R·   (   Rª   Rz   t   groupsR§   R¨   Rd   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyR]   j  s     c         C   s­   g  } t  | d ƒ r |  } n‹ xˆ |  D]€ } | j | ƒ d k	 re | j | ƒ | k re | j | ƒ q% t t ƒ } | j d j d | d | d | d | j | ƒ ƒ ƒ q% W| S(   sŸ   variants is the exploded out list of dicts, with one value per key in each dict.
    key and values come from subsequent variants before they are exploded out.Ry   sr   Filtering variant with key {key} not matching target value(s) ({tgt_vals}) from {source_name}, actual {actual_val}Rb   t   tgt_valst   source_namet
   actual_valN(   RC   RD   R¢   R[   R   R‚   t   debugR\   (   t   variantsRb   R   Rº   t   reduced_variantsRA   R   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   filter_by_key_valuex  s    	*c         C   s   |  j  | ƒ S(   N(   R^   (   t   stringt   char(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt
   _split_strŒ  s    c            sô  g  } | s* t  t |  j d ƒ ƒ ƒ } n  t  d d d g t t | ƒ ƒ t t |  ƒ ƒ ƒ ‰  ‡  f d †  |  j ƒ  Dƒ } x! t |  ƒ D] } | j | ƒ qˆ Wt | ƒ xDt	 | j
 ƒ  Œ  D]0} t t j j | | ƒ ƒ } x< ˆ  D]4 } |  j | ƒ } | s| d k rä | | | <qä qä Wt  ƒ  }	 xŸ | j ƒ  D]‘ \ }
 } t |
 t ƒ r2t | t ƒ r2t |
 d ƒ } t | d ƒ } x' t | | ƒ D] \ } } | | | <qŠWd |
 k rÃ|	 j |
 ƒ qÃq2q2Wx |	 D] } | | =qÎW| j | ƒ q¼ W| S(   NR   Rz   R   c            s+   i  |  ]! \ } } | ˆ  k r | | “ q S(    (    (   R6   R€   RŽ   (   t   pass_through_keys(    s3   lib/python2.7/site-packages/conda_build/variants.pys
   <dictcomp>›  s   	 R“   RZ   (   R„   R   RD   R{   R°   R;   R]   RE   R   R   R   t   dictt   sixt   movesR±   R…   R	   RÂ   Rž   R[   (   t   dict_of_listsR   t   dictst
   dimensionsRd   t   xt   remappedt   colRŽ   t   to_delR€   Ry   R   t   _kt   _vRb   (    (   RÃ   s3   lib/python2.7/site-packages/conda_build/variants.pyt   dict_of_lists_to_list_of_dicts‘  s:    
	c            sm  |  s
 d St  ƒ  ‰  t ƒ  } d } d |  d k rN |  d d rN |  d d n g  } | rä t |  d d d t ƒ s t |  d d d t ƒ r¡ |  d d } n |  d d g } x/ | D]$ } x | D] } | j | ƒ qÆ Wq¹ Wn  x|  D]ý } xô | j ƒ  D]æ \ } } | d k rqþ n  t | d ƒ rZˆ  j	 | t  ƒ  ƒ }	 |	 j
 | ƒ |	 ˆ  | <qþ t | t ƒ r•t ˆ  j	 | t ƒ  ƒ ƒ t | ƒ Bˆ  | <qþ t ˆ  j	 | g  ƒ ƒ t | ƒ ˆ  | <| | k rþ t t ˆ  | ƒ ƒ ˆ  | <qþ qþ Wqë W| r_xj | D]_ } t t t t ‡  f d †  | Dƒ Œ  ƒ Œ  ƒ }
 x( t | ƒ D] \ } } |
 | ˆ  | <q:WqùWn  | ˆ  d <ˆ  S(   sÞ   Opposite of dict_of_lists_to_list_of_dicts function.

    Take broken out collection of variants, and squish it into a dict, where each value is a list.
    Only squishes string/int values; does "update" for dict keys
    NRz   i    Ry   c         3   s   |  ] } ˆ  | Vq d  S(   N(    (   R6   Rb   (   t   squished(    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>á  s    (   R    R„   R¢   R…   R{   R}   Rž   R;   RC   RD   RE   R   R±   t	   enumerate(   t   list_of_dictst   all_zip_keysR¸   t   zip_key_groupsRd   R    RA   R€   RŽ   t   existing_valueR   t   idxRb   (    (   RÑ   s3   lib/python2.7/site-packages/conda_build/variants.pyt   list_of_dicts_to_dict_of_listsº  sF    		",&%.
c   
      C   sY  t  |  d ƒ r |  j } n  | s= d d l m } | ƒ  } n  t |  t | j ƒ d | j d | j ƒ} t	 d t
 | ƒ ƒ } x! | D] } t | | ƒ | | <qƒ Wt  | d ƒ rÈ | j rÈ | j | d <n  | rÛ | | d	 <n  x\ | j ƒ  D]N \ } } y t | ƒ Wqè t k
 r5} t d
 j | t | ƒ ƒ ƒ ‚ qè Xqè Wt | d | j ƒ}	 |	 | f S(   NRF   iÿÿÿÿ(   t   ConfigRq   Rr   t   internal_defaultsRA   s   config.variantt   argument_variantss   Error in config {}: {}R‹   (   RC   RF   t   conda_build.configRÙ   Rx   R   t   variant_config_filest   ignore_system_variantsRr   R    RH   RY   RA   R;   Rg   R_   R\   R—   R’   t   verbose(
   t   recipedir_or_metadataRF   R½   RÙ   Rs   R‰   RV   R`   t   et   combined_spec(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   get_package_combined_specè  s,    	&c         C   sÄ   t  t |  j d ƒ ƒ ƒ } | j d d h ƒ | j ƒ  } | d =t |  d | ƒ}  xj t | j ƒ  ƒ D]V \ } } xG | j ƒ  D]9 \ } } | | k r t |  | | d | ƒp² |  }  q q Wqf W|  S(   NR   Rz   RÚ   Rº   (	   R„   R   RD   RE   R:   RÐ   t   reversedR;   R¿   (   Râ   R‰   R   t   sourcet   source_specsR€   t   vs(    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt!   filter_combined_spec_to_used_keys  s    c         C   s.   t  |  d | d | ƒ\ } } t | d | ƒS(   NRF   R½   R‰   (   Rã   Rè   (   Rà   RF   R½   Râ   R‰   (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   get_package_variants"  s    c            sŒ   d d d h } | j  t t ˆ d j d ƒ ƒ ƒ ƒ g  ˆ d D]B ‰  ˆ  | k r@ | s| t ‡  ‡ f d †  ˆ d Dƒ ƒ r@ ˆ  ^ q@ } | S(   s|   For purposes of naming/identifying, provide a way of identifying which variables contribute
    to the matrix dimensionalityR   Rz   R   i    R   c         3   s'   |  ] } | ˆ  ˆ d  ˆ  k Vq d S(   i    N(    (   R6   RA   (   R€   R½   (    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>.  s    i   (   RE   R„   R   RD   Rˆ   (   R½   t	   loop_onlyt   special_keyst	   loop_vars(    (   R€   R½   s3   lib/python2.7/site-packages/conda_build/variants.pyt   get_vars'  s    &/c            s¸  t  ƒ  } | j ƒ  } xœ|  D]”} g  ‰  t j d | ƒ } | rª | rª | j d ƒ } d t j | ƒ } ˆ  j | ƒ g  | D]$ }	 | |	 k s› | |	 k r} |	 ^ q} }
 n1 g  | D]$ }	 | |	 j d d ƒ k r± |	 ^ q± }
 |
 sç q n  t j | ƒ } d j t	 t j | j
 d ƒ ƒ ƒ } d | } d | } d	 | d
 } d | } | r_ˆ  j | g ƒ n ˆ  j | | | g ƒ d j ˆ  ƒ ‰  t ‡  f d †  |
 Dƒ ƒ r | j | ƒ q q W| S(   Ns   (.*?)_compiler(_version)?$i   s&   \{\s*compiler\([\'\"]%s[\"\'][^\{]*?\}R/   t   _s   [-_]s-   \{\s*(?:pin_[a-z]+\(\s*?['\"])?%s[^'\"]*?\}\}s/   ^[^#\[]*?\#?\s\[[^\]]*?(?<![_\w\d])%s[=\s<>!\]]s   (?:^|[^\{])\{%\s*(?:el)?if\s*s   \s*(?:[^%]*?)?%\}s   ^\s+\-\s+%s\s*(?:\s[\[#]|$)t   |c         3   s!   |  ] } t  j ˆ  | ƒ Vq d  S(   N(   t   ret   search(   R6   t   line(   t   all_res(    s3   lib/python2.7/site-packages/conda_build/variants.pys	   <genexpr>Q  s    (   R„   t
   splitlinesRð   t   matchRd   t   escapeR[   t   replaceRk   t   mapR^   Rn   Rˆ   Rž   (   RA   t   recipe_textt	   selectorst   used_variablest   recipe_linesRŽ   t   compiler_matcht   compiler_langt   compiler_regexRò   t   variant_linest   v_regext   v_req_regext   variant_regext   selector_regext   conditional_regext   requirement_regex(    (   Ró   s3   lib/python2.7/site-packages/conda_build/variants.pyt   find_used_variables_in_text2  s4    	41$


c         C   s{   t  | ƒ  } | j ƒ  } Wd  QXt ƒ  } xJ |  D]B } d | } t j | | d t j t j Bƒr1 | j | ƒ q1 q1 W| S(   Ns   (^[^$]*?\$\{?\s*%s\s*[\s|\}])t   flags(   RN   RO   R„   Rð   Rñ   t	   MULTILINEt   DOTALLRž   (   RA   t	   file_pathRV   t   textRû   RŽ   R  (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt#   find_used_variables_in_shell_scriptV  s    	
"c         C   s   t  | ƒ  } | j ƒ  } Wd  QXt ƒ  } xN |  D]F } d | d } t j | | d t j t j Bƒr1 | j | ƒ q1 q1 W| S(   Ns   \%R  (   RN   RO   R„   Rð   Rñ   R	  R
  Rž   (   RA   R  RV   R  Rû   RŽ   R  (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt#   find_used_variables_in_batch_scripta  s    	"(>   t   __doc__t   collectionsR    t	   itertoolsR   Rj   t   os.pathR   R   R   t   pkg_resourcesR   Rð   t   sysRÅ   RQ   t   conda_build.utilsR   R   R   t   conda_build.conda_interfaceR	   R
   R   R   R   R\   t   version_infot   majort   minorRB   R9   t   rsplitt	   arch_nameR–   R?   RH   RY   Rg   R¢   RP   Rx   R¬   R‘   R’   R   R¥   R©   R°   R·   R]   R¿   RÂ   RÐ   RØ   Rã   Rè   Ré   Rí   R  R  R  (    (    (    s3   lib/python2.7/site-packages/conda_build/variants.pyt   <module>   s®   


			
	"	P							)	.$	#	