
    8xd<                        d 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mZmZ ddlmZ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 ej        d	k    Z d
a!d Z" e"             dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*g Z+dZ,dZ-dZ.d Z/dej0        fdZ1dZ2ddddddddZ3 e
dd          Z4d Z5d Z6 G d d           Z7d#d!Z8d" Z9 e7            j:        Z:dS )$z'
Module to store conda build settings.
    N)
namedtuple)abspath
expanduser
expandvarsjoin   )binstar_uploadcc_conda_buildcc_platformroot_dirroot_writablesubdirurl_path)get_build_foldersget_conda_operation_locks
get_loggerrm_rf)get_default_variantwin32 c                  f    t          t          t          j                    dz                      ad S )Ni  )strinttimeinvocation_time     2lib/python3.11/site-packages/conda_build/config.pyset_invocation_timer   "   s&    #dikkD01122OOOr   zconda-buildtruefalseF   c                 :    t          j        dt                     | S )Nzf`conda_build.config.python2_fs_encode` is pending deprecation and will be removed in a future release.)warningswarnPendingDeprecationWarning)strins    r   python2_fs_encoder(   =   s#    Mp!   Lr   pathc                 f    t          j        dt                     t          j        | d           dS )z^Try to ensure a directory exists

    Args:
        path (os.PathLike): Path to directory
    z`conda_build.config._ensure_dir` is pending deprecation and will be removed in a future release. Please use `pathlib.Path.mkdir(exist_ok=True)` or `os.makedirs(exist_ok=True)` insteadTexist_okN)r$   r%   r&   osmakedirs)r)   s    r   _ensure_dirr/   E   s?     M	/ 	"	   Kt$$$$$$r      zlinux-64zlinux-32zosx-64zwin-64zwin-32)zlinux-cos5-x86_64zlinux-cos6-x86_64zlinux-cos5-x86zlinux-cos6-x86zosx-109-x86_64z
win-x86_64zwin-x86ConfigSettingzname, defaultc                  d   g t          dd          t          dt                    t          dd          t          dg           t          dd          t          dd          t          d	d          t          d
d          t          dd          t          dd           t          dd           t          dg           t          dd          t          dd          t          dd          t          dd          t          dd          t          dd           t          dd          t          dt                    t          dd          t          dd          t          dd          t          dd          t          dd           t          dd           t          dd          t          d t          j        d t
                                                    d!k              t          d"d          t          d#t          j        d$          r;t          t          t          t          j        d$                                        nt                    t          d%d          t          d&d          t          d'd          t          d(t          j        d(t                                                    d!k              t          d)t          j        d)t                                                    d!k              t          d*t          j        d*t                              t          d+t          j        d+t                                                    d!k              t          d,t          j        d,t                                                    d!k              t          d-d           t          d.d          t          d/d           t          d0d           t          d1d           t          d2g           t          d3g           t          d4d          t          d5d6          t          d7d           t          d8d           t          d9d           t          d:i           t          d;d<          t          d=d           t          d>d          t          d?d@          t          dAd           t          dBd           t          dCdD          t          dEd          t          dFt          j        dFt                               t          dGt          j        dGt"                              t          dHd          t          dId          t          dJd           t          dKg           t          dLd           t          dMt          j        dMt$                              t          dNt          j        dOt&                              t          dPd          t          dQt          j        dQdR                    S )SNactivateTanaconda_uploadforce_uploadchannel_urlsdirtyFinclude_recipeno_download_sourceoverride_channelsskip_existingtokenuserlabelsverbosedebugtimeouti  set_build_iddisable_pip_output_folderprefix_length_fallback_prefix_lengthlong_test_prefixlockingmax_env_retry   remove_work_dir_host_platform
