home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CMCD0704.ISO / Software / Shareware / Comunicatii / jyte / jyte.exe / setup_d.py < prev    next >
Text File  |  2001-06-04  |  3KB  |  91 lines

  1. # Install and register pythonxx_d.dll, pywintypesxx_d.dll and pythoncomxx_d.dll
  2. #
  3. # Assumes the _d files can be found in the same directory as this script
  4. # or in the cwd.
  5.  
  6. import win32api
  7. import _winreg
  8. import sys
  9. import shutil
  10. import os
  11.  
  12. def usage_and_die(rc):
  13.     print
  14.     print "This script is designed to copy and register the Python debug"
  15.     print "binaries.  It looks for pythonxx_d.dll, pythoncomxx_d.dll etc,"
  16.     print "and installs them to work correctly with Python debug builds."
  17.     print
  18.     print "You will generally find this script in the. zip file that"
  19.     print "included these _d files.  Please run this script from"
  20.     print "that directory"
  21.     sys.exit(rc)
  22.     
  23. if win32api.__file__.find("_d") > 0:
  24.     print "This scripts appears to be running a DEBUG version of Python."
  25.     print "Please run it using a normal release build (python.exe)"
  26.     usage_and_die(1)
  27.  
  28. try:
  29.     import pythoncom
  30. except ImportError, details:
  31.     print "Could not import the release version of pythoncom"
  32.     print "The error details are: %s" % (details,)
  33.     print "Please correct this error and rerun the script"
  34.     usage_and_die(2)
  35.  
  36. try:
  37.     import pywintypes
  38. except ImportError, details:
  39.     print "Could not import the release version of pywintypes"
  40.     print "The error details are: %s" % (details,)
  41.     print "Please correct this error and rerun the script"
  42.     usage_and_die(2)
  43.  
  44. def _docopy(src, dest):
  45.     orig_src = src
  46.     if not os.path.isfile(src):
  47.         src = os.path.join( os.path.split(sys.argv[0])[0], src)
  48.         print "Can not find %s or %s to copy" % (os.path.abspath(orig_src), os.path.abspath(src))
  49.         return 0
  50.     try:
  51.         shutil.copy(src, dest)
  52.         print "Copied %s -> %s" % (src, dest)
  53.         return 1
  54.     except:
  55.         print "Error copying '%s' -> '%s'" % (src, dest)
  56.         print str(sys.exc_info[1])
  57.         usage_and_die(3)
  58.  
  59. def _doregister(mod_name, dll_name):
  60.     assert os.path.isfile(dll_name), "Shouldn't get here if the file doesn't exist!"
  61.     try:
  62.         key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "Software\\Python\\PythonCore\\%s\\Modules\\%s" % (sys.winver, mod_name))
  63.     except _winreg.error:
  64.         try:
  65.             key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "Software\\Python\\PythonCore\\%s\\Modules\\%s" % (sys.winver, mod_name))
  66.         except _winreg.error:
  67.             print "Could not find the existing '%s' module registered in the registry" % (mod_name,)
  68.             usage_and_die(4)
  69.     # Create the debug key.
  70.     sub_key = _winreg.CreateKey(key, "Debug")
  71.     _winreg.SetValue(sub_key, None, _winreg.REG_SZ, dll_name)
  72.     print "Registered '%s' in the registry" % (dll_name,)
  73.  
  74. def _domodule(mod_name, release_mod_filename):
  75.     path, fname = os.path.split(release_mod_filename)
  76.     base, ext = os.path.splitext(fname)
  77.     new_fname = base + "_d" + ext
  78.     if _docopy(new_fname, path):
  79.         _doregister( mod_name, os.path.abspath( os.path.join(path, new_fname) ) )
  80.  
  81.     
  82. # First the main Python DLL.
  83. path, fname = path, fname = os.path.split(win32api.GetModuleFileName(sys.dllhandle))
  84. base, ext = os.path.splitext(fname)
  85. _docopy(base + "_d" + ext, path)
  86.  
  87. # Then pythoncom and pywintypes.
  88. _domodule("pythoncom", pythoncom.__file__)
  89. _domodule("pywintypes", pywintypes.__file__)
  90.  
  91. print "System _d files were setup."