[b0e8beb] | 1 | """ |
---|
[7f291a3] | 2 | This module generates .ss file according to the local config of |
---|
[b0e8beb] | 3 | the current application. Please make sure a file named "local_config.py" |
---|
| 4 | exists in the current directory. Edit local_config.py according to your needs. |
---|
| 5 | """ |
---|
| 6 | import local_config |
---|
| 7 | import os |
---|
| 8 | import string |
---|
| 9 | |
---|
| 10 | REG_PROGRAM = """{app}\MYPROG.EXE"" ""%1""" |
---|
| 11 | APPLICATION = str(local_config.__appname__ )+ '.exe' |
---|
[7f291a3] | 12 | AppName = str(local_config.__appname__ ) # + '-'+ str(local_config.__version__) |
---|
[b0e8beb] | 13 | AppVerName = str(local_config.__appname__ ) + '-'+ str(local_config.__version__) |
---|
[7f291a3] | 14 | Dev = '' |
---|
| 15 | if AppVerName.lower().count('dev') > 0: |
---|
| 16 | Dev = '-Dev' |
---|
[b0e8beb] | 17 | AppPublisher = local_config._copyright |
---|
| 18 | AppPublisherURL = local_config._homepage |
---|
| 19 | AppSupportURL = local_config._homepage |
---|
| 20 | AppUpdatesURL = local_config._homepage |
---|
[7f291a3] | 21 | ChangesEnvironment = 'true' |
---|
| 22 | DefaultDirName = os.path.join("{pf}" , AppName+Dev) |
---|
[b0e8beb] | 23 | DefaultGroupName = os.path.join(local_config.DefaultGroupName, AppVerName) |
---|
| 24 | |
---|
| 25 | OutputBaseFilename = local_config.OutputBaseFilename |
---|
[e52010a] | 26 | SetupIconFile = local_config.SetupIconFile_win |
---|
[b0e8beb] | 27 | LicenseFile = 'license.txt' |
---|
| 28 | DisableProgramGroupPage = 'yes' |
---|
| 29 | Compression = 'lzma' |
---|
| 30 | SolidCompression = 'yes' |
---|
| 31 | PrivilegesRequired = 'none' |
---|
[f5f257b] | 32 | INSTALLER_FILE = 'installer_new' |
---|
[b0e8beb] | 33 | #find extension for windows file assocation |
---|
| 34 | #extension list need to be modified for each application |
---|
| 35 | |
---|
| 36 | def find_extension(): |
---|
| 37 | """ |
---|
| 38 | Describe the extensions that can be read by the current application |
---|
| 39 | """ |
---|
| 40 | try: |
---|
| 41 | list = [] |
---|
| 42 | #(ext, type, name, flags) |
---|
[db7a82e] | 43 | from sans.dataloader.loader import Loader |
---|
[b0e8beb] | 44 | wild_cards = Loader().get_wildcards() |
---|
| 45 | for item in wild_cards: |
---|
| 46 | #['All (*.*)|*.*'] |
---|
| 47 | file_type, ext = string.split(item, "|*", 1) |
---|
| 48 | if ext.strip() not in ['.*', ''] and ext.strip() not in list: |
---|
| 49 | list.append((ext, 'string', file_type)) |
---|
| 50 | except: |
---|
| 51 | pass |
---|
| 52 | try: |
---|
| 53 | file_type, ext = string.split(local_config.APPLICATION_WLIST, "|*", 1) |
---|
| 54 | if ext.strip() not in ['.', ''] and ext.strip() not in list: |
---|
| 55 | list.append((ext, 'string', file_type)) |
---|
| 56 | except: |
---|
| 57 | pass |
---|
| 58 | try: |
---|
| 59 | for item in local_config.PLUGINS_WLIST: |
---|
| 60 | file_type, ext = string.split(item, "|*", 1) |
---|
| 61 | if ext.strip() not in ['.', ''] and ext.strip() not in list: |
---|
| 62 | list.append((ext, 'string', file_type)) |
---|
| 63 | except: |
---|
| 64 | pass |
---|
| 65 | return list |
---|
| 66 | EXTENSION = find_extension() |
---|
| 67 | |
---|
| 68 | def write_registry(extension=None): |
---|
| 69 | """ |
---|
| 70 | create file association for windows. |
---|
| 71 | Allow open file on double click |
---|
| 72 | """ |
---|
| 73 | msg = "" |
---|
| 74 | if extension is not None and extension: |
---|
| 75 | msg = "\n\n[Registry]\n" |
---|
| 76 | for (ext, type, _) in extension: |
---|
| 77 | msg += """Root: HKCR;\tSubkey: "%s";\t""" % str(ext) |
---|
| 78 | msg += """ValueType: %s;\t""" % str(type) |
---|
| 79 | #file type empty set the current application as the default |
---|
| 80 | #reader for this file. change the value of file_type to another |
---|
| 81 | #string modify the default reader |
---|
| 82 | file_type = '' |
---|
| 83 | msg += """ValueName: "%s";\t""" % str('') |
---|
| 84 | msg += """ValueData: "{app}\%s";\t""" % str(APPLICATION) |
---|
| 85 | msg += """ Flags: %s""" % str('uninsdeletevalue') |
---|
| 86 | msg += "\n" |
---|
| 87 | |
---|
| 88 | #create default icon |
---|
| 89 | msg += """Root: HKCR; Subkey: "{app}\%s";\t""" % str(SetupIconFile) |
---|
| 90 | msg += """ValueType: %s; """ % str('string') |
---|
| 91 | msg += """ValueName: "%s";\t""" % str('') |
---|
| 92 | msg += """ValueData: "{app}\%s,0"\n""" % str(APPLICATION) |
---|
[7f291a3] | 93 | |
---|
[b0e8beb] | 94 | #execute the file on double-click |
---|
| 95 | msg += """Root: HKCR; Subkey: "{app}\%s\shell\open\command";\t""" % str(APPLICATION) |
---|
| 96 | msg += """ValueType: %s; """ % str('string') |
---|
| 97 | msg += """ValueName: "%s";\t""" %str('') |
---|
| 98 | msg += """ValueData: \"""{app}\%s"" ""%s1\"""\n"""% (str(APPLICATION), |
---|
| 99 | str('%')) |
---|
[7f291a3] | 100 | |
---|
| 101 | #SANSVIEWPATH |
---|
[b33d4cf] | 102 | msg += """Root: HKLM; Subkey: "%s";\t""" % str('SYSTEM\CurrentControlSet\Control\Session Manager\Environment') |
---|
[7f291a3] | 103 | msg += """ValueType: %s; """ % str('expandsz') |
---|
| 104 | msg += """ValueName: "%s";\t""" % str('SANSVIEWPATH') |
---|
| 105 | msg += """ValueData: "{app}";\t""" |
---|
| 106 | msg += """ Flags: %s""" % str('uninsdeletevalue') |
---|
| 107 | msg += "\n" |
---|
| 108 | |
---|
| 109 | #PATH |
---|
| 110 | msg += """; Write to PATH (below) is disabled; need more work\n""" |
---|
| 111 | msg += """;Root: HKCU; Subkey: "%s";\t""" % str('Environment') |
---|
| 112 | msg += """ValueType: %s; """ % str('expandsz') |
---|
| 113 | msg += """ValueName: "%s";\t""" % str('PATH') |
---|
| 114 | msg += """ValueData: "%s;{olddata}";\t""" % str('%SANSVIEWPATH%') |
---|
| 115 | msg += """ Check: %s""" % str('NeedsAddPath()') |
---|
| 116 | msg += "\n" |
---|
| 117 | |
---|
[b0e8beb] | 118 | return msg |
---|
| 119 | |
---|
| 120 | def write_language(language=['english'], msfile="compiler:Default.isl"): |
---|
| 121 | """ |
---|
| 122 | define the language of the application |
---|
| 123 | """ |
---|
| 124 | msg = '' |
---|
| 125 | if language: |
---|
| 126 | msg = "\n\n[Languages]\n" |
---|
| 127 | for lang in language: |
---|
| 128 | msg += """Name: "%s";\tMessagesFile: "%s"\n""" % (str(lang), |
---|
| 129 | str(msfile)) |
---|
| 130 | return msg |
---|
| 131 | |
---|
| 132 | def write_tasks(): |
---|
| 133 | """ |
---|
| 134 | create desktop icon |
---|
| 135 | """ |
---|
| 136 | msg = """\n\n[Tasks]\n""" |
---|
| 137 | msg += """Name: "desktopicon";\tDescription: "{cm:CreateDesktopIcon}";\t""" |
---|
| 138 | msg += """GroupDescription: "{cm:AdditionalIcons}";\tFlags: unchecked\n""" |
---|
| 139 | return msg |
---|
| 140 | |
---|
| 141 | def write_file(): |
---|
| 142 | """ |
---|
| 143 | copy some data files |
---|
| 144 | """ |
---|
| 145 | msg = "\n\n[Files]\n" |
---|
| 146 | msg += """Source: "dist\%s";\t""" % str(APPLICATION) |
---|
| 147 | msg += """DestDir: "{app}";\tFlags: ignoreversion\n""" |
---|
| 148 | msg += """Source: "dist\*";\tDestDir: "{app}";\t""" |
---|
| 149 | msg += """Flags: ignoreversion recursesubdirs createallsubdirs\n""" |
---|
| 150 | msg += """Source: "images\*";\tDestDir: "{app}\%s";\t""" % str("images") |
---|
| 151 | msg += """Flags: ignoreversion recursesubdirs createallsubdirs\n""" |
---|
| 152 | msg += """Source: "test\*";\tDestDir: "{app}\%s";\t""" % str("test") |
---|
| 153 | msg += """Flags: ignoreversion recursesubdirs createallsubdirs\n""" |
---|
| 154 | msg += """;\tNOTE: Don't use "Flags: ignoreversion" on any shared system files""" |
---|
| 155 | return msg |
---|
| 156 | |
---|
| 157 | def write_icon(): |
---|
| 158 | """ |
---|
| 159 | Create application icon |
---|
| 160 | """ |
---|
| 161 | msg = """\n\n[Icons]\n""" |
---|
| 162 | msg += """Name: "{group}\%s";\t""" % str(AppName) |
---|
| 163 | msg += """Filename: "{app}\%s";\t""" % str(APPLICATION) |
---|
| 164 | msg += """WorkingDir: "{app}" \n""" |
---|
| 165 | msg += """Name: "{group}\{cm:UninstallProgram, %s}";\t""" % str(AppName) |
---|
| 166 | msg += """ Filename: "{uninstallexe}" \n""" |
---|
| 167 | msg += """Name: "{commondesktop}\%s";\t""" % str(AppVerName) |
---|
| 168 | msg += """Filename: "{app}\%s";\t""" % str(APPLICATION) |
---|
| 169 | msg += """Tasks: desktopicon; WorkingDir: "{app}" \n""" |
---|
| 170 | return msg |
---|
| 171 | |
---|
| 172 | def write_run(): |
---|
| 173 | """ |
---|
| 174 | execute some file |
---|
| 175 | """ |
---|
| 176 | msg = """\n\n[Run]\n""" |
---|
| 177 | msg += """Filename: "{app}\%s";\t""" % str(APPLICATION) |
---|
| 178 | msg += """Description: "{cm:LaunchProgram, %s}";\t""" %str(AppName) |
---|
| 179 | msg += """Flags: nowait postinstall skipifsilent\n""" |
---|
| 180 | return msg |
---|
| 181 | |
---|
[7f291a3] | 182 | def write_code(): |
---|
| 183 | """ |
---|
| 184 | Code that checks the existing path and snaviewpath |
---|
| 185 | in the environmental viriables/PATH |
---|
| 186 | """ |
---|
| 187 | msg = """\n\n[Code]\n""" |
---|
| 188 | msg += """function NeedsAddPath(): boolean;\n""" |
---|
| 189 | msg += """var\n""" |
---|
| 190 | msg += """ oldpath: string;\n""" |
---|
| 191 | msg += """ newpath: string;\n""" |
---|
| 192 | msg += """ pathArr: TArrayOfString;\n""" |
---|
| 193 | msg += """ i: Integer;\n""" |
---|
| 194 | msg += """begin\n""" |
---|
| 195 | msg += """ RegQueryStringValue(HKEY_CURRENT_USER,'Environment',""" |
---|
| 196 | msg += """'PATH', oldpath)\n""" |
---|
| 197 | msg += """ oldpath := oldpath + ';';\n""" |
---|
| 198 | msg += """ newpath := '%SANSVIEWPATH%';\n""" |
---|
| 199 | msg += """ i := 0;\n""" |
---|
| 200 | msg += """ while (Pos(';', oldpath) > 0) do begin\n""" |
---|
| 201 | msg += """ SetArrayLength(pathArr, i+1);\n""" |
---|
| 202 | msg += """ pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1);\n""" |
---|
| 203 | msg += """ oldpath := Copy(oldpath, Pos(';', oldpath)+1,""" |
---|
| 204 | msg += """ Length(oldpath));\n""" |
---|
| 205 | msg += """ i := i + 1;\n""" |
---|
| 206 | msg += """ // Check if current directory matches app dir\n""" |
---|
| 207 | msg += """ if newpath = pathArr[i-1] \n""" |
---|
| 208 | msg += """ then begin\n""" |
---|
| 209 | msg += """ Result := False;\n""" |
---|
| 210 | msg += """ exit;\n""" |
---|
| 211 | msg += """ end;\n""" |
---|
| 212 | msg += """ end;\n""" |
---|
| 213 | msg += """ Result := True;\n""" |
---|
| 214 | msg += """end;\n""" |
---|
| 215 | msg += """\n""" |
---|
| 216 | |
---|
| 217 | |
---|
| 218 | |
---|
| 219 | |
---|
| 220 | return msg |
---|
| 221 | |
---|
[b0e8beb] | 222 | |
---|
| 223 | if __name__ == "__main__": |
---|
| 224 | TEMPLATE = "\n; Script generated by the Inno Setup Script Wizard\n" |
---|
| 225 | TEMPLATE += "\n; and local_config.py located in this directory.\n " |
---|
| 226 | TEMPLATE += "; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!" |
---|
| 227 | TEMPLATE += "\n[Setup]\n\n" |
---|
[de7b4cf] | 228 | TEMPLATE += "ChangesAssociations=%s\n" %str('yes') |
---|
| 229 | TEMPLATE += "AppName=%s\n" % str(AppName) |
---|
| 230 | TEMPLATE += "AppVerName=%s\n" % str(AppVerName) |
---|
| 231 | TEMPLATE += "AppPublisher=%s\n" % str(AppPublisher) |
---|
| 232 | TEMPLATE += "AppPublisherURL=%s\n" % str(AppPublisherURL) |
---|
| 233 | TEMPLATE += "AppSupportURL=%s\n" % str(AppSupportURL) |
---|
| 234 | TEMPLATE += "AppUpdatesURL=%s \n" % str(AppUpdatesURL) |
---|
[7f291a3] | 235 | TEMPLATE += "ChangesEnvironment=%s \n" % str(ChangesEnvironment) |
---|
[de7b4cf] | 236 | TEMPLATE += "DefaultDirName=%s\n" % str(DefaultDirName) |
---|
| 237 | TEMPLATE += "DefaultGroupName=%s\n" % str(DefaultGroupName) |
---|
| 238 | TEMPLATE += "DisableProgramGroupPage=%s\n" % str(DisableProgramGroupPage) |
---|
| 239 | TEMPLATE += "LicenseFile=%s\n" % str(LicenseFile) |
---|
| 240 | TEMPLATE += "OutputBaseFilename=%s\n" % str(OutputBaseFilename) |
---|
| 241 | TEMPLATE += "SetupIconFile=%s\n" % str(SetupIconFile) |
---|
| 242 | TEMPLATE += "Compression=%s\n" % str(Compression) |
---|
| 243 | TEMPLATE += "SolidCompression=%s\n" % str(SolidCompression) |
---|
| 244 | TEMPLATE += "PrivilegesRequired=%s\n" % str(PrivilegesRequired) |
---|
[b0e8beb] | 245 | |
---|
| 246 | TEMPLATE += write_registry(extension=EXTENSION) |
---|
| 247 | TEMPLATE += write_language() |
---|
| 248 | TEMPLATE += write_tasks() |
---|
| 249 | TEMPLATE += write_file() |
---|
| 250 | TEMPLATE += write_icon() |
---|
| 251 | TEMPLATE += write_run() |
---|
[7f291a3] | 252 | TEMPLATE += write_code() |
---|
[b0e8beb] | 253 | path = '%s.iss' % str(INSTALLER_FILE) |
---|
| 254 | f = open(path,'w') |
---|
| 255 | f.write(TEMPLATE) |
---|
| 256 | f.close() |
---|
| 257 | print "Generate Inno setup installer script complete" |
---|
| 258 | print "A new file %s.iss should be created.Please refresh your directory" % str(INSTALLER_FILE) |
---|