##// END OF EJS Templates
packaging: install and run Inno files in a build directory...
Gregory Szorc -
r43914:10454e78 default
parent child Browse files
Show More
@@ -1,85 +1,93
1 1 # inno.py - Inno Setup functionality.
2 2 #
3 3 # Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 # no-check-code because Python 3 native.
9 9
10 10 import os
11 11 import pathlib
12 12 import shutil
13 13 import subprocess
14 14
15 15 from .py2exe import build_py2exe
16 16 from .util import find_vc_runtime_files
17 17
18
19 18 EXTRA_PACKAGES = {
20 19 'dulwich',
21 20 'keyring',
22 21 'pygments',
23 22 'win32ctypes',
24 23 }
25 24
26 25
27 26 def build(
28 27 source_dir: pathlib.Path,
29 28 build_dir: pathlib.Path,
30 29 python_exe: pathlib.Path,
31 30 iscc_exe: pathlib.Path,
32 31 version=None,
33 32 ):
34 33 """Build the Inno installer.
35 34
36 35 Build files will be placed in ``build_dir``.
37 36
38 37 py2exe's setup.py doesn't use setuptools. It doesn't have modern logic
39 38 for finding the Python 2.7 toolchain. So, we require the environment
40 39 to already be configured with an active toolchain.
41 40 """
42 41 if not iscc_exe.exists():
43 42 raise Exception('%s does not exist' % iscc_exe)
44 43
45 44 vc_x64 = r'\x64' in os.environ.get('LIB', '')
45 arch = 'x64' if vc_x64 else 'x86'
46 inno_source_dir = source_dir / 'contrib' / 'packaging' / 'inno'
47 inno_build_dir = build_dir / ('inno-%s' % arch)
46 48
47 49 requirements_txt = (
48 50 source_dir / 'contrib' / 'packaging' / 'inno' / 'requirements.txt'
49 51 )
50 52
53 inno_build_dir.mkdir(parents=True, exist_ok=True)
54
51 55 build_py2exe(
52 56 source_dir,
53 57 build_dir,
54 58 python_exe,
55 59 'inno',
56 60 requirements_txt,
57 61 extra_packages=EXTRA_PACKAGES,
58 62 )
59 63
60 64 # hg.exe depends on VC9 runtime DLLs. Copy those into place.
61 65 for f in find_vc_runtime_files(vc_x64):
62 66 if f.name.endswith('.manifest'):
63 67 basename = 'Microsoft.VC90.CRT.manifest'
64 68 else:
65 69 basename = f.name
66 70
67 71 dest_path = source_dir / 'dist' / basename
68 72
69 73 print('copying %s to %s' % (f, dest_path))
70 74 shutil.copyfile(f, dest_path)
71 75
72 76 print('creating installer')
73 77
78 # Copy Inno files into place.
79 for p in ('mercurial.iss', 'modpath.iss'):
80 shutil.copyfile(inno_source_dir / p, inno_build_dir / p)
81
74 82 args = [str(iscc_exe)]
75 83
76 84 if vc_x64:
77 85 args.append('/dARCH=x64')
78 86
79 87 if version:
80 88 args.append('/dVERSION=%s' % version)
81 89
82 90 args.append('/Odist')
83 args.append('contrib/packaging/inno/mercurial.iss')
91 args.append(str(inno_build_dir / 'mercurial.iss'))
84 92
85 93 subprocess.run(args, cwd=str(source_dir), check=True)
@@ -1,124 +1,124
1 1 ; Script generated by the Inno Setup Script Wizard.
2 2 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3 3
4 4 #ifndef VERSION
5 5 #define FileHandle
6 6 #define FileLine
7 7 #define VERSION = "unknown"
8 #if FileHandle = FileOpen(SourcePath + "\..\..\..\mercurial\__version__.py")
8 #if FileHandle = FileOpen(SourcePath + "\..\..\mercurial\__version__.py")
9 9 #expr FileLine = FileRead(FileHandle)
10 10 #expr FileLine = FileRead(FileHandle)
11 11 #define VERSION = Copy(FileLine, Pos('"', FileLine)+1, Len(FileLine)-Pos('"', FileLine)-1)
12 12 #endif
13 13 #if FileHandle
14 14 #expr FileClose(FileHandle)
15 15 #endif
16 16 #pragma message "Detected Version: " + VERSION
17 17 #endif
18 18
19 19 #ifndef ARCH
20 20 #define ARCH = "x86"
21 21 #endif
22 22
23 23 [Setup]
24 24 AppCopyright=Copyright 2005-2019 Matt Mackall and others
25 25 AppName=Mercurial
26 26 AppVersion={#VERSION}
27 27 #if ARCH == "x64"
28 28 AppVerName=Mercurial {#VERSION} (64-bit)
29 29 OutputBaseFilename=Mercurial-{#VERSION}-x64
30 30 ArchitecturesAllowed=x64
31 31 ArchitecturesInstallIn64BitMode=x64
32 32 #else
33 33 AppVerName=Mercurial {#VERSION}
34 34 OutputBaseFilename=Mercurial-{#VERSION}
35 35 #endif
36 36 InfoAfterFile=contrib/win32/postinstall.txt
37 37 LicenseFile=COPYING
38 38 ShowLanguageDialog=yes
39 39 AppPublisher=Matt Mackall and others
40 40 AppPublisherURL=https://mercurial-scm.org/
41 41 AppSupportURL=https://mercurial-scm.org/
42 42 AppUpdatesURL=https://mercurial-scm.org/
43 43 AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3}
44 44 AppContact=mercurial@mercurial-scm.org
45 45 DefaultDirName={pf}\Mercurial
46 SourceDir=..\..\..
46 SourceDir=..\..
47 47 VersionInfoDescription=Mercurial distributed SCM (version {#VERSION})
48 48 VersionInfoCopyright=Copyright 2005-2019 Matt Mackall and others
49 49 VersionInfoCompany=Matt Mackall and others
50 50 InternalCompressLevel=max
51 51 SolidCompression=true
52 52 SetupIconFile=contrib\win32\mercurial.ico
53 53 AllowNoIcons=true
54 54 DefaultGroupName=Mercurial
55 55 PrivilegesRequired=none
56 56 ChangesEnvironment=true
57 57
58 58 [Files]
59 59 Source: contrib\mercurial.el; DestDir: {app}/Contrib
60 60 Source: contrib\vim\*.*; DestDir: {app}/Contrib/Vim
61 61 Source: contrib\zsh_completion; DestDir: {app}/Contrib
62 62 Source: contrib\bash_completion; DestDir: {app}/Contrib
63 63 Source: contrib\tcsh_completion; DestDir: {app}/Contrib
64 64 Source: contrib\tcsh_completion_build.sh; DestDir: {app}/Contrib
65 65 Source: contrib\hgk; DestDir: {app}/Contrib; DestName: hgk.tcl
66 66 Source: contrib\xml.rnc; DestDir: {app}/Contrib
67 67 Source: contrib\mercurial.el; DestDir: {app}/Contrib
68 68 Source: contrib\mq.el; DestDir: {app}/Contrib
69 69 Source: contrib\hgweb.fcgi; DestDir: {app}/Contrib
70 70 Source: contrib\hgweb.wsgi; DestDir: {app}/Contrib
71 71 Source: contrib\win32\ReadMe.html; DestDir: {app}; Flags: isreadme
72 72 Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt
73 73 Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local')
74 74 Source: dist\lib\*.dll; Destdir: {app}\lib
75 75 Source: dist\lib\*.pyd; Destdir: {app}\lib
76 76 Source: dist\python*.dll; Destdir: {app}; Flags: skipifsourcedoesntexist
77 77 Source: dist\msvc*.dll; DestDir: {app}; Flags: skipifsourcedoesntexist
78 78 Source: dist\Microsoft.VC*.CRT.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
79 79 Source: dist\lib\library.zip; DestDir: {app}\lib
80 80 Source: doc\*.html; DestDir: {app}\Docs
81 81 Source: doc\style.css; DestDir: {app}\Docs
82 82 Source: mercurial\help\*.txt; DestDir: {app}\help
83 83 Source: mercurial\help\internals\*.txt; DestDir: {app}\help\internals
84 84 Source: mercurial\default.d\*.rc; DestDir: {app}\default.d
85 85 Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs skipifsourcedoesntexist
86 86 Source: mercurial\templates\*.*; DestDir: {app}\Templates; Flags: recursesubdirs createallsubdirs
87 87 Source: CONTRIBUTORS; DestDir: {app}; DestName: Contributors.txt
88 88 Source: COPYING; DestDir: {app}; DestName: Copying.txt
89 89
90 90 [INI]
91 91 Filename: {app}\Mercurial.url; Section: InternetShortcut; Key: URL; String: https://mercurial-scm.org/
92 92 Filename: {app}\default.d\editor.rc; Section: ui; Key: editor; String: notepad
93 93
94 94 [UninstallDelete]
95 95 Type: files; Name: {app}\Mercurial.url
96 96 Type: filesandordirs; Name: {app}\default.d
97 97 Type: files; Name: "{app}\hg.exe.local"
98 98
99 99 [Icons]
100 100 Name: {group}\Uninstall Mercurial; Filename: {uninstallexe}
101 101 Name: {group}\Mercurial Command Reference; Filename: {app}\Docs\hg.1.html
102 102 Name: {group}\Mercurial Configuration Files; Filename: {app}\Docs\hgrc.5.html
103 103 Name: {group}\Mercurial Ignore Files; Filename: {app}\Docs\hgignore.5.html
104 104 Name: {group}\Mercurial Web Site; Filename: {app}\Mercurial.url
105 105
106 106 [Tasks]
107 107 Name: modifypath; Description: Add the installation path to the search path; Flags: unchecked
108 108
109 109 [Code]
110 110 procedure Touch(fn: String);
111 111 begin
112 112 SaveStringToFile(ExpandConstant(fn), '', False);
113 113 end;
114 114
115 115 const
116 116 ModPathName = 'modifypath';
117 117 ModPathType = 'user';
118 118
119 119 function ModPathDir(): TArrayOfString;
120 120 begin
121 121 setArrayLength(Result, 1)
122 122 Result[0] := ExpandConstant('{app}');
123 123 end;
124 124 #include "modpath.iss"
General Comments 0
You need to be logged in to leave comments. Login now