aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien2011-05-05 11:26:33 -0700
committerJulien2011-05-05 11:26:33 -0700
commit371b9cace7e911a762747a083128b73853632268 (patch)
tree5f535dd036374298a9ba05cbf510e2ee41e1b8a5
parent16f1b51e2a98be9c48b51e55d7b73a8ddd0adede (diff)
parent3f370629020d0d13c2612a55566b2c3480acc4eb (diff)
downloadscummvm-rg350-371b9cace7e911a762747a083128b73853632268.tar.gz
scummvm-rg350-371b9cace7e911a762747a083128b73853632268.tar.bz2
scummvm-rg350-371b9cace7e911a762747a083128b73853632268.zip
Merge pull request #29 from Littleboy/nsis
NSIS installer support
-rw-r--r--.gitignore2
-rwxr-xr-xconfigure2
-rw-r--r--devtools/create_project/create_project.cpp5
-rw-r--r--devtools/create_project/create_project.h6
-rw-r--r--devtools/create_project/msbuild.cpp2
-rw-r--r--devtools/create_project/msvc.cpp7
-rw-r--r--devtools/create_project/msvc.h9
-rw-r--r--devtools/create_project/msvc10/create_project.vcxproj1
-rw-r--r--devtools/create_project/msvc10/create_project.vcxproj.filters3
-rw-r--r--devtools/create_project/msvc8/create_project.vcproj4
-rw-r--r--devtools/create_project/msvc9/create_project.vcproj4
-rw-r--r--devtools/create_project/scripts/installer.vbs196
-rw-r--r--devtools/create_project/scripts/postbuild.cmd42
-rw-r--r--devtools/create_project/scripts/revision.vbs48
-rw-r--r--devtools/create_project/visualstudio.cpp2
-rwxr-xr-xdevtools/update-version.pl1
-rw-r--r--dists/nsis/graphics/left.bmpbin0 -> 154542 bytes
-rw-r--r--dists/nsis/graphics/scummvm-install.icobin0 -> 15086 bytes
-rw-r--r--dists/nsis/scummvm.nsi351
-rw-r--r--dists/nsis/scummvm.nsi.in351
-rw-r--r--ports.mk15
21 files changed, 1022 insertions, 29 deletions
diff --git a/.gitignore b/.gitignore
index bff5ead245..906c6a8a83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,6 +24,8 @@ lib*.a
/.cproject
/.settings
+/build
+
/backends/platform/dc/gui
/backends/platform/dc/graphics
/backends/platform/dc/sound
diff --git a/configure b/configure
index 5115181acf..4b98d21145 100755
--- a/configure
+++ b/configure
@@ -173,7 +173,7 @@ _strip=strip
_ar="ar cru"
_as="as"
_windres=windres
-_win32path="C:/scummvm"
+_win32path="build/x86"
_aos4path="Games:ScummVM"
_staticlibpath=/sw
_sdlconfig=sdl-config
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index 35f68a12c0..7d112c7ffe 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -245,6 +245,9 @@ int main(int argc, char *argv[]) {
} else if (!std::strcmp(argv[i], "--build-events")) {
setup.runBuildEvents = true;
+ } else if (!std::strcmp(argv[i], "--installer")) {
+ setup.runBuildEvents = true;
+ setup.createInstaller = true;
} else {
std::cerr << "ERROR: Unknown parameter \"" << argv[i] << "\"\n";
return -1;
@@ -516,6 +519,8 @@ void displayHelp(const char *exe) {
" The default is \"9\", thus \"Visual Studio 2008\"\n"
" --build-events Run custom build events as part of the build\n"
" (default: false)\n"
+ " --installer Create NSIS installer after the build (implies --build-events)\n"
+ " (default: false)\n"
"\n"
"Engines settings:\n"
" --list-engines list all available engines and their default state\n"
diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h
index f4d2a0a66a..e4ccd7313a 100644
--- a/devtools/create_project/create_project.h
+++ b/devtools/create_project/create_project.h
@@ -192,10 +192,12 @@ struct BuildSetup {
StringList defines; ///< List of all defines for the build.
StringList libraries; ///< List of all external libraries required for the build.
- bool runBuildEvents;
+ bool runBuildEvents; ///< Run build events as part of the build (generate revision number and copy engine/theme data & needed files to the build folder
+ bool createInstaller; ///< Create NSIS installer after the build
BuildSetup() {
- runBuildEvents = false;
+ runBuildEvents = false;
+ createInstaller = false;
}
};
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp
index 06425dd4aa..4b8276da6f 100644
--- a/devtools/create_project/msbuild.cpp
+++ b/devtools/create_project/msbuild.cpp
@@ -283,7 +283,7 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
// Copy data files to the build folder
project << "\t\t<PostBuildEvent>\n"
"\t\t\t<Message>Copy data files to the build folder</Message>\n"
- "\t\t\t<Command>" << getPostBuildEvent(isWin32) << "</Command>\n"
+ "\t\t\t<Command>" << getPostBuildEvent(isWin32, setup.createInstaller) << "</Command>\n"
"\t\t</PostBuildEvent>\n";
}
}
diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp
index 49998cd738..af3aa4a519 100644
--- a/devtools/create_project/msvc.cpp
+++ b/devtools/create_project/msvc.cpp
@@ -158,7 +158,7 @@ std::string MSVCProvider::getPreBuildEvent() const {
return cmdLine;
}
-std::string MSVCProvider::getPostBuildEvent(bool isWin32) const {
+std::string MSVCProvider::getPostBuildEvent(bool isWin32, bool createInstaller) const {
std::string cmdLine = "";
cmdLine = "@echo off\n"
@@ -168,7 +168,10 @@ std::string MSVCProvider::getPostBuildEvent(bool isWin32) const {
cmdLine += (isWin32) ? "x86" : "x64";
- cmdLine += " %SCUMMVM_LIBS%";
+ cmdLine += " %SCUMMVM_LIBS% ";
+
+ // Specify if installer needs to be built or not
+ cmdLine += (createInstaller ? "1" : "0");
cmdLine += "\n"
"EXIT /B0";
diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h
index b2f2a5d33f..6c8ac33a76 100644
--- a/devtools/create_project/msvc.h
+++ b/devtools/create_project/msvc.h
@@ -89,11 +89,14 @@ protected:
std::string getPreBuildEvent() const;
/**
- * Get the command line for copying data files to the build directory
+ * Get the command line for copying data files to the build directory.
*
- * @param isWin32 Bitness of property file
+ * @param isWin32 Bitness of property file.
+ * @param createInstaller true to NSIS create installer
+ *
+ * @return The post build event.
*/
- std::string getPostBuildEvent(bool isWin32) const;
+ std::string getPostBuildEvent(bool isWin32, bool createInstaller) const;
};
} // End of CreateProjectTool namespace
diff --git a/devtools/create_project/msvc10/create_project.vcxproj b/devtools/create_project/msvc10/create_project.vcxproj
index 15ce217bfc..bf5e415b5d 100644
--- a/devtools/create_project/msvc10/create_project.vcxproj
+++ b/devtools/create_project/msvc10/create_project.vcxproj
@@ -108,6 +108,7 @@ xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\codeblocks\</Command>
<ClInclude Include="..\visualstudio.h" />
</ItemGroup>
<ItemGroup>
+ <None Include="..\scripts\installer.vbs" />
<None Include="..\scripts\postbuild.cmd" />
<None Include="..\scripts\prebuild.cmd" />
<None Include="..\scripts\revision.vbs" />
diff --git a/devtools/create_project/msvc10/create_project.vcxproj.filters b/devtools/create_project/msvc10/create_project.vcxproj.filters
index 42db5aa97e..b5e870824e 100644
--- a/devtools/create_project/msvc10/create_project.vcxproj.filters
+++ b/devtools/create_project/msvc10/create_project.vcxproj.filters
@@ -58,5 +58,8 @@
<None Include="..\scripts\postbuild.cmd">
<Filter>scripts</Filter>
</None>
+ <None Include="..\scripts\installer.vbs">
+ <Filter>scripts</Filter>
+ </None>
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/devtools/create_project/msvc8/create_project.vcproj b/devtools/create_project/msvc8/create_project.vcproj
index 9cd833ea23..639b23d6e7 100644
--- a/devtools/create_project/msvc8/create_project.vcproj
+++ b/devtools/create_project/msvc8/create_project.vcproj
@@ -232,6 +232,10 @@
RelativePath="..\scripts\revision.vbs"
>
</File>
+ <File
+ RelativePath="..\scripts\installer.vbs"
+ >
+ </File>
</Filter>
</Files>
<Globals>
diff --git a/devtools/create_project/msvc9/create_project.vcproj b/devtools/create_project/msvc9/create_project.vcproj
index 4e0375c35e..f56cbd711c 100644
--- a/devtools/create_project/msvc9/create_project.vcproj
+++ b/devtools/create_project/msvc9/create_project.vcproj
@@ -233,6 +233,10 @@
RelativePath="..\scripts\revision.vbs"
>
</File>
+ <File
+ RelativePath="..\scripts\installer.vbs"
+ >
+ </File>
</Filter>
</Files>
<Globals>
diff --git a/devtools/create_project/scripts/installer.vbs b/devtools/create_project/scripts/installer.vbs
new file mode 100644
index 0000000000..6bcd794bef
--- /dev/null
+++ b/devtools/create_project/scripts/installer.vbs
@@ -0,0 +1,196 @@
+'
+' ScummVM - Graphic Adventure Engine
+'
+' ScummVM is the legal property of its developers, whose names
+' are too numerous to list here. Please refer to the COPYRIGHT
+' file distributed with this source distribution.
+'
+' This program is free software; you can redistribute it and/or
+' modify it under the terms of the GNU General Public License
+' as published by the Free Software Foundation, version 2
+' of the License.
+'
+' This program is distributed in the hope that it will be useful,
+' but WITHOUT ANY WARRANTY; without even the implied warranty of
+' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' GNU General Public License for more details.
+'
+' You should have received a copy of the GNU General Public License
+' along with this program; if not, write to the Free Software
+' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+'
+'/
+
+''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+' This script calls the makensis tool to generate a NSIS Windows installer for ScummVM
+'
+' It tries to read the NSIS installation folder from the registry and then calls the
+' command line script compiler to create the installer.
+'
+' This is called from the postbuild.cmd batch file
+''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+'================================================================
+' TODO: Reduce duplication with revision.vbs script
+' (ReadRegistryKey and ParseCommandLine are identical)
+'================================================================
+
+Option Explicit
+
+Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
+Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
+
+' Folders
+Dim rootFolder : rootFolder = ""
+Dim targetFolder : targetFolder = ""
+Dim arch : arch = ""
+
+' Parse our command line arguments
+If ParseCommandLine() Then
+ CreateInstaller()
+End If
+
+'////////////////////////////////////////////////////////////////
+'// Installer creation
+'////////////////////////////////////////////////////////////////
+Sub CreateInstaller()
+ ' Get nsis installation folder
+ Dim nsisPath : nsisPath = GetNSISPath()
+ If (nsisPath = "") Then
+ Exit Sub
+ End If
+
+ ' Preprocess architecture
+ Select Case arch
+ Case "x86"
+ arch = "win32"
+
+ Case "x64"
+ arch = "win64"
+ End Select
+
+ ' Build command line
+ Dim commandLine : commandLine = """" & nsisPath & "\makensis.exe"" /V2" & _
+ " /Dtop_srcdir=""" & rootFolder & """" & _
+ " /Dbuild_dir=""" & targetFolder & """" & _
+ " /Dtext_dir=""" & targetFolder & """" & _
+ " /DARCH=""" & arch & """" & _
+ " """ & rootFolder & "\dists\nsis\scummvm.nsi"""
+
+ Dim oExec: Set oExec = WshShell.Exec(commandline)
+ If Err.Number <> 0 Then
+ Wscript.StdErr.WriteLine "Error running makensis.exe!"
+ Exit Sub
+ End If
+
+ ' Wait till the application is finished ...
+ Dim ostdOut : Set oStdOut = oExec.StdOut
+ Do While oExec.Status = 0
+ If Not ostdOut.AtEndOfStream Then
+ Wscript.StdErr.WriteLine ostdOut.ReadAll
+ End If
+
+ WScript.Sleep 100
+ Loop
+
+ If oExec.ExitCode <> 0 Then
+ Wscript.StdErr.WriteLine "Error while creating installer!"
+ Exit Sub
+ End If
+End Sub
+
+Function GetNSISPath()
+ ' Get the directory where NSIS (should) reside(s)
+ Dim sNSIS
+
+ ' First, try with 32-bit architecture
+ sNSIS = ReadRegistryKey("HKLM", "SOFTWARE\NSIS", "", 32)
+
+ If sNSIS = "" Or IsNull(sNSIS) Then
+ ' No 32-bit version of TortoiseSVN installed, try 64-bit version (doesn't hurt on 32-bit machines, it returns nothing or is ignored)
+ sNSIS = ReadRegistryKey("HKLM", "SOFTWARE\NSIS", "", 64)
+ End If
+
+ ' Check if Tortoise is present
+ If sNSIS = "" Then
+ Wscript.StdErr.WriteLine "NSIS not installed!"
+ Exit Function
+ End If
+
+ GetNSISPath = sNSIS
+End Function
+
+'////////////////////////////////////////////////////////////////
+'// Utilities
+'////////////////////////////////////////////////////////////////
+Function ParseCommandLine()
+ ParseCommandLine = True
+
+ If Wscript.Arguments.Count <> 3 Then
+ Wscript.StdErr.WriteLine "[Error] Invalid number of arguments (was: " & Wscript.Arguments.Count & ", expected: 3)"
+
+ ParseCommandLine = False
+ Exit Function
+ End If
+
+ ' Get our arguments
+ rootFolder = Wscript.Arguments.Item(0)
+ targetFolder = Wscript.Arguments.Item(1)
+ arch = Wscript.Arguments.Item(2)
+
+ ' Check that the folders are valid
+ If Not FSO.FolderExists(rootFolder) Then
+ Wscript.StdErr.WriteLine "[Error] Invalid root folder (" & rootFolder & ")"
+
+ ParseCommandLine = False
+ Exit Function
+ End If
+
+ If Not FSO.FolderExists(targetFolder) Then
+ Wscript.StdErr.WriteLine "[Error] Invalid target folder (" & targetFolder & ")"
+
+ ParseCommandLine = False
+ Exit Function
+ End If
+
+ ' Set absolute paths
+ rootFolder = FSO.GetAbsolutePathName(rootFolder)
+ targetFolder = FSO.GetAbsolutePathName(targetFolder)
+End Function
+
+Function ReadRegistryKey(shive, subkey, valuename, architecture)
+ Dim hiveKey, objCtx, objLocator, objServices, objReg, Inparams, Outparams
+
+ ' First, get the Registry Provider for the requested architecture
+ Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
+ objCtx.Add "__ProviderArchitecture", architecture ' Must be 64 of 32
+ Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
+ Set objServices = objLocator.ConnectServer("","root\default","","",,,,objCtx)
+ Set objReg = objServices.Get("StdRegProv")
+
+ ' Check the hive and give it the right value
+ Select Case shive
+ Case "HKCR", "HKEY_CLASSES_ROOT"
+ hiveKey = &h80000000
+ Case "HKCU", "HKEY_CURRENT_USER"
+ hiveKey = &H80000001
+ Case "HKLM", "HKEY_LOCAL_MACHINE"
+ hiveKey = &h80000002
+ Case "HKU", "HKEY_USERS"
+ hiveKey = &h80000003
+ Case "HKCC", "HKEY_CURRENT_CONFIG"
+ hiveKey = &h80000005
+ Case "HKDD", "HKEY_DYN_DATA" ' Only valid for Windows 95/98
+ hiveKey = &h80000006
+ Case Else
+ MsgBox "Hive not valid (ReadRegistryKey)"
+ End Select
+
+ Set Inparams = objReg.Methods_("GetStringValue").Inparameters
+ Inparams.Hdefkey = hiveKey
+ Inparams.Ssubkeyname = subkey
+ Inparams.Svaluename = valuename
+ Set Outparams = objReg.ExecMethod_("GetStringValue", Inparams,,objCtx)
+
+ ReadRegistryKey = Outparams.SValue
+End Function
diff --git a/devtools/create_project/scripts/postbuild.cmd b/devtools/create_project/scripts/postbuild.cmd
index e5f29058b9..e78861463a 100644
--- a/devtools/create_project/scripts/postbuild.cmd
+++ b/devtools/create_project/scripts/postbuild.cmd
@@ -1,36 +1,52 @@
-REM @echo off
+@echo off
REM ---------------------------------------------------------------
REM -- Post-Build Script
REM ---------------------------------------------------------------
REM
REM Copy engine data, themes, translation and required dlls to the
-REM output folder.
+REM output folder and optionally create an installer
REM
REM Expected parameters
REM Root folder
REM Output folder
REM Architecture
REM Libs folder
+REM Installer ("1" to build, "0" to skip)
if "%~1"=="" goto error_root
if "%~2"=="" goto error_output
if "%~3"=="" goto error_arch
if "%~4"=="" goto error_libs
+if "%~5"=="" goto error_installer
echo Copying data files
echo.
-REM Copy files
-xcopy /F /Y "%~1/dists/engine-data/*.dat" %~2 > NUL 2>&1
-xcopy /F /Y "%~1/dists/engine-data/*.tbl" %~2 > NUL 2>&1
-xcopy /F /Y "%~1/dists/engine-data/*.cpt" %~2 > NUL 2>&1
-xcopy /F /Y "%~1/dists/engine-data/README" %~2 > NUL 2>&1
-xcopy /F /Y "%~1/gui/themes/*.zip" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/AUTHORS" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/COPYING.GPL" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/COPYING" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/COPYING.LGPL" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/COPYRIGHT" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/NEWS" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/README" %~2 > NUL 2>&1
+
+xcopy /F /Y "%~1/dists/engine-data/*.dat" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/dists/engine-data/*.tbl" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/dists/engine-data/*.cpt" %~2 > NUL 2>&1
+xcopy /F /Y "%~1/gui/themes/*.zip" %~2 > NUL 2>&1
xcopy /F /Y "%~1/gui/themes/translations.dat" %~2 > NUL 2>&1
-xcopy /F /Y "%~4/lib/%~3/SDL.dll" %~2 > NUL 2>&1
+xcopy /F /Y "%~4/lib/%~3/SDL.dll" %~2 > NUL 2>&1
+xcopy /F /Y "%~4/README-SDL" %~2 > NUL 2>&1
xcopy /F /Y "%~1/backends/vkeybd/packs/vkeybd_default.zip" %~2 > NUL 2>&1
+
+if "%~5"=="0" goto done
+
+echo Running installer script
+echo.
+@call cscript "%~1/devtools/create_project/scripts/installer.vbs" %~1 %~2 %~3 1>NUL
+if not %errorlevel% == 0 goto error_script
goto done
:error_root
@@ -49,5 +65,13 @@ goto done
echo Invalid libs folder (%~4)!
goto done
+:error_installer
+echo Invalid installer parameter. Should be "0" or "1" (was %~5)!
+goto done
+
+:error_script:
+echo An error occured while running the installer script!
+goto done
+
:done
exit /B0
diff --git a/devtools/create_project/scripts/revision.vbs b/devtools/create_project/scripts/revision.vbs
index 9c29a88f2d..3e1212521c 100644
--- a/devtools/create_project/scripts/revision.vbs
+++ b/devtools/create_project/scripts/revision.vbs
@@ -23,6 +23,21 @@
'
'/
+''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+' This script tries to determine a revision number based on the current working tree
+' by trying revision control tools in the following order:
+' - git (with hg-git detection)
+' - mercurial
+' - TortoiseSVN
+' - SVN
+'
+' It then writes a new header file to be included during build, with the revision
+' information, the current branch, the revision control system (when not git) and
+' a flag when the tree is dirty.
+'
+' This is called from the prebuild.cmd batch file
+''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
Option Explicit
' Working copy check priority:
@@ -82,14 +97,15 @@ Sub DetermineRevision()
End If
End If
End If
-
- Wscript.StdErr.WriteLine "Found revision " & revision & " on branch " & branch & vbCrLf
-
+
+ Dim outputInfo : outputInfo = "Found revision " & revision & " on branch " & branch
+
' Setup our revision string
Dim revisionString : revisionString = revision
If (modified) Then
revisionString = revisionString & "-dirty"
+ outputInfo = outputInfo & " (dirty)"
End If
' If we are not on trunk, add the branch name to the revision string
@@ -100,7 +116,10 @@ Sub DetermineRevision()
' Add the DVCS name at the end (when not git)
If (tool <> "git") Then
revisionString = revisionString & "-" & tool
+ outputInfo = outputInfo & " using " & tool
End If
+
+ Wscript.StdErr.WriteLine outputInfo & vbCrLf
' Output revision header file
FSO.CopyFile rootFolder & "\\base\\internal_revision.h.in", targetFolder & "\\internal_revision.h"
@@ -213,10 +232,11 @@ Function DetermineGitVersion()
Err.Clear
On Error Resume Next
DetermineGitVersion = False
+ Dim line
Wscript.StdErr.Write " Git... "
tool = "git"
- ' First check if we have both a .git & .svn folders (in case hg-git has been set up to have the git folder at the working copy level)
+ ' First check if we have both a .git & .hg folders (in case hg-git has been set up to have the git folder at the working copy level)
If FSO.FolderExists(rootFolder & "/.git") And FSO.FolderExists(rootFolder & "/.hg") Then
Wscript.StdErr.WriteLine "Mercurial clone with git repository in tree!"
Exit Function
@@ -250,10 +270,10 @@ Function DetermineGitVersion()
End If
' Get the version hash
- Dim hash: hash = oExec.StdOut.ReadLine()
+ Dim hash : hash = oExec.StdOut.ReadLine()
' Make sure index is in sync with disk
- Set oExec = WshShell.Exec(gitPath & "update-index --refresh")
+ Set oExec = WshShell.Exec(gitPath & "update-index --refresh --unmerged")
If Err.Number = 0 Then
' Wait till the application is finished ...
Do While oExec.Status = 0
@@ -261,7 +281,7 @@ Function DetermineGitVersion()
Loop
End If
- Set oExec = WshShell.Exec(gitPath & "diff-index --exit-code --quiet HEAD " & rootFolder)
+ Set oExec = WshShell.Exec(gitPath & "diff-index --quiet HEAD " & rootFolder)
If oExec.ExitCode <> 0 Then
Wscript.StdErr.WriteLine "Error parsing git revision!"
Exit Function
@@ -279,14 +299,24 @@ Function DetermineGitVersion()
' Get branch name
Set oExec = WshShell.Exec(gitPath & "symbolic-ref HEAD")
If Err.Number = 0 Then
- Dim line: line = oExec.StdOut.ReadLine()
+ line = oExec.StdOut.ReadLine()
line = Mid(line, InStrRev(line, "/") + 1)
If line <> "master" Then
branch = line
End If
End If
- ' Fallback to abbreviated revision number
+ ' Get revision description
+ Set oExec = WshShell.Exec(gitPath & "describe --match desc/*")
+ If Err.Number = 0 Then
+ line = oExec.StdOut.ReadLine()
+ line = Mid(line, InStr(line, "-") + 1)
+ If line <> "" Then
+ revision = line
+ End If
+ End If
+
+ ' Fallback to abbreviated revision number if needed
If revision = "" Then
revision = Mid(hash, 1, 7)
End If
diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp
index 77af8aeca1..f0901907e2 100644
--- a/devtools/create_project/visualstudio.cpp
+++ b/devtools/create_project/visualstudio.cpp
@@ -167,7 +167,7 @@ void VisualStudioProvider::outputBuildEvents(std::ostream &project, const BuildS
"\t\t\t\tCommandLine=\"" << getPreBuildEvent() << "\"\n"
"\t\t\t/>\n"
"\t\t\t<Tool\tName=\"VCPostBuildEventTool\"\n"
- "\t\t\t\tCommandLine=\"" << getPostBuildEvent(isWin32) << "\"\n"
+ "\t\t\t\tCommandLine=\"" << getPostBuildEvent(isWin32, setup.createInstaller) << "\"\n"
"\t\t\t/>\n";
}
}
diff --git a/devtools/update-version.pl b/devtools/update-version.pl
index 91e9e2492b..788cbc7e40 100755
--- a/devtools/update-version.pl
+++ b/devtools/update-version.pl
@@ -39,6 +39,7 @@ my @subs_files = qw(
dists/macosx/Info.plist
dists/iphone/Info.plist
dists/irix/scummvm.spec
+ dists/nsis/scummvm.nsi
dists/wii/meta.xml
dists/android/AndroidManifest.xml
dists/android/plugin-manifest.xml
diff --git a/dists/nsis/graphics/left.bmp b/dists/nsis/graphics/left.bmp
new file mode 100644
index 0000000000..8b31d7d09a
--- /dev/null
+++ b/dists/nsis/graphics/left.bmp
Binary files differ
diff --git a/dists/nsis/graphics/scummvm-install.ico b/dists/nsis/graphics/scummvm-install.ico
new file mode 100644
index 0000000000..b8b118c7bd
--- /dev/null
+++ b/dists/nsis/graphics/scummvm-install.ico
Binary files differ
diff --git a/dists/nsis/scummvm.nsi b/dists/nsis/scummvm.nsi
new file mode 100644
index 0000000000..aeabcca039
--- /dev/null
+++ b/dists/nsis/scummvm.nsi
@@ -0,0 +1,351 @@
+# ScummVM - Graphic Adventure Engine
+#
+# ScummVM is the legal property of its developers, whose names
+# are too numerous to list here. Please refer to the COPYRIGHT
+# file distributed with this source distribution.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#!define _DEBUG
+
+Name ScummVM
+
+# Included files
+!include MUI2.nsh
+
+#########################################################################################
+# Command line options
+#########################################################################################
+
+#!define top_srcdir ""
+#!define build_dir ""
+#!define text_dir ""
+#!define ARCH "" ;(optional, defaults to win32)
+
+# Check parameters
+!ifndef top_srcdir
+ !error "Top source folder has not been passed to command line!"
+!endif
+
+!ifndef build_dir
+ !error "Build folder has not been passed to command line (this folder should contain the executable and linked DLLs)!"
+!endif
+
+!ifndef text_dir
+ !error "Text folder has not been passed to command line (this folder should contain all the text files used by the installer)!"
+!endif
+
+!ifndef ARCH
+ !warning "ARCH has not been defined, defaulting to 'win32'"
+ !define ARCH "win32"
+!endif
+
+#########################################################################################
+# Folders
+#########################################################################################
+!define engine_data "${top_srcdir}\dists\engine-data"
+!define theme_data "${top_srcdir}\gui\themes"
+
+#########################################################################################
+# General Symbol Definitions
+#########################################################################################
+!define REGKEY "Software\$(^Name)\$(^Name)"
+!define VERSION "1.4.0git"
+!define COMPANY "ScummVM Team"
+!define URL "http://scummvm.org/"
+!define DESCRIPTION "ScummVM Installer. Look! A three headed monkey (TM)!"
+!define COPYRIGHT "Copyright © 2001-2011 The ScummVM Team"
+
+#########################################################################################
+# Installer configuration
+#########################################################################################
+OutFile ${build_dir}\scummvm-${VERSION}-${ARCH}.exe
+InstallDir $PROGRAMFILES\ScummVM ; Default installation folder
+InstallDirRegKey HKCU "Software\ScummVM\ScummVM" "InstallPath" ; Get installation folder from registry if available
+ ; The application name needs to be refered directly instead of through ${REGKEY}
+ ; because lang strings aren't initialized at the point InstallDirRegKey is called
+
+CRCCheck on
+XPStyle on
+#TargetMinimalOS 5.0 ; Minimal version of windows for installer: Windows 2000 or more recent
+ ; (will build unicode installer with NSIS 2.50+)
+
+VIProductVersion 1.4.0.0
+VIAddVersionKey ProductName $(^Name)
+VIAddVersionKey ProductVersion "${VERSION}"
+VIAddVersionKey CompanyName "${COMPANY}"
+VIAddVersionKey CompanyWebsite "${URL}"
+VIAddVersionKey FileVersion "${VERSION}"
+VIAddVersionKey FileDescription "${DESCRIPTION}"
+VIAddVersionKey LegalCopyright "${COPYRIGHT}"
+
+BrandingText "$(^Name) ${VERSION}" ; Change branding text on the installer to show our name and version instead of NSIS's
+
+# Show Details when installing/uninstalling files
+ShowInstDetails show
+ShowUninstDetails show
+
+!ifdef _DEBUG
+ SetCompress off ; for debugging the installer, lzma takes forever
+ RequestExecutionLevel user
+!else
+ SetCompressor /FINAL /SOLID lzma
+ SetCompressorDictSize 64
+ RequestExecutionLevel admin ; for installation into program files folders
+!endif
+
+#########################################################################################
+# MUI Symbol Definitions
+#########################################################################################
+!define MUI_WELCOMEFINISHPAGE_BITMAP "graphics\left.bmp"
+!define MUI_ICON "graphics\scummvm-install.ico"
+!define MUI_UNICON "graphics\scummvm-install.ico"
+
+#Start menu
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKCU
+!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY}
+!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup
+!define MUI_STARTMENUPAGE_DEFAULTFOLDER $(^Name)
+
+# Finish page
+!define MUI_FINISHPAGE_RUN "$INSTDIR\scummvm.exe"
+!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
+!define MUI_FINISHPAGE_RUN_NOTCHECKED
+!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+
+!define MUI_LICENSEPAGE_RADIOBUTTONS
+
+!define MUI_FINISHPAGE_NOAUTOCLOSE
+!define MUI_UNFINISHPAGE_NOAUTOCLOSE
+
+#########################################################################################
+# Installer pages
+#########################################################################################
+# Variables
+Var StartMenuGroup
+
+;Remember the installer language
+!define MUI_LANGDLL_REGISTRY_ROOT HKCU
+!define MUI_LANGDLL_REGISTRY_KEY ${REGKEY}
+!define MUI_LANGDLL_REGISTRY_VALUENAME "InstallerLanguage"
+
+!insertmacro MUI_PAGE_WELCOME
+!insertmacro MUI_PAGE_LICENSE ${top_srcdir}\COPYING
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_PAGE_FINISH
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+
+# Installer languages
+!insertmacro MUI_LANGUAGE "English" ;first language is the default language
+
+!ifndef _DEBUG ; Skip other languages when building debug builds
+;!insertmacro MUI_LANGUAGE "Afrikaans"
+;!insertmacro MUI_LANGUAGE "Albanian"
+;!insertmacro MUI_LANGUAGE "Arabic"
+;!insertmacro MUI_LANGUAGE "Belarusian"
+;!insertmacro MUI_LANGUAGE "Bosnian"
+;!insertmacro MUI_LANGUAGE "Breton"
+;!insertmacro MUI_LANGUAGE "Bulgarian"
+!insertmacro MUI_LANGUAGE "Catalan"
+;!insertmacro MUI_LANGUAGE "Croatian"
+!insertmacro MUI_LANGUAGE "Czech"
+!insertmacro MUI_LANGUAGE "Danish"
+;!insertmacro MUI_LANGUAGE "Dutch"
+;!insertmacro MUI_LANGUAGE "Esperanto"
+;!insertmacro MUI_LANGUAGE "Estonian"
+;!insertmacro MUI_LANGUAGE "Farsi"
+;!insertmacro MUI_LANGUAGE "Finnish"
+!insertmacro MUI_LANGUAGE "French"
+;!insertmacro MUI_LANGUAGE "Galician"
+!insertmacro MUI_LANGUAGE "German"
+;!insertmacro MUI_LANGUAGE "Greek"
+;!insertmacro MUI_LANGUAGE "Hebrew"
+!insertmacro MUI_LANGUAGE "Hungarian"
+;!insertmacro MUI_LANGUAGE "Icelandic"
+;!insertmacro MUI_LANGUAGE "Indonesian"
+;!insertmacro MUI_LANGUAGE "Irish"
+!insertmacro MUI_LANGUAGE "Italian"
+;!insertmacro MUI_LANGUAGE "Japanese"
+;!insertmacro MUI_LANGUAGE "Korean"
+;!insertmacro MUI_LANGUAGE "Kurdish"
+;!insertmacro MUI_LANGUAGE "Latvian"
+;!insertmacro MUI_LANGUAGE "Lithuanian"
+;!insertmacro MUI_LANGUAGE "Luxembourgish"
+;!insertmacro MUI_LANGUAGE "Macedonian"
+;!insertmacro MUI_LANGUAGE "Malay"
+;!insertmacro MUI_LANGUAGE "Mongolian"
+!insertmacro MUI_LANGUAGE "Norwegian"
+!insertmacro MUI_LANGUAGE "NorwegianNynorsk"
+!insertmacro MUI_LANGUAGE "Polish"
+;!insertmacro MUI_LANGUAGE "Portuguese"
+!insertmacro MUI_LANGUAGE "PortugueseBR"
+;!insertmacro MUI_LANGUAGE "Romanian"
+!insertmacro MUI_LANGUAGE "Russian"
+;!insertmacro MUI_LANGUAGE "Serbian"
+;!insertmacro MUI_LANGUAGE "SerbianLatin"
+;!insertmacro MUI_LANGUAGE "SimpChinese"
+;!insertmacro MUI_LANGUAGE "Slovak"
+;!insertmacro MUI_LANGUAGE "Slovenian"
+!insertmacro MUI_LANGUAGE "Spanish"
+;!insertmacro MUI_LANGUAGE "SpanishInternational"
+!insertmacro MUI_LANGUAGE "Swedish"
+;!insertmacro MUI_LANGUAGE "Thai"
+;!insertmacro MUI_LANGUAGE "TradChinese"
+;!insertmacro MUI_LANGUAGE "Turkish"
+!insertmacro MUI_LANGUAGE "Ukrainian"
+;!insertmacro MUI_LANGUAGE "Uzbek"
+!endif
+
+;Reserve Files (will make sure the file will be stored first in the data block
+; making the installer start faster when compressing in solid mode)
+!insertmacro MUI_RESERVEFILE_LANGDLL
+
+#########################################################################################
+# Installer sections
+#########################################################################################
+Section "ScummVM" SecMain
+ SetOutPath $INSTDIR
+ SetOverwrite on
+
+ # Text files
+ File /oname=AUTHORS.txt "${text_dir}\AUTHORS"
+ File /oname=COPYING.LGPL.txt "${text_dir}\COPYING.LGPL"
+ File /oname=COPYING.txt "${text_dir}\COPYING"
+ File /oname=COPYRIGHT.txt "${text_dir}\COPYRIGHT"
+ File /oname=NEWS.txt "${text_dir}\NEWS"
+ File /oname=README.txt "${text_dir}\README"
+ File /oname=README-SDL.txt "${build_dir}\README-SDL"
+
+ # Engine data
+ File "${engine_data}\drascula.dat"
+ File "${engine_data}\hugo.dat"
+ File "${engine_data}\kyra.dat"
+ File "${engine_data}\lure.dat"
+ File "${engine_data}\m4.dat"
+ File "${engine_data}\queen.tbl"
+ File "${engine_data}\sky.cpt"
+ File "${engine_data}\teenagent.dat"
+ File "${engine_data}\toon.dat"
+
+ File "${top_srcdir}\dists\pred.dic"
+
+ # Themes
+ File "${theme_data}\scummclassic.zip"
+ File "${theme_data}\scummmodern.zip"
+ File "${theme_data}\translations.dat"
+
+ # Main exe and dlls
+ File "${build_dir}\scummvm.exe"
+ File "${build_dir}\SDL.dll"
+
+ WriteRegStr HKCU "${REGKEY}" InstallPath "$INSTDIR" ; Store installation folder
+SectionEnd
+
+# Write Start menu entries and uninstaller
+Section -post SecMainPost
+ SetOutPath $INSTDIR
+ WriteUninstaller $INSTDIR\uninstall.exe
+ !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+ SetShellVarContext all ; Create shortcuts in the all-users folder
+ CreateDirectory "$SMPROGRAMS\$StartMenuGroup"
+ CreateShortCut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\$(^Name).exe "" "$INSTDIR\$(^Name).exe" 0 ; Create shortcut with icon
+ CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Readme.lnk" $INSTDIR\README.txt
+ CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
+ !insertmacro MUI_STARTMENU_WRITE_END
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" InstallLocation $INSTDIR
+ WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
+ WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
+SectionEnd
+
+# Installer functions
+Function .onInit
+ !insertmacro MUI_LANGDLL_DISPLAY
+
+!ifdef _DEBUG && NSIS_CONFIG_LOG
+ LogSet on ; Will write a log file to the install folder (when using the special NSIS logging build)
+!endif
+FunctionEnd
+
+#########################################################################################
+# Uninstaller sections
+#########################################################################################
+Section -un.Main SecUninstall
+ Delete /REBOOTOK $INSTDIR\AUTHORS.txt
+ Delete /REBOOTOK $INSTDIR\COPYING.txt
+ Delete /REBOOTOK $INSTDIR\COPYING.LGPL.txt
+ Delete /REBOOTOK $INSTDIR\COPYRIGHT.txt
+ Delete /REBOOTOK $INSTDIR\NEWS.txt
+ Delete /REBOOTOK $INSTDIR\README.txt
+ Delete /REBOOTOK $INSTDIR\README-SDL.txt
+
+ Delete /REBOOTOK $INSTDIR\drascula.dat
+ Delete /REBOOTOK $INSTDIR\hugo.dat
+ Delete /REBOOTOK $INSTDIR\kyra.dat
+ Delete /REBOOTOK $INSTDIR\lure.dat
+ Delete /REBOOTOK $INSTDIR\m4.dat
+ Delete /REBOOTOK $INSTDIR\queen.tbl
+ Delete /REBOOTOK $INSTDIR\sky.cpt
+ Delete /REBOOTOK $INSTDIR\teenagent.dat
+ Delete /REBOOTOK $INSTDIR\toon.dat
+
+ Delete /REBOOTOK $INSTDIR\pred.dic
+
+ Delete /REBOOTOK $INSTDIR\scummclassic.zip
+ Delete /REBOOTOK $INSTDIR\scummmodern.zip
+ Delete /REBOOTOK $INSTDIR\translations.dat
+
+ Delete /REBOOTOK $INSTDIR\scummvm.exe
+ Delete /REBOOTOK $INSTDIR\SDL.dll
+SectionEnd
+
+Section -un.post SecUninstallPost
+ # Remove start menu entries
+ SetShellVarContext all
+ Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk"
+ Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Readme.lnk"
+ Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
+ RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup
+
+ Delete /REBOOTOK $INSTDIR\uninstall.exe
+
+ DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
+ DeleteRegValue HKCU "${REGKEY}" StartMenuGroup
+ DeleteRegValue HKCU "${REGKEY}" InstallPath
+ DeleteRegValue HKCU "${REGKEY}" InstallerLanguage
+ DeleteRegKey /IfEmpty HKCU "${REGKEY}"
+
+ RmDir $INSTDIR ; will only remove if empty (pass /r flag for recursive behavior)
+ Push $R0
+ StrCpy $R0 $StartMenuGroup 1
+ StrCmp $R0 ">" no_smgroup
+no_smgroup:
+ Pop $R0
+SectionEnd
+
+# Uninstaller functions
+Function un.onInit
+ !insertmacro MUI_UNGETLANGUAGE
+ ReadRegStr $INSTDIR HKCU "${REGKEY}" InstallPath
+ !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup
+FunctionEnd
diff --git a/dists/nsis/scummvm.nsi.in b/dists/nsis/scummvm.nsi.in
new file mode 100644
index 0000000000..766a20633f
--- /dev/null
+++ b/dists/nsis/scummvm.nsi.in
@@ -0,0 +1,351 @@
+# ScummVM - Graphic Adventure Engine
+#
+# ScummVM is the legal property of its developers, whose names
+# are too numerous to list here. Please refer to the COPYRIGHT
+# file distributed with this source distribution.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#!define _DEBUG
+
+Name ScummVM
+
+# Included files
+!include MUI2.nsh
+
+#########################################################################################
+# Command line options
+#########################################################################################
+
+#!define top_srcdir ""
+#!define build_dir ""
+#!define text_dir ""
+#!define ARCH "" ;(optional, defaults to win32)
+
+# Check parameters
+!ifndef top_srcdir
+ !error "Top source folder has not been passed to command line!"
+!endif
+
+!ifndef build_dir
+ !error "Build folder has not been passed to command line (this folder should contain the executable and linked DLLs)!"
+!endif
+
+!ifndef text_dir
+ !error "Text folder has not been passed to command line (this folder should contain all the text files used by the installer)!"
+!endif
+
+!ifndef ARCH
+ !warning "ARCH has not been defined, defaulting to 'win32'"
+ !define ARCH "win32"
+!endif
+
+#########################################################################################
+# Folders
+#########################################################################################
+!define engine_data "${top_srcdir}\dists\engine-data"
+!define theme_data "${top_srcdir}\gui\themes"
+
+#########################################################################################
+# General Symbol Definitions
+#########################################################################################
+!define REGKEY "Software\$(^Name)\$(^Name)"
+!define VERSION "@VERSION@"
+!define COMPANY "ScummVM Team"
+!define URL "http://scummvm.org/"
+!define DESCRIPTION "ScummVM Installer. Look! A three headed monkey (TM)!"
+!define COPYRIGHT "Copyright © 2001-2011 The ScummVM Team"
+
+#########################################################################################
+# Installer configuration
+#########################################################################################
+OutFile ${build_dir}\scummvm-${VERSION}-${ARCH}.exe
+InstallDir $PROGRAMFILES\ScummVM ; Default installation folder
+InstallDirRegKey HKCU "Software\ScummVM\ScummVM" "InstallPath" ; Get installation folder from registry if available
+ ; The application name needs to be refered directly instead of through ${REGKEY}
+ ; because lang strings aren't initialized at the point InstallDirRegKey is called
+
+CRCCheck on
+XPStyle on
+#TargetMinimalOS 5.0 ; Minimal version of windows for installer: Windows 2000 or more recent
+ ; (will build unicode installer with NSIS 2.50+)
+
+VIProductVersion @VER_MAJOR@.@VER_MINOR@.@VER_PATCH@.0
+VIAddVersionKey ProductName $(^Name)
+VIAddVersionKey ProductVersion "${VERSION}"
+VIAddVersionKey CompanyName "${COMPANY}"
+VIAddVersionKey CompanyWebsite "${URL}"
+VIAddVersionKey FileVersion "${VERSION}"
+VIAddVersionKey FileDescription "${DESCRIPTION}"
+VIAddVersionKey LegalCopyright "${COPYRIGHT}"
+
+BrandingText "$(^Name) ${VERSION}" ; Change branding text on the installer to show our name and version instead of NSIS's
+
+# Show Details when installing/uninstalling files
+ShowInstDetails show
+ShowUninstDetails show
+
+!ifdef _DEBUG
+ SetCompress off ; for debugging the installer, lzma takes forever
+ RequestExecutionLevel user
+!else
+ SetCompressor /FINAL /SOLID lzma
+ SetCompressorDictSize 64
+ RequestExecutionLevel admin ; for installation into program files folders
+!endif
+
+#########################################################################################
+# MUI Symbol Definitions
+#########################################################################################
+!define MUI_WELCOMEFINISHPAGE_BITMAP "graphics\left.bmp"
+!define MUI_ICON "graphics\scummvm-install.ico"
+!define MUI_UNICON "graphics\scummvm-install.ico"
+
+#Start menu
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKCU
+!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY}
+!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup
+!define MUI_STARTMENUPAGE_DEFAULTFOLDER $(^Name)
+
+# Finish page
+!define MUI_FINISHPAGE_RUN "$INSTDIR\scummvm.exe"
+!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
+!define MUI_FINISHPAGE_RUN_NOTCHECKED
+!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+
+!define MUI_LICENSEPAGE_RADIOBUTTONS
+
+!define MUI_FINISHPAGE_NOAUTOCLOSE
+!define MUI_UNFINISHPAGE_NOAUTOCLOSE
+
+#########################################################################################
+# Installer pages
+#########################################################################################
+# Variables
+Var StartMenuGroup
+
+;Remember the installer language
+!define MUI_LANGDLL_REGISTRY_ROOT HKCU
+!define MUI_LANGDLL_REGISTRY_KEY ${REGKEY}
+!define MUI_LANGDLL_REGISTRY_VALUENAME "InstallerLanguage"
+
+!insertmacro MUI_PAGE_WELCOME
+!insertmacro MUI_PAGE_LICENSE ${top_srcdir}\COPYING
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_PAGE_FINISH
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+
+# Installer languages
+!insertmacro MUI_LANGUAGE "English" ;first language is the default language
+
+!ifndef _DEBUG ; Skip other languages when building debug builds
+;!insertmacro MUI_LANGUAGE "Afrikaans"
+;!insertmacro MUI_LANGUAGE "Albanian"
+;!insertmacro MUI_LANGUAGE "Arabic"
+;!insertmacro MUI_LANGUAGE "Belarusian"
+;!insertmacro MUI_LANGUAGE "Bosnian"
+;!insertmacro MUI_LANGUAGE "Breton"
+;!insertmacro MUI_LANGUAGE "Bulgarian"
+!insertmacro MUI_LANGUAGE "Catalan"
+;!insertmacro MUI_LANGUAGE "Croatian"
+!insertmacro MUI_LANGUAGE "Czech"
+!insertmacro MUI_LANGUAGE "Danish"
+;!insertmacro MUI_LANGUAGE "Dutch"
+;!insertmacro MUI_LANGUAGE "Esperanto"
+;!insertmacro MUI_LANGUAGE "Estonian"
+;!insertmacro MUI_LANGUAGE "Farsi"
+;!insertmacro MUI_LANGUAGE "Finnish"
+!insertmacro MUI_LANGUAGE "French"
+;!insertmacro MUI_LANGUAGE "Galician"
+!insertmacro MUI_LANGUAGE "German"
+;!insertmacro MUI_LANGUAGE "Greek"
+;!insertmacro MUI_LANGUAGE "Hebrew"
+!insertmacro MUI_LANGUAGE "Hungarian"
+;!insertmacro MUI_LANGUAGE "Icelandic"
+;!insertmacro MUI_LANGUAGE "Indonesian"
+;!insertmacro MUI_LANGUAGE "Irish"
+!insertmacro MUI_LANGUAGE "Italian"
+;!insertmacro MUI_LANGUAGE "Japanese"
+;!insertmacro MUI_LANGUAGE "Korean"
+;!insertmacro MUI_LANGUAGE "Kurdish"
+;!insertmacro MUI_LANGUAGE "Latvian"
+;!insertmacro MUI_LANGUAGE "Lithuanian"
+;!insertmacro MUI_LANGUAGE "Luxembourgish"
+;!insertmacro MUI_LANGUAGE "Macedonian"
+;!insertmacro MUI_LANGUAGE "Malay"
+;!insertmacro MUI_LANGUAGE "Mongolian"
+!insertmacro MUI_LANGUAGE "Norwegian"
+!insertmacro MUI_LANGUAGE "NorwegianNynorsk"
+!insertmacro MUI_LANGUAGE "Polish"
+;!insertmacro MUI_LANGUAGE "Portuguese"
+!insertmacro MUI_LANGUAGE "PortugueseBR"
+;!insertmacro MUI_LANGUAGE "Romanian"
+!insertmacro MUI_LANGUAGE "Russian"
+;!insertmacro MUI_LANGUAGE "Serbian"
+;!insertmacro MUI_LANGUAGE "SerbianLatin"
+;!insertmacro MUI_LANGUAGE "SimpChinese"
+;!insertmacro MUI_LANGUAGE "Slovak"
+;!insertmacro MUI_LANGUAGE "Slovenian"
+!insertmacro MUI_LANGUAGE "Spanish"
+;!insertmacro MUI_LANGUAGE "SpanishInternational"
+!insertmacro MUI_LANGUAGE "Swedish"
+;!insertmacro MUI_LANGUAGE "Thai"
+;!insertmacro MUI_LANGUAGE "TradChinese"
+;!insertmacro MUI_LANGUAGE "Turkish"
+!insertmacro MUI_LANGUAGE "Ukrainian"
+;!insertmacro MUI_LANGUAGE "Uzbek"
+!endif
+
+;Reserve Files (will make sure the file will be stored first in the data block
+; making the installer start faster when compressing in solid mode)
+!insertmacro MUI_RESERVEFILE_LANGDLL
+
+#########################################################################################
+# Installer sections
+#########################################################################################
+Section "ScummVM" SecMain
+ SetOutPath $INSTDIR
+ SetOverwrite on
+
+ # Text files
+ File /oname=AUTHORS.txt "${text_dir}\AUTHORS"
+ File /oname=COPYING.LGPL.txt "${text_dir}\COPYING.LGPL"
+ File /oname=COPYING.txt "${text_dir}\COPYING"
+ File /oname=COPYRIGHT.txt "${text_dir}\COPYRIGHT"
+ File /oname=NEWS.txt "${text_dir}\NEWS"
+ File /oname=README.txt "${text_dir}\README"
+ File /oname=README-SDL.txt "${build_dir}\README-SDL"
+
+ # Engine data
+ File "${engine_data}\drascula.dat"
+ File "${engine_data}\hugo.dat"
+ File "${engine_data}\kyra.dat"
+ File "${engine_data}\lure.dat"
+ File "${engine_data}\m4.dat"
+ File "${engine_data}\queen.tbl"
+ File "${engine_data}\sky.cpt"
+ File "${engine_data}\teenagent.dat"
+ File "${engine_data}\toon.dat"
+
+ File "${top_srcdir}\dists\pred.dic"
+
+ # Themes
+ File "${theme_data}\scummclassic.zip"
+ File "${theme_data}\scummmodern.zip"
+ File "${theme_data}\translations.dat"
+
+ # Main exe and dlls
+ File "${build_dir}\scummvm.exe"
+ File "${build_dir}\SDL.dll"
+
+ WriteRegStr HKCU "${REGKEY}" InstallPath "$INSTDIR" ; Store installation folder
+SectionEnd
+
+# Write Start menu entries and uninstaller
+Section -post SecMainPost
+ SetOutPath $INSTDIR
+ WriteUninstaller $INSTDIR\uninstall.exe
+ !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+ SetShellVarContext all ; Create shortcuts in the all-users folder
+ CreateDirectory "$SMPROGRAMS\$StartMenuGroup"
+ CreateShortCut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\$(^Name).exe "" "$INSTDIR\$(^Name).exe" 0 ; Create shortcut with icon
+ CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Readme.lnk" $INSTDIR\README.txt
+ CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
+ !insertmacro MUI_STARTMENU_WRITE_END
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}"
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe
+ WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" InstallLocation $INSTDIR
+ WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
+ WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
+SectionEnd
+
+# Installer functions
+Function .onInit
+ !insertmacro MUI_LANGDLL_DISPLAY
+
+!ifdef _DEBUG && NSIS_CONFIG_LOG
+ LogSet on ; Will write a log file to the install folder (when using the special NSIS logging build)
+!endif
+FunctionEnd
+
+#########################################################################################
+# Uninstaller sections
+#########################################################################################
+Section -un.Main SecUninstall
+ Delete /REBOOTOK $INSTDIR\AUTHORS.txt
+ Delete /REBOOTOK $INSTDIR\COPYING.txt
+ Delete /REBOOTOK $INSTDIR\COPYING.LGPL.txt
+ Delete /REBOOTOK $INSTDIR\COPYRIGHT.txt
+ Delete /REBOOTOK $INSTDIR\NEWS.txt
+ Delete /REBOOTOK $INSTDIR\README.txt
+ Delete /REBOOTOK $INSTDIR\README-SDL.txt
+
+ Delete /REBOOTOK $INSTDIR\drascula.dat
+ Delete /REBOOTOK $INSTDIR\hugo.dat
+ Delete /REBOOTOK $INSTDIR\kyra.dat
+ Delete /REBOOTOK $INSTDIR\lure.dat
+ Delete /REBOOTOK $INSTDIR\m4.dat
+ Delete /REBOOTOK $INSTDIR\queen.tbl
+ Delete /REBOOTOK $INSTDIR\sky.cpt
+ Delete /REBOOTOK $INSTDIR\teenagent.dat
+ Delete /REBOOTOK $INSTDIR\toon.dat
+
+ Delete /REBOOTOK $INSTDIR\pred.dic
+
+ Delete /REBOOTOK $INSTDIR\scummclassic.zip
+ Delete /REBOOTOK $INSTDIR\scummmodern.zip
+ Delete /REBOOTOK $INSTDIR\translations.dat
+
+ Delete /REBOOTOK $INSTDIR\scummvm.exe
+ Delete /REBOOTOK $INSTDIR\SDL.dll
+SectionEnd
+
+Section -un.post SecUninstallPost
+ # Remove start menu entries
+ SetShellVarContext all
+ Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk"
+ Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Readme.lnk"
+ Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
+ RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup
+
+ Delete /REBOOTOK $INSTDIR\uninstall.exe
+
+ DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
+ DeleteRegValue HKCU "${REGKEY}" StartMenuGroup
+ DeleteRegValue HKCU "${REGKEY}" InstallPath
+ DeleteRegValue HKCU "${REGKEY}" InstallerLanguage
+ DeleteRegKey /IfEmpty HKCU "${REGKEY}"
+
+ RmDir $INSTDIR ; will only remove if empty (pass /r flag for recursive behavior)
+ Push $R0
+ StrCpy $R0 $StartMenuGroup 1
+ StrCmp $R0 ">" no_smgroup
+no_smgroup:
+ Pop $R0
+SectionEnd
+
+# Uninstaller functions
+Function un.onInit
+ !insertmacro MUI_UNGETLANGUAGE
+ ReadRegStr $INSTDIR HKCU "${REGKEY}" InstallPath
+ !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup
+FunctionEnd
diff --git a/ports.mk b/ports.mk
index 9e2681fe9e..06ca61fa19 100644
--- a/ports.mk
+++ b/ports.mk
@@ -182,7 +182,20 @@ endif
cp /usr/local/bin/SDL.dll $(WIN32PATH)
cp $(srcdir)/icons/scummvm.ico $(WIN32PATH)
cp $(srcdir)/dists/win32/ScummVM.iss $(WIN32PATH)
- u2d $(WIN32PATH)/*.txt
+ unix2dos $(WIN32PATH)/*.txt
+
+# Special target to create a win32 installer
+# (extensions for text files are removed, as they are read
+# as-is by the setup script and renamed there)
+win32setup: win32dist
+ mv $(WIN32PATH)/AUTHORS.txt $(WIN32PATH)/AUTHORS
+ mv $(WIN32PATH)/COPYING.txt $(WIN32PATH)/COPYING
+ mv $(WIN32PATH)/COPYING.LGPL.txt $(WIN32PATH)/COPYING.LGPL
+ mv $(WIN32PATH)/COPYRIGHT.txt $(WIN32PATH)/COPYRIGHT
+ mv $(WIN32PATH)/NEWS.txt $(WIN32PATH)/NEWS
+ mv $(WIN32PATH)/README.txt $(WIN32PATH)/README
+ mv $(WIN32PATH)/README-SDL.txt $(WIN32PATH)/README-SDL
+ makensis -V2 -Dtop_srcdir="../../$(srcdir)" -Dtext_dir="../../$(WIN32PATH)" -Dbuild_dir="../../$(WIN32PATH)" $(srcdir)/dists/nsis/scummvm.nsi
#
# AmigaOS specific