ó
šêé[c           @   sé   d  Z  d Z d d l Z d d l Z d d l m Z m Z d d l m Z d d l	 m
 Z
 d d d d	 „ Z d
 „  Z d d d d „ Z d d d d „ Z e j d k rÇ d d l	 m Z d a d a n  d d d d „ Z d d „ Z d S(   sì   distutils.spawn

Provides the 'spawn()' function, a front-end to various platform-
specific functions for launching another program in a sub-process.
Also provides the 'find_executable()' to search the path for a given
executable name.
s   $Id$iÿÿÿÿN(   t   DistutilsPlatformErrort   DistutilsExecError(   t   DEBUG(   t   logi   i    c         C   s�   t  |  ƒ }  t j d k r1 t |  | d | ƒnZ t j d k rV t |  | d | ƒn5 t j d k r{ t |  | d | ƒn t d t j ‚ d S(   s�  Run another program, specified as a command list 'cmd', in a new process.

    'cmd' is just the argument list for the new process, ie.
    cmd[0] is the program to run and cmd[1:] are the rest of its arguments.
    There is no way to run a program with a name different from that of its
    executable.

    If 'search_path' is true (the default), the system's executable
    search path will be used to find the program; otherwise, cmd[0]
    must be the exact path to the executable.  If 'dry_run' is true,
    the command will not actually be run.

    Raise DistutilsExecError if running the program fails in any way; just
    return on success.
    t   posixt   dry_runt   ntt   os2s1   don't know how to spawn programs on platform '%s'N(   t   listt   ost   namet   _spawn_posixt	   _spawn_ntt
   _spawn_os2R    (   t   cmdt   search_patht   verboseR   (    (    s%   /usr/lib/python2.7/distutils/spawn.pyt   spawn   s    c         C   s>   x7 t  |  ƒ D]) \ } } d | k r d | |  | <q q W|  S(   sª   Quote command-line arguments for DOS/Windows conventions.

    Just wraps every argument which contains blanks in double quotes, and
    returns a new argument list.
    t    s   "%s"(   t	   enumerate(   t   argst   it   arg(    (    s%   /usr/lib/python2.7/distutils/spawn.pyt   _nt_quote_args/   s    c         C   sè   |  d } t  |  ƒ }  | r1 t | ƒ p+ | } n  t j d j | g |  d ƒ ƒ | sä y t j t j | |  ƒ } Wn9 t k
 r¯ } t	 s• | }  n  t
 d |  | d f ‚ n X| d k rä t	 sË | }  n  t
 d |  | f ‚ qä n  d  S(   Ni    R   i   s   command %r failed: %siÿÿÿÿs%   command %r failed with exit status %d(   R   t   find_executableR   t   infot   joinR	   t   spawnvt   P_WAITt   OSErrorR   R   (   R   R   R   R   t
   executablet   rct   exc(    (    s%   /usr/lib/python2.7/distutils/spawn.pyR   ?   s$    
!		c         C   só   |  d } | r% t  | ƒ p | } n  t j d j | g |  d ƒ ƒ | sï y t j t j | |  ƒ } Wn9 t k
 r£ } t s‰ | }  n  t	 d |  | d f ‚ n X| d k rï t s¿ | }  n  t j
 d |  | f ƒ t	 d |  | f ‚ qï n  d  S(   Ni    R   i   s   command %r failed: %siÿÿÿÿs%   command %r failed with exit status %d(   R   R   R   R   R	   R   R   R   R   R   t   debug(   R   R   R   R   R   R   R    (    (    s%   /usr/lib/python2.7/distutils/spawn.pyR   W   s$    
!		t   darwin(   t	   sysconfigc      
   C   s^  t  j d j |  ƒ ƒ | r  d  S|  d } | r9 t j p? t j } d  } t j d k rGt	 d  k r¬ t
 j d ƒ pu d a	 t	 r¬ g  t	 j d ƒ D] } t | ƒ ^ qŽ a q¬ n  t	 rGt j j d t	 ƒ } t g  | j d ƒ D] } t | ƒ ^ qÚ k rd | t	 f }	 t |	 ƒ ‚ n  t t j d | ƒ} | r8t j p>t j } qGn  t j ƒ  }
 |
 d k ry0 | d  k r~| | |  ƒ n | | |  | ƒ WnL t k
 rÝ} t s°| }  n  t j j d |  | j f ƒ t j d	 ƒ n Xt sí| }  n  t j j d
 |  ƒ t j d	 ƒ nIxFy t j |
 d ƒ \ }
 } Wn] t k
 r�} d d  l } | j | j k rfqn  t su| }  n  t d |  | d f ‚ n Xt j  | ƒ rÍt s®| }  n  t d |  t j! | ƒ f ‚ qt j" | ƒ r t j# | ƒ } | d k rûd  St s
| }  n  t d |  | f ‚ qt j$ | ƒ r5qqt sD| }  n  t d |  | f ‚ qd  S(   NR   i    R"   t   MACOSX_DEPLOYMENT_TARGETt    t   .sF   $MACOSX_DEPLOYMENT_TARGET mismatch: now "%s" but "%s" during configures   unable to execute %r: %s
i   s(   unable to execute %r for unknown reasonsiÿÿÿÿs   command %r failed: %ss"   command %r terminated by signal %ds%   command %r failed with exit status %ds1   unknown error executing %r: termination status %d(%   R   R   R   R	   t   execvpt   execvt   Nonet   syst   platformt   _cfg_targetR#   t   get_config_vart   splitt   intt   _cfg_target_splitt   environt   getR    t   dictt   execvpet   execvet   forkR   R   t   stderrt   writet   strerrort   _exitt   waitpidt   errnot   EINTRR   t   WIFSIGNALEDt   WTERMSIGt	   WIFEXITEDt   WEXITSTATUSt
   WIFSTOPPED(   R   R   R   R   R   t   exec_fnt   envt   xt
   cur_targett   my_msgt   pidt   et   statusR    R<   t   exit_status(    (    s%   /usr/lib/python2.7/distutils/spawn.pyR   t   sŒ    
..							c         C   s×   | d k r t j d } n  | j t j ƒ } t j j |  ƒ \ } } t j d k sd t j	 d k r} | d k r} |  d }  n  t j j
 |  ƒ sÏ x9 | D]1 } t j j | |  ƒ } t j j
 | ƒ r– | Sq– Wd S|  Sd S(   sÚ   Tries to find 'executable' in the directories listed in 'path'.

    A string listing directories separated by 'os.pathsep'; defaults to
    os.environ['PATH'].  Returns the complete filename or None if not found.
    t   PATHt   win32R   s   .exeN(   R)   R	   R1   R.   t   pathsept   patht   splitextR*   R+   R
   t   isfileR   (   R   RO   t   pathst   baset   extt   pt   f(    (    s%   /usr/lib/python2.7/distutils/spawn.pyR   Ì   s    *(   t   __doc__t   __revision__R*   R	   t   distutils.errorsR    R   t   distutils.debugR   t	   distutilsR   R   R   R   R   R+   R#   R)   R,   R0   R   R   (    (    (    s%   /usr/lib/python2.7/distutils/spawn.pyt   <module>   s    		X