summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYRIGHT8
-rw-r--r--windows/modpath.iss157
-rw-r--r--windows/pandoc-setup.iss70
3 files changed, 235 insertions, 0 deletions
diff --git a/COPYRIGHT b/COPYRIGHT
index b87bcaa64..798a196c2 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -87,3 +87,11 @@ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+------------------------------------------------------------------------
+windows/modpath.iss
+Copyright (c) 2007 Jared Breland
+http://legroom.net/software
+
+Released under the GPL.
+
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 <jbreland@legroom.net>
+// 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"
+