
@K7]c        )   @` s  d  d l  m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l	 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 m Z m Z m Z d  d l Z y d  d l m Z Wn e k
 r e Z n Xd  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% d  d l& m' Z' m( Z( m) Z) m* Z* m+ Z+ m, Z, d  d l- m. Z. d  d l/ m0 Z0 d  d l1 m2 Z2 d  d l3 m4 Z4 d  d l5 m6 Z6 m7 Z7 m8 Z8 e j9 d k r(d  d l m: Z: n  e r:e j; Z; n d  d l; m; Z; i d d 6d g d 6d g d 6Z< e d   Z= d!   Z> e d"  Z? d#   Z@ d$   ZA d%   ZB d&   ZC d d'  ZD d(   ZE e e d d)  ZF d d*  ZH d+   ZI d d-  ZJ d d. d/  ZK d0   ZL d1   ZM d2   ZN d3   ZO d4 d d5     YZP d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dG dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] g) ZQ d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds g ZR dt   ZS du   ZT dv   ZU dw   ZV dx   ZW dy   ZX dz   ZY e d{  ZZ d|   Z[ d}   Z\ d~   Z] d   Z^ d   Z_ d   Z` d   Za d S(   i    (   t   absolute_importt   divisiont   print_function(   t   defaultdictt   OrderedDict(   t   partial(   t   fnmatcht   fnmatchcaset   filterN(   t   callt   check_outputt   CalledProcessError(   t   readlink(   t   external(   t   PY3(   t   lchmod(   t   linked_data(   t   walk_prefix(   t   TemporaryDirectory(   t   md5_file(   t   utils(   t	   have_lieft   get_exports_memoizedt   get_linkages_memoizedt   get_rpaths_rawt   get_runpaths_rawt	   set_rpath(   t   codefile_type(   t   get_package_obj_files(   t   get_build_index(   t   which_package(   t   OverLinkingErrort   OverDependingErrort   RunPathErrort   darwin(   t   macho(   t   scandirt   DLLfilet   EXEfilet   wint	   machofilet   osxt   elffilet   linuxc         C` s  t  j j | |   } t |  r% d  St  j j |  r; d  St  j j |  sQ d  St  j |  j d k rm d  St } t  j	 | d  t
 j | d d d t j   J} y  | j d  } | j d  Wn t k
 r d  SXt j d t j  } y+ t j | j   d d d  d	 t j }	 Wn t k
 r;| j   }	 n Xy | j |	  }
 Wn; t k
 rt j d t j  } t } | j |	  }
 n X|
 r| rt j d
 t j  n t j d t j  } | j |
 j    sd  Sn d  S|	 } Wd  QXd t j  d k r| rd | d n | d t  j j! |  } | rUt" | d  rU| j#   } n  | j$ | | d d } | | k r}d  St% d |   t
 j | d d t j   ? } y | j& |  Wn$ t k
 r| j& | j'    n XWd  QXd  S(   Ni    i  t   modes   r+t   encodingid   s   ^#!.+$t   tagnamet   flagss   \/python[w]?(?:$|\s|\Z)s   \/python[w]?(:$|\s|\z)s   #!R"   s
   /bin/bash s   /bin/pythonws   /bin/t   encodet   counti   s   updating shebang:t   w((   t   ost   patht   joinR   t   islinkt   isfilet   statt   st_sizet   Falset   chmodt   iot   opent   localet   getpreferredencodingt   readt   seekt   UnicodeDecodeErrort   ret   compilet   MR   t	   mmap_mmapt   filenot   Nonet   mmap_MAP_PRIVATEt   OSErrort   matcht	   TypeErrort   Truet   searcht   groupt   syst   platformt   basenamet   hasattrR0   t   subt   printt   writet   decode(   t   ft   prefixt   build_pythont
   osx_is_appR4   t   bytes_t   fit   datat   SHEBANG_PATt   mmt   mt   python_patternt   py_exect   new_datat   fo(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   fix_shebang4   sb    $+#!c         C` s   t  j j |   } d j | j d j d  d   } t t  j j t j | j	 |  d | j d  d  d   } | j
 d |  Wd  QXd  S(	   Nt   .t   pythoni   s   %s.ptht   -i    R2   s   ./%s
(   R3   R4   RR   R5   t   variantt   splitR=   R   t   get_site_packagest   host_prefixRV   (   t   egg_patht   configt   fnt   py_verRe   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt	   write_pths   s
    ##c      
   ` sk  g  |  D] } t  j j | |  ^ q   d j | j d j d  d   } t j | |  } x~t j t  j j | d   D]^ t  j j   r| s t	    f d   t
  t d t D  r t  d | q| n  t d   y' t j t  j j  d	   d
  Wn t k
 r&n Xt j t  j j  d	   xt  j   D]<} | d k rt j t  j j  |   qSt  j j t  j j | |   ray] t j t  j j  |  t  j j | |  | j d | j t j t  j j  |   Wqt k
 r]} t  j j t |  j   d  } t d j d  d | d |    qXqSt j t  j j  |  t  j j | |   qSWq| t  j j   r|    k rq| n  t d   t  d | q| q| Wg    D]* } | j d j t  j j   r| ^ q}	 x3 |	 D]+ }
 t |
 d   } | j d  Wd QXqWt j t  j j | d   d S(   s]   
    remove the need for easy-install.pth and finally remove easy-install.pth
    itself
    Rg   Rh   i   s	   *-py*.eggc         3` s*   |  ]  } t  j j  |    k Vq d  S(   N(   R3   R4   R5   (   t   .0t   i(   t   absfilesRn   (    s/   lib/python2.7/site-packages/conda_build/post.pys	   <genexpr>   s    t   windows_forward_slashesRo   s   found egg dir:s   EGG-INFOs   -infot   __pycache__t   lockingis   Tried to merge folder {egg_path} into {sp_dir}, but {fn} exists in both locations.  Please either add build/preserve_egg_dir: True to meta.yaml, or manually remove the file during your install process to avoid this conflict.Rn   t   sp_dirRp   s
   found egg:s   .dist-info{}INSTALLERR2   t   condaNs   easy-install.pth(    R3   R4   R5   Rj   Rk   R   Rl   t   globt   isdirt   anyR   R:   Rr   RU   t   shutilt   moveRJ   t   rm_rft   listdirt   existst	   copy_intot   timeoutRx   t   IOErrorRR   t   strt   formatR7   t   endswitht   sepR=   RV   (   t   filesRY   Ro   t   preserve_egg_dirRX   Rq   Ry   Rp   t   et   installer_filest   file(    (   Ru   Rn   s/   lib/python2.7/site-packages/conda_build/post.pyt   remove_easy_install_pth{   sR    (#%!
 "5*c         C` s   t  t |    } x | D]w } | j   r | j j d  r t j j | j  \ } } x5 d D]* } | | | k r_ t j | |  q_ q_ Wq q Wd S(	   s3   remove .py (.pyc) files alongside .so or .pyd filess   .sos   .pyds   .pys   .pycs   .pyoN(   s   .sos   .pyd(   s   .pys   .pycs   .pyo(	   t   listR$   t   is_filet   nameR   R3   R4   t   splitextt   unlink(   RY   R   Rp   R   t   _t   ext(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   rm_py_along_so   s    c         C` sR   t  j d  } x< |  D]4 } | j |  r t j t j j | |   q q Wd S(   sB  pyo considered harmful: https://www.python.org/dev/peps/pep-0488/

    The build may have proceeded with:
        [install]
        optimize = 1
    .. in setup.cfg in which case we can end up with some stdlib __pycache__
    files ending in .opt-N.pyc on Python 3, as well as .pyo files for the
    package's own python. s   .*(?:\.pyo$|\.opt-[0-9]\.pyc)N(   RC   RD   RK   R3   R   R4   R5   (   R   RY   t   re_pyoRp   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   rm_pyo   s    	c         C` sR   t  j d  } x< |  D]4 } | j |  r t j t j j | |   q q Wd  S(   Ns   .*(?:\.pyc$)(   RC   RD   RK   R3   R   R4   R5   (   R   RY   t   re_pycRp   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   rm_pyc   s    c         C` sP   d |  k rL t  j j | d d d  } t  j j |  rL t  j |  qL n  d  S(   Ns   share/info/dirt   sharet   infot   dir(   R3   R4   R5   R7   R   (   R   RY   Rp   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   rm_share_info_dir   s    c         C` s  t  j j |  s d  Sg  } g  | D] } t  j j |  ^ q# } t   } x* | D]" } | j t t |  |    qQ Wt |   | } x | D] }	 t j d k r t	 g  d d d g D] }
 |	 j
   j |
  ^ q  r q q n |	 j d  r q n  t rd t  j n d } |	 j d  r t  j j |	  | t  j j |	  d	 |  k r | j |	  q q W| rt  j j |  st d
  qt d  t j d k rd } n d } | t |  d 8} t t | d t  d } | | k  r| } n  g  g } | d d d g } t d j |   d } } xi | D]a } t |  d } | | | k rq| j g   | } n
 | | 7} | t |  d j |  q5Wx% | D] } t | | d | qWn  d  S(   Nt   win32s   library/bins   library\bint   scriptst   binRw   t    s   .pyt   csA   compiling .pyc files... failed as no python interpreter was founds   compiling .pyc files...i  i  i   t   keyi   s   -Wis   -mt
   py_compilet    t   cwd(   R3   R4   R7   t   normpatht   sett   updatet   fnmatch_filterRP   RQ   R}   t   lowert
   startswithR   R   R   t   dirnameRR   t   appendRU   t   lent   maxR5   R	   (   R   R   t
   python_exet   skip_compile_pyct   compile_filest   skipt   skip_compile_pyc_nt   skipped_filest   unskipped_filesRp   t   startt   cache_prefixt   limitt   lower_limitt   groupst   argst   args_lent   lengthRX   t   length_thisRO   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   compile_missing_pyc   sT    %	 +	0
				
c         C` s   x | D] } | j  d t j d  r t j j t j j |  j    } | j |  d  r | j d  \ } } } | j |  d  \ } } } | |  k r | | k r t	 d j
 | |   t j d  q d  Sq q q Wd  S(   Ns
   .dist-infot   METADATARi   sB   ERROR: Top level dist-info version incorrect (is {}, should be {})i   (   R   R3   R   R4   RR   R   R   R   t
   rpartitionRU   R   RP   t   exit(   R   t   versionR   RX   t   f_lowerR   t   distname(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   check_dist_info_version  s    $c   	      C` s   t  | |  | r# t | |  nC t j j | j  rA | j n | j } t | d | d | d | t | | | d | t	 |  t
 | |  t |  | |  d  S(   NR   R   R   R   (   R   R   R3   R4   R7   RZ   t   host_pythonR   R   R   R   R   (	   R   R   R   RY   Ro   R   t   noarchR   R   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   post_process#  s    	
c         C` s  |  j  |  rS t j j |  t |  d  }  |  | k rO t j d |   n  |  S|  j  d  rf d  S|  j  d  ry d  Sd |  k s |  j  d  rt j j |   }  t t	  } x+ | D]# } | t j j |  j
 |  q W|  | k r t j d |   n  t | |   d k r| r8t j j |  |  k r8| St   } x4 | |  D]( } | j t t j j | |    qLWt |  d k rt j d |  | |  f  q| |  j   t d |  | |  f  n  | |  d St d	 |   d  S(
   Ni   s   Error: Could not find %st   /s   @rpath/s   @executable_path/s)   Error: Found multiple instances of %s: %ss=   Found multiple instances of %s (%s).  Choosing the first one.i    s#   Don't know how to find %s, skipping(   R   R3   R4   R   R   RP   R   RR   R   R   R   R   t   addR   R5   t   sortRU   (   t   linkRY   R   R4   t
   file_namesRX   t   md5s(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   find_lib2  s:     !	&c   	      C` s  | d } t  d | |  f  | | k r | j |  r | j | |  } t  d  t |  su t j d |  q t  d | |  f  n  t | | | |   } t  d |  | s d  St j j	 t j j
 |  d  } d | t j j |  f } | j d	 d
  } | S(   NR   s   Fixing linking of %s in %ssY   .. seems to be linking to a compiler runtime, replacing build prefix with host prefix andsK   Error: Compiler runtime library in build prefix not found in host prefix %ss%   .. fixing linking of %s in %s insteads   New link location is %st   libs   @rpath/%s/%ss   /./R   (   RU   R   t   replaceR   RP   R   R   R3   R4   t   relpathR   RR   (	   R4   t	   link_dictRm   t   build_prefixR   R   t   link_loct   lib_to_linkt   ret(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   osx_ch_linkX  s"    

	!R   c   	      C` s  t  j d k s t  t j |  |  } t j |  | t t d | d | d | d | } | r x | D]| } | d k r qg n  t j	 j
 d t j	 j t j	 j
 | |  t j	 j |    d  j d d	  } t j |  | d
 t qg Wn  | rt |  | |  n  d  S(   NR"   Rm   R   R   t   dylibsR   s   @loader_paths   /./R   t   verbose(   RP   RQ   t   AssertionErrorR#   t   otoolt   install_name_changeR   R   R3   R4   R5   R   R   R   t	   add_rpathRM   t   assert_relative_osx(	   R4   Rm   R   R   t   rpathst   namest   st   rpatht	   rpath_new(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   mk_relative_osx  s$    			-t   LIEFc         C` s  t  j j | |   } t  j j |  } t j d |  } y, t | d | g  j d  j   d } Wn  t	 k
 r t
 d |  d SXt r t |  \ } }	 }	 | g | k r t
 d j | | g |   q n  | j t  j  } g  }
 x | D] } | j d  r|
 j |  q | j d	  r t  j j | |  } | j d
 t  j  rkt
 d j | |   qd t  j j | |  } | |
 k r|
 j |  qq q Wx | D] } | d k r| j d	  sTt  j j t j |  |   } t  j j t  j j | t  j j |     } | | k sGt d j | | |  |    n  d | } n  | |
 k rs|
 j |  qsqqWd j |
  } | d k s| rt d d d | d |  n t | d d | | g  d S(   sA   Respects the original values and converts abs to $ORIGIN-relativet   patchelfs   --print-rpaths   utf-8i    s&   patchelf: --print-rpath failed for %s
Ns@   ERROR :: get_rpaths_raw()={} and patchelf={} disagree for {} :: s   $ORIGINR   s   ..s6   Warning: rpath {0} is outside prefix {1} (removing it)s   $ORIGIN/R   s8   utils.relative {0} and relpath {1} disagree for {2}, {3}t   :R   t   old_matchingt   *t	   new_rpathR   s   --force-rpaths   --set-rpath(   R3   R4   R5   R   R   t   find_executableR
   RW   t
   splitlinesR   RU   R   R   R   Rk   t   pathsepR   R   R   R   R   R   t   relativet
   ValueErrorR   R	   (   RX   RY   R   t   methodt   elft   originR   t   existingt	   existing2R   t   newt   oldR   R   t   rel_ourst
   rel_stdlib(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   mk_relative_linux  sP    ,	-	c         C` sW   xP t  j |   D]? } x6 | | f D]( } | j |  r# t d |    q# q# Wq Wd  S(   Ns7   library at %s appears to have an absolute path embedded(   R#   t
   get_dylibsR   t   RuntimeError(   R4   Rm   R   R   RY   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyR     s    c         C` s   g  } d  } |  j j d  } t |  |  }	 g  |	 D]% }
 d D] } | |
 k r> |
 ^ q> q4 } t d | d | d | d	 | d
 t d t d t  \ } } } |  j } | j |  } | r |  j | d k r | d |  j j d i   } n  | | | f S(   NR   s   .dylibs   .sos   .dlls   .pydt   subdirt   bldpkgs_dirt   output_foldert   channel_urlst   debugR   t   clear_cachet   packagest   run_exports(   s   .dylibs   .sos   .dlls   .pyd(   RH   R   R   R   R   R:   t   channelt   get(   t   pkgRY   R  R  R  R  t   dsosR	  t
   lib_prefixt	   codefilesRX   R   R   t   channeldatat   channel_used(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   determine_package_nature  s"    2	 c   
      ` s   t  |  | | | | |  \ } } } | r. d St |  r g  | D](   t   f d   d D  sA   ^ qA }	 t |	  r d Sd Sn  d S(	   s   
    Result :: "non-library", "plugin library", "dso library", "run-exports library"
    .. in that order, i.e. if have both dsos and run_exports, it's a run_exports_library.
    s   run-exports libraryc         3` s!   |  ] } |   k r | Vq d  S(   N(    (   Rs   t   part(   t   dso(    s/   lib/python2.7/site-packages/conda_build/post.pys	   <genexpr>B  s    s   lib/R/librarys   site-packagess   dso librarys   plugin librarys   non-library(   s   lib/R/librarys   site-packages(   R  R   R}   (
   R  RY   R  t   bldpkgs_dirsR  R  R  R	  R   t   dsos_without_plugins(    (   R  s/   lib/python2.7/site-packages/conda_build/post.pyt   library_nature7  s    $(c         C` s[   g  } t  |  } xB |  D]: } x1 | D]) } | j d | k r& | j |  q& q& Wq W| S(   Ni    (   R   t   quadR   (   R   RY   t   resultst   pkgsR   R  (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   dists_from_namesK  s    t   FakeDistc           B` s   e  Z d    Z RS(   c         C` s4   | |  _  | g |  _ | |  _ | |  _ | |  _ d  S(   N(   R   R  R   t   build_numbert   build_string(   t   selfR   R   R  t	   build_str(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   __init__V  s
    			(   t   __name__t
   __module__R!  (    (    (    s/   lib/python2.7/site-packages/conda_build/post.pyR  U  s   s	   /opt/X11/s   /usr/lib/libSystem.B.dylibs   /usr/lib/libcrypto.0.9.8.dylibs   /usr/lib/libobjc.A.dylibs1   /System/Library/Frameworks/Accelerate.framework/*s*   /System/Library/Frameworks/AGL.framework/*s-   /System/Library/Frameworks/AppKit.framework/*s:   /System/Library/Frameworks/ApplicationServices.framework/*s3   /System/Library/Frameworks/AudioToolbox.framework/*s0   /System/Library/Frameworks/AudioUnit.framework/*s3   /System/Library/Frameworks/AVFoundation.framework/*s0   /System/Library/Frameworks/CFNetwork.framework/*s-   /System/Library/Frameworks/Carbon.framework/*s,   /System/Library/Frameworks/Cocoa.framework/*s0   /System/Library/Frameworks/CoreAudio.framework/*s5   /System/Library/Frameworks/CoreFoundation.framework/*s3   /System/Library/Frameworks/CoreGraphics.framework/*s0   /System/Library/Frameworks/CoreMedia.framework/*s4   /System/Library/Frameworks/CoreBluetooth.framework/*s/   /System/Library/Frameworks/CoreMIDI.framework/*s3   /System/Library/Frameworks/CoreServices.framework/*s/   /System/Library/Frameworks/CoreText.framework/*s0   /System/Library/Frameworks/CoreVideo.framework/*s/   /System/Library/Frameworks/CoreWLAN.framework/*s6   /System/Library/Frameworks/DiskArbitration.framework/*s1   /System/Library/Frameworks/Foundation.framework/*s5   /System/Library/Frameworks/GameController.framework/*s,   /System/Library/Frameworks/GLKit.framework/*s.   /System/Library/Frameworks/ImageIO.framework/*s2   /System/Library/Frameworks/IOBluetooth.framework/*s,   /System/Library/Frameworks/IOKit.framework/*s0   /System/Library/Frameworks/IOSurface.framework/*s-   /System/Library/Frameworks/OpenAL.framework/*s-   /System/Library/Frameworks/OpenGL.framework/*s-   /System/Library/Frameworks/Quartz.framework/*s1   /System/Library/Frameworks/QuartzCore.framework/*s/   /System/Library/Frameworks/Security.framework/*s/   /System/Library/Frameworks/StoreKit.framework/*s:   /System/Library/Frameworks/SystemConfiguration.framework/*s-   /System/Library/Frameworks/WebKit.framework/*s   **/ADVAPI32.dlls   **/bcrypt.dlls   **/COMCTL32.dlls   **/COMDLG32.dlls   **/CRYPT32.dlls   **/dbghelp.dlls   **/GDI32.dlls   **/IMM32.dlls   **/KERNEL32.dlls   **/NETAPI32.dlls   **/ole32.dlls   **/OLEAUT32.dlls   **/PSAPI.DLLs   **/RPCRT4.dlls   **/SHELL32.dlls   **/USER32.dlls   **/USERENV.dlls   **/WINHTTP.dlls   **/WS2_32.dlls   **/ntdll.dlls   **/msvcrt.dlls   **/api-ms-win*.dllc         C` s  t    } t   } d } |  r7 t |  j    d } n  x| D]y}	 t j j | |	  }
 t |
  sk q> n  | j t j	 d  } | j t j	 d  } t
 |
 d t d t d | d | } | r g  | D]- } | j |  r | j | |  n | ^ q } n  | | k rEg  | D]- } | j |  r6| j | |  n | ^ q} n  g  | D]? } | j |  rt j j | |  j t j	 d  n | ^ qL} | | |	 <| j |  } | j |	  q> W| | f S(   NR   i    R   t   resolve_filenamest   recurset   sysroott   envroot(   R   t   dictR   t   keysR3   R4   R5   R   R   R   R   RM   R:   R   R   t   unionR   (   t   sysroots_filesR   t
   run_prefixt   sysroot_substitutionR   t   build_prefix_substitutiont   all_needed_dsost   needed_dsos_for_fileR&  RX   R4   t   neededt   n(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   _collect_needed_dsos  s4    			::I
c      	   ` s  i  } i  }	 i  }
 i  } | rxu| | f D]d} x[t  j |  D]J\ } } } x8| D]0} t  j j | |    t   f d   d D  o t   d t d  k	 } t   f d   d D  } | r | r qW n  t  j j   |  } | r| | k rqW n  | | k rqW n  | | k r+| | n g  } t	 |  s\| |  k r\| j
 |  q\n  t t | |   } x* | D]" } | | k rx| j
 |  qxqxW| | | <t	 | |  rW t  f d	   t   d
 | D  } | | | <| rt |	 | | d <q| r|   k ro| | d j j d  sW | | d j d k rNqW n  t d j   | | d   n  t |
 | | d <qqW qW WqA Wq+ Wn  | |	 |
 | f S(   Nc         3` s   |  ] } t    |  Vq d  S(   N(   R   (   Rs   R   (   t   fp(    s/   lib/python2.7/site-packages/conda_build/post.pys	   <genexpr>  s    s   *.so.*s	   *.dylib.*s   *.dllt   skip_symlinksc         3` s   |  ] } t    |  Vq d  S(   N(   R   (   Rs   R   (   R4  (    s/   lib/python2.7/site-packages/conda_build/post.pys	   <genexpr>  s    s   *.as   *.libc         3` s1   |  ]'   t    f d     D  s   Vq d S(   c         3` s   |  ] } t    |  Vq d  S(   N(   R   (   Rs   t   pattern(   R   (    s/   lib/python2.7/site-packages/conda_build/post.pys	   <genexpr>  s    N(   R}   (   Rs   (   t   ignore_list_syms(   R   s/   lib/python2.7/site-packages/conda_build/post.pys	   <genexpr>  s    t   enable_statici    t   gcc_impl_linuxt   llvms   sysroot in {}, owner is {}(   s   *.so.*s	   *.dylib.*s   *.dll(   s   *.as   *.lib(   R3   t   walkR4   R5   R}   R   R:   RH   R   R   R   R   R   R   R   RM   R   R   RU   R   (   R   R,  R   R/  t   pkg_vendored_distR7  R-  R8  t   prefix_ownerst   contains_dsost   contains_static_libst   all_lib_exportsRY   t   subdir2R   t   filezR   t   dynamic_libt
   static_libt   rpt   ownerst   new_pkgst   new_pkgt   exports(    (   R4  R7  s/   lib/python2.7/site-packages/conda_build/post.pyt   _map_file_to_package  sR    
(
!'c   	      C` sO   |  } t  |  } | } | } d j | | | g  } t | | | |  | f S(   NRi   (   R   R5   R  (	   t   pkg_namet   pkg_versionR   R  t   pkg_vendoring_namet   pkg_vendoring_versiont   pkg_vendoring_build_strt   pkg_vendoring_build_numbert   pkg_vendoring_key(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   _get_fake_pkg_dist  s    	c         C` s6   | j  d  r |  j |  n  | r2 t |  n  d  S(   Ns     ERROR(   R   R   RU   (   t   errorst   textR   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt
   _print_msg  s    c	         C` s  | j  |  r> | g g  | j   D] \ }	 }
 |	 ^ q" } n	 | g } t } x | D]x } | j | |  } t g  | D] } t | |  ^ qv  } | rT d j |  } t |  d j | |  d | PqT qT W| rt |  rt	 j
 j |  } g  } x | j   D] \ }	 } |	 j d t	 j  } t	 j
 j d |  } | j  |  ri| j | j | |   qg  | D] } t | |  rp| ^ qp} | j |  qWt |  r| d  d  d  } g  | D]1 } t t	 j
 j | d  d  d  | g   ^ q} t t t |   d | j } t	 j
 j | | j | t	 j d   } d j |  } t t | |   } t |  rt |  d	 j | | | d
  d | qt |  d j | |  d | qt |  d j | |  d | n( | st |  d j | |  d | n  d  S(   Ns   Needed DSO {}s   {}: {} found in the whitelistR   R   s   **iR   R   s'   {}: {} found in CDT/compiler package {}i    sA   {}: {} not found in any CDT/compiler package, nor the whitelist?!sj   {}: {} not found in sysroot, is this binary repackaging? .. do you need to use install_name_tool/patchelf?s5   {}: did not find - or even know where to look for: {}(   R   t   itemsR:   R   R}   R   R   RU  R   R3   R4   RR   R   R5   R   R   t   extendt   commonprefixR   t   ranget   __getitem__R   R   R   (   RS  t	   whitelistt
   needed_dsoR+  t   msg_preludet   info_preludet   sysroot_prefixR-  R   R&  R   t   replacementst   in_whitelistt   replacementt   needed_dso_wR2   t   n_dso_pt	   dso_fnamet   sysroot_filesR   t
   sysroot_ost   wildR   t   foundt   rev_needed_dsoR   t
   match_lenst   idxt   in_prefix_dsoR  (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   _lookup_in_system_whitelists	  sR    /	((;!c      	   C` s\  | } d j  |  } | | k r' d n d } t t | |   } g  | D] } | j d |	 k rI | ^ qI } x* | D]" } | |
 k ru | j |  qu qu Wt g  | D] } t | |  ^ q  } t |  d k rt |  d j  | | | d |  d | nW| r)t |  d j  | |  d | n/t |  d k rt |  d k rt |  d j  | | g  | D] } | j d ^ qf|  d | t |  d	 j  | g  | D] } | j d ^ q d | n t |  d k rt |  d
 j  | | | |  d | nV | | k r0t |  d j  | |  d | n( | rXt |  d j  | |  d | n  d  S(   Ns   Needed DSO {}s    (and also in this package)R   i    i   s   {}: {} found in {}{}R   s   {}: {} found in the whitelistsf   {}: .. but {} not in reqs/run, (i.e. it is overlinking) (likely) or a missing dependency (less likely)s3   {}: {} found in multiple packages in run/reqs: {}{}s    {}: {} not found in any packagess   {}: {} found in this package(	   R   R   R   R  R   R}   R   R   RU  (   RS  R\  R   R,  R[  R^  R]  t   warn_preludeR   t   requirements_runt   lib_packagest   lib_packages_usedRm  Rd  t   and_alsoR  R  t   in_pkgs_in_run_reqsR2   Ra  t   p(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   _lookup_in_prefix_packagesF  sH    ,($0c         ` s  x|  D]  t  j j |    } t |  } | s | t | j d  d k rX q n  d j |    } d j |    } d j |    } | r | n | } y t |  \ } } } Wn& t | d j |  d | q n X| r0| pt	   f d   | D  r0t | d	 j | | |  d | n  |   } x | D] } | j
 d
 t  j  } | j t  j  r| j d  rt | | |  | | | | | | |	 |
 |  qA| j d  rt | d j | |  d | qAt | | | | | | | | | 	 qAWq Wd  S(   NRi   i    s   WARNING ({},{})s     ERROR ({},{})s      INFO ({},{})s   {}: pyldd.py failed to processR   c         3` s   |  ] } t    |  Vq d  S(   N(   R   (   Rs   R2   (   RX   (    s/   lib/python2.7/site-packages/conda_build/post.pys	   <genexpr>  s    s   {}: runpaths {} found in {}R   t   $s   $PATHs1   {}: {} found in build prefix; should never happen(   R3   R4   R5   R   t   filetypes_for_platformRk   R   R   RU  R}   R   R   R   Rv  Rn  (   R   RS  R0  R   R,  RK  t   error_overlinkingt   runpath_whitelistR   Rp  Rq  Rr  R[  t   sysrootsR_  R-  R  R4   t   filetypeRo  t   err_preludeR^  R]  t   runpathsR   R1  R\  (    (   RX   s/   lib/python2.7/site-packages/conda_build/post.pyt   _show_linking_messagesq  s>    $
#c   B      ` s6  t  } g  } g  } xb | D]Z } t j j  |  } t |  } | r | t  j d  d k r | j |  q q W| s t   Sd } d } g  | D] } | j d  d ^ q } t	 |   } t
 j |  }  j d  r | j d  n        f d   | D }  t g  | D]/ }! |! j d | k r|  |! d	 k r|! ^ q }" t |  r| d
 |" k rt | d
 f  }# n	 t   }# t |  | | |  \ }$ }% d d d d d g }& |
 }' g  t
 j t j j |' d d   D] }( |( t j ^ q}) g  }* t   }+ t }, t |)  s d k rcd d d g }) t }* t j d k rZt  n t }, q j d  rd g }) t }* t j d k rt  n t }, qn  t   }- x. |) D]& }( d d l m }. |. |(  |- |( <qWt t |- j   d d    }- t |- |  | |
 |  \ }/ }0 t |  |
 |/ |$ |& | |  \ }1 }2 }2 }3 x | D] } |0 | }4 x |4 D] }5 | ri|5 j d  ri|5 j |  ri|5 j |  ri|5 |1 k ri|5 | k rit }6 |, st g  |* D] }7 t  |5 |7  ^ q }6 n  |6 st! d j" |5   qqiqiWqRW|* | p'g  7}* t# | | |0 |
  |  | | | | |" |# |* |- |' |   |# |" k r d j" |   }8 d  j" |   }9 d! j" |   }: x |" |# D]p }; |  |; d" k r| r|: n |9 }< n |  |; d# k r|8 }< n |9 }< t$ | d$ j" |< |  |; |;  d% | qWn  t |  r| rg  | D] }= t% j& d& |=  r9|= ^ q9}> t |>  rxt' |>   n  g  | D] }= t% j& d' |=  r|= ^ q}? t |?  rt( |?   n  g  | D] }= d( |= k r|= ^ q}@ t |@  rt) |@   qqt j* d)  n  |% |+ k r+|+ |% }A |A St   Sd  S(*   NRi   i    s   $SYSROOTs   $PATHR   R+   s	   libgcc-ngc      	   ` s.   i  |  ]$ } t  |        |  q S(    (   R  (   Rs   t   package(   R  R  R  R,  R  (    s/   lib/python2.7/site-packages/conda_build/post.pys
   <dictcomp>  s   	s   non-libraryit   maint   _mains   *get_pc_thunk*t   ___clang_call_terminatet   _timeouts   **R&  s   osx-64s   /usr/libs   /opt/X11s   /System/Library/FrameworksR"   R'   s
   C:/Windowss   win-32(   t   prefix_filesR   c         S` s   t  |  d  S(   Ni   (   R   (   t   x(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   <lambda>  R   R   s"     ERROR :: {} not in prefix_ownerss      INFO ({})s   WARNING ({})s     ERROR ({})s   run-exports librarys   plugin librarys   {}: {} package {} in requirements/run but it is not used (i.e. it is overdepending or perhaps statically linked? If that is what you want then add it to `build/ignore_run_exports`)R   s   .*runpaths.*found in.*s+   .*(overlinking|not found in|did not find).*t   overdependingi   (+   RM   R3   R4   R5   R   Rx  Rk   R   R(  R  R   t   ensure_listR   R   R  R   RR  R{   R   R:   t   DEFAULT_MAC_WHITELISTRP   RQ   t   DEFAULT_WIN_WHITELISTt   conda_build.utilsR  R   t   sortedRV  R3  RJ  R}   R   RU   R   R  RU  RC   RK   R!   R   R    R   (B   RK  RL  R   R  R  t   ignore_run_exportsRp  t   requirements_buildt   requirements_hostR,  R   t   missing_dso_whitelistRz  Ry  t   error_overdependingR   t   exception_on_errorR   R  R  R  R8  RS  t   files_to_inspectRX   R4   R|  R-  R.  t   reqR  t   ignore_listt   package_natureR  Rq  Rr  R<  RQ  R7  R_  R&  R{  R[  t   vendoring_recordt   build_is_hostR+  R  R/  R0  R=  R   R@  R1  R\  Ra  R2   R^  Ro  R}  R   R]  t   errort   runpaths_errorst   overlinking_errorst   overdepending_errorst   imports(    (   R  R  R  R,  R  s/   lib/python2.7/site-packages/conda_build/post.pyt   check_overlinking_impl  s    #&
	;		!	!
+!	!++%
c         C` s  t  |  j d  |  j d  |  j d  |  j d  |  j j |  j d  g  |  j j d i   j d g   D] } | j d  d	 ^ qj g  |  j j d i   j d
 g   D] } | j d  d	 ^ q g  |  j j d i   j d g   D] } | j d  d	 ^ q |  j j |  j j |  j j d
 i   j d g   |  j j d
 i   j d g   |  j j	 |  j j
 |  j j t | |  j j |  j j |  j j |  j j  S(   Ns   package/names   package/versions   build/strings   build/numbers   build/ignore_run_exportst   requirementst   runR   i    t   buildt   hostR  Rz  (   R  t	   get_valueRo   t   target_subdirt   metaR  Rk   Rm   R   Ry  R  R   RM   R  R  R  R8  (   Ra   R   R  (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   check_overlinking)  s,    	>>>								c      	   C` s   t  j j |  j j |  } t |  } | s1 d  S|  j d d g  } t j j	 d  r | d k r t
 | |  j j d | d |  j d d  nF t j d	 k r | d
 k r t | |  j j |  j j d | d | n  d  S(   Ns   build/rpathsR   R+   R*   R   R   s   build/rpaths_patcherR   R"   R(   R   (   R3   R4   R5   Ro   Rm   R   R  RP   RQ   R   R   R   R   (   Ra   RX   R   R4   t
   codefile_tR   (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   post_process_shared_libB  s    c   	      C` s?  t  d  x3 t |  D]% } | j   r t | j d  q q Wx |  D] } t j j | |  } t j |  } t j	 | j
  } | } | t j @r | t j Bt j B} n  | t j Bt j Bt j Bt j Bt j B} | | k rG y t | |  Wq7t t j f k
 r3} t j t  } | j t |   q7XqG qG Wd  S(   Ns   Fixing permissionsi  (   RU   R$   t   is_dirR   R4   R3   R5   t   lstatR8   t   S_IMODEt   st_modet   S_IXUSRt   S_IXGRPt   S_IXOTHt   S_IWUSRt   S_IWGRPt   S_IRUSRt   S_IRGRPt   S_IROTHRJ   R   t   PermissionErrort
   get_loggerR"  t   warnR   (	   R   RY   R4   RX   t   stt   old_modet   new_modeR   t   log(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   fix_permissionsO  s$    
)c      	   C` sM  t  d t |   |  j j } x | D] } t | |  q& W|  j j j d  s<|  j   } | sq t  d  n  |  j j d k o t |  j	 d t
   } t | | |  j j  t j |  } xy | D]n } | j d  r t | d | d | d	 | n  | t k s"t | t  r | | k r t |  | |  q q Wn  t |  |  d  S(
   Ns   number of files:R'   s    Skipping binary relocation logics   osx-64s   build/osx_is_apps   bin/RY   RZ   R[   (   RU   R   Ro   Rm   t   make_hardlink_copyR  R   t   binary_relocationt   boolR  R:   t   check_symlinkst   crootR   R  Rf   RM   t
   isinstanceR   R  R  (   Ra   R   RZ   Rm   RX   R  R[   R  (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt
   post_buildg  s(    
c         C` s  t  t k r d  Sg  } t j j |  } xS|  D]K} t j j | |  } t j j |  r/ t  |  } t j j |  } t j j |  t j j |  k r t |  r t j	 |  t
 j | |  qz| j |  rNt j j | t j j |   }	 | j d  rw| |	 k rwt d | | f  t j |  t j |	 |  qwqz| j |  rz| j d | | f  qzq/ q/ W| rx% | D] }
 t d |
 d t j qWt j d  n  d  S(   NRg   s)   Making absolute symlink %s -> %s relativesN   %s is a symlink to a path that may not exist after the build is completed (%s)s	   Error: %sR   i   (   R   R:   R3   R4   t   realpathR5   R6   R   R   t   removeR   R   R   R   RU   R   t   symlinkR   RP   t   stderrR   (   R   RY   R  t   msgst   real_build_prefixRX   R4   t	   link_patht   real_link_patht   relative_patht   msg(    (    s/   lib/python2.7/site-packages/conda_build/post.pyR    s4    %!	c         C` s   t  j j |   s6 t  j j t  j j | |    }  n  t  j j |   } t  j |   j d k r t   C } t	 j
 |  |  t	 j |   t	 j
 t  j j | |  |   Wd QXn  d S(   sk   Hardlinks create invalid packages.  Copy files to break the link.
    Symlinks are OK, and unaffected here.i   N(   R3   R4   t   isabsR   R5   RR   R  t   st_nlinkR   R   R   R   (   R4   RY   Rp   t   dest(    (    s/   lib/python2.7/site-packages/conda_build/post.pyR    s    $c         C` s   |  j  j } t j j t j j | d   r< t d   n  t j j t j j | d   rl t d   n  t j j t j j | d   r t d   n  d  S(   Ns   __conda_version__.txts   support for __conda_version__ has been removed as of Conda-build 3.0.Try Jinja templates instead: http://conda.pydata.org/docs/building/meta-yaml.html#templating-with-jinjas   __conda_buildnum__.txts   support for __conda_buildnum__ has been removed as of Conda-build 3.0.Try Jinja templates instead: http://conda.pydata.org/docs/building/meta-yaml.html#templating-with-jinjas   __conda_buildstr__.txts   support for __conda_buildstr__ has been removed as of Conda-build 3.0.Try Jinja templates instead: http://conda.pydata.org/docs/building/meta-yaml.html#templating-with-jinja(   Ro   t   work_dirR3   R4   R   R5   R   (   Ra   t   src_dir(    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   get_build_metadata  s    !!!(   R%   R&   (    (    (   R   (   R   (    (b   t
   __future__R    R   R   t   collectionsR   R   t	   functoolsR   R   R   R   R   R<   R>   RC   R3   R~   R8   t
   subprocessR	   R
   R   RP   R   t   ImportErrorR:   t   conda_build.os_utilsR   t   conda_build.conda_interfaceR   R   R   R   R   R   t   conda_buildR   t   conda_build.os_utils.lieflddR   R   R   R   R   R   t   conda_build.os_utils.pylddR   t   conda_build.os_utils.lddR   t   conda_build.indexR   t   conda_build.inspect_pkgR   t   conda_build.exceptionsR   R    R!   RQ   R#   R$   Rx  Rf   Rr   R   R   R   R   R   R   R   R   RH   R   R   R   R   R   R  R  R  R  R  R  R3  RJ  RR  RU  Rn  Rv  R  R  R  R  R  R  R  R  R  (    (    (    s/   lib/python2.7/site-packages/conda_build/post.pyt   <module>   s  
.
?	=				4	&	3U8				
					5			=	+	-					)	