;
Ñâ"Ic               @   s  d  Z  d Z d d l Z d d l Z d d l Z d d l m Z m Z d d l m	 Z	 d d l
 Td 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 e j d k o# d d l m Z e e ƒ  ƒ Z n e j d ƒ Z d „  Z Gd „  d e	 ƒ Z d S(   u¶   distutils.command.build_ext

Implements the Distutils 'build_ext' command, for building extension
modules (currently limited to C extensions, should accommodate C++
extensions ASAP).u@   $Id: build_ext.py 65670 2008-08-14 07:35:13Z hirokazu.yamamoto $i    N(   u	   USER_BASEu	   USER_SITE(   u   Command(   u   *(   u   customize_compileru   get_python_version(   u   newer_group(   u	   Extension(   u   get_platform(   u   logu   nt(   u   get_build_versionu3   ^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$c              C   s   d d l  m }  |  ƒ  d  S(   Ni    (   u   show_compilers(   u   distutils.ccompileru   show_compilers(   u   show_compilers(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   show_compilers   s    c             B   s<  |  Ee  Z d  Z d e j Z dF dG d d	 d
 e ƒ  f d d d d f d d d e f dH dI dJ d d d e f dK dL dM dN dO dP dQ dR dS g Z d d$ d' d- d3 g Z	 d5 dE d6 e
 f g Z d7 „  Z d8 „  Z d9 „  Z d: „  Z d; „  Z d< „  Z d= „  Z d> „  Z d? „  Z d@ „  Z dA „  Z dB „  Z dC „  Z dD „  Z dE S(T   u8   build C/C++ extensions (compile/link to build directory)u    (separated by '%s')u
   build-lib=u   bu(   directory for compiled extension modulesu   build-temp=u   tu1   directory for temporary files (build by-products)u
   plat-name=u   pu>   platform name to cross-compile for, if supported (default: %s)u   inplaceu   iu=   ignore build-lib and put compiled extensions into the source u,   directory alongside your pure Python modulesu   include-dirs=u   Iu.   list of directories to search for header filesu   define=u   Du   C preprocessor macros to defineu   undef=u   Uu!   C preprocessor macros to undefineu
   libraries=u   lu!   external C libraries to link withu   library-dirs=u   Lu.   directories to search for external C librariesu   rpath=u   Ru7   directories to search for shared C libraries at runtimeu   link-objects=u   Ou2   extra explicit link objects to include in the linku   debugu   gu'   compile/link with debugging informationu   forceu   fu2   forcibly build everything (ignore file timestamps)u	   compiler=u   cu   specify the compiler typeu   swig-cppu)   make SWIG create C++ files (default is C)u
   swig-opts=u!   list of SWIG command line optionsu   swig=u   path to the SWIG executableu   useru#   add user include, library and rpathu   help-compileru   list available compilersc             C   s¸   d  |  _ d  |  _ d  |  _ d  |  _ d |  _ d  |  _ d  |  _ d  |  _ d  |  _	 d  |  _
 d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S(   Ni    (   u   Noneu
   extensionsu	   build_libu	   plat_nameu
   build_tempu   inplaceu   packageu   include_dirsu   defineu   undefu	   librariesu   library_dirsu   rpathu   link_objectsu   debugu   forceu   compileru   swigu   swig_cppu	   swig_optsu   user(   u   self(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   initialize_optionsi   s(    																			c       	   
   C   s  d d l  m } |  j d d. d/ d0 d1 d2 d3 ƒ |  j d  k o |  j j |  _ n |  j j |  _ | j	 ƒ  } | j	 d
 d ƒ } |  j
 d  k o |  j j
 p g  |  _
 n t |  j
 t ƒ o |  j
 j t j ƒ |  _
 n |  j
 j | ƒ | | k o |  j
 j | ƒ n t |  j t ƒ o |  j g |  _ n |  j d  k o g  |  _ n |  j d  k o g  |  _ n0 t |  j t ƒ o |  j j t j ƒ |  _ n |  j d  k o g  |  _ n0 t |  j t ƒ o |  j j t j ƒ |  _ n t j d k o¦|  j j t j j t j d ƒ ƒ |  j o t j j |  j d ƒ |  _ n t j j |  j d ƒ |  _ |  j
 j t j j t j d ƒ ƒ t d k oy |  j d k o
 d } n |  j d d  … } t j j t j d ƒ } | o t j j | | ƒ } n |  j j | ƒ qšt d k o, |  j j t j j t j d d d ƒ ƒ qšt d k o) |  j j t j j t j d d ƒ ƒ qš|  j j t j j t j d d ƒ ƒ n t j d k o& |  j j t j j t j d ƒ ƒ n t j d  d … d k p t j d  d … d  k ol t j j t j j t j d! ƒ ƒ o3 |  j j t j j t j  d" d# t! ƒ  d$ ƒ ƒ qp|  j j d% ƒ n t j j d& ƒ p t j j d' ƒ of | j" d( ƒ oV t j j t j j t j d! ƒ ƒ o |  j j | j" d) ƒ ƒ qü|  j j d% ƒ n |  j# o) |  j# j d* ƒ } d+ „  | Dƒ |  _# n |  j$ o |  j$ j d* ƒ |  _$ n |  j% d  k o g  |  _% n |  j% j d, ƒ |  _% |  j& oŒ t j j t' d- ƒ } t j j t' d" ƒ } t j j( | ƒ o |  j
 j | ƒ n t j j( | ƒ o$ |  j j | ƒ |  j j | ƒ qn d  S(4   Ni    (   u	   sysconfigu   buildu	   build_libu
   build_tempu   compileru   debugu   forceu	   plat_nameu   plat_specifici   u   ntu   libsu   Debugu   Releaseu   PCi	   u   win32u    i   u   PCbuildi   u   VS8.0u   win32releasei   u   VS7.1u   VC6u   os2u   Configi   u   cygwinu   atheosu   binu   libu   pythonu   configu   .u   linuxu   gnuu   Py_ENABLE_SHAREDu   LIBDIRu   ,c             S   s!   g  } |  ] } | | d  f q
 S(   u   1(    (   u   .0u   _[1]u   symbol(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu
   <listcomp>ú   s    u    u   include(   u	   build_libu	   build_lib(   u
   build_tempu
   build_temp(   u   compileru   compiler(   u   debugu   debug(   u   forceu   force(   u	   plat_nameu	   plat_name()   u	   distutilsu	   sysconfigu   set_undefined_optionsu   packageu   Noneu   distributionu   ext_packageu   ext_modulesu
   extensionsu   get_python_incu   include_dirsu
   isinstanceu   stru   splitu   osu   pathsepu   appendu	   librariesu   library_dirsu   rpathu   nameu   pathu   joinu   sysu   exec_prefixu   debugu
   build_tempu   MSVC_VERSIONu	   plat_nameu   platformu
   executableu
   startswithu   prefixu   get_python_versionu   get_config_varu   defineu   undefu	   swig_optsu   useru	   USER_BASEu   isdir(	   u   selfu	   sysconfigu
   py_includeu   plat_py_includeu   suffixu   new_libu   definesu   user_includeu   user_lib(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   finalize_options€   s¦    	"
"
&4%
&%


c          
   C   s3  d d l  m } |  j p d  S|  j j ƒ  oC |  j d ƒ } |  j j | j ƒ  p g  ƒ |  j	 j
 | j ƒ n | d |  j d |  j d |  j d |  j ƒ |  _ t |  j ƒ t j d k o* |  j t ƒ  k o |  j j |  j ƒ n |  j d  k	 o |  j j |  j ƒ n |  j d  k	 o1 x. |  j D] \ } } |  j j | | ƒ q*Wn |  j d  k	 o( x% |  j D] } |  j j | ƒ qkWn |  j d  k	 o |  j j |  j ƒ n |  j	 d  k	 o |  j j |  j	 ƒ n |  j d  k	 o |  j j  |  j ƒ n |  j! d  k	 o |  j j" |  j! ƒ n |  j# ƒ  d  S(	   Ni    (   u   new_compileru
   build_clibu   compileru   verboseu   dry_runu   forceu   nt($   u   distutils.ccompileru   new_compileru
   extensionsu   distributionu   has_c_librariesu   get_finalized_commandu	   librariesu   extendu   get_library_namesu   library_dirsu   appendu
   build_clibu   compileru   verboseu   dry_runu   forceu   customize_compileru   osu   nameu	   plat_nameu   get_platformu
   initializeu   include_dirsu   Noneu   set_include_dirsu   defineu   define_macrou   undefu   undefine_macrou   set_librariesu   set_library_dirsu   rpathu   set_runtime_library_dirsu   link_objectsu   set_link_objectsu   build_extensions(   u   selfu   new_compileru
   build_clibu   nameu   valueu   macro(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   run  sB    
		#
 
 c       
      C   sI  t  | t ƒ p t d ƒ ‚ n x"t | ƒ D]\ } } t  | t ƒ o q- n | \ } } t j d | ƒ t  | t ƒ o# t | ƒ d k o t d ƒ ‚ n t  | t	 ƒ o t
 j | ƒ p t d ƒ ‚ n t | t ƒ p t d ƒ ‚ n t | | d ƒ } x> d D]6 } | j | ƒ } | d k	 o t | | | ƒ qqW| j d ƒ | _ d | k o t j d ƒ n | j d ƒ } | o¬ g  | _ g  | _ x— | D]‹ }	 t  |	 t ƒ o t |	 ƒ d k p t d ƒ ‚ n t |	 ƒ d k o | j j |	 d ƒ q¤t |	 ƒ d k o | j j |	 ƒ q¤q¤Wn | | | <q- Wd S(   u¬  Ensure that the list of extensions (presumably provided as a
        command option 'extensions') is valid, i.e. it is a list of
        Extension objects.  We also support the old-style list of 2-tuples,
        where the tuples are (ext_name, build_info), which are converted to
        Extension instances here.

        Raise DistutilsSetupError if the structure is invalid anywhere;
        just returns otherwise.
        u:   'ext_modules' option must be a list of Extension instancesuu   old-style (ext_name, build_info) tuple found in ext_modules for extension '%s'-- please convert to Extension instancei   uM   each element of 'ext_modules' option must be an Extension instance or 2-tupleuR   first element of each tuple in 'ext_modules' must be the extension name (a string)uO   second element of each tuple in 'ext_modules' must be a dictionary (build info)u   sourcesu   include_dirsu   library_dirsu	   librariesu   extra_objectsu   extra_compile_argsu   extra_link_argsu   rpathu   def_fileu9   'def_file' element of build info dict no longer supportedu   macrosi   u9   'macros' element of build info dict must be 1- or 2-tuplei    N(   u   include_dirsu   library_dirsu	   librariesu   extra_objectsu   extra_compile_argsu   extra_link_args(   i   i   (   u
   isinstanceu   listu   DistutilsSetupErroru	   enumerateu	   Extensionu   logu   warnu   tupleu   lenu   stru   extension_name_reu   matchu   instanceu   DictionaryTypeu   getu   Noneu   setattru   runtime_library_dirsu   define_macrosu   undef_macrosu   append(
   u   selfu
   extensionsu   iu   extu   ext_nameu
   build_infou   keyu   valu   macrosu   macro(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   check_extensions_listQ  s`    
 	$     		 #c             C   s>   |  j  |  j ƒ g  } x! |  j D] } | j | j ƒ q  W| S(   N(   u   check_extensions_listu
   extensionsu   extendu   sources(   u   selfu	   filenamesu   ext(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   get_source_files   s    
 c             C   sh   |  j  |  j ƒ g  } xK |  j D]@ } |  j | j ƒ } | j t j j |  j |  j	 | ƒ ƒ ƒ q  W| S(   N(
   u   check_extensions_listu
   extensionsu   get_ext_fullnameu   nameu   appendu   osu   pathu   joinu	   build_libu   get_ext_filename(   u   selfu   outputsu   extu   fullname(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   get_outputs©  s    
 c             C   s5   |  j  |  j ƒ x |  j D] } |  j | ƒ q Wd  S(   N(   u   check_extensions_listu
   extensionsu   build_extension(   u   selfu   ext(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   build_extensions¹  s    
 c             C   s±  | j  } | d  k p t | t t f ƒ o t d | j ƒ ‚ n t | ƒ } |  j | j ƒ } |  j or | j	 d ƒ } d j
 | d d … ƒ } | d } |  j d ƒ } | j | ƒ } t j j
 | |  j | ƒ ƒ }	 n" t j j
 |  j |  j | ƒ ƒ }	 | | j }
 |  j p t |
 |	 d ƒ p t j d | j ƒ d  St j d | j ƒ |  j | | ƒ } | j p g  } | j d  d  … } x! | j D] } | j | f ƒ q“W|  j j | d	 |  j d
 | d | j d |  j d | d | j ƒ} | d  d  … |  _  | j! o | j" | j! ƒ n | j# p g  } | j$ p |  j j% | ƒ } |  j j& | |	 d |  j' | ƒ d | j( d | j) d | d |  j* | ƒ d |  j d |  j d | ƒd  S(   Nuj   in 'ext_modules' option (extension '%s'), 'sources' must be present and must be a list of source filenamesu   .i    iÿÿÿÿu   build_pyu   neweru$   skipping '%s' extension (up-to-date)u   building '%s' extensionu
   output_diru   macrosu   include_dirsu   debugu   extra_postargsu   dependsu	   librariesu   library_dirsu   runtime_library_dirsu   export_symbolsu
   build_tempu   target_lang(+   u   sourcesu   Noneu
   isinstanceu   listu   tupleu   DistutilsSetupErroru   nameu   get_ext_fullnameu   inplaceu   splitu   joinu   get_finalized_commandu   get_package_diru   osu   pathu   get_ext_filenameu	   build_libu   dependsu   forceu   newer_groupu   logu   debugu   infou   swig_sourcesu   extra_compile_argsu   define_macrosu   undef_macrosu   appendu   compileru   compileu
   build_tempu   include_dirsu   _built_objectsu   extra_objectsu   extendu   extra_link_argsu   languageu   detect_languageu   link_shared_objectu   get_librariesu   library_dirsu   runtime_library_dirsu   get_export_symbols(   u   selfu   extu   sourcesu   fullnameu   modpathu   packageu   baseu   build_pyu   package_diru   ext_filenameu   dependsu
   extra_argsu   macrosu   undefu   objectsu   language(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   build_extensionÀ  sd    	$


 			
						c          
   C   s²  g  } g  } i  } |  j  o t j d ƒ n |  j  p  d |  j k p d | j k o
 d } n d } xt | D]l } t j j | ƒ \ } }	 |	 d k o4 | j | d | ƒ | j | ƒ | d | | <qn | j | ƒ qn W| p | S|  j p
 |  j	 ƒ  }
 |
 d g } | j
 |  j ƒ |  j  o | j d ƒ n |  j p% x" | j D] } | j | ƒ qKWn xE | D]= } | | } t j d	 | | ƒ |  j | d
 | | g ƒ qmW| S(   uü   Walk the list of source files in 'sources', looking for SWIG
        interface (.i) files.  Run SWIG on all that are found, and
        return a modified 'sources' list with SWIG source files replaced
        by the generated C (or C++) files.
        u/   --swig-cpp is deprecated - use --swig-opts=-c++u   -c++u   .cppu   .cu   .iu   _wrapiÿÿÿÿu   -pythonu   swigging %s to %su   -o(   u   swig_cppu   logu   warnu	   swig_optsu   osu   pathu   splitextu   appendu   swigu	   find_swigu   extendu   infou   spawn(   u   selfu   sourcesu	   extensionu   new_sourcesu   swig_sourcesu   swig_targetsu
   target_extu   sourceu   baseu   extu   swigu   swig_cmdu   ou   target(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   swig_sources!  sD    

 


  
c             C   s›   t  j d k o d St  j d k oJ xo d D]7 } t  j j d | d ƒ } t  j j | ƒ o | Sq, Wd Sn) t  j d	 k o d St d
 t  j ƒ ‚ d S(   u›   Return the name of the SWIG executable.  On Unix, this is
        just "swig" -- it should be in the PATH.  Tries a bit harder on
        Windows.
        u   posixu   swigu   ntu   1.3u   1.2u   1.1u	   c:\swig%su   swig.exeu   os2u>   I don't know how to find (much less run) SWIG on platform '%s'N(   u   1.3u   1.2u   1.1(   u   osu   nameu   pathu   joinu   isfileu   DistutilsPlatformError(   u   selfu   versu   fn(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu	   find_swigW  s     	c             C   s(   |  j  d  k o | S|  j  d | Sd  S(   Nu   .(   u   packageu   None(   u   selfu   ext_name(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   get_ext_fullnames  s    c             C   s²   d d l  m } | j d ƒ } t j d k o0 | t | ƒ d d d … | t | ƒ d <n | d ƒ } t j d	 k o# |  j o t j j | Œ  d
 | St j j | Œ  | S(   u¦   Convert the name of an extension (eg. "foo.bar") into the name
        of the file from which it will be loaded (eg. "foo/bar.so", or
        "foo\bar.pyd").
        i    (   u   get_config_varu   .u   os2i   Ni   u   SOu   ntu   _d(	   u   distutils.sysconfigu   get_config_varu   splitu   osu   nameu   lenu   debugu   pathu   join(   u   selfu   ext_nameu   get_config_varu   ext_pathu   so_ext(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   get_ext_filenamey  s    0c             C   sE   d | j  j d ƒ d } | | j k o | j j | ƒ n | j S(   u  Return the list of symbols that a shared extension has to
        export.  This either uses 'ext.export_symbols' or, if it's not
        provided, "PyInit_" + module_name.  Only relevant on Windows, where
        the .pyd file (DLL) must export the module "init" function.
        u   PyInit_u   .iÿÿÿÿ(   u   nameu   splitu   export_symbolsu   append(   u   selfu   extu   initfunc_name(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   get_export_symbols‰  s    c             C   se  t  j d k o} d d l m } t |  j | ƒ pO d } |  j o | d } n | t  j d ?t  j d ?d @f } | j | g S| j SnÕt  j d	 k o7 d } | t  j d ?t  j d ?d @f } | j | g St  j d
 d … d k o7 d } | t  j d ?t  j d ?d @f } | j | g St  j d
 d … d k o¬ d d l	 m
 } d } | t  j d ?t  j d ?d @f } g  } xU | j d ƒ j ƒ  D]> } | j d ƒ o | j | d d
 … ƒ q“| j | ƒ q“W| j | d g | St  j d k o | j Sd d l	 m
 } | j d ƒ o7 d } | t  j d ?t  j d ?d @f } | j | g S| j Sd
 S(   uÜ   Return the list of libraries to link against when building a
        shared extension.  On most platforms, this is just 'ext.libraries';
        on Windows and OS/2, we add the Python library (eg. python20.dll).
        u   win32i    (   u   MSVCCompileru
   python%d%du   _di   i   iÿ   u   os2emxNi   u   cygwinu   python%d.%du   atheos(   u	   sysconfigu   SHLIBSu   -li   u   mu   darwinu   Py_ENABLE_SHARED(   u   sysu   platformu   distutils.msvccompileru   MSVCCompileru
   isinstanceu   compileru   debugu
   hexversionu	   librariesu	   distutilsu	   sysconfigu   get_config_varu   splitu
   startswithu   append(   u   selfu   extu   MSVCCompileru   templateu	   pythonlibu	   sysconfigu   extrau   lib(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   get_libraries”  sR    

 N(   u
   build-lib=u   bu(   directory for compiled extension modules(   u   build-temp=u   tu1   directory for temporary files (build by-products)(   u   define=u   Du   C preprocessor macros to define(   u   undef=u   Uu!   C preprocessor macros to undefine(   u
   libraries=u   lu!   external C libraries to link with(   u   rpath=u   Ru7   directories to search for shared C libraries at runtime(   u   link-objects=u   Ou2   extra explicit link objects to include in the link(   u   debugu   gu'   compile/link with debugging information(   u   forceu   fu2   forcibly build everything (ignore file timestamps)(   u	   compiler=u   cu   specify the compiler type(   u   swig-cppNu)   make SWIG create C++ files (default is C)(   u
   swig-opts=Nu!   list of SWIG command line options(   u   swig=Nu   path to the SWIG executable(   u   userNu#   add user include, library and rpath(   u   __name__u
   __module__u   descriptionu   osu   pathsepu   sep_byu   get_platformu   Noneu   user_optionsu   boolean_optionsu   show_compilersu   help_optionsu   initialize_optionsu   finalize_optionsu   runu   check_extensions_listu   get_source_filesu   get_outputsu   build_extensionsu   build_extensionu   swig_sourcesu	   find_swigu   get_ext_fullnameu   get_ext_filenameu   get_export_symbolsu   get_libraries(   u
   __locals__(    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu	   build_ext"   sr   
  

   
         			‘	@	O					a	6				u	   build_ext(   u   __doc__u   __revision__u   sysu   osu   reu   siteu	   USER_BASEu	   USER_SITEu   distutils.coreu   Commandu   distutils.errorsu   distutils.sysconfigu   customize_compileru   get_python_versionu   distutils.dep_utilu   newer_groupu   distutils.extensionu	   Extensionu   distutils.utilu   get_platformu	   distutilsu   logu   nameu   distutils.msvccompileru   get_build_versionu   intu   MSVC_VERSIONu   compileu   extension_name_reu   show_compilersu	   build_ext(    (    (    u8   /mit/python/lib/python3.0/distutils/command/build_ext.pyu   <module>   s"   $
		