_host_archtest_run_postfilename_hashingr    keep_old_work_src_cache_root	cache_dircopy_test_source_files	trim_skipuse_channeldataerror_overlinkingerror_overdependingnoarch_python_build_ageenable_staticno_rewrite_stdout_envindexbuild_is_host	_platform_arch_target_subdirvariant_config_filesexclusive_config_filesignore_system_variantshash_length   append_sections_fileclobber_sections_file	bootstrap
extra_metagit_commits_since_tagr   passwordsign	sign_withgpgidentityconfig_file
repositorypypitestverifyignore_verify_codesexit_on_verify_errormerge_build_host_merge_build_host
stats_file
extra_deps_pip_cache_dirzstd_compression_levelconda_pkg_format
pkg_formatsuppress_variablesbuild_id_patz{n}_{t})Settingr	   DEFAULT_PREFIX_LENGTHr
   getfilename_hashing_defaultlowerr   r   r   _src_cache_root_defaulterror_overlinking_defaulterror_overdepending_defaultnoarch_python_build_age_defaultenable_static_defaultno_rewrite_stdout_env_defaultignore_verify_codes_defaultexit_on_verify_error_defaultzstd_compression_level_defaultconda_pkg_format_defaultr   r   r   _get_default_settingsr   h   s   ]
D!!]!>22] 	%%] 	##	]
 	] 	 $''] 	$e,,] 	#U++] 	''] 	] 	] 	"] 		4  ] 	] 		3]  	%%!]" 	u%%#]$ 	 $''%]& 	($//']( 	 "788)]* 	"D))+], 		4  -]. 	##/]0 	!4((1]2 	 $''3]4 	d##5]6 	''7]8 	13KLLRRTT	
 	
9]B 	''C]D 	!+..)GJz.*<[*I*IJJKKLLL(		
 	
E]P 	($//Q]T 	T""U]\ 	!5))]]x 	24MNNTTVV	
 	
y]B 	!%'B egg	
 	
C]P 	%)+J 	
 	
Q]\ 	0EFFLLNN	
 	
]]f 	#')F egg	
 	
g]t 	u]z 	''{]@ 	T""A]B 	C]D 	 $''E]H 	&++I]N 	("--O]P 	(%00Q]R 	q!!S]X 	&--Y]Z 	'..[]\ 	T""]]^ 	b!!_]b 	'++c]f 	
D!!g]h 	i]j 	U##k]l 	
D!!m]n 	t$$o]p 	j))q]r 	$s]t 	!46QRR	
 	
u]| 	"57STT	
 	
}]L 	"E**M]R 	#U++S]V 	d##W]Z 	b!![]^ 	 $''_]` 	$(*H 	
 	
a]n 	|-EFF	
 	
o]v 	$e,,w]x 	 2>9 M MNNy] ]r   c                       fd}|S )Nc                      t          t                    }|                    d                    j                              | i |S )NzWARNING: attribute {} is deprecated and will be removed in conda-build 4.0.  Please update your code - file issues on the conda-build issue tracker if you need help.)r   __name__r%   format)argskwlogfuncs      r   func_wrapperz8print_function_deprecation_warning.<locals>.func_wrapper
  sQ    ""  &t} 5 5	
 	
 	

 tT R   r   r   )r   r   s   ` r   "print_function_deprecation_warningr   	  s$    ! ! ! ! ! r   c                   >    e Zd ZexZZeZeZdW fd	Zd Zd Z	e
d             Zej        d             Ze
d             Zej        d             Ze
d	             Ze
d
             Zej        d             Ze
d             Zd Ze
d             Ze
d             Zej        d             Ze
d             Zej        d             Ze
d             Zej        d             Ze
d             Zej        d             Ze
d             Zej        d             Ze
d             Zej        d             Ze
d             Zej        d             Ze
d             Ze
ed                         Zej        ed                         Ze
ed                          Zej        ed!                         Ze
ed"                         Zej        ed#                         Ze
ed$                         Zej        ed%                         Ze
ed&                         Z e j        ed'                         Z d( Z!d) Z"d* Z#d+ Z$d, Z%dXd/Z&e
d0             Z'e'j        d1             Z'e
d2             Z(e(j        d3             Z(e
d4             Z)e
d5             Z*e
d6             Z+e
d7             Z,e
d8             Z-d9 Z.e
d:             Z/e
d;             Z0e
d<             Z1e
d=             Z2d> Z3d? Z4d@ Z5dA Z6dB Z7e
dC             Z8e
dD             Z9e
dE             Z:e
dF             Z;e
dG             Z<e
dH             Z=e
dI             Z>e
dJ             Z?e
dK             Z@e
dL             ZAe
dM             ZBeBj        dN             ZBe
dO             ZCe
dP             ZDdYdRZEdS ZFdT ZGdU ZHdV ZI xZJS )ZConfigNc                     t                                                       |pi | _         | j        di | | j        r+t
          j                            | j                  | _        d S d S )Nr   )super__init__variantset_keysrQ   r-   r)   r   )selfr   kwargs	__class__s      r   r   zConfig.__init__  su    }" 	L#%7#5#5d6J#K#KD   	L 	Lr   c                     |                     |t          | |          rt          | |          n|          }t          | ||           ||v r||= d S d S N)r   hasattrgetattrsetattr)r   r   attrdefaultvalues        r   _set_attribute_from_kwargsz!Config._set_attribute_from_kwargs#  sg    

t)<)<I'$%%%'
 
 	dE"""6>>t >r   c                 b    fd fd}dD ]} | j         |                               dt           dd                     _                            dd           }                    dd           }|r^t          j                            t          j                            t          j                            |                               _	        |r_t          j                            t          j                            t          j                            |                               _
        nt           d	d            _
        t                      D ]#}                     |j        |j                   $                                D ]\  }}t!           ||           d S )
Nc                 P                        | d           }|s\| dk    rd} n| dk    rd} n| dk    rd} d|                                 z   }t          j        |          rt          j        |          n|}n0t	          |t
                    rt          |          dk    r|d	         }|S )
Npythonpynumpynpyr_baserCONDA_r   r   )popupperr-   getenv
isinstancelistlen)langr   versionvarr   s       r   envzConfig.set_keys.<locals>.env,  s    jjt,,G %8##DDW__ DDX%%D-,.IcNNG")C...GT** %s7||q/@/@!!*Nr   c                      |j                             |                    }|r=dt          |          vr%d                    |d         |dd          f          }|| |<   d S d S )N.r   r   )r   r   r   r   )r   r   r   r   r   s      r   set_langz!Config.set_keys.<locals>.set_lang<  sv    Cdl..t4455E &c%jj((HHeAhabb	%:;;E %& &r   )perlluar   r   r   build_id	_build_idr   rR   croot_croot)r   r   r   r   r-   r)   r   normpathr   rQ   r   r   r   namer   itemsr   )	r   r   r   r   source_cacher   r   r   r   s	   ``      @r   r   zConfig.set_keys+  s   	 	 	 	 	 	& 	& 	& 	& 	& 	& A 	) 	)DHT\4((((Jk20N0NOOzz+t44

7D)) 	#%7??  !3!3L!A!ABB$ $D   	8'//"'*:*:27;M;Me;T;T*U*UVVDKK "$$77DK +,, 	O 	OE++FEJNNNN "<<>> 	' 	'KD%D$&&&&	' 	'r   c                 F    | j         pt          j        dd          d         S )z_Always the native (build system) arch, except when pretending to be some
        other platform-r   )r^   r   rsplitr   s    r   archzConfig.arch^  s"     z5V]322155r   c                     t          t                    }|                    d           t          |          | _        d S )NzSetting build arch. This is only useful when pretending to be on another arch, such as for rendering necessary dependencies on a non-native arch. I trust that you know what you're doing.)r   r   r%   r   r^   r   r   r   s      r   r   zConfig.archd  s=    ""7	
 	
 	

 ZZ


r   c                 F    | j         pt          j        dd          d         S )z]Always the native (build system) OS, except when pretending to be some
        other platformr   r   r   )r]   r   r   r   s    r   platformzConfig.platformn  s"     ~9sA!6!6q!99r   c                     t          t                    }|                    d           |dk    rt          d          || _        d S )NzSetting build platform. This is only useful when pretending to be on another platform, such as for rendering necessary dependencies on a non-native platform. I trust that you know what you're doing.noarchzCconfig platform should never be noarch.  Set host_platform instead.)r   r   r%   
ValueErrorr]   r   s      r   r   zConfig.platformt  sZ    ""A	
 	
 	
 HU   r   c                 D    d                     | j        | j        f          S )zDetermines channel to download build env packages from.
        Should generally be the native platform.  Does not preclude packages from noarch.
        r   )r   r   r   r   s    r   build_subdirzConfig.build_subdir  s    
 xx	2333r   c                     	 | j                             d| j                                      dd          d         }n# t          $ r d}Y nw xY w| j        p|S )Ntarget_platformr   r   @   )r   r   r   split
IndexErrorrM   )r   variant_archs     r   	host_archzConfig.host_arch  st    	<++,=t?PQQWWQ LL  	 	 	LLL	.,.s   := AAc                     || _         d S r   )rM   r   r   s     r   r   zConfig.host_arch  s    r   c                     | j         dk    S )Nr   )host_platformr   s    r   r   zConfig.noarch  s    !X--r   c                 B    | j         t          k    st          | _         d S d S r   )r   r   r   s    r   reset_platformzConfig.reset_platform  s"    }++'DMMM ,+r   c                 ^    d                     | j        t          | j                  g          S )Nr   )r   r   r   r   r   s    r   r   zConfig.subdir  s#    xxDI7888r   c                     | j         p9| j                            d| j                                      dd          d         S )Nr   r   r   r   )rL   r   r   r   r   r   s    r   r   zConfig.host_platform  sE      W| 143DEEKKCQRSSTUV	
r   c                     || _         d S r   )rL   r   s     r   r   zConfig.host_platform      #r   c                 ^   | j                             d| j                  }| j        dk    r| j        }n`|d                    | j        t          | j                  g          k    r.d                    | j        t          | j                  g          }t                              ||          S )Nr   r   r   )r   r   r   r   r   r   r   SUBDIR_ALIASES)r   r   s     r   host_subdirzConfig.host_subdir  s    !!"3T5FGG))'FFsxx!3S5H5H IJJJJXXt13t~3F3FGHHF!!&&111r   c                     t                               ||          }|                    dd          }|d         | _        t	          |          dk    r|d         | _        d S d S )Nr   r   r   )r   r   r   r   r   r   )r   r   valuess      r   r   zConfig.host_subdir  s[    ""5%00c1%%#AYv;;??#AYDNNN ?r   c                     | j         p| j        S r   )r_   r   r   s    r   target_subdirzConfig.target_subdir  s    "6d&66r   c                     || _         d S r   )r_   r   s     r   r   zConfig.target_subdir  r   r   c                 .    | j         r| j         d         S d S )Nr   )ra   r   s    r   exclusive_config_filezConfig.exclusive_config_file  s     & 	2.q11tr   c                 z    t          | j                  dk    rt          d          |	g | _        d S |g| _        d S )Nr   zYCannot set singular exclusive_config_file if multiple exclusive_config_files are present.)r   ra   r   r   s     r   r   zConfig.exclusive_config_file  sU    t*++a//B   =*,D'''+0'D'''r   c                 ,    | j         r| j         n| j        S r   )rQ   r   r   s    r   src_cache_rootzConfig.src_cache_root  s    '+';Kt##Kr   c                     || _         d S r   )rQ   r   s     r   r   zConfig.src_cache_root  s    $r   c                    | j         st          j        d          }t          j        d          }|r"t          t          |                    | _         nt|r/t          t          t          |                              | _         nCt          rt          t          d          | _         n!t          t          d                    | _         | j         S )z1This is where source caches and work folders liveCONDA_BLD_PATHzroot-dirz	conda-bldz~/conda-bld)r   r-   r   r
   r   r   r   r   r   r   r   )r   _bld_root_env_bld_root_rcs      r   r   zConfig.croot  s     { 
	AI&677M)-j99L A%j&?&?@@ A%jL1I1I&J&JKK A"8[99%j&?&?@@{r   c                     || _         dS )zBSet croot - if None is passed, then the default value will be usedN)r   )r   r   s     r   r   zConfig.croot  s     r   c                     | j         p| j        S r   )rD   r   r   s    r   output_folderzConfig.output_folder  s    "0dj0r   c                     || _         d S r   )rD   r   s     r   r   zConfig.output_folder  r   r   c                 V    t           j                            | j        | j                  S )z`This is the core folder for a given build.
        It has the environments and work directories.)r-   r)   r   r   r   r   s    r   build_folderzConfig.build_folder  s     w||DJ666r   c                 ^    | j                             dt          |           d                   S Nr   r   r   r   r   s    r   	CONDA_LUAzConfig.CONDA_LUA  s*     |':4'@'@'GHHHr   c                     || j         d<   d S r  r   r   s     r   r  zConfig.CONDA_LUA  s     $Ur   c                     | j                             dt          |           d                   }t          d                    |                    d                              S )Nr   r   r   r   r   r   r   r   r   r   s     r   CONDA_PYzConfig.CONDA_PY  sO       +>t+D+DX+NOO2775;;s++,,---r   c                 ~    t          |          }d                    |d         |dd          f          | j        d<   d S )Nr   r   r   r   r   r   r   r   s     r   r  zConfig.CONDA_PY  s>     E

!$58U122Y*?!@!@Xr   c                     | j                             dt          |           d                   }t          d                    |                    d                              S )Nr   r   r   r
  r   s     r   	CONDA_NPYzConfig.CONDA_NPY  sO       *=d*C*CG*LMM2775;;s++,,---r   c                 ~    t          |          }d                    |d         |dd          f          | j        d<   d S )Nr   r   r   r   r  r   s     r   r  zConfig.CONDA_NPY"  s>     E

 #%(E!""I)> ? ?Wr   c                 ^    | j                             dt          |           d                   S Nr   r  r   s    r   
CONDA_PERLzConfig.CONDA_PERL(  s*     |(;D(A(A&(IJJJr   c                     || j         d<   d S r  r  r   s     r   r  zConfig.CONDA_PERL-  s      %Vr   c                 ^    | j                             dt          |           d                   S Nr   r  r   s    r   CONDA_RzConfig.CONDA_R2  s*     |*=d*C*CH*MNNNr   c                     || j         d<   d S r  r  r   s     r   r  zConfig.CONDA_R7  s     "'Xr   c                 :   |                     d          s|dk    rot          j        dk    r_t          j                            t          j                            |d                    rt          |d          }n!t          |d          }nt          |d          }|S )Nwinr   r   zpython_d.exez
python.exez
bin/python)
startswithsysr   r-   r)   isfiler   r   prefixr   ress       r   _get_pythonzConfig._get_python<  s    u%% 	-  S\W%<%<w~~bgll6>BBCC 16>226<00v|,,C
r   c                 v    |                     d          rt          |ddd          }nt          |d          }|S )Nr  Librarybinzperl.exezbin/perl)r  r   r  s       r   	_get_perlzConfig._get_perlH  sA    u%% 	+vy%<<CCvz**C
r   c                    | j                             dt          |           d                   }|r|d         dk    rdnd}|                    d          rt	          |dd| d          }nt	          |d	|           }|S )
Nr   r   2luajitr  r#  r$  z.exezbin/)r   r   r   r  r   )r   r  r   lua_verbinary_namer   s         r   _get_luazConfig._get_luaP  s    ,""5*=d*C*CE*JKK#*LwqzS/@/@hhuu%% 	5vy%K1E1E1EFFCCv3k3344C
r   c                    |                     d          s|dk    rRt          j        dk    rBt          |dd          }t          j                            |          st          |dd          }nt          |dd          }|S )Nr  r   r   ScriptszR.exer$  R)r  r  r   r   r-   r)   existsr  s       r   _get_rzConfig._get_rY  s~    u%% 	+  S\W%<%<vy'22C7>>#&& 365'22vuc**C
r   c                     |                     d          rBt          |dd          }t          j                            |          st          |dd          }nt          |dd          }|S )Nr  r-  zRscript.exer$  Rscript)r  r   r-   r)   r/  r  s       r   _get_rscriptzConfig._get_rscripte  sg    u%% 	1vy-88C7>>#&& 965-88vui00C
r   0Fc                 F   d}|t          |          dd}g }| j        s|rt                       n| j        r| j        nd} |j        di |}t          | j                  }|D ]^}	t          j        	                    |	          }
t          j        |d|
t          j                  }||k    r|                    |	           _d }|rLt          j        	                    |d                   }t          j                            |d         d          }n4t          |d	<   | j        }t          j                            |          r|nd }| j        r| j        r|rt          j                            |          r
J d
            | j        r>|r<t+          t          j        | j                            dk    r| j        nd }|| _        d S | j        r| j        nd} |j        di || _        |r7| j        }||k    r,t/          |           t1          j        ||           d S d S d S d S d S )Nz([_-])([0-9]{13})z{t})nvtz{n}-{v}_{t}z\g<1>{t})flagsworkr8  zOpackage name should not be a absolute path, to preserve croot during path joinsr   r   )r   r7   r   r~   r   r   r   r-   r)   basenameresubUNICODEappendr   r   work_dirr/  rB   r   isabsr   listdirr   shutilmove)r   package_namepackage_versionresettime_repat_dictbuild_foldersold_build_id_tbuild_folders_allfolder_fullfolderuntimed_folderprev_build_idold_dirtest_old_dirr   rA  s                    r   compute_build_idzConfig.compute_build_ido  sr   &%C,@,@uMMz 	! &#%%%262CVT..N2^2>>X>>N 1$* = =0 6 6))+66!#fBJ!W!W!W!^33!((555 M 	MG,,]2->??Mgll=#4f==GG ,HSM=L&(gnn\&B&BLllG 	7dn 	7 	7w}}\22  6   z 7m 7+.rz$-/H/H+I+IA+M+M$--SW!. 150AT4,,}!0!<!<8!<!< 7#}H(**hGX66666!	7 	7 	7 	77 7**r   c                     | j         S )zThis is a per-build (almost) unique id, consisting of the package being built, and the
        time since the epoch, in ms.  It is appended to build and test prefixes, and used to create
        unique work folders for build and test.)r   r   s    r   r   zConfig.build_id  s    
 ~r   c                     |                     d                               d          }t          j                            |          r
J d            || _        d S )N/\zLbuild_id should not be an absolute path, to preserve croot during path joins)rstripr-   r)   rB  r   )r   r   s     r   r   zConfig.build_id  s_    $$S))0066	7==++ 	
 	
2	
 	
 	
 #r   c                     | j         S r   rF   r   s    r   prefix_lengthzConfig.prefix_length  s    ""r   c                     || _         d S r   r[  )r   lengths     r   r\  zConfig.prefix_length  s    $r   c                 ,    t          | j        d          S )N_h_envr   r  r   s    r   _short_host_prefixzConfig._short_host_prefix  s    D%x000r   c                    | j         t          | j                  z
  }d}t          t	          j        |t          |          z            dz             }| j        ||z  z   d | j                  }t          | j        |          S N
_placeholdr   )r\  r   rb  r   mathceilmax)r   placeholder_lengthplaceholderrepeatss       r   _long_host_prefixzConfig._long_host_prefix  s    !/#d6M2N2NN"di 2S5E5E EFFJKK.;1FF d  
 4*K888r   c                 N    | j         r| j        }nt          | j        d          }|S )zThe temporary folder where the build environment is created.  The build env contains
        libraries that may be linked, but only if the host env is not specified.  It is placed on
        PATH.
_build_env)rv   host_prefixr   r  )r   r  s     r   build_prefixzConfig.build_prefix  s0    
 ! 	;%FF$+\::Fr   c                 ,    t           r| j        S | j        S )zThe temporary folder where the host environment is created.  The host env contains
        libraries that may be linked.  It is not placed on PATH.)on_winrb  rl  r   s    r   ro  zConfig.host_prefix  s      	+**%%r   c                 ,    t          | j        d          S )N	_test_envra  r   s    r   _short_test_prefixzConfig._short_test_prefix  s    D%{333r   c                     | j         t          |          z
  }d}t          t          j        |t          |          z            dz             }|||z  z   d | j                  }t          ||          S rd  )r\  r   r   rf  rg  rh  )r   base_prefixri  rj  rk  s        r   _long_prefixzConfig._long_prefix  st    !/#k2B2BB"di 2S5E5E EFFJKK"W{%::<Pd>P<PQ;,,,r   c                 p    t           s| j        s| j        S |                     | j                  dd         S )z:The temporary folder where the test environment is createdN)rr  rG   ru  rx  r   s    r   test_prefixzConfig.test_prefix  sA      	+. 	+**   !899#2#>>r   c                 B    |                      | j        | j                  S r   )
python_binrp  r   r   s    r   build_pythonzConfig.build_python  s    t0$-@@@r   c                 B    |                      | j        | j                  S r   )r!  ro  r   r   s    r   host_pythonzConfig.host_python  s     0$2DEEEr   c                 B    |                      | j        | j                  S r   )r}  r{  r   r   s    r   test_pythonzConfig.test_python  s    t/1CDDDr   c                 .    |                      ||          S r   )r!  r   r  r   s      r   r}  zConfig.python_bin  s    111r   c                 .    |                      ||          S r   )r%  r  s      r   perl_binzConfig.perl_bin  s    ~~fh///r   c                 .    |                      ||          S r   )r+  r  s      r   lua_binzConfig.lua_bin  s    }}VX...r   c                 .    |                      ||          S r   )r0  r  s      r   r_binzConfig.r_bin  s    {{68,,,r   c                 .    |                      ||          S r   )r3  r  s      r   rscript_binzConfig.rscript_bin  s      222r   c                 \    t          | j        d          }t          j        |d           |S )zIPath to the info dir in the build prefix, where recipe metadata is storedinfoTr+   r   ro  r-   r.   r   r)   s     r   info_dirzConfig.info_dir  s0     D$f--
D4((((r   c                 \    t          | j        d          }t          j        |d           |S )zaPath to the conda-meta dir in the build prefix, where package index json files are
        storedz
conda-metaTr+   r  r  s     r   meta_dirzConfig.meta_dir  s0     D$l33
D4((((r   c                 \    t          | j        d          }t          j        |d           |S )z2Where packages that fail the test phase are placedbrokenTr+   )r   r   r-   r.   r  s     r   
broken_dirzConfig.broken_dir  s/     DJ))
D4((((r   c                 f    t          | j        | j                  }t          j        |d           |S )zDir where the package is saved.Tr+   )r   r   r   r-   r.   r  s     r   bldpkgs_dirzConfig.bldpkgs_dir  s2     DJ 011
D4((((r   c                     t          | j        | j                  t          | j        t                    t          | j        d          hS )z,Dirs where previous build packages might be.r   )r   r   r   r   r   s    r   bldpkgs_dirszConfig.bldpkgs_dirs"  s>     T-..V$$X&&
 	
r   c                 \    t          | j        d          }t          j        |d           |S )z6Where tarballs and zip files are downloaded and stored	src_cacheTr+   r   r   r-   r.   r  s     r   r  zConfig.src_cache-  0     D'55
D4((((r   c                 \    t          | j        d          }t          j        |d           |S )z,Where local clones of git sources are stored	git_cacheTr+   r  r  s     r   r  zConfig.git_cache4  r  r   c                 \    t          | j        d          }t          j        |d           |S )z+Where local clones of hg sources are storedhg_cacheTr+   r  r  s     r   r  zConfig.hg_cache;  s0     D'44
D4((((r   c                 \    t          | j        d          }t          j        |d           |S )z/Where local checkouts of svn sources are stored	svn_cacheTr+   r  r  s     r   r  zConfig.svn_cacheB  r  r   c                 \    t          | j        d          }t          j        |d           |S )z6Where the source for the build is extracted/copied to.r;  Tr+   r   r  r-   r.   r  s     r   rA  zConfig.work_dirI  s0     D%v..
D4((((r   c                 j    | j         pt          | j        d          }t          j        |d           |S )N	pip_cacheTr+   )ry   r   r  r-   r.   r  s     r   pip_cache_dirzConfig.pip_cache_dirP  s6    "Jd4+<k&J&J
D4((((r   c                     || _         d S r   )ry   r  s     r   r  zConfig.pip_cache_dirV  s    "r   c                 \    t          | j        d          }t          j        |d           |S )zTThe temporary folder where test files are copied to, and where tests start executiontest_tmpTr+   r  r  s     r   test_dirzConfig.test_dirZ  s0     D%z22
D4((((r   c                 "    | j         | j        k    S r   )r   r   r   s    r   subdirs_samezConfig.subdirs_samea  s    4#444r   Tc                 P   |r"t          | d          st          | d          s | j        r9t          j                            | j                  rt          | j                   nK| j        | j        | j	        | j
        fD ]0}t          j                            |          rt          |           1t          j                            t          j                            | j        d                    r2t          t          j                            | j        d                     n+t          d| j        d| j        d| j
        d| j	        d	  	         t          | j        | j                  D ]:}t          j                            |j                  rt          |j                   ;d S )	Nr7   rP   prefix_filesz)
Leaving build/test directories:
  Work:
z	
  Test:
z:
Leaving build/test environments:
  Test:
source activate z
  Build:
source activate z

)r   r   r-   r)   isdirr  r   rA  r  rp  r{  r  r   printr   rH   r  	lock_file)r   remove_foldersr)   locks       r   cleanzConfig.cleane  s    	D'**	 D/22	
 } $7==!233 -$+,,, MM%$	 $ $D w}}T** $dw~~bgll4+<nMMNN Gbgll4#4nEEFFFAR .!
 
 
 .dlD<MNN 	& 	&Dw~~dn-- &dn%%%	& 	&r   c                 8    | j         D ]}t          |           d S r   )r  r   )r   rO  s     r   
clean_pkgszConfig.clean_pkgs  s+    ' 	 	F&MMMM	 	r   c                     t          j         |           }t          j        | j                  |_        t          | d          rt          j        | j                  |_        |S )Nvariants)copydeepcopyr   r   r  )r   news     r   r  zConfig.copy  sL    ioomDL114$$ 	8=77CL
r   c                     d S r   r   r   s    r   	__enter__zConfig.__enter__  s    r   c                     t          | d          sO|Mt          | d          s=t          t                                        d           |                                  d S |                     d           d S )Nr7   rP   zh--dirty flag and --keep-old-work not specified. Removing build/test folder after successful build/test.
F)r  )r   r   r   r  r  )r   e_typee_value	tracebacks       r   __exit__zConfig.__exit__  s    g&&	-D/22  x  %%L   JJLLLLLJJeJ,,,,,r   r   )r4  F)T)Kr   
__module____qualname____file____path____package____doc__r   r   r   propertyr   setterr   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r  r  r!  r%  r+  r0  r3  rT  r   r\  rb  rl  rp  ro  ru  rx  r{  r~  r  r  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  rA  r  r  r  r  r  r  r  r  __classcell__)r   s   @r   r   r     s       ""HxKGL L L L L L  1' 1' 1'f 6 6 X6
 
[    [  : : X:
 _  _ 4 4 X4 / / X/       . . X.( ( ( 9 9 X9 
 
 X
 $ $ $ 2 2 X2 ' ' ' 7 7 X7 $ $ $   X
 !	2 	2 "!	2 L L XL % % %   X \  \ 1 1 X1 $ $ $ 7 7 X7 'I I (' XI '$ $ (' $ '. . (' X. _'A A (' _A '. . (' X. '@ @ (' @ 'K K (' XK '% % (' % 'O O (' XO ^'' ' (' ^'
 
 
    
 
 
  ,7 ,7 ,7 ,7\   X _# # _# # # X# % % % 1 1 X1 9 9 X9   X & & X& 4 4 X4- - - ? ? X? A A XA F F XF E E XE2 2 20 0 0/ / /- - -3 3 3   X   X   X   X 
 
 X
   X   X   X   X   X   X
 # # #   X 5 5 X5%& %& %& %&N      - - - - - - -r   r   c                     | st          |          } n|                                 } |r | j        di | |r| j                            |           | S )zOAlways returns a new object - never changes the config that might be passed in.r  r   )r   r  r   r   update)configr   r   s      r   get_or_merge_configr    sn     (((  "!!&!!! 'g&&&Mr   c           	         |                      d          p|                      d          pd}g }|D ]}t          j                            |          rt          j                            |          skt          j                            t          j                            t          j                            t          j                    |                              }t          |          }|
                    |           |S )Nchannelchannelsr   )r   r-   r)   r  rB  r   r   r   getcwdr   r@  )r   r6   final_channel_urlsurls       r   get_channel_urlsr    s    88I&&D$((:*>*>D"L ' ' 7== 	 7==%% Xg&&rwrw||BIKKQT7U7U'V'VWW3--C!!#&&&&r   r   );r  r  rf  r-   r=  rD  r  r   r$   collectionsr   os.pathr   r   r   r   conda_interfacer	   r
   r   r   r   r   r   utilsr   r   r   r   r  r   r   rr  r   r   conda_buildr   r   r   r   r   r   r   r   r   r   r   r(   PathLiker/   r   r   r   r   r   r   r  r  r   r   r   r   <module>r     s      				 				  



   " " " " " " 9 9 9 9 9 9 9 9 9 9 9 9                  S R R R R R R R R R R R ) ) ) ) ) )		 3 3 3
      !  # % "#   '   $  !#   %bk % % % %$   $#    *_o
6
6^ ^ ^B
 
 
Q
- Q
- Q
- Q
- Q
- Q
- Q
- Q
-h     $ 	r   