
    xhe0                       d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZ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mZ d dlm Z  ddl!m"Z" ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7  e3e8          Z9dCdZ:d Z; G d d          Z< e<            Z= e%j>        dd d!d"#           e%j>        dd d$           e%j>        dd d%          	 	 dDdEd,                                    Z?	 dFdGd3Z@d4 ZAdHdId7ZBd8 ZCejD        d-d-d-d9d:fdJd@ZEejD        d9fdKdAZFdB ZGdS )L    )annotationsN)defaultdict)groupby)
itemgetter)abspathbasenamedirnameexistsjoinnormcase)Path)TemporaryDirectory)IterableLiteral)Solver)	get_index)
PrefixData)PrefixRecord   )conda_interface)specs_from_args)
deprecated)get_linkagesget_package_obj_filesget_untracked_obj_files)codefile_class	machofile)
get_rpathshuman_filetype)
comma_joinensure_list
get_loggeron_linuxon_macon_winpackage_has_filepathstr | os.PathLike | PathprefixreturnIterable[PrefixRecord]c              #  "  K   	 t          |                               |          } n# t          $ r Y nw xY wt          |           }t	          t          |                                                    D ]}|d |d         D             v r|V  dS )zDetect which package(s) a path belongs to.

    Given the path (of a (presumably) conda installed file) iterate over
    the conda packages the file came from.  Usually the iteration yields
    only one package.
    c              3  4   K   | ]}t          |          V  d S N)r   ).0files     7lib/python3.11/site-packages/conda_build/inspect_pkg.py	<genexpr>z which_package.<locals>.<genexpr>C   s(      FFXd^^FFFFFF    filesN)r   relative_to
ValueErrorr   r   striter_records)r'   r)   normcase_pathprecs       r1   which_packager;   .   s      Dzz%%f--    TNNM3v;;''4466  FFWFFFFFJJJ s   "' 
44c           	        d}t          t          | t                              t                              D ]\  }}||dz   z  }t          |t          d                    D ][t                    D ]$}|k    r	|         |d| d|          dz  }%t          fdD                       dk    r|dz  }\|dz  }|S )	N key
filenamez  z: c                0    g | ]}|         
|k    |S r.    )r/   if_infor?   s     r1   
<listcomp>z%print_object_info.<locals>.<listcomp>R   s'    LLL!)>188A888r3   r   )r   sortedr   len)infor?   output_stringheadergroupdatarE   s    `    @r1   print_object_inforN   G   s   M *S//!B!B!BJsOOTT  $&U
:(>(>??? 	& 	&Fv ? ?3;;$<'!>d!>!>fTl!>!>!>>LLLLLvLLLMMPQQQ%r3   c                      e Zd Zd ZdS )_untracked_packagec                    dS )Nz<untracked>rC   )selfs    r1   __str__z_untracked_package.__str__Y   s    }r3   N)__name__
__module____qualname__rS   rC   r3   r1   rP   rP   X   s#            r3   rP   z24.1.0z24.3.0platformsubdir)renameprependminimal_hintrC   packagesIterable[str]
str | Nonechannel_urlsNonec           	         t                      5 }t          |||pt          j        gt	          |                                         d                                           d d d            d S # 1 swxY w Y   d S )NT)ignore_pinned)r   r   r   rX   r   solve_for_transactionprint_transaction_summary)r\   rX   r_   r)   s       r1   check_installre   `   s     
		 P--.H%%		
 	

  
d

3
34M4M4O4O4OP P P P P P P P P P P P P P P P P Ps   AA//A36A3Fdepmap^dict[PrefixRecord | Literal['not found' | 'system' | 'untracked'], list[tuple[str, str, str]]]
show_filesboolr7   c                n   ddddd}t          |                                 fd          D ]\  }}|d|z  z  }|r&t          |          D ]\  }}}|d	| d
| d| dz  }nJt          t          t          t	          dd          |                              D ]\  }}|d	| d
| dz  }|dz  }|S )N)r   system)   	not found)   	untracked)rk   rm   ro   r=   c                    t          | d         t                    rd| d         j        fn#                    | d         d| d         f          S )Nr      )
isinstancer   nameget)r?   
sort_orders    r1   <lambda>z print_linkages.<locals>.<lambda>   sK    #a&,//5CFK((ACF44 r3   r>   z%s:
z    z (z) from r@   r   r   z)
)rG   itemssetmapr   )	rf   rh   rJ   r:   linkslibr'   binaryru   s	           @r1   print_linkagesr}   q   s1     %%	 J M5 5 5 5    e 	4' 	9%+E]] G G!T6!F!F!Ft!F!FF!F!F!FFG $CJq!,<,<e(D(D$E$EFF 9 9	T!8!8!8t!8!8!88r3   c           
        t           rt          |          S t          r(|t          |           k    rt          t	          ||                     S d|v rt          t	          ||                     }|sdS |D ]w}|                    d|          }|                    dt	          |t          |                               }t          t          t	          ||                              r|} nxdS |                    dt	          |t          |                               }|	                    d          rt          |          S dS d S )Nz@rpathzNO LC_RPATH FOUNDz@loader_pathrm   /)
r#   r   r$   r   r   r   replacer	   r
   
startswith)r|   r'   r)   rpathsrpathpath1s         r1   replace_pathr      sH    t}}	 8F####4//000tVV 4 455F 
'**# ' 'E LL599E!MM.$vwv:W:WXXEgd65&9&9::;; $ ';||ND,I,IJJ??3 	!4== {' r3   defaultschannelc                   d}dD ]}t                               d|           t          | gd|          D ]}|d         }|dv r|                    d          r%|d	         }t                               d
||           	 t	          | d| g| gd|           e# t
          $ r8}d}t                               d| |||t          |                     Y d }~d }~ww xY w|S )NT)zosx-64zlinux-32zlinux-64zwin-32zwin-64z######### Testing subdir %s ########F)r_   rZ   rW   rs   >   conda-buildconda@versionzTesting %s=%s=)r_   rZ   rX   z[%s/%s::%s=%s] %s)logrI   r   endswithre   	Exceptionerrorrepr)r   successrX   r:   rs   r   errs          r1   test_installabler      sT   GH  6???G9efUUU 	 	D<D///s##  9oGHH_dG444((w(()")!!	      	 	 			'II       	)	< Ns   ?B
C$.CCc                l    t          |           dz   dt          t          |                     z  z   dz   S )Nr@   -z

)r7   rH   )texts    r1   _underlined_textr      s.    t99tcCD		NN22V;;r3   packager=   "Iterable[str | _untracked_package]ro   all_packagesr   !Literal['package' | 'dependency']c                T   | s|s|st          j        d           nt          rt          j        d           t          |          }d t	          t          |                                                    D             }|r!t          |                                          } t          |           } |r| 
                    t                     i }| D ]0}	|	t          k    rt          |          }
n5|	|vrt          j        d|	 d|            nt          ||	         |          }
t          |
||          }t          t                     x||	<   }|                                D ]\  }}|D ]\  }}|dvrt%          |||          n|}	 t          t          |                              |                    }n# t(          $ r d }Y nw xY w|rt!          t+          ||                    }t-          |          dk    rJt/          t0                                        d|t5          t7          t
          |                               nN|sLt9          |          r|d	         
                    |||f           n|d
         
                    |||f           |D ] }||         
                    |||f           !O|d
k    r |d
         
                    |||f           u|d         
                    |||f           2d}|dk    r2| D ].}|t;          |          z  }|t=          ||         |          z  }/n|dk    rt          d           }|D ]2}||         D ]'}||         |         r||         |         ||         |<   (3t          t?          |                                          dd
hz
            }|dd
gz   D ].}|t;          |          z  }|t=          ||         |          z  }/nt)          d|z            tA          |d          r|!                    d          }|S )Nz=At least one package or --untracked or --all must be providedzCError: conda inspect linkages is only implemented in Linux and OS Xc                    i | ]
}|j         |S rC   rs   r/   r:   s     r1   
<dictcomp>z$inspect_linkages.<locals>.<dictcomp>       TTTTDTTTr3   Package  is not installed in >   r=   rm   r   z,Warning: %s comes from multiple packages: %sro   rm   rk   r=   r   )rh   
dependencyc                 *    t          t                    S r.   )r   listrC   r3   r1   rv   z"inspect_linkages.<locals>.<lambda>!  s    ;t+<+< r3   zUnrecognized groupby: %sdecodeutf-8)"sysexitr%   r   r   r7   r8   rG   keysr!   appenduntracked_packager   r   r   r   r   rw   r   r5   r6   r;   rH   r"   rT   warnr    ry   r
   r   r}   rx   hasattrr   )r\   r)   ro   r   rh   r   sysroot	installedpkgmaprs   	obj_fileslinkagesrf   r|   pathsr{   r'   relativeprecsr:   rJ   pkginverted_mapdepks                            r1   inspect_linkagesr      s     XI Xl XPQQQQ	 XVWWW&\\FTTZF-D-D-Q-Q-S-STTTI ,)..**++8$$H +)***>@F (A (A$$$/77II""HCCC6CCDDDD-iovFFI	67;; +D 1 11tv%^^-- 	A 	AMFE" A A	T #444 !v666 
$"4::#9#9&#A#ABBHH! $ $ $#HHH$  A x!@!@AAE5zzA~~"8,,11J &s377   
 # P!$<< P";/66Xv7NOOOO";/66Xv7NOOO % E Et++S(F,CDDDDE[((;'..T6/BCCCC8$++S$,?@@@@;A	A@ M) 	P 	PC-c222M^F3KJOOOOMM	P 
L	 	 "#<#<== 	> 	>Cc{ > >#;s# >-3C[-=L%c*>
 3|((**++x.EEFF+.. 	V 	VC-c222M^L,=*UUUUMM	V
 3g=>>>}h'' 6%,,W55s   /F77G	G	c           
        t           st          j        d           t          |          }d t	          t          |                                                    D             }d}t          |           D ]}|t          k    rt          |          }n/||vrt          d| d|           t          ||         |          }|t          |          z  }g }|D ]u}t          ||          }	t          |	d          }
|
t          k    rG|                    t#          |	d           d                    t%          |	                    |d	           v|t'          ||          z  }t)          |d
          r|                    d          }|S )Nz8Error: conda inspect objects is only implemented in OS Xc                    i | ]
}|j         |S rC   r   r   s     r1   r   z#inspect_objects.<locals>.<dictcomp>=  r   r3   r=   r   r   T)skip_symlinks:)filetyper   rA   r   r   )r$   r   r   r   r   r7   r8   r!   r   r   r6   r   r   r   r   r   r   r   r   rN   r   r   )r\   r)   r   r   rJ   rs   r   rI   fr'   codefiles              r1   inspect_objectsr   4  s   
  MKLLL&\\FTTZF-D-D-Q-Q-S-STTTIMH%% : :$$$/77II""KKK6KKLLL-iovFFI)$/// 
	 
	A??D%d$???H9$$$24$>$>!$*T*:*:!;!;$%    	*4999}h'' 6%,,W55r3   c                    i }t          |           D ][}t          j                            |          }i ||<   t	          |d          }|rt          j        |          ||         d<   Vd||<   \|S )Nzinfo/hash_input.jsonrecipez<no hash_input.json in file>)r!   osr'   r   r&   jsonloads)r\   hash_inputsr   pkgname
hash_inputs        r1   get_hash_inputr   ]  s    K8$$ B B'""3''!G%c+ABB
 	B-1Z
-C-CK **#AK  r3   )r'   r(   r)   r(   r*   r+   )NrC   )r\   r]   rX   r^   r_   r]   r*   r`   )F)rf   rg   rh   ri   r*   r7   )r   )r   r7   r*   ri   )r\   r   r)   r(   ro   ri   r   ri   rh   ri   r   r   )r\   r]   r)   r(   r   r7   )H
__future__r   r   r   r   collectionsr   	itertoolsr   operatorr   os.pathr   r   r	   r
   r   r   pathlibr   tempfiler   typingr   r   	conda.apir   conda.core.indexr   conda.core.prefix_datar   conda.models.recordsr   r=   r   r   deprecationsr   os_utils.lddr   r   r   os_utils.lieflddr   r   os_utils.machor   r   utilsr    r!   r"   r#   r$   r%   r&   rT   r   r;   rN   rP   r   argumentre   r}   r   r   r   r)   r   r   r   rC   r3   r1   <module>r      s   # " " " " "  				 



 # # # # # #             F F F F F F F F F F F F F F F F       ' ' ' ' ' ' $ $ $ $ $ $ $ $       & & & & & & - - - - - - - - - - - -            % $ $ $ $ $         
 8 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6                  j   2  "       
 '&((  XxHEEEXx33Xx88 "$P P P P 98 43 FEP& ! ! ! ! !H  2" " " " "J< < < (+z1:Z Z Z Z Z~ (+z& & & & &R    r3   