mò
­fIc           @   s•   d  Z  d k Z d k Z d k Z d d g Z d d d d d d „ Z d d d d d „ Z d	 „  Z e	 d
 j o! e
 e ƒ  ƒ Z e i e ƒ n d S(   sí  Module/script to "compile" all .py files to .pyc (or .pyo) file.

When called as a script with arguments, this compiles the directories
given as arguments recursively; the -l option prevents it from
recursing into directories.

Without arguments, if compiles all modules on sys.path, without
recursing into subdirectories.  (Even though it should do so for
packages -- for now, you'll have to deal with packages separately.)

See module py_compile for details of the actual byte-compilation.

Nt   compile_dirt   compile_pathi
   i    c         C   sè  | p d G|  Gd GHn y t i |  ƒ } Wn% t i j
 o d G|  GHg  } n X| i ƒ  d } x~| D]v} t i	 i
 |  | ƒ } | d j	 o t i	 i
 | | ƒ } n d } | d j	 o! | i | ƒ } | o qj qß n t i	 i | ƒ ol| d  | d } }	 |	 d j oF| t o d p d } t i | ƒ i }
 y t i | ƒ i } Wn t i j
 o d	 } n X| |
 j o | o qj n | p d
 G| Gd GHn y t i | d | t ƒ } Wny t  j
 o t  ‚ qZt i! j
 o/ } | o d
 G| Gd GHn | i# GHd	 } qZt$ j
 o } d G| GHd	 } qZX| d	 j o
 d	 } qZqàqj | d	 j ou | t i' j oe | t i( j oU t i	 i) | ƒ oB t i	 i* | ƒ o. t+ | | d | | | | ƒ p
 d	 } qàqj qj W| S(   sÁ  Byte-compile all modules in the given directory tree.

    Arguments (only dir is required):

    dir:       the directory to byte-compile
    maxlevels: maximum recursion level (default 10)
    ddir:      if given, purported directory name (this is the
               directory name that will show up in error messages)
    force:     if 1, force compilation, even if timestamps are up-to-date
    quiet:     if 1, be quiet during compilation

    t   Listings   ...s
   Can't listi   iýÿÿÿs   .pyt   ct   oi    t	   Compilingt   SorryN(,   t   quiett   dirt   ost   listdirt   namest   errort   sortt   successt   namet   patht   joint   fullnamet   ddirt   Nonet   dfilet   rxt   searcht   mot   isfilet   headt   tailt	   __debug__t   cfilet   statt   st_mtimet   ftimet   ctimet   forcet
   py_compilet   compilet   Truet   okt   KeyboardInterruptt   PyCompileErrort   errt   msgt   IOErrort   et	   maxlevelst   curdirt   pardirt   isdirt   islinkR    (   R   R-   R   R"   R   R   R)   R   R   R   R    R   R   R,   R   R&   R!   R   R   R   (    (    t'   /mit/python/lib/python2.4/compileall.pyR       sf     	
    

	T i   c         C   sh   d } x[ t i D]P } | p | t i j o |  o	 d GHq | o t | | d | d | ƒ} q W| S(   s  Byte-compile all module on sys.path.

    Arguments (all optional):

    skip_curdir: if true, skip current directory (default true)
    maxlevels:   max recursion level (default 0)
    force: as for compile_dir() (default 0)
    quiet: as for compile_dir() (default 0)

    i   s   Skipping current directoryR   N(   R   t   sysR   R   R	   R.   t   skip_curdirR    R-   R   R"   R   (   R4   R-   R"   R   R   R   (    (    R2   R   W   s    
 
 	c          C   sé  d k  } y# | i  t i d d ƒ \ } } WnR | i j
 oC } | GHd GHd GHd GHd GHd GHd	 GHd
 GHd GHt i d ƒ n Xd } d } d } d } d } x™ | D]‘ \ } }  | d j o
 d } n | d j o
 |  } n | d j o
 d } n | d j o
 d } n | d j o d k } | i |  ƒ } q¦ q¦ W| o- t | ƒ d j o d GHt i d ƒ qon d }
 yO | o; xA | D], }	 t |	 | | | | | ƒ p
 d }
 q†q†Wn
 t ƒ  }
 Wn t j
 o d GHd }
 n X|
 S(   s   Script main program.Ni   s   lfqd:x:sS   usage: python compileall.py [-l] [-f] [-q] [-d destdir] [-x regexp] [directory ...]s   -l: don't recurse downs3   -f: force rebuild even if timestamps are up-to-dates   -q: quiet operations7   -d destdir: purported directory name for error messagess4      if no directory arguments, -l sys.path is assumeds<   -x regexp: skip files matching the regular expression regexps8      the regexp is search for in the full path of the filei   i
   i    s   -ls   -ds   -fs   -qs   -xs1   -d destdir require exactly one directory arguments   
[interrupt](   t   getoptR3   t   argvt   optst   argsR   R*   t   exitR-   R   R   R"   R   R   R   t   at   reR$   t   lenR   R   R    R   R'   (   R:   R"   R   R-   R8   R   R   R   R;   R   R   R*   R5   R7   (    (    R2   t   maink   sd     	#  
 
 
 
	 t   __main__(   t   __doc__R	   R3   R#   t   __all__R   R    R   R=   t   __name__t   intt   exit_statusR9   (   RC   R@   R    R#   R   R3   R=   R	   (    (    R2   t   ?   s   			B	0