From aaf6d72b17eb6d12b68a4f4c94ea65c025b4199e Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Fri, 12 Sep 2008 00:05:43 +0000 Subject: Added scripts for Windows Inno Setup installer in windows/. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1440 788f1e2b-df1e-0410-8736-df70ead52e1b --- windows/modpath.iss | 157 +++++++++++++++++++++++++++++++++++++++++++++++ windows/pandoc-setup.iss | 70 +++++++++++++++++++++ 2 files changed, 227 insertions(+) create mode 100644 windows/modpath.iss create mode 100644 windows/pandoc-setup.iss (limited to 'windows') diff --git a/windows/modpath.iss b/windows/modpath.iss new file mode 100644 index 000000000..ea3cef8e8 --- /dev/null +++ b/windows/modpath.iss @@ -0,0 +1,157 @@ +// ---------------------------------------------------------------------------- +// +// Inno Setup Ver: 5.2.1 +// Script Version: 1.3.1 +// Author: Jared Breland +// Homepage: http://www.legroom.net/software +// +// Script Function: +// Enable modification of system path directly from Inno Setup installers +// +// Instructions: +// Copy modpath.iss to the same directory as your setup script +// +// Add this statement to your [Setup] section +// ChangesEnvironment=yes +// +// Add this statement to your [Tasks] section +// You can change the Description or Flags, but the Name must be modifypath +// Name: modifypath; Description: &Add application directory to your system path; Flags: unchecked +// +// Add the following to the end of your [Code] section +// setArrayLength must specify the total number of dirs to be added +// Dir[0] contains first directory, Dir[1] contains second, etc. +// function ModPathDir(): TArrayOfString; +// var +// Dir: TArrayOfString; +// begin +// setArrayLength(Dir, 1) +// Dir[0] := ExpandConstant('{app}'); +// Result := Dir; +// end; +// #include "modpath.iss" +// ---------------------------------------------------------------------------- + +procedure ModPath(); +var + oldpath: String; + newpath: String; + pathArr: TArrayOfString; + aExecFile: String; + aExecArr: TArrayOfString; + i, d: Integer; + pathdir: TArrayOfString; +begin + + // Get array of new directories and act on each individually + pathdir := ModPathDir(); + for d := 0 to GetArrayLength(pathdir)-1 do begin + + // Modify WinNT path + if UsingWinNT() = true then begin + + // Get current path, split into an array + RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', oldpath); + oldpath := oldpath + ';'; + i := 0; + while (Pos(';', oldpath) > 0) do begin + SetArrayLength(pathArr, i+1); + pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1); + oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath)); + i := i + 1; + + // Check if current directory matches app dir + if pathdir[d] = pathArr[i-1] then begin + // if uninstalling, remove dir from path + if IsUninstaller() = true then begin + continue; + // if installing, abort because dir was already in path + end else begin + abort; + end; + end; + + // Add current directory to new path + if i = 1 then begin + newpath := pathArr[i-1]; + end else begin + newpath := newpath + ';' + pathArr[i-1]; + end; + end; + + // Append app dir to path if not already included + if IsUninstaller() = false then + newpath := newpath + ';' + pathdir[d]; + + // Write new path + RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', newpath); + + // Modify Win9x path + end else begin + + // Convert to shortened dirname + pathdir[d] := GetShortName(pathdir[d]); + + // If autoexec.bat exists, check if app dir already exists in path + aExecFile := 'C:\AUTOEXEC.BAT'; + if FileExists(aExecFile) then begin + LoadStringsFromFile(aExecFile, aExecArr); + for i := 0 to GetArrayLength(aExecArr)-1 do begin + if IsUninstaller() = false then begin + // If app dir already exists while installing, abort add + if (Pos(pathdir[d], aExecArr[i]) > 0) then + abort; + end else begin + // If app dir exists and = what we originally set, then delete at uninstall + if aExecArr[i] = 'SET PATH=%PATH%;' + pathdir[d] then + aExecArr[i] := ''; + end; + end; + end; + + // If app dir not found, or autoexec.bat didn't exist, then (create and) append to current path + if IsUninstaller() = false then begin + SaveStringToFile(aExecFile, #13#10 + 'SET PATH=%PATH%;' + pathdir[d], True); + + // If uninstalling, write the full autoexec out + end else begin + SaveStringsToFile(aExecFile, aExecArr, False); + end; + end; + + // Write file to flag modifypath was selected + // Workaround since IsTaskSelected() cannot be called at uninstall and AppName and AppId cannot be "read" in Code section + if IsUninstaller() = false then + SaveStringToFile(ExpandConstant('{app}') + '\uninsTasks.txt', WizardSelectedTasks(False), False); + end; +end; + +procedure CurStepChanged(CurStep: TSetupStep); +begin + if CurStep = ssPostInstall then + if IsTaskSelected('modifypath') then + ModPath(); +end; + +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +var + appdir: String; + selectedTasks: String; +begin + appdir := ExpandConstant('{app}') + if CurUninstallStep = usUninstall then begin + if LoadStringFromFile(appdir + '\uninsTasks.txt', selectedTasks) then + if Pos('modifypath', selectedTasks) > 0 then + ModPath(); + DeleteFile(appdir + '\uninsTasks.txt') + end; +end; + +function NeedRestart(): Boolean; +begin + if IsTaskSelected('modifypath') and not UsingWinNT() then begin + Result := True; + end else begin + Result := False; + end; +end; diff --git a/windows/pandoc-setup.iss b/windows/pandoc-setup.iss new file mode 100644 index 000000000..18f37ebde --- /dev/null +++ b/windows/pandoc-setup.iss @@ -0,0 +1,70 @@ +; Script generated by the Inno Setup Script Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. +; Do not use the same AppId value in installers for other applications. +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) +AppId={{3CEE7B38-B19D-4980-9CAD-DF53600BD4CA} +AppName=Pandoc +AppVerName=Pandoc 1.0 +AppPublisher=John MacFarlane +AppPublisherURL=http://johnmacfarlane.net/pandoc/ +AppSupportURL=http://johnmacfarlane.net/pandoc/ +AppUpdatesURL=http://johnmacfarlane.net/pandoc/ +DefaultDirName={pf}\Pandoc +DefaultGroupName=Pandoc +AllowNoIcons=yes +LicenseFile=C:\Documents and Settings\John MacFarlane\My Documents\src\pandoc\COPYING.txt +OutputBaseFilename=setup +Compression=lzma +SolidCompression=yes +ChangesEnvironment=yes + +[Tasks] +Name: modifypath; Description: Add application directory to your system path + +[Code] +function ModPathDir(): TArrayOfString; +var + Dir: TArrayOfString; +begin + setArrayLength(Dir, 1) + Dir[0] := ExpandConstant('{app}'); + Result := Dir; +end; +#include "modpath.iss" + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "basque"; MessagesFile: "compiler:Languages\Basque.isl" +Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" +Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" +Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" +Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" +Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" +Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" +Name: "french"; MessagesFile: "compiler:Languages\French.isl" +Name: "german"; MessagesFile: "compiler:Languages\German.isl" +Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" +Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" +Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" +Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" +Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" +Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" +Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" +Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl" +Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" +Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" + +[Files] +Source: "..\dist\build\pandoc\pandoc.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\README.html"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\COPYRIGHT.txt"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\COPYING.txt"; DestDir: "{app}"; Flags: ignoreversion +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[Icons] +Name: "{group}\{cm:UninstallProgram,Pandoc}"; Filename: "{uninstallexe}" +Name: "{group}\Pandoc User's Guide"; Filename: "{app}\README.html" + -- cgit v1.2.3