
8O9c       s    d  Z    d Z  d k Z d k Z d k Z  d k T d k l Z l Z l	 Z	 l
 Z
 l Z  d k l Z l Z l Z  d Z  yR  d k Z  d Z  e Z  e i Z  e i Z  e i Z  e i Z Wn ! e j
 o " y^ # d k Z $ d k Z % d Z & e Z ( e i Z ) e i Z * e i Z + e i Z Wn - e j
 o
 . n Xn X0 e o4 1 e i Z 2 e i Z 3 e i  Z  4 e i! Z! n 8 d   Z" \ d
 d d	  Z#  d   Z$  d   Z%  d e f d     YZ& d S(   s   distutils.msvccompiler

Contains MSVCCompiler, an implementation of the abstract CCompiler class
for the Microsoft Visual Studio.s;   $Id: msvccompiler.py,v 1.42 2000/09/27 02:08:14 gward Exp $N(   s   *(   s   DistutilsExecErrors   DistutilsPlatformErrors   CompileErrors   LibErrors	   LinkError(   s	   CCompilers   gen_preprocess_optionss   gen_lib_optionsi    i   c     sC  8 = ? t  o @ g  Sn B d }  C g  } D x t t t t f d D r } H y I t | |   } J d } K x K d o| L yK M t | |  } N | d d j o
 | | j o O | i |  n Wn P t j
 o Q Pn XR | d } qv WWn S t j
 o
 T n XqF WU | i   V | i   W | Sd S(   s*  Get list of devstudio versions from the Windows registry.  Return a
       list of strings containing version numbers; the list will be
       empty if we were unable to access the registry (eg. couldn't import
       a registry-access module) or the appropriate registry keys weren't
       found.s   Software\Microsoft\Devstudioi    i   s	   123456789N(   s   _can_read_regs   Ks   Ls   HKEY_CLASSES_ROOTs   HKEY_LOCAL_MACHINEs   HKEY_CURRENT_USERs
   HKEY_USERSs   bases   RegOpenKeyExs   ks   is
   RegEnumKeys   ps   appends   RegErrors   sorts   reverse(   s   Ks   Ls   bases   ks   is   ps3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   get_devstudio_versions8 s0   		 		 
!	c    s  \ _ a t  o b g  Sn d g  } e |  d j o f d }  n g t i |  d  }  h d d | | f } k xDt t	 t
 t f d k r+} o yp t | |  } q d } r x r d o s y t t | |  \ } }	 }
 u t i |  |  j om v t i |	 d  } w xJ | d w r= }	 x |	 d	 j p
 |	 | j o
 x qn y | i |	  qWz Pn { | d } Wn | t j
 o } Pn Xq WWn ~ t j
 o
  n Xq W | Sd
 S(   s   Get a list of devstudio directories (include, lib or path).  Return
       a list of strings; will be empty list if unable to access the
       registry or appropriate registry keys not found.s   libs   Librarys    Dirss    Software\Microsoft\Devstudio\%s\s8   Build System\Components\Platforms\Win32 (%s)\Directoriesi    i   s   ;s    N(   s   _can_read_regs   Ls   paths   strings   uppers   versions   platforms   Ks   HKEY_CLASSES_ROOTs   HKEY_LOCAL_MACHINEs   HKEY_CURRENT_USERs
   HKEY_USERSs   bases   RegOpenKeyExs   ks   is   RegEnumValues   ps   vs   ts   splits   Vs   appends   RegError(   s   paths   versions   platforms   Ls   Ks   bases   ks   is   ps   vs   ts   Vs3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   get_msvc_paths\ s>   	 		 
 	 
s   6.0s   x86c    s      xa t  d |  d  rK }  t i i t i i |  |   }  t i i	 |  o  | Sn q W xk t
 i t i d d  d  rK }  t i i t i i |  |   }  t i i	 |  o  | Sn q W |  Sd S(   s  Try to find an MSVC executable program 'exe' (from version
       'version_number' of MSVC) in several places: first, one of the MSVC
       program search paths from the registry; next, the directories in the
       PATH environment variable.  If any of those work, return an absolute
       path that is known to exist.  If none of them work, just return the
       original program name, 'exe'.s   pathi    s   Paths   ;N(   s   get_msvc_pathss   version_numbers   ps   oss   paths   joins   abspaths   exes   fns   isfiles   strings   splits   environ(   s   exes   version_numbers   ps   fns3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   find_exe s    	$ 	$c    sF      t  |  |  }  | o   t i | d  t i |  <n d S(   s   Set environment variable 'name' to an MSVC path type value obtained
       from 'get_msvc_paths()'.  This is equivalent to a SET command prior
       to execution of spawned commands.s   ;N(   s   get_msvc_pathss   names   version_numbers   ps   strings   joins   oss   environ(   s   names   version_numbers   ps3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   set_path_env_var s   
s   MSVCCompilerc    
  s\   d  Z    d Z  h  Z  d g Z  d d d g Z  d g Z  d g Z  e e e e Z  d Z  d	 Z	  d
 Z
  d Z  d Z Z  d Z  d d d d  Z  d d d  Z e e e d e e d  Z qe d e e d  Z e e e e e d e e e d 	 Z d   Z d   Z d   Z d d  Z RS(   sw   Concrete class that implements an interface to Microsoft Visual C++,
       as defined by the CCompiler abstract class.s   msvcs   .cs   .ccs   .cpps   .cxxs   .rcs   .mcs   .ress   .objs   .libs   .dlls   %s%ss   .exec    s     t  i |  | | |   t   }  | o' | d }  t	 d |  |  _
  t	 d |  |  _  t	 d |  |  _  t	 d |  |  _  t	 d |  |  _  t d |   t d |   t d	 |  }  y@  x6 t i t i d	 d
  d  r }  | i |  q WWn  t j
 o
  n X t i | d
  t i d	 <n=  d |  _
  d |  _  d |  _  d |  _  d |  _  t |  _  d d d d d g |  _  d d d d d d d g |  _  d d d g |  _  d d d d d g |  _  d g |  _  d  S(   Ni    s   cl.exes   link.exes   lib.exes   rc.exes   mc.exes   libs   includes   paths   ;s   /nologos   /Oxs   /MDs   /W3s   /GXs   /Ods   /MDds   /Z7s   /D_DEBUGs   /DLLs   /INCREMENTAL:NOs   /INCREMENTAL:nos	   /pdb:Nones   /DEBUG(!   s	   CCompilers   __init__s   selfs   verboses   dry_runs   forces   get_devstudio_versionss   versionss   versions   find_exes   ccs   linkers   libs   rcs   mcs   set_path_env_vars   get_msvc_pathss   paths   strings   splits   oss   environs   ps   appends   KeyErrors   joins   Nones   preprocess_optionss   compile_optionss   compile_options_debugs   ldflags_shareds   ldflags_shared_debugs   ldflags_static(   s   selfs   verboses   dry_runs   forces   versionss   versions   paths   ps3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   __init__ s<   
 	 !i    c    s^    | t j o  d } n  g  }  x$| d  r}  t i i |  \ } }  | |  i j o t d |   n | o t i i |  } n | |  i j o- | i t i i | | |  i   nj | |  i j o- | i t i i | 	| |  i   n* | i t i i | | |  i   q5 W| Sd  S(   Ns    i    s   Don't know how to compile %s(   s
   output_dirs   Nones	   obj_namess   source_filenamess   src_names   oss   paths   splitexts   bases   exts   selfs   src_extensionss   CompileErrors	   strip_dirs   basenames   _rc_extensionss   appends   joins   res_extensions   _mc_extensionss   obj_extension(   s   selfs   source_filenamess	   strip_dirs
   output_dirs	   obj_namess   src_names   bases   exts3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   object_filenames s&    	 	
s    c    s  |  i | | |  \ } } } |  i | |  \ } }	 | t
 j o  g  } n "t | |  }
 #| p g  } $| i d  %| o &| i |  i  n (| i |  i  *xt t |   d *r} +| | } | | } ,t i i |  d } .|	 | o /|  i d | | f  nw1|  i t i i |   3| |  i  j o 4d | } n5| |  i" j o 6d | } n7| |  i# j or 9| } :d | } ;y( <|  i% |  i& g | g | g  Wn$ >t' j
 o } ?t) |  n X@q n'A| |  i* j o Ot i i |  } Pt i i |  } Qy S|  i% |  i- g d | d	 | g | g  Ut i i t i i. |   \ } } Vt i i1 | | d
  } X|  i% |  i& g d | g | g  Wn$ [t' j
 o } \t) |  n X]q n `t) d | | f   dd | } ey0 f|  i% |  i3 g | |
 | | g |  Wn$ it' j
 o } jt) |  n Xq Wl| Sd  S(   Ns   /ci    i   s   skipping %s (%s up-to-date)s   /Tcs   /Tps   /fos   -hs   -rs   .rcs"   Don't know how to compile %s to %ss   /Fo(4   s   selfs   _fix_compile_argss
   output_dirs   macross   include_dirss   _prep_compiles   sourcess   objectss   skip_sourcess   extra_postargss   Nones   gen_preprocess_optionss   pp_optss   extra_preargss   compile_optss   appends   debugs   extends   compile_options_debugs   compile_optionss   ranges   lens   is   srcs   objs   oss   paths   splitexts   exts   announces   mkpaths   dirnames   _c_extensionss	   input_opts   _cpp_extensionss   _rc_extensionss
   output_opts   spawns   rcs   DistutilsExecErrors   msgs   CompileErrors   _mc_extensionss   h_dirs   rc_dirs   mcs   basenames   bases   _s   joins   rc_files   cc(   s   selfs   sourcess
   output_dirs   macross   include_dirss   debugs   extra_preargss   extra_postargss   objectss   skip_sourcess   pp_optss   compile_optss   is   srcs   objs   exts	   input_opts
   output_opts   msgs   h_dirs   rc_dirs   bases   _s   rc_files3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   compiles^   	!
 		(
-',
0c 
   s  qy|  i | |  \ } } z|  i | d | } }|  i | |  o ~| d | g } | o n | o | | d *n | o | i |  n y |  i |  i g |  Wn$ t j
 o }	 t |	  n Xn |  i d |  d  S(   Ns
   output_dirs   /OUT:i    s   skipping %s (up-to-date)(   s   selfs   _fix_object_argss   objectss
   output_dirs   library_filenames   output_libnames   output_filenames
   _need_links   lib_argss   debugs   extra_preargss   extra_postargss   extends   spawns   libs   DistutilsExecErrors   msgs   LibErrors   announce(
   s   selfs   objectss   output_libnames
   output_dirs   debugs   extra_preargss   extra_postargss   output_filenames   lib_argss   msgs3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   create_static_libqs   


c    s  |  i | |  \ } } |  i | | |  \ } } } | o |  i d t	 |   n t
 |  | | |  } | t j	 o t i i | |  } n |  i | |  o| t i j o2 |	 o |  i d } n |  i d } n' |	 o |  i } n |  i } g  } x. | p g  d r } | i d |  qNW| | | | d | g } | t j	 os t i i t i i |   \ } } t i i t i i" | d  |  i# |   } | i d |  n |
 o |
 | d *n | o | i' |  n |  i( t i i" |   y |  i) |  i* g |  Wn$ t+ j
 o } t- |  n Xn |  i. d |  d  S(   Ns5   I don't know what to do with 'runtime_library_dirs': i   i    s   /EXPORT:s   /OUT:s   /IMPLIB:s   skipping %s (up-to-date)(/   s   selfs   _fix_object_argss   objectss
   output_dirs   _fix_lib_argss	   librariess   library_dirss   runtime_library_dirss   warns   strs   gen_lib_optionss   lib_optss   Nones   oss   paths   joins   output_filenames
   _need_links   target_descs	   CCompilers
   EXECUTABLEs   debugs   ldflags_shared_debugs   ldflagss   ldflags_shareds   export_optss   export_symbolss   syms   appends   ld_argss   splitexts   basenames   dll_names   dll_exts   dirnames   library_filenames   implib_files   extra_preargss   extra_postargss   extends   mkpaths   spawns   linkers   DistutilsExecErrors   msgs	   LinkErrors   announce(   s   selfs   target_descs   objectss   output_filenames
   output_dirs	   librariess   library_dirss   runtime_library_dirss   export_symbolss   debugs   extra_preargss   extra_postargss
   build_temps   lib_optss   ldflagss   export_optss   syms   ld_argss   dll_names   dll_exts   implib_files   msgs3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   linksJ   !
		

	 	 '

c    s   d | Sd  S(   Ns	   /LIBPATH:(   s   dir(   s   selfs   dirs3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   library_dir_options   c    s   t  d  d  S(   Ns<   don't know how to set runtime library search path for MSVC++(   s   DistutilsPlatformError(   s   selfs   dirs3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   runtime_library_dir_options   c    s   |  i |  Sd  S(   N(   s   selfs   library_filenames   lib(   s   selfs   libs3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   library_options   c    s   | o | d | g } n | g } xu | d ra } xU | d rH } t i i | |  i
 |   } t i i |  o | Sn qQ Wq< Wt Sd  S(   Ns   _di    (   s   debugs   libs	   try_namess   dirss   dirs   names   oss   paths   joins   selfs   library_filenames   libfiles   existss   None(   s   selfs   dirss   libs   debugs	   try_namess   dirs   names   libfiles3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   find_library_files   
 	 	!(   s   __doc__s   compiler_types   executabless   _c_extensionss   _cpp_extensionss   _rc_extensionss   _mc_extensionss   src_extensionss   res_extensions   obj_extensions   static_lib_extensions   shared_lib_extensions   static_lib_formats   shared_lib_formats   exe_extensions   __init__s   object_filenamess   Nones   compiles   create_static_libs   links   library_dir_options   runtime_library_dir_options   library_options   find_library_file(    s3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   MSVCCompiler s.   								/_'R('   s   __doc__s   __revision__s   syss   oss   strings   typess   distutils.errorss   DistutilsExecErrors   DistutilsPlatformErrors   CompileErrors   LibErrors	   LinkErrors   distutils.ccompilers	   CCompilers   gen_preprocess_optionss   gen_lib_optionss   _can_read_regs   _winregs   hkey_mods	   OpenKeyExs   RegOpenKeyExs   EnumKeys
   RegEnumKeys	   EnumValues   RegEnumValues   errors   RegErrors   ImportErrors   win32apis   win32cons   HKEY_CLASSES_ROOTs   HKEY_LOCAL_MACHINEs   HKEY_CURRENT_USERs
   HKEY_USERSs   get_devstudio_versionss   get_msvc_pathss   find_exes   set_path_env_vars   MSVCCompiler(    s3   /mit/python/lib/python2.0/distutils/msvccompiler.pys   ? sH   	
(					
$)
