diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2005-03-15 00:39:40 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2005-03-15 00:39:40 (GMT) |
commit | 141f41ae1a38746578f3cecd204ec04b4006b9e1 (patch) | |
tree | 4167bfbcb9d18c7e3737d9d92ae356b04442dc0a /Tools/msi/msi.py | |
parent | 1d459061a049ecea48343f490fce96ffb172b4d9 (diff) | |
download | cpython-141f41ae1a38746578f3cecd204ec04b4006b9e1.zip cpython-141f41ae1a38746578f3cecd204ec04b4006b9e1.tar.gz cpython-141f41ae1a38746578f3cecd204ec04b4006b9e1.tar.bz2 |
Reuse componentids for *.dll across minor releases.
Indicate to the user when this is an upgrade installation.
Make CHM file non-advertised.
Backported to 2.4.
Diffstat (limited to 'Tools/msi/msi.py')
-rw-r--r-- | Tools/msi/msi.py | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py index 7eced6f..d020082 100644 --- a/Tools/msi/msi.py +++ b/Tools/msi/msi.py @@ -122,6 +122,20 @@ if major+minor <= "23": 'parser.pyd', ]) +# Well-known component UUIDs +# These are needed for SharedDLLs reference counter; if +# a different UUID was used for each incarnation of, say, +# python24.dll, an upgrade would set the reference counter +# from 1 to 2 (due to what I consider a bug in MSI) +# Using the same UUID is fine since these files are versioned, +# so Installer will always keep the newest version. +msvcr71_uuid = "{8666C8DD-D0B4-4B42-928E-A69E32FA5D4D}" +pythondll_uuid = { + "24":"{9B81E618-2301-4035-AC77-75D9ABEB7301}", + "25":"{2e41b118-38bd-4c1b-a840-6977efd1b911}" + } [major+minor] + + # Build the mingw import library, libpythonXY.a # This requires 'nm' and 'dlltool' executables on your PATH def build_mingw_lib(lib_file, def_file, dll_file, mingw_lib): @@ -220,6 +234,7 @@ def build_database(): # accordingly. add_data(db, "Property", [("UpgradeCode", uc), ("WhichUsers", "ALL"), + ("ProductLine", "Python%s%s" % (major, minor)), ]) db.Commit() return db @@ -378,6 +393,7 @@ def add_ui(db): [("DlgFont8", "Tahoma", 9, None, 0), ("DlgFontBold8", "Tahoma", 8, None, 1), #bold ("VerdanaBold10", "Verdana", 10, None, 1), + ("VerdanaRed9", "Verdana", 9, 255, 0), ]) compileargs = r"-Wi [TARGETDIR]Lib\compileall.py -f -x badsyntax [TARGETDIR]Lib" @@ -566,6 +582,9 @@ def add_ui(db): seldlg = PyDialog(db, "SelectDirectoryDlg", x, y, w, h, modal, title, "Next", "Next", "Cancel") seldlg.title("Select Destination Directory") + c = seldlg.text("Existing", 135, 25, 235, 30, 0x30003, + "{\VerdanaRed9}This update will replace your existing [ProductLine] installation.") + c.condition("Hide", 'REMOVEOLDVERSION="" and REMOVEOLDSNAPSHOT=""') seldlg.text("Description", 135, 50, 220, 40, 0x30003, "Please select a directory for the [ProductName] files.") @@ -865,7 +884,7 @@ def add_files(db): dlldir = PyDirectory(db, cab, root, srcdir, "DLLDIR", ".") pydll = "python%s%s.dll" % (major, minor) pydllsrc = srcdir + "/PCBuild/" + pydll - dlldir.start_component("DLLDIR", flags = 8, keyfile = pydll) + dlldir.start_component("DLLDIR", flags = 8, keyfile = pydll, uuid = pythondll_uuid) installer = msilib.MakeInstaller() pyversion = installer.FileVersion(pydllsrc, 0) if not snapshot: @@ -877,7 +896,7 @@ def add_files(db): language=installer.FileVersion(pydllsrc, 1)) # XXX determine dependencies version, lang = extract_msvcr71() - dlldir.start_component("msvcr71", flags=8, keyfile="msvcr71.dll") + dlldir.start_component("msvcr71", flags=8, keyfile="msvcr71.dll", uuid=msvcr71_uuid) dlldir.add_file("msvcr71.dll", src=os.path.abspath("msvcr71.dll"), version=version, language=lang) tmpfiles.append("msvcr71.dll") @@ -1047,6 +1066,8 @@ def add_registry(db): # msidbComponentAttributesRegistryKeyPath = 4 [("REGISTRY", msilib.gen_uuid(), "TARGETDIR", 4, None, "InstallPath"), + ("REGISTRY.doc", msilib.gen_uuid(), "TARGETDIR", 4, None, + "Documentation"), ("REGISTRY.def", msilib.gen_uuid(), "TARGETDIR", 4, None, None)] + tcldata) # See "FeatureComponents Table". @@ -1062,6 +1083,7 @@ def add_registry(db): tcldata = [(tcltk.id, "pythonw.exe")] add_data(db, "FeatureComponents", [(default_feature.id, "REGISTRY"), + (htmlfiles.id, "REGISTRY.doc"), (ext_feature.id, "REGISTRY.def")] + tcldata ) @@ -1130,7 +1152,7 @@ def add_registry(db): ("PythonPath", -1, prefix+r"\PythonPath", "", r"[TARGETDIR]Lib;[TARGETDIR]DLLs;[TARGETDIR]Lib\lib-tk", "REGISTRY"), ("Documentation", -1, prefix+r"\Help\Main Python Documentation", "", - r"[TARGETDIR]Doc\Python%s%s.chm" % (major, minor), "REGISTRY"), + r"[TARGETDIR]Doc\Python%s%s.chm" % (major, minor), "REGISTRY.doc"), ("Modules", -1, prefix+r"\Modules", "+", None, "REGISTRY"), ("AppPaths", -1, r"Software\Microsoft\Windows\CurrentVersion\App Paths\Python.exe", "", r"[TARGETDIR]Python.exe", "REGISTRY.def") @@ -1154,9 +1176,14 @@ def add_registry(db): [# Advertised shortcuts: targets are features, not files ("Python", "MenuDir", "PYTHON|Python (command line)", "python.exe", default_feature.id, None, None, None, "python_icon.exe", 2, None, "TARGETDIR"), - ("Manual", "MenuDir", "MANUAL|Python Manuals", "documentation", - htmlfiles.id, None, None, None, None, None, None, None), + # Advertising the Manual breaks on (some?) Win98, and the shortcut lacks an + # icon first. + #("Manual", "MenuDir", "MANUAL|Python Manuals", "documentation", + # htmlfiles.id, None, None, None, None, None, None, None), ## Non-advertised shortcuts: must be associated with a registry component + ("Manual", "MenuDir", "MANUAL|Python Manuals", "REGISTRY.doc", + "[#Python%s%s.chm]" % (major,minor), None, + None, None, None, None, None, None), ("Uninstall", "MenuDir", "UNINST|Uninstall Python", "REGISTRY", SystemFolderName+"msiexec", "/x%s" % product_code, None, None, None, None, None, None), |