diff options
author | Thomas E. Dickey <dickey@invisible-island.net> | 2012-02-20 02:08:17 -0500 |
---|---|---|
committer | Thomas E. Dickey <dickey@invisible-island.net> | 2012-02-20 02:08:17 -0500 |
commit | bc0fa578036583231edb567b328b4f69ce6860fe (patch) | |
tree | 99b322070bf62270218a0d80257a1f50bbefe147 /PACKAGE/lynx.iss | |
parent | bb5fd6e44e480f571bcb713788cc50eea44095e5 (diff) | |
download | lynx-snapshots-bc0fa578036583231edb567b328b4f69ce6860fe.tar.gz |
snapshot of project "lynx", label v2-8-8dev_11
Diffstat (limited to 'PACKAGE/lynx.iss')
-rw-r--r-- | PACKAGE/lynx.iss | 409 |
1 files changed, 409 insertions, 0 deletions
diff --git a/PACKAGE/lynx.iss b/PACKAGE/lynx.iss new file mode 100644 index 00000000..583905aa --- /dev/null +++ b/PACKAGE/lynx.iss @@ -0,0 +1,409 @@ +; $LynxId: lynx.iss,v 1.6 2012/02/13 22:17:17 tom Exp $ +; vile:ts=2 sw=2 notabinsert +; +; This is the BASE script for different flavors of the installer for Lynx. +; It can be overridden to select different source-executables (and their associated +; screen library, e.g., pdcurses or slang). +; +; The script assumes environment variables have been set, e.g., to point to +; data which is used by the installer: +; +; LYNX_BINDIR - directory containing lynx.exe (or different names) +; LYNX_DLLSDIR - directory containing curses or slang dlls. +; LYNX_DOCSDIR - files and subdirectories installed from Unix with "make install-doc" +; LYNX_HELPDIR - files and subdirectories installed from Unix with "make install-help" + +#include "version.iss" + +#ifndef MyAppExeName +#define MyAppExeName "lynx.exe" +#endif + +#define MySendTo '{sendto}\' + myAppName + '.lnk' +#define MyQuickLaunch '{userappdata}\Microsoft\Internet Explorer\Quick Launch\' + myAppName + '.lnk' + +#ifndef SourceExeName +#define SourceExeName "lynx.exe" +#endif + +#ifndef NoScreenDll +#ifndef ScreenDllName +#define ScreenDllName "pdcurses.dll" +#endif +#endif + +#ifndef BzipDllName +#define BzipDllName "libbz2.dll" +#endif + +#ifndef ZlibDllName +#define ZlibDllName "zlib.dll" +#endif + +#ifndef BzipExeName +#define BzipExeName "bzip2.exe" +#endif + +#ifndef GzipExeName +#define GzipExeName "gzip.exe" +#endif + +#ifndef SetupBaseName +#define SetupBaseName "lynx" +#endif + +#ifndef BinsSrcDir +#define BinsSrcDir GetEnv("LYNX_BINDIR") +#if BinsSrcDir == "" +#define BinsSrcDir "..\bin" +#endif +#endif + +#ifndef DllsSrcDir +#define DllsSrcDir GetEnv("LYNX_DLLSDIR") +#if DllsSrcDir == "" +#define DllsSrcDir "..\dlls" +#endif +#endif + +#ifndef DocsSrcDir +#define DocsSrcDir GetEnv("LYNX_DOCSDIR") +#if DocsSrcDir == "" +#define DocsSrcDir "..\docs" +#endif +#endif + +#ifndef HelpSrcDir +#define HelpSrcDir GetEnv("LYNX_HELPDIR") +#if HelpSrcDir == "" +#define HelpSrcDir "..\lynx_help" +#endif +#endif + +[Setup] +AppName={#MyAppName} +AppVerName={#MyAppVerName} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={pf}\{#MyAppName} +DefaultGroupName={#MyAppName} +AllowNoIcons=yes +LicenseFile=..\COPYHEADER +InfoBeforeFile=..\README +OutputDir=..\PACKAGE\lynx-setup +#emit 'OutputBaseFilename=' + SetupBaseName + LYNX_VERSION + '-setup' +Compression=lzma +SolidCompression=yes + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Components] +Name: main; Description: The Lynx executable; types: full custom compact +Name: explorer; Description: Windows Explorer integration; types: full custom + +[Tasks] +Name: for_all_users; Description: Install for all users on this machine; GroupDescription: Configuration Settings; Components: main; Check: isGuru; Flags: unchecked +Name: register_vars; Description: Use registry for environment variables; GroupDescription: Configuration Settings; Components: main; Flags: unchecked +Name: use_sendto; Description: Add Send To Entry; GroupDescription: Windows Explorer; Components: explorer; Flags: unchecked +Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: unchecked +Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: unchecked + + +[Dirs] +Name: "{app}\doc" +Name: "{app}\doc\samples" +Name: "{app}\doc\test" +Name: "{app}\help" +Name: "{app}\help\keystrokes" +Name: "{app}\icon" +Name: "{app}\tmp" + +[Files] +#emit 'Source: "' + BinsSrcDir + '\' + SourceExeName + '"; DestDir: "{app}"; DestName: ' + MyAppExeName + '; AfterInstall: myPostExecutable; Flags: ignoreversion' +#ifndef NoScreenDll +#emit 'Source: "' + DllsSrcDir + '\' + ScreenDllName + '"; DestDir: "{app}"; DestName: ' + ScreenDllName + '; Flags: ignoreversion' +#endif +#emit 'Source: "' + DllsSrcDir + '\' + ZlibDllName + '"; DestDir: "{app}"; DestName: ' + ZlibDllName + '; Flags: ignoreversion' +#emit 'Source: "' + DllsSrcDir + '\' + BzipDllName + '"; DestDir: "{app}"; DestName: ' + BzipDllName + '; Flags: ignoreversion' +#emit 'Source: "' + DllsSrcDir + '\' + BzipExeName + '"; DestDir: "{app}"; DestName: ' + BzipExeName + '; Flags: ignoreversion' +#emit 'Source: "' + DllsSrcDir + '\' + GzipExeName + '"; DestDir: "{app}"; DestName: ' + GzipExeName + '; Flags: ignoreversion' +#emit 'Source: "' + DocsSrcDir + '\*.*"; DestDir: "{app}\doc"; Flags: ' +#emit 'Source: "' + DocsSrcDir + '\samples\*.*"; DestDir: "{app}\doc\samples"; Flags: ' +#emit 'Source: "' + DocsSrcDir + '\test\*.*"; DestDir: "{app}\doc\test"; Flags: ' +#emit 'Source: "' + HelpSrcDir + '\*.*"; DestDir: "{app}\help"; Flags: ' +#emit 'Source: "' + HelpSrcDir + '\keystrokes\*.*"; DestDir: "{app}\help\keystrokes"; Flags: ' + +; some of these data files are from an earlier installer by Claudio Santambrogio +Source: "..\samples\lynx.ico"; DestDir: "{app}\icon" +Source: "..\samples\lynx.bat"; DestDir: "{app}" +Source: "..\samples\jumps.htm"; DestDir: "{app}" +Source: "..\samples\home.htm"; DestDir: "{app}" +Source: "..\samples\lynx_bookmarks.htm"; DestDir: "{app}" +Source: "..\samples\*.lss"; DestDir: "{app}" +Source: "..\samples\lynx.bat"; DestDir: "{app}" +Source: "..\samples\lynx-demo.cfg"; DestDir: "{app}" +Source: "..\lynx.man"; DestDir: "{app}" +Source: "..\lynx.cfg"; DestDir: "{app}" ; AfterInstall: myCustomCfg; Flags: ignoreversion +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[Icons] +Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent + +[UninstallDelete] +Type: files; Name: {app}\.lynx_cookies +Type: dirifempty; Name: {app} +#emit 'Type: files; Name: ' + mySendTo +#emit 'Type: files; Name: ' + myQuickLaunch + +[Code] +#emit 'const MY_APP_NAME = ''{app}\' + myAppName + '.exe'';' + +function isGuru(): Boolean; +begin + Result := isAdminLoggedOn(); +end; + +function environRootKey(): Integer; +begin + Result := HKEY_CURRENT_USER; +end; + +function appKey(): string; +begin + Result := 'Software\Lynx'; +end; + +function envSubKey(): string; +begin + Result := 'Environment'; +end; + +function appSubKey(): string; +begin + Result := appKey() + '\' + envSubKey(); +end; + +function envSysKey(): string; +begin + Result := 'System\CurrentControlSet\Control\Session Manager\Environment'; +end; + +// Set the environment variable ValueName. +procedure addVarToEnv(const RootKey: Integer; const SubKeyName, ValueName, toAdd: String); +var + Updated : string; +begin + Updated := ExpandConstant(toAdd); + RegWriteStringValue(RootKey, SubKeyName, ValueName, Updated); + Log('Added ' + toAdd + ' to ' + ValueName); + // MsgBox('addVarToEnv: ' #13#13 + ValueName + '="' + Updated + '"', mbInformation, MB_OK) +end; + +// Remove the given environment variable ValueName. +function removeVarFromEnv(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean; +var + Current : string; +begin + Result := False; + if RegQueryStringValue(RootKey, SubKeyName, ValueName, Current) then + begin + RegDeleteValue(RootKey, SubKeyName, ValueName); + Result := True; + Log('Removed ' + ValueName); + // MsgBox('removeVarFromEnv: ' #13#13 + ValueName + '="' + Current + '"', mbInformation, MB_OK) + end; +end; + +function selectedVarsRootKey(): Integer; +begin + if isTaskSelected('for_all_users') then + Result := HKEY_LOCAL_MACHINE + else + Result := HKEY_CURRENT_USER; +end; + +function selectedVarsSubKey(): String; +begin + if isTaskSelected('for_all_users') then + begin + if isTaskSelected('register_vars') then + Result := appSubKey() + else + Result := envSysKey(); + end else + begin + if isTaskSelected('register_vars') then + Result := appSubKey() + else + Result := envSubKey(); + end; +end; + +procedure addAnyVariable(const ValueName, newValue: String); +begin + addVarToEnv(selectedVarsRootKey(), selectedVarsSubKey(), ValueName, NewValue); +end; + +// FIXME: should only remove if it matches the installer's value +procedure removeAnyVariable(const ValueName: String); +begin + removeVarFromEnv(HKEY_CURRENT_USER, envSubKey(), ValueName); + removeVarFromEnv(HKEY_CURRENT_USER, appSubKey(), ValueName); + removeVarFromEnv(HKEY_LOCAL_MACHINE, appSubKey(), ValueName); + removeVarFromEnv(HKEY_LOCAL_MACHINE, envSysKey(), ValueName); +end; + +// http://www.delphidabbler.com/articles?article=12 +procedure AddSendTo(); +begin + CreateShellLink( +#emit 'ExpandConstant(''' + MySendTo + '''),' +#emit '''SendTo link for ' + myAppName + ''',' + ExpandConstant(MY_APP_NAME), // program + '', // option(s) will be followed by pathname + '', // no target directory + '', // no icon filename + -1, // no icon index + SW_SHOWNORMAL); +end; + +procedure AddQuickLaunch(); +begin + CreateShellLink( +#emit 'ExpandConstant(''' + MyQuickLaunch + '''),' +#emit '''SendTo link for ' + myAppName + ''',' + ExpandConstant(MY_APP_NAME), // program + '', // option(s) will be followed by pathname + '', // no target directory + '', // no icon filename + -1, // no icon index + SW_SHOWNORMAL); +end; + +// This is called after installing the executable. +procedure myPostExecutable(); +var + Keypath : String; + AppDir : String; +begin + Keypath := appKey(); + AppDir := ExpandConstant('{app}'); + Log('Setting registry key "' + Keypath + '" to "' + AppDir + '"'); + if not RegWriteStringValue(selectedVarsRootKey(), Keypath, '', AppDir) then + Log('Failed to set key'); + + if isTaskSelected('use_sendto') then + begin + AddSendTo(); + Log('** added Send-To link'); + end; + + if isTaskSelected('quicklaunchicon') then + begin + AddQuickLaunch(); + Log('** added Quick-launch link'); + end; +end; + +// This is called after installing the lynx.cfg file. +procedure myCustomCfg(); +var + AppDir : String; + CfgFile : String; +begin + AppDir := ExpandConstant('{app}'); + CfgFile := AppDir + '\lynx.cfg'; + + addAnyVariable('LYNX_CFG', CfgFile); + Log('** set LYNX_CFG=' + CfgFile); + + SaveStringToFile(CfgFile, 'HELPFILE:' + AppDir + '/help/Lynx_help_main.html.gz' + #10, True); + SaveStringToFile(CfgFile, 'COLOR_STYLE:' + AppDir + '/opaque.lss' + #10, True); + + SaveStringToFile(CfgFile, 'CHMOD_PATH:' + #10, True); + SaveStringToFile(CfgFile, 'COPY_PATH:' + #10, True); + SaveStringToFile(CfgFile, 'MKDIR_PATH:' + #10, True); + SaveStringToFile(CfgFile, 'MV_PATH:' + #10, True); + SaveStringToFile(CfgFile, 'RMDIR_PATH:' + #10, True); + SaveStringToFile(CfgFile, 'RM_PATH:' + #10, True); + SaveStringToFile(CfgFile, 'TOUCH_PATH:' + #10, True); + + Log('** customized ' + CfgFile); + + if isTaskSelected('use_sendto') then + begin + AddSendTo(); + Log('** added Send-To link'); + end; +end; + +function CleanupMyKey(const theRootKey: Integer): Boolean; +var + Path : String; + Value : String; +begin + Result := False; + if RegQueryStringValue(theRootKey, appKey(), '', Value) then + begin + if Value <> '' then + begin + Result := True; + Log('Deleting value of "' + appKey() + '" = "' + Value + '"'); + if not RegDeleteValue(theRootKey, appKey(), '') then + Log('Failed to delete value'); + + Path := appKey() + '\Environment'; + Log('Checking for subkey "' + Path + '"'); + if RegValueExists(theRootKey, Path, '') then + begin + if RegDeleteKeyIncludingSubkeys(theRootKey, Path) then + Log('Deleted key "' + Path + '"') + else + Log('Failed to delete key "' + Path + '"'); + end; + + if RegDeleteKeyIfEmpty(theRootKey, appKey()) then + Log('Deleted key "' + appKey() + '"') + else + Log('Failed to delete key "' + appKey() + '"'); + end + end +end; + +// On uninstall, we do not know which registry setting was selected during install, so we remove all. +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +begin + case CurUninstallStep of + usUninstall: + begin + // MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall is about to start.', mbInformation, MB_OK) + // ...insert code to perform pre-uninstall tasks here... + end; + usPostUninstall: + begin + removeAnyVariable('LYNX_CFG'); + + { + If we don't find the settings in the current user, try the local machine. + The setup program cannot pass the all-users flag to the uninstaller, so we + have to try both. + } + Log('Checking current-user registry key'); + if not CleanupMyKey(HKEY_CURRENT_USER) then + begin + Log('Checking local-machine registry key'); + CleanupMyKey(HKEY_LOCAL_MACHINE); + end; + + // MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall just finished.', mbInformation, MB_OK); + end; + end; +end; |