In article <035401bf6da9$25e68c30$4500a8c0@thomasnotebook>, Thomas Heller
[I wrote]
+ try: + import win32api + import win32con + except ImportError: + return None This should be except ImportError: return () Sorry, correct is: except ImportError: return []
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org http://www.python.org/mailman/listinfo/distutils-sig
try this patch Thomas and see if it's ok with your registry. I put in a DistutilsPlatformError if it can't find any devstudio at all. *** msvccompiler.py.org Mon Jan 17 21:57:18 2000 --- msvccompiler.py Wed Feb 02 20:40:40 2000 *************** *** 10,19 **** --- 10,101 ---- import os import sys + import string from distutils.errors import * from distutils.ccompiler import \ CCompiler, gen_preprocess_options, gen_lib_options + def _devstudio_versions(): + "Get a list of devstudio versions" + try: + import win32api + import win32con + except ImportError: + return [] + + K = 'Software\\Microsoft\\Devstudio' + L = [] + for base in (win32con.HKEY_CLASSES_ROOT,win32con.HKEY_LOCAL_MACHINE,win32con.HKEY_CURRENT_USER,win32con.HKEY_USERS): + try: + k = win32api.RegOpenKeyEx(base,K) + i = 0 + while 1: + try: + p = win32api.RegEnumKey(k,i) + if p[0] in '123456789' and p not in L: + L.append(p) + except win32api.error: + break + i = i + 1 + except win32api.error: + pass + L.sort() + L.reverse() + return L + + def _msvc_get_paths(path, vNum='6.0', platform='x86'): + "Get a devstudio path (include, lib or path)" + try: + import win32api + import win32con + except ImportError: + return [] + + L = [] + if path=='lib': path= 'Library' + path = string.upper(path + ' Dirs') + K = 'Software\\Microsoft\\Devstudio\\%s\\Build System\\Components\\Platforms\\Win32 (%s)\\Directories' \ + % (vNum,platform) + for base in (win32con.HKEY_CLASSES_ROOT,win32con.HKEY_LOCAL_MACHINE,win32con.HKEY_CURRENT_USER,win32con.HKEY_USERS): + try: + k = win32api.RegOpenKeyEx(base,K) + i = 0 + while 1: + try: + (p,v,t) = win32api.RegEnumValue(k,i) + if string.upper(p)==path: + V = string.split(v,';') + for v in V: + if v=='' or v in L: continue + L.append(v) + break + i = i + 1 + except win32api.error: + break + except win32api.error: + pass + return L + + def _find_exe(exe,vNum): + for p in _msvc_get_paths('bin',vNum): + fn=os.path.join(os.path.abspath(p),exe) + if os.path.isfile(fn): return fn + + #didn't find it; try existing path + try: + for p in string.split(os.environ['Path'],';'): + fn=os.path.join(os.path.abspath(p),exe) + if os.path.isfile(fn): return fn + except: + pass + return exe #last desperate hope + + def _find_SET(n,vNum): + return _msvc_get_paths(n,vNum) + + def _do_SET(n,vNum): + p=_find_SET(n,vNum) + if p!=[]: os.environ[n]=string.join(p,';') class MSVCCompiler (CCompiler) : """Concrete class that implements an interface to Microsoft Visual C++, *************** *** 34,41 **** self.add_library ( "python" + sys.version[0] + sys.version[2] ) self.add_library_dir( os.path.join( sys.exec_prefix, 'libs' ) ) ! self.cc = "cl.exe" ! self.link = "link.exe" self.preprocess_options = None self.compile_options = [ '/nologo', '/Ox', '/MD' ] --- 116,136 ---- self.add_library ( "python" + sys.version[0] + sys.version[2] ) self.add_library_dir( os.path.join( sys.exec_prefix, 'libs' ) ) ! vNum = _devstudio_versions() ! if vNum==[]: ! raise DistutilsPlatformError, "Can't seem to find devstudio in the registry" ! vNum = vNum[0] #highest version ! self.cc = _find_exe("cl.exe",vNum) ! self.link = _find_exe("link.exe",vNum) ! _do_SET('lib',vNum) ! _do_SET('include',vNum) ! path=_find_SET('path',vNum) ! try: ! for p in string.split(os.environ['path'],';'): ! path.append(p) ! except KeyError: ! pass ! os.environ['path'] = string.join(path,';') self.preprocess_options = None self.compile_options = [ '/nologo', '/Ox', '/MD' ] -- Robin Becker