diff options
| -rw-r--r-- | base/internal_revision.h.in | 6 | ||||
| -rw-r--r-- | base/internal_version.h | 6 | ||||
| -rw-r--r-- | base/internal_version.h.in | 6 | ||||
| -rw-r--r-- | devtools/create_project/msbuild.cpp | 11 | ||||
| -rw-r--r-- | devtools/create_project/msbuild.h | 2 | ||||
| -rw-r--r-- | devtools/create_project/msvc.cpp | 6 | ||||
| -rw-r--r-- | devtools/create_project/msvc.h | 3 | ||||
| -rw-r--r-- | devtools/create_project/scripts/postbuild.cmd | 4 | ||||
| -rw-r--r-- | devtools/create_project/scripts/prebuild.cmd | 16 | ||||
| -rw-r--r-- | devtools/create_project/scripts/revision.vbs | 69 | ||||
| -rw-r--r-- | devtools/create_project/visualstudio.cpp | 8 | ||||
| -rw-r--r-- | devtools/create_project/visualstudio.h | 2 | 
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#" $(SCUMMVM_REVISION_STRING)";%(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 "$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd" "$(SolutionDir)/../.."\n" +			  "@call "$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd" "$(SolutionDir)/../.."  "$(TargetDir)"\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);  | 
