aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLittleboy2011-04-24 12:34:57 -0400
committerLittleboy2011-04-24 16:59:46 -0400
commit11b907ebf45f5a0707c2748b8f7413b2910976a8 (patch)
treea85b869ce6eb2495001f75a0c6cd198d0e2ed842
parent4f708b021269c67da42177df8170a86d073c6e49 (diff)
downloadscummvm-rg350-11b907ebf45f5a0707c2748b8f7413b2910976a8.tar.gz
scummvm-rg350-11b907ebf45f5a0707c2748b8f7413b2910976a8.tar.bz2
scummvm-rg350-11b907ebf45f5a0707c2748b8f7413b2910976a8.zip
CREATE_PROJECT: Update revision number support (fixes bug #3280881)
Replace existing environment variable based revision number support by a file-based method - Generate a special header file in the build output folder with the current revision number - Include the new header file from internal_version.h when a specific define is set - Update create_project to define SCUMMVM_INTERNAL_REVISION as needed and add the build output folder to the include path - Remove support for git-svn clones in the revision script (not useful anymore after the switch to git)
-rw-r--r--base/internal_revision.h.in6
-rw-r--r--base/internal_version.h6
-rw-r--r--base/internal_version.h.in6
-rw-r--r--devtools/create_project/msbuild.cpp11
-rw-r--r--devtools/create_project/msbuild.h2
-rw-r--r--devtools/create_project/msvc.cpp6
-rw-r--r--devtools/create_project/msvc.h3
-rw-r--r--devtools/create_project/scripts/postbuild.cmd4
-rw-r--r--devtools/create_project/scripts/prebuild.cmd16
-rw-r--r--devtools/create_project/scripts/revision.vbs69
-rw-r--r--devtools/create_project/visualstudio.cpp8
-rw-r--r--devtools/create_project/visualstudio.h2
12 files changed, 86 insertions, 53 deletions
diff --git a/base/internal_revision.h.in b/base/internal_revision.h.in
new file mode 100644
index 0000000000..63f58a4b77
--- /dev/null
+++ b/base/internal_revision.h.in
@@ -0,0 +1,6 @@
+#ifndef SCUMMVM_INTERNAL_REVISION_H
+#define SCUMMVM_INTERNAL_REVISION_H
+
+#define SCUMMVM_REVISION "@REVISION@"
+
+#endif
diff --git a/base/internal_version.h b/base/internal_version.h
index fc7b5350f5..36cdcdeb39 100644
--- a/base/internal_version.h
+++ b/base/internal_version.h
@@ -2,6 +2,12 @@
#error This file may only be included by base/version.cpp
#endif
+// Reads revision number from file
+// (this is used when building with Visual Studio)
+#ifdef SCUMMVM_INTERNAL_REVISION
+#include "internal_revision.h"
+#endif
+
#ifdef RELEASE_BUILD
#undef SCUMMVM_REVISION
#endif
diff --git a/base/internal_version.h.in b/base/internal_version.h.in
index 5eb3c904ee..e2b46f54ce 100644
--- a/base/internal_version.h.in
+++ b/base/internal_version.h.in
@@ -2,6 +2,12 @@
#error This file may only be included by base/version.cpp
#endif
+// Reads revision number from file
+// (this is used when building with Visual Studio)
+#ifdef SCUMMVM_INTERNAL_REVISION
+#include "internal_revision.h"
+#endif
+
#ifdef RELEASE_BUILD
#undef SCUMMVM_REVISION
#endif
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp
index 070d7fea60..1198ff9a09 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
project << "\t</ItemDefinitionGroup>\n";
}
-void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix) {
+void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) {
std::string warnings;
for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i)
@@ -293,6 +293,10 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits,
for (StringList::const_iterator i = defines.begin(); i != defines.end(); ++i)
definesList += *i + ';';
+ // Add define to include revision header
+ if (runBuildEvents)
+ definesList += "SCUMMVM_INTERNAL_REVISION;";
+
properties << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"
"\t<PropertyGroup>\n"
@@ -308,7 +312,7 @@ void MSBuildProvider::outputGlobalPropFile(std::ofstream &properties, int bits,
"\t\t<ClCompile>\n"
"\t\t\t<DisableLanguageExtensions>true</DisableLanguageExtensions>\n"
"\t\t\t<DisableSpecificWarnings>" << warnings << ";%(DisableSpecificWarnings)</DisableSpecificWarnings>\n"
- "\t\t\t<AdditionalIncludeDirectories>$(SCUMMVM_LIBS)\\include;" << prefix << ";" << prefix << "\\engines;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n"
+ "\t\t\t<AdditionalIncludeDirectories>$(SCUMMVM_LIBS)\\include;" << prefix << ";" << prefix << "\\engines;$(TargetDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n"
"\t\t\t<PreprocessorDefinitions>" << definesList << "%(PreprocessorDefinitions)</PreprocessorDefinitions>\n"
"\t\t\t<ExceptionHandling></ExceptionHandling>\n"
"\t\t\t<RuntimeTypeInfo>false</RuntimeTypeInfo>\n"
@@ -436,9 +440,6 @@ void MSBuildProvider::writeFileListToProject(const FileNode &dir, std::ofstream
projectFile << "\t\t<ClCompile Include=\"" << (*entry).path << "\">\n"
"\t\t\t<ObjectFileName>$(IntDir)" << (*entry).prefix << "%(Filename).obj</ObjectFileName>\n";
- if (hasEnding((*entry).path, "base\\version.cpp"))
- projectFile << "\t\t\t<PreprocessorDefinitions Condition=\"'$(Configuration)'=='Debug'\">SCUMMVM_REVISION#&quot; $(SCUMMVM_REVISION_STRING)&quot;;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n";
-
projectFile << "\t\t</ClCompile>\n";
} else {
projectFile << "\t\t<ClCompile Include=\"" << (*entry).path << "\" />\n";
diff --git a/devtools/create_project/msbuild.h b/devtools/create_project/msbuild.h
index fa5311734b..cc545e4755 100644
--- a/devtools/create_project/msbuild.h
+++ b/devtools/create_project/msbuild.h
@@ -45,7 +45,7 @@ protected:
void writeReferences(std::ofstream &output);
- void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix);
+ void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents);
void createBuildProp(const BuildSetup &setup, bool isRelease, bool isWin32, bool enableAnalysis);
diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp
index e2fff59c46..ccdf4ac82b 100644
--- a/devtools/create_project/msvc.cpp
+++ b/devtools/create_project/msvc.cpp
@@ -124,7 +124,7 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) {
if (!properties)
error("Could not open \"" + setup.outputDir + '/' + "ScummVM_Global" + getPropertiesExtension() + "\" for writing");
- outputGlobalPropFile(properties, 32, setup.defines, convertPathToWin(setup.filePrefix));
+ outputGlobalPropFile(properties, 32, setup.defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
properties.close();
properties.open((setup.outputDir + '/' + "ScummVM_Global64" + getPropertiesExtension()).c_str());
@@ -143,7 +143,7 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) {
x64Defines.push_back("WIN32");
x64Defines.push_back("SDL_BACKEND");
- outputGlobalPropFile(properties, 64, x64Defines, convertPathToWin(setup.filePrefix));
+ outputGlobalPropFile(properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
}
std::string MSVCProvider::getPreBuildEvent() const {
@@ -152,7 +152,7 @@ std::string MSVCProvider::getPreBuildEvent() const {
cmdLine = "@echo off\n"
"echo Executing Pre-Build script...\n"
"echo.\n"
- "@call &quot;$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd&quot; &quot;$(SolutionDir)/../..&quot;\n"
+ "@call &quot;$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd&quot; &quot;$(SolutionDir)/../..&quot; &quot;$(TargetDir)&quot;\n"
"EXIT /B0";
return cmdLine;
diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h
index f41ecc3aba..b2f2a5d33f 100644
--- a/devtools/create_project/msvc.h
+++ b/devtools/create_project/msvc.h
@@ -59,8 +59,9 @@ protected:
* @param bits Number of bits the platform supports.
* @param defines Defines the platform needs to have set.
* @param prefix File prefix, used to add additional include paths.
+ * @param runBuildEvents true if generating a revision number, false otherwise
*/
- virtual void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix) = 0;
+ virtual void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) = 0;
/**
* Generates the project properties for debug and release settings.
diff --git a/devtools/create_project/scripts/postbuild.cmd b/devtools/create_project/scripts/postbuild.cmd
index 5c2bd8a1ad..f548b81442 100644
--- a/devtools/create_project/scripts/postbuild.cmd
+++ b/devtools/create_project/scripts/postbuild.cmd
@@ -12,7 +12,7 @@ REM Root folder
REM Output folder
REM Architecture
-if "%~1"=="" goto error_input
+if "%~1"=="" goto error_root
if "%~2"=="" goto error_output
if "%~3"=="" goto error_arch
@@ -29,7 +29,7 @@ xcopy /F /Y "%~1/gui/themes/translations.dat" %~2 > NUL 2>&1
xcopy /F /Y "%SCUMMVM_LIBS%/lib/%~3/SDL.dll" %~2 > NUL 2>&1
goto done
-:error_output
+:error_root
echo Invalid root folder (%~1)!
goto done
diff --git a/devtools/create_project/scripts/prebuild.cmd b/devtools/create_project/scripts/prebuild.cmd
index b824f0d5a0..dd4d12a851 100644
--- a/devtools/create_project/scripts/prebuild.cmd
+++ b/devtools/create_project/scripts/prebuild.cmd
@@ -4,22 +4,28 @@ REM ---------------------------------------------------------------
REM -- Pre-Build Script
REM ---------------------------------------------------------------
REM
-REM Generate file with proper revision number
+REM Generate file with revision number
REM
REM Expected parameters
-REM Root folder
+REM Root folder (the source root folder)
+REM Target folder (the build output folder, will be used to copy internal_revision.h)
-if "%~1"=="" goto error_input
+if "%~1"=="" goto error_root
+if "%~2"=="" goto error_target
REM Run the revision script
-@call cscript "%~1/devtools/create_project/scripts/revision.vbs" %~1 1>NUL
+@call cscript "%~1/devtools/create_project/scripts/revision.vbs" %~1 %~2 1>NUL
if not %errorlevel% == 0 goto error_script
goto done
-:error_output
+:error_root
echo Invalid root folder (%~1)!
goto done
+:error_target
+echo Invalid target folder (%~2)!
+goto done
+
:error_script:
echo An error occured while running the revision script!
diff --git a/devtools/create_project/scripts/revision.vbs b/devtools/create_project/scripts/revision.vbs
index 851185371b..9c29a88f2d 100644
--- a/devtools/create_project/scripts/revision.vbs
+++ b/devtools/create_project/scripts/revision.vbs
@@ -35,6 +35,7 @@ Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
' Folders
Dim rootFolder : rootFolder = ""
+Dim targetFolder : targetFolder = ""
' Info variables
Dim tool : tool = ""
@@ -85,23 +86,25 @@ Sub DetermineRevision()
Wscript.StdErr.WriteLine "Found revision " & revision & " on branch " & branch & vbCrLf
' Setup our revision string
- Dim revisionString : revisionString = "r" & revision
+ Dim revisionString : revisionString = revision
If (modified) Then
- revisionString = revisionString & " M"
+ revisionString = revisionString & "-dirty"
End If
' If we are not on trunk, add the branch name to the revision string
- If (branch <> "trunk" And branch <> "") Then
- revisionString = revisionString & " (" & branch & ")"
+ If (branch <> "trunk" And branch <> "master" And branch <> "") Then
+ revisionString = revisionString & "(" & branch & ")"
End If
- ' Add the DVCS name at the end
- revisionString = revisionString & " - " & tool
+ ' Add the DVCS name at the end (when not git)
+ If (tool <> "git") Then
+ revisionString = revisionString & "-" & tool
+ End If
- ' Setup an environment variable with the revision string
- Dim Env: Set Env = WshShell.Environment("User")
- Env.item("SCUMMVM_REVISION_STRING") = revisionString
+ ' Output revision header file
+ FSO.CopyFile rootFolder & "\\base\\internal_revision.h.in", targetFolder & "\\internal_revision.h"
+ FindReplaceInFile targetFolder & "\\internal_revision.h", "@REVISION@", revisionString
End Sub
Function DetermineTortoiseSVNVersion()
@@ -283,29 +286,9 @@ Function DetermineGitVersion()
End If
End If
- ' Check for svn clones
- Set oExec = WshShell.Exec(gitPath & "log --pretty=format:%s --grep=" & Chr(34) & "^(svn r[0-9]*)" & Chr(34) & " -1 " & rootFolder)
- if Err.Number = 0 Then
- revision = Mid(oExec.StdOut.ReadLine(), 7)
- revision = Mid(revision, 1, InStr(revision, ")") - 1)
- tool = "svn-git"
- End If
-
- ' No revision? Maybe it is a custom git-svn clone
- If revision = "" Then
- Err.Clear
- Set oExec = WshShell.Exec(gitPath & "log --pretty=format:%b --grep=" & Chr(34) & "git-svn-id:.*@[0-9]*" & Chr(34) & " -1 " & rootFolder)
- If Err.Number = 0 Then
- revision = oExec.StdOut.ReadLine()
- revision = Mid(revision, InStr(revision, "@") + 1)
- revision = Mid(revision, 1, InStr(revision, " ") - 1)
- tool = "svn-git"
- End If
- End If
-
' Fallback to abbreviated revision number
If revision = "" Then
- revision = Mid(hash, 1, 8)
+ revision = Mid(hash, 1, 7)
End If
DetermineGitVersion = True
@@ -385,8 +368,8 @@ End Function
Function ParseCommandLine()
ParseCommandLine = True
- If Wscript.Arguments.Count <> 1 Then
- Wscript.StdErr.WriteLine "[Error] Invalid number of arguments (was: " & Wscript.Arguments.Count & ", expected: 1)"
+ If Wscript.Arguments.Count <> 2 Then
+ Wscript.StdErr.WriteLine "[Error] Invalid number of arguments (was: " & Wscript.Arguments.Count & ", expected: 2)"
ParseCommandLine = False
Exit Function
@@ -394,6 +377,7 @@ Function ParseCommandLine()
' Get our arguments
rootFolder = Wscript.Arguments.Item(0)
+ targetFolder = Wscript.Arguments.Item(1)
' Check that the folders are valid
If Not FSO.FolderExists(rootFolder) Then
@@ -403,8 +387,16 @@ Function ParseCommandLine()
Exit Function
End If
- ' Set absolute path
+ 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)
@@ -443,3 +435,14 @@ Function ReadRegistryKey(shive, subkey, valuename, architecture)
ReadRegistryKey = Outparams.SValue
End Function
+
+Sub FindReplaceInFile(filename, to_find, replacement)
+ Dim file, data
+ Set file = FSO.OpenTextFile(filename, 1, 0, 0)
+ data = file.ReadAll
+ file.Close
+ data = Replace(data, to_find, replacement)
+ Set file = FSO.CreateTextFile(filename, -1, 0)
+ file.Write data
+ file.Close
+End Sub
diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp
index 390d0fba1f..41693dcc3a 100644
--- a/devtools/create_project/visualstudio.cpp
+++ b/devtools/create_project/visualstudio.cpp
@@ -193,7 +193,7 @@ void VisualStudioProvider::writeReferences(std::ofstream &output) {
output << "\tEndProjectSection\n";
}
-void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix) {
+void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents) {
std::string warnings;
for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i)
warnings += *i + ';';
@@ -205,6 +205,10 @@ void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int b
definesList += *i;
}
+ // Add define to include revision header
+ if (runBuildEvents)
+ definesList += "SCUMMVM_INTERNAL_REVISION;";
+
properties << "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n"
"<VisualStudioPropertySheet\n"
"\tProjectType=\"Visual C++\"\n"
@@ -217,7 +221,7 @@ void VisualStudioProvider::outputGlobalPropFile(std::ofstream &properties, int b
"\t\tName=\"VCCLCompilerTool\"\n"
"\t\tDisableLanguageExtensions=\"true\"\n"
"\t\tDisableSpecificWarnings=\"" << warnings << "\"\n"
- "\t\tAdditionalIncludeDirectories=\"" << prefix << ";" << prefix << "\\engines;$(SCUMMVM_LIBS)\\include\"\n"
+ "\t\tAdditionalIncludeDirectories=\"" << prefix << ";" << prefix << "\\engines;$(SCUMMVM_LIBS)\\include;$(TargetDir)\"\n"
"\t\tPreprocessorDefinitions=\"" << definesList << "\"\n"
"\t\tExceptionHandling=\"0\"\n"
"\t\tRuntimeTypeInfo=\"false\"\n"
diff --git a/devtools/create_project/visualstudio.h b/devtools/create_project/visualstudio.h
index 0cf572429b..a1d5c76b01 100644
--- a/devtools/create_project/visualstudio.h
+++ b/devtools/create_project/visualstudio.h
@@ -43,7 +43,7 @@ protected:
void writeReferences(std::ofstream &output);
- void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix);
+ void outputGlobalPropFile(std::ofstream &properties, int bits, const StringList &defines, const std::string &prefix, bool runBuildEvents);
void createBuildProp(const BuildSetup &setup, bool isRelease, bool isWin32, bool enableAnalysis);