
@K7]c           @` s  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 Z d  d l m Z d  d l m Z 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 m Z m Z m Z m Z d d	 l m Z d d
 l m  Z  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) m* Z* d  d l+ m, Z, d  d l- m. Z. d  d l/ m0 Z0 d  d l1 m2 Z2 m3 Z3 m4 Z4 d  d l5 m6 Z6 dD Z7 dE Z8 d   Z9 d   Z: d   Z; d   Z< d    Z= d!   Z> e e? d" d#   Z@ d$   ZA d%   ZB d eD e? e? d d&  ZE d'   ZF d(   ZG d)   ZH d*   ZI d+   ZJ e? d,  ZK e d-    ZL d.   ZM d/   ZN d0   ZO d1   ZP e d2    ZQ d3   ZR d4   ZS e d5    ZT d6 eU f d7     YZV d8   ZW d9   ZX d: eY f d;     YZZ i  a[ d  a\ d  d eD e? eD d d< e? d= d d d>  Z] eD d  d e? e? d?  Z^ d@   Z_ dA   Z` dB   Za dC   Zb d S(F   i    (   t   absolute_importt   divisiont   print_functionN(   t   glob(   t   joint   normpathi   (   t	   text_typet   PY3(   t
   CondaErrort	   LinkErrort	   LockErrort   NoPackagesFoundErrort   PaddingErrort   UnsatisfiableError(   t   display_actionst   execute_actionst   execute_plant   install_actions(   t   memoized(   t   package_cachet   TemporaryDirectory(   t	   pkgs_dirst   root_dirt   create_default_packages(   t   reset_context(   t   utils(   t   BuildLockErrort   DependencyNeedsBuildingError(   t   feature_list(   t   get_build_index(   t   external(   t   ensure_listt   prepend_bin_patht   env_var(   t   get_default_variantt   PERLt   LUAt   Rt   NUMPYt   PYTHONs   r-bases   mro-bases   r-implc         C` s3   d j  |  j j d t |   d  j d  d   S(   Nt   .t   perli   (   R   t   variantt   getR"   t   split(   t   config(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_perl_ver)   s    c         C` s3   d j  |  j j d t |   d  j d  d   S(   NR(   t   luai   (   R   R*   R+   R"   R,   (   R-   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_lua_ver-   s    c         C` sU   |  j  j d t |   d  } t | d  s; | d } n  d j | j d  d   S(   Nt   pythonR,   i    R(   i   (   R*   R+   R"   t   hasattrR   R,   (   R-   t   py(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt
   get_py_ver1   s    c         C` s3   d j  |  j j d t |   d  j d  d   S(   NR(   t   r_basei   (   R   R*   R+   R"   R,   (   R-   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt	   get_r_ver8   s    c         C` sN   d j  t |  j j d  p( t |   d  j d   } | d d | d S(   Nt    t   numpyR(   i    i   (   R   t   strR*   R+   R"   R,   (   R-   t	   conda_npy(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_npy_ver=   s    c         C` s   t  |  j d  S(   Nt   include(   R   t   host_prefix(   R-   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_lua_include_dirF   s    t   HEADc         C` sS  t  j j   } t j t  } | r- d  } n t t  j d  }	 |	 } | sO t	 St
 }
 | | d <zyt j |  d d d d d | g d | d	 | } | j d
  } t j |  d d d | g d | d	 | } | j d
  } | | k r t	 St j |  d d g d | d	 | } | j d
  } | j d  d j   d } t | t  sl| j t j   pcd
  } n  y. t j |  d | d d g d | d	 | } Wnn t j k
 r
t j d k r| j d  rt j |  } n  t j |  d | d d g d | d	 | } n X| j d
  } | j d  d j   d } t j d k rg| j d  rgt j |  } n  t  j j |  rt |  } n  t  j j |  r| j   | j   k r| j d  | j d | j    | j d | j    t	 }
 n  Wn< t j k
 r6} | j d  | j t |   t	 }
 n XWd  | sN|	 j   n  X|
 S(   Nt   wt   GIT_DIRt   logs   -n1s   --format=%HR?   t   ^t   envt   stderrs   utf-8t   remotes   -vs   
i    i   s	   --git-dirt   win32t   /s   remote does not match git_urls   Remote: s	   git_url: s@   Error obtaining git information in verify_git_repo.  Error was: (   t   ost   environt   copyR   t
   get_loggert   __name__t   Nonet   opent   devnullt   Falset   Truet   check_output_envt   decodeR,   t
   isinstanceR9   t   encodet   syst   getfilesystemencodingt
   subprocesst   CalledProcessErrort   platformt
   startswitht   convert_unix_path_to_wint   patht   existsR   t   isdirt   lowert   debugt   close(   t   git_exet   git_dirt   git_urlt   git_commits_since_tagRb   t   expected_revRD   RB   RE   t   FNULLt   OKt   current_committ   expected_tag_committ   cache_detailst	   cache_dirt   remote_detailst
   remote_urlt   error(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   verify_git_repoJ   sv    	
 			+c         C` s   i  } t  j t  } | r$ d } n t t j d  } | } t j j   } | | d <d d d g } y t  j	 |  d d d d	 g d
 | d t j
 j |  d | j   d }	 |	 j d  }	 |	 j d d  }
 t |
  d k r | j t t | |
    n  Wn' t j k
 r)d } | j |  n Xy] t  j	 |  d d	 g d
 | d t j
 j |  d | j   d }	 |	 j d  }	 |	 | d <Wn6 t j k
 r} | j d  | j t |   n Xd | k rd | k rd j | d | d  | d <n  t d   | j   D  st  | S(   s   
    Given a repo to a git repo, return a dictionary of:
      GIT_DESCRIBE_TAG
      GIT_DESCRIBE_NUMBER
      GIT_DESCRIBE_HASH
      GIT_FULL_HASH
      GIT_BUILD_STR
    from the output of git describe.
    :return:
    R@   RA   t   GIT_DESCRIBE_TAGt   GIT_DESCRIBE_NUMBERt   GIT_DESCRIBE_HASHt   describes   --tagss   --longR?   RD   t   cwdRE   i    s   utf-8t   -i   i   s   Failed to obtain git tag information.
Consider using annotated tags if you are not already as they are more reliable when used with git describe.s	   rev-parset   GIT_FULL_HASHs4   Error obtaining git commit information.  Error was: s   {}_{}t   GIT_BUILD_STRc         s` s   |  ] } d  | k Vq d S(   s   
N(    (   t   .0t   value(    (    s2   lib/python2.7/site-packages/conda_build/environ.pys	   <genexpr>   s    N(   R   RL   RM   RN   RO   RI   RP   RJ   RK   RS   R^   t   dirnamet
   splitlinesRT   t   rsplitt   lent   updatet   dictt   zipRY   RZ   Rb   R9   t   formatt   anyt   valuest   AssertionError(   Rd   t   repoRb   t   dRB   RE   Ri   RD   t   keyst   outputt   partst   msgRq   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_git_info   sD    	
##c   
      C` s  t  j j   } |  | d <d   | j   D } i  } d d d d d d g } t j | d	 | d
 t  j j |   } | j d  } | j	 d  \ } } } } }	 | d k r | | d <n  |	 d k r d }	 n  |	 | d <| | d <| | d <| | d <d j
 | d | d  | d <| S(   Nt   HG_DIRc         S` s+   i  |  ]! \ } } t  |  t  |   q S(    (   R9   (   R{   t   keyR|   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pys
   <dictcomp>   s   	 t   hgRB   s
   --templates;   {rev}|{node|short}|{latesttag}|{latesttagdistance}|{branch}s   --revR(   RD   Rw   s   utf-8t   |t   nullt   HG_LATEST_TAGR7   t   defaultt	   HG_BRANCHt	   HG_NUM_IDt   HG_LATEST_TAG_DISTANCEt   HG_SHORT_IDs   {}_{}t   HG_BUILD_STR(   RI   RJ   RK   t   itemsR   RS   R^   R}   RT   R,   R   (
   R   RD   R   t   cmdR   t   revt   short_idt   tagt   distancet   branch(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_hg_build_info   s(    
	'	



c   	      C` sW  | s |  j  j } n  |  j |  j  _ t | |  j   } | j t |  | |   | j t |  | |   | j t |  | |   | j t	 |  | |   |  r | j t
 |  d |  n  | j t | |  |   | j d   t D  | p |  j  j } xR | j   D]D \ } } | sB| j   | k r| j   t k r| | | <qqW| S(   Nt   skip_build_idc         S` s1   i  |  ]' \ } } t  t |   | j    q S(    (   R9   t   intt   upper(   R{   t   featR|   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pys
   <dictcomp>  s   	 (   R-   R=   t   build_is_hostt   _merge_build_hostt   conda_build_varsR   t   python_varst	   perl_varst   lua_varst   r_varst	   meta_varst   system_varsR   R*   R   R   t	   LANGUAGES(	   t   mt   prefixt   for_envR   t   escape_backslashR*   R   t   kt   v(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_dict   s$    +c         C` s   t  j j |   d  d k r% | j n | j } i d d 6d d 6| j d 6t | j  d 6|  d 6| j d	 6t	 j
 d
 6t	 j d 6| j d 6| d 6t  j d d  d 6t  j d d  d 6t  j d d  d 6| j r d n d d 6t d 6S(   Ni   t   _tt   1t   CONDA_BUILDt   PYTHONNOUSERSITEt   CONDA_DEFAULT_ENVt   ARCHt   PREFIXt   BUILD_PREFIXt
   SYS_PREFIXt
   SYS_PYTHONt   SUBDIRt   SRC_DIRt   HTTPS_PROXYR7   t
   HTTP_PROXYt   REQUESTS_CA_BUNDLEt   DIRTYt   ROOT(   RI   R^   t   basenamet   test_dirt   work_dirR=   R9   t	   host_archt   build_prefixRW   R   t
   executablet   host_subdirt   getenvt   dirtyR   (   R   R-   t   src_dir(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR     s"    .




c         C` s  t  |  j  } t j | |  } t j | |  } t j ri | ri | j d d  } | j d d  } n  i d j | j d  d   d 6t	 t
 t
 | d  d k   d	 6| d
 6| d 6| d 6} |  j r d n d } g  |  j |  D] } t	 | j  ^ q }	 d |	 k s(|  j d t  d k r~|  j j | |  j j  }
 t j rg| rg|
 j d d  }
 n  | j i |
 d 6 n  |  j j j d t |  j  d  } d j | j d  d   | d <d j | j d  d   | d <d | d <| S(   Ns   \s   \\R7   R(   i   t   CONDA_PYi    i   t   PY3Kt   PY_VERt
   STDLIB_DIRt   SP_DIRt   hostt   buildR1   t   fail_okR'   R8   t   NPY_VERt	   CONDA_NPYR   t   NPY_DISTUTILS_APPEND_FLAGS(   R4   R-   R   t   get_stdlib_dirt   get_site_packagest   on_wint   replaceR   R,   R9   R   t   is_crosst
   ms_dependst   nameRR   t
   python_binR   R   R*   R+   R"   (   t   metadataR   R   t   py_vert
   stdlib_dirt   sp_dirt   vars_t   build_or_hostt   mst   depsR   t   np_ver(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR   5  s2    #
+$	%  
c         C` s   i t  |  j  d 6t  |  j  d 6} |  j r5 d n d } g  |  j |  D] } t | j  ^ qK } d | k s |  j d t  d k r |  j j | |  j j  } t	 j
 r | r | j d d  } n  | j i | d	 6 n  | S(
   Nt   PERL_VERt
   CONDA_PERLR   R   R)   R   s   \s   \\R#   (   R.   R-   R   R   R9   R   RR   t   perl_binR   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR   Y  s    +$	c   	      C` s   i t  |  j  d 6t  |  j  d 6} |  j r5 d n d } g  |  j |  D] } t | j  ^ qK } d | k r |  j j | |  j j  } t |  j  } t	 j
 r | r | j d d  } | j d d  } n  | j i | d 6| d	 6 n  | S(
   Nt   LUA_VERt	   CONDA_LUAR   R   R/   s   \s   \\R$   t   LUA_INCLUDE_DIR(   R0   R-   R   R   R9   R   t   lua_binR   R>   R   R   R   R   (	   R   R   R   R   R   R   R   R   t   lua_include_dir(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR   m  s    +	c         ` s  i t  |  j  d 6t  |  j  d 6} |  j r5 d n d } g  |  j |  D] } t | j  ^ qK   t   f d   t D  s |  j d t  t k r	|  j j	 | |  j j
  } t | d d  } t j r | r | j d	 d
  } n  | j i | d 6| d 6 n  | S(   Nt   R_VERt   CONDA_RR   R   c         3` s   |  ] } |   k Vq d  S(   N(    (   R{   t   r_pkg(   R   (    s2   lib/python2.7/site-packages/conda_build/environ.pys	   <genexpr>  s    R   t   LibsR%   s   \s   \\t   R_USER(   R6   R-   R   R   R9   R   R   t
   R_PACKAGESRR   t   r_binR   R   R   R   R   R   (   R   R   R   R   R   R   R   t   r_user(    (   R   s2   lib/python2.7/site-packages/conda_build/environ.pyR     s    +	c      	   C` s  i  } xv t  |  j d g    D]\ } t j |  } | d  k rW t j d | t  q | | | <t j d | | f t  q W|  j d d  } t |  j	 j
 |  } t | d  } t | d  } t | t  s | j t j   p d  } n  t j d	 |  j	 j  }	 |	 rt j j |  r|  j d
  }
 t j j |
  r~t j d k rct j |
  }
 n  t t |  j |
   }
 n  t } |
 rt |	 | |
 |  j	 j |  j	 j |  j d d   } n  | s|  j d  r:| j t |	 | |  j	 j   q:n@ t j d |  j	 j  r:t j j |  r:| j t |   n  |  j d  | d <|  j    | d <t |  j!   pod  | d <|  j" r| rt |  j#    | d <|  j$   | d <n d | d <d | d <|  j | d <| S(   Ns   build/script_envs+   The environment variable '%s' is undefined.s   The environment variable '%s' is being passed through with value %s.  If you are splitting build and test phases with --no-test, please ensure that this value is also set similarly at test time.s   source/0/folderR7   s   .gits   .hgs   utf-8t   gits   source/0/git_urlRG   s   source/0/git_revR?   s   source/0/pathR   s   package/namet   PKG_NAMEt   PKG_VERSIONi    t   PKG_BUILDNUMt   PKG_BUILD_STRINGt   PKG_HASHt   placeholdert   1234567t
   RECIPE_DIR(%   R   t	   get_valueRI   R   RN   t   warningst   warnt   UserWarningR   R-   R   RU   R9   RV   RW   RX   R   t   find_executableR   R^   R_   R[   R   R]   R   RQ   Rr   Rg   Rb   R   R   R   t   versiont   build_numbert   finalt   build_idt   hash_dependencies(   t   metaR   R   t   var_nameR|   t   foldert   repo_dirRe   t   hg_dirRd   Rf   t   _x(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR     s^    


		%*

c          C` sy   t  j d k rL t j d d t d t j j   \ }  } |  j d  j   Sy t	 t
 j    SWn t k
 rt d SXd  S(   Nt   darwins   sysctl -n hw.logicalcput   shellt   stdouts   utf-8R   (   RW   R[   RY   t   PopenRR   t   PIPEt   communicateRT   t   stripR9   t   multiprocessingt	   cpu_countt   NotImplementedError(   t   outt   _(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_cpu_count  s    c           C` sO   t  j d k r d St  j d k r& d St  j j d  r< d St t  j   d  S(   NRG   s   .dllR  s   .dylibt   linuxs   .so(   RW   R[   R\   R!  (    (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_shlib_ext  s    c   	      C` s  t  |  j j  d k r d n d } t r0 d n d } t | d  } |  j j j d  \ } } | d t | d	   | d
 |  | d t | d   | d t | d   | d t | d   | d d j d | j   | j d d  f   | 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/  | d0  | d1  | d2  | d3  | d4  | d5 | d6 |  xU t	 j
 j   D]D } t j d7 |  rv| |  qQt j d8 |  rQ| |  qQqQWd9 S(:   sL   This is setting variables on a dict that is part of the get_default functiont   32t   i386t   amd64s   19.0.0s   15.0.0t   Libraryt   :t   SCRIPTSt   Scriptst   LIBRARY_PREFIXt   LIBRARY_BINt   bint   LIBRARY_INCR<   t   LIBRARY_LIBt   libt   CYGWIN_PREFIXR7   s
   /cygdrive/s   \RH   t   ALLUSERSPROFILEt   APPDATAt   CommonProgramFiless   CommonProgramFiles(x86)t   CommonProgramW6432t   COMPUTERNAMEt   ComSpect	   HOMEDRIVEt   HOMEPATHt   LOCALAPPDATAt   LOGONSERVERt   NUMBER_OF_PROCESSORSt   PATHEXTt   ProgramDatat   ProgramFiless   ProgramFiles(x86)t   ProgramW6432t   PROMPTt   PSModulePatht   PUBLICt   SystemDrivet
   SystemRoott   TEMPt   TMPt
   USERDOMAINt   USERNAMEt   USERPROFILEt   windirt   PROCESSOR_ARCHITEW6432t   PROCESSOR_ARCHITECTUREt   PROCESSOR_IDENTIFIERt   BUILDs   -pc-windows-s   VS[0-9]{2,3}COMNTOOLSs   VS[0-9]{4}INSTALLDIRN(   R9   R-   R   R   R   R=   R,   Ra   R   RI   RJ   R   t   ret   match(	   R   t   get_defaultR   t   win_archt   win_msvct   library_prefixt   drivet   tailR   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   windows_vars  s^    $1






























c         C` sA   | d d  | d t  | d d   | d d  | d  d	 S(
   sL   This is setting variables on a dict that is part of the get_default functiont   HOMEt   UNKNOWNt   PKG_CONFIG_PATHR3  t	   pkgconfigt   CMAKE_GENERATORs   Unix Makefilest   SSL_CERT_FILEN(   R   (   R   RU  R   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt	   unix_vars0  s    c         C` sS   t  |  j j  d k r d n d } | d |  | d d  | d | d  d	 S(
   sL   This is setting variables on a dict that is part of the get_default functionR'  R(  t   x86_64t   OSX_ARCHt   MACOSX_DEPLOYMENT_TARGETs   10.9RR  s   -apple-darwin13.4.0N(   R9   R-   R   (   R   RU  R   Rd  (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   osx_vars8  s    $c           C` s   t  j   t  j   f S(   N(   R[   t   machinet   architecture(    (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   _machine_and_architectureC  s    c         C` s  t    \ } } | } | d k rX | d d k rX t d  t d  t d  d } n  | j d  r| | j d d	  } n  | j d	  s | j d
  r d } n d } | d  | d  | d  | d  | d  | d  | d  | d | d  | d | d | d  d S(   sL   This is setting variables on a dict that is part of the get_default functionRc  i    t   32bitsE   Warning: You are running 32-bit Python on a 64-bit linux installationsE            but have not launched it via linux32. Various qeuries *will*sC            give unexpected results (uname -m, platform.machine() etc)t   i686t   ppct   powerpct   aarch64t   cos7t   cos6t   CFLAGSt   CXXFLAGSt   LDFLAGSt   QEMU_LD_PREFIXt
   QEMU_UNAMEt   DEJAGNUt   DISPLAYt   LD_RUN_PATHs   /libRR  s   -conda_s
   -linux-gnuN(   Ri  t   printR\   R   (   R   RU  R   t   platform_machinet   platform_architecturet
   build_archt   build_distro(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt
   linux_varsH  s*    


		






c         C` sA   t  j |  } | s* | j | |  } n  | r= | |  | <n  d  S(   N(   RI   R   R+   (   t   out_dictR   R*   R   R|   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   set_from_os_or_varianti  s
    c         ` s  t      d    f d  } | d t    | d  | d  | d  t     d <t j j   d   d < j j s t    j j	    n  t
 j d	 k r t  | |  n t  | |  t
 j d
 k r t  | |  n% t
 j j d  rt  | |  n    S(   NR7   c         ` s   t    |   j j |  S(   N(   R  R-   R*   (   R   R   (   R   R   (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   <lambda>u  R7   t	   CPU_COUNTt   LANGt   LC_ALLt	   MAKEFLAGSt	   SHLIB_EXTt   PATHRG   R  R%  (   R   R$  R&  RI   RJ   RK   R-   t   activateR    R=   RW   R[   R[  Rb  Rf  R\   R~  (   t   env_dictR   R   RU  (    (   R   R   s2   lib/python2.7/site-packages/conda_build/environ.pyR   q  s$    	


t   InvalidEnvironmentc           B` s   e  Z RS(    (   RM   t
   __module__(    (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR    s   c         C` s+   t  |  d   } t j |  } Wd  QX| S(   Nt   r(   RO   t   jsont   load(   R^   t   fint   x(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt
   _load_json  s    c         C` sd   t  t j |    \ } } } i  } x9 | D]1 } | j d  r+ t t | |   | | <q+ q+ W| S(   sp   
    Load all json files in a directory.  Return dictionary with filenames mapped to json
    dictionaries.
    s   .json(   t   nextR   t   walkt   endswithR  R   (   R^   t   rootR#  t   filest   resultt   f(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   _load_all_json  s     t   Environmentc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` sg   | |  _  t | d  |  _ t j  j |  rN t j  j |  j  rN i  |  _ n t d j |    d S(   s   
        Initialize an Environment object.

        To reflect changes in the underlying environment, a new Environment object should be
        created.
        s
   conda-metas   Unable to load environment {}N(   R^   R   t   _metaRI   R`   t	   _packagesR  R   (   t   selfR^   (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   __init__  s
    	'c         C` s"   |  j  s t |  j  |  _  n  d  S(   N(   R  R  R  (   R  (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   _read_package_json  s    	c         C` sp   |  j    |  j j   } g  } xJ | D]B } | d | d | d } } } | j d j | | |   q& W| S(   s<   
        List all package specs in the environment.
        R   R  R   s   {} {} {}(   R  R  R   t   appendR   (   R  t	   json_objst   specst   it   pR   t   b(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   package_specs  s    
  (   RM   R  R  R  R  (    (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR    s   		i  i   c      $   ` s~  i  } t  j t  } t j } t |  } | r@ | j t  n  | sL | rs t j	 d    } | r| t j
 } q| n	 t  j } x. t D]& \ } } | r | j d |  q q Wt |  } t | t |  d d | d | d | d | d | d	 |	 \ } } } t d
   | D  } | | | | |
 f t k rwt | k rwt | | | | |
 f j   } d | k rz|  | d <qzn| rzt  j |  N|   >y t |  | | d t } Wnt t f k
 r} t | d |  nt t t t t t t f k
 r} d t  |  k r/| j! d t  |   n d t  |  k sbd t  |  k sbt" | t  r-t  j# | | |	  } t  j$ | d	 |	  t  |  } d } xD t% j& j' |  t( k r| d k  rt% j& j' |  } | d 7} qW| j! d |  | t( k r$t% j& j) |  r$t  j* |  n  Wd  QXn  | | k  r| j! d t  |   t+ |  t |  | d | d d | d | d | d | d t |  d	 |	 d |
 d | d | d t |  } q| j, d    n XWd  QXWd  QX|
 rEx` d D]U   t-   f d   | D  sg  | d D] } | j.   k r| ^ q| d <qqWn  t  j/ |  | j   t | | | | |
 f <| a n  | S(    Nc           s` s	   d  Vd  S(   N(    (    (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR    R7   s   %s@i    t   output_foldert   channel_urlsRb   t   verboset   lockingt   timeoutc         s` s3   |  ]) } t  |  j d   s t j |  Vq d S(   t   @N(   R9   R  R   t   ensure_valid_spec(   R{   t   spec(    (    s2   lib/python2.7/site-packages/conda_build/environ.pys	   <genexpr>  s    R   t   forcet   subdirt   locks;   failed to get install actions, retrying.  exception was: %ss    requires a minimum conda versions   link a source that does noti   i   sY   I think conda ended up with a partial extraction for %s. Removing the folder and retryingt   retriest   bldpkgs_dirst   disable_pipt   max_env_retrys4   Failed to get install actions, max retries exceeded.t   pipt
   setuptoolst   wheelc         3` s+   |  ]! } t  j d    t |   Vq d S(   s   ^%s(?:$|[\s=].*)N(   RS  RT  R9   (   R{   t   dep(   t   pkg(    s2   lib/python2.7/site-packages/conda_build/environ.pys	   <genexpr>   s    t   LINK(   R  R  R  (0   R   RL   RM   t   loggingt   WARNt   listt   extendR   t
   contextlibt   contextmanagert   DEBUGt   captureR   R  R   R   t   tuplet   cached_actionst   last_index_tsRK   t   LoggingContextR   RR   R   R   R   t
   SystemExitR   R	   R   R   R   R9   R
  RU   t   get_conda_operation_lockst   try_acquire_locksRI   R^   R}   R   R`   t   rm_rft   get_install_actionsRq   R   R   t   trim_empty_keys(   R   R  RD   R  R  R  Rb   R  R  R  R  R  R  R  t   actionsRB   t   conda_log_levelR  t   featureR|   t   indext   index_tsR#  t   exct   lockst   pkg_dirR  R  (    (   R  s2   lib/python2.7/site-packages/conda_build/environ.pyR    s    		
	'		
:	c
      !   C` s  | j  r t j t j  }
 n t j t j  }
 t j j |   rx x3 t	 t j j
 |  d   D] } t j |  q^ Wn  |
 t j t  } | r| j  d |   | j  t |   | s t j |  } n  yt j | d | j t | d  st t |   } t |  t |  | d | d | j d | j  d | j d	 t | j  d | j d
 | j d | j d | j d t | j  
} n | } t d | d | j d | j d | j d | j  d | j d | j d | j  \ } } } t j  |  t! | |  t j" r@x3 t j# j$   D] \ } } t |  t j# | <qWn  t% d | j t&  / t% d | j t&   t' | |  Wd QXWd QXWd QXWqt( t) t* t+ t, t- f k
 r~} d t |  k st. j/ d t |   st0 | t)  r| j1 d k r| j2 r| j3 d | j1  | j3 d  | j3 t |   | j3 d  | j3 d  | j3 d  d | _1 d |  k } | r| j4 n | j5 }  |  | d <t6 |  | d | d | d | d | d | q{  qd  t |  k r:| | j k  r{| j3 d! t |   t6 |  | d | d | d | d | d" | d# d | q{qd$ t |  k s^d% t |  k rxt j | d | j  t |  } d& } xD t j j7 |  t8 k r| d' k  rt j j7 |  } | d# 7} qW| j3 d( |  t j j9 |  rt j |  n  Wd QX| | j k  re| j3 d! t |   t6 |  | d | d | d | d | d" | d# d | q{| j: d)    q  qt; t< t= t> t? f k
 r} t0 | t;  r#t j | d | j [ t j j7 t j j7 t |    } | j3 d( |  t j j9 |  rt j |  n  Wd QXn  | | j k  r| j3 d! t |   t6 |  | d | d | d | d | d" | d# d | q| j: d)    qXn  Wd QXd S(*   sD   
    Create a conda envrionment for the given prefix and specs.
    t   *s   Creating environment in %sR  R   R  R  Rb   R  R  R  R  R  R  t   bldpkgs_dirt   CONDA_QUIETt
   CONDA_JSONNs   too short ins-   post-link failed for: (?:[a-zA-Z]*::)?openssliP   s)   Build prefix failed with prefix length %ds   Error was: sY   One or more of your package dependencies needs to be rebuilt with a longer prefix length.s6   Falling back to legacy prefix length of 80 characters.s<   Your package will not install into prefixes > 80 characters.t   _h_envR   R-   RD   t   clear_cacheR   R  s2   failed to create env, retrying.  exception was: %st   retryi   s    requires a minimum conda versions   link a source that does noti    i   sZ   I think conda ended up with a partial extraction for %s.  Removing the folder and retryings+   Failed to create env, max retries exceeded.(@   Rb   R   R  R  R  R  RI   R^   R_   R   R   R  RL   RM   R9   R  R  R  R2   R  t   setR  R  R  R  R  R  R  R  R  R   R  R  R   R   RJ   R   R!   R   R   R  R   R	   R   R   R   RS  t   searchRU   t   prefix_lengtht   prefix_length_fallbackR
  R=   R   t
   create_envR}   R   R`   Rq   R   t   IOErrort
   ValueErrort   RuntimeErrorR
   (   R   t   specs_or_actionsRD   R-   R  R  R  R  R   t   is_condat   external_logger_contextt   entryRB   R  R  R  R#  R   R   R  R   R  R  (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyR  (  s    	"														#		
	
'	$	c         C` s)   g  |  D] } t  j | d | j ^ q S(   NR  (   R   t   get_lockR  (   t   dirsR-   R  (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_pkg_dirs_locks  s    c         C` s   | j  r t |  |  n g  } t j | d | j  xz |  D]r } xi | D]a } | g } t j j |  s t t j j	 | | d   } n  x | D] } t j
 |  q WqK Wq> WWd  QXd  S(   NR  R  (   R  R  R   R  R  RI   R^   t   isabsR   R   R  (   R  t   fnsR-   R  R  t   fnt	   all_filesR  (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   remove_existing_packages  s    	"c         C` s  g  } t  j } | j r$ t  j } n  t j |  yt | j g t |  } t j	 | d | j
 .d j |   d j |   g } t |  x t D] } t j j t j j | |    st j j t j j | |  d   st d   |  d |  g D  r t j t  } | j d |   | j d  t   } g  | j   D] } |  | k rC| ^ qC}	 x' |	 D] }
 |
 | k rh| |
 =qhqhWq q WWd  QXt t |  g |  Wd  QXd  S(	   NR  s   RM_EXTRACTED {0} local::{0}s   RM_FETCHED {0} local::{0}s   .tar.bz2c         s` s   |  ] } | t    k Vq d  S(   N(   R   (   R{   t   pkg_id(    (    s2   lib/python2.7/site-packages/conda_build/environ.pys	   <genexpr>  s    s   local::s>   Conda caching error: %s package remains in cache after removals   manually removing to compensate(   R  R  Rb   R  R   R  R  R  R   R  R  R   R   RI   R^   R_   R   R   RL   RM   R   R   R  (   t   distR-   R  R  t   rmplanR  RB   t   cacheR   R   R  (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   clean_pkg_cache  s0    		
!% 		+c         C` s   t  d d   } t | t |  j |   | d |  j 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  
} Wd  QXg  | j d g   D]$ } d j | j j d d   ^ q } | S(   NR   R#  R  Rb   R  R  R  R  R  R  R  R  R  t    Rx   i   (   R   R  R  R   R-   t   target_subdirRb   R  R  R  R  R  R  R  R  R+   R   t	   dist_nameR   (   R   t   sectiont   tmpdirR  t   linkt   runtime_deps(    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   get_pinned_deps  s    =(   R#   R$   R%   R&   R'   (   s   r-bases   mro-bases   r-impl(c   t
   __future__R    R   R   R  R  R  R  RI   R[   RS  RY   RW   R	  R   t   os.pathR   R   t   conda_interfaceR   R   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   conda_buildR   t   conda_build.exceptionsR   R   t   conda_build.featuresR   t   conda_build.indexR   t   conda_build.os_utilsR   t   conda_build.utilsR   R    R!   t   conda_build.variantsR"   R   R   R.   R0   R4   R6   R;   R>   RQ   Rr   R   R   RN   RR   R   R   R   R   R   R   R   R$  R&  R[  Rb  Rf  Ri  R~  R  R   t	   ExceptionR  R  R  t   objectR  R  R  R  R  R  R  R  R  (    (    (    s2   lib/python2.7/site-packages/conda_build/environ.pyt   <module>   s   ."							S	?	 		$			D		6			!			 		Z			&