(svn r11089) -Codechange: add revision detection to MSVC.

This commit is contained in:
rubidium 2007-09-12 07:11:48 +00:00
parent 7b7c66fb6b
commit 9e7931f6ea
12 changed files with 182 additions and 37 deletions

View File

@ -249,15 +249,15 @@ $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP)
$(BIN_DIR)/$(TTD): $(TTD) $(BIN_DIR)/$(TTD): $(TTD)
$(Q)cp $< $@ $(Q)cp $< $@
$(TTD): rev.o $(OBJS) $(CONFIG_CACHE_LINKER) $(TTD): $(OBJS) $(CONFIG_CACHE_LINKER)
$(E) '$(STAGE) Linking $@' $(E) '$(STAGE) Linking $@'
ifeq ($(OS), PSP) ifeq ($(OS), PSP)
# Because of a bug in the PSP GCC tools, linking via CXX results # Because of a bug in the PSP GCC tools, linking via CXX results
# in total chaos and more problems then you can handle. So we need # in total chaos and more problems then you can handle. So we need
# CC to link OpenTTD for PSP # CC to link OpenTTD for PSP
$(Q)$(CC_HOST) $(LDFLAGS) rev.o $(OBJS) $(LIBS) -o $@ $(Q)$(CC_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
else else
$(Q)$(CXX_HOST) $(LDFLAGS) rev.o $(OBJS) $(LIBS) -o $@ $(Q)$(CXX_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
endif endif
ifdef STRIP ifdef STRIP
$(Q)$(STRIP) $@ $(Q)$(STRIP) $@
@ -275,19 +275,11 @@ $(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
# Revision files # Revision files
rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
# setting the revision number in a place, there the binary can read it $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s#@@VERSION@@#$(REV)#g;s#@@DATE@@#`date +%d.%m.%y`#g" > $(SRC_DIR)/rev.cpp
@echo 'extern const char _openttd_revision[] = "$(REV)";' > rev.cpp
# Some additions for MorphOS versions tag
ifeq ($(OS),MORPHOS)
@echo '#ifdef __MORPHOS__' >> rev.cpp
@echo 'extern const char morphos_versions_tag[] = "\\0$$VER: OpenTTD $(REV) ('`date +%d.%m.%y`') (C) OpenTTD Team [MorphOS, PowerPC]";' >> rev.cpp
@echo '#endif' >> rev.cpp
endif
rev.o: rev.cpp $(FILE_DEP) $(SRC_DIR)/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/ottdres.rc.in
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(Q)cat $(SRC_DIR)/ottdres.rc.in | sed "s#@@VERSION@@#$(REV)#g;s#@@DATE@@#`date +%d.%m.%y`#g" > $(SRC_DIR)/ottdres.rc
$(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $<
FORCE: FORCE:
@ -295,10 +287,10 @@ depend: $(DEPS)
clean: clean:
$(E) '$(STAGE) Cleaning up object files' $(E) '$(STAGE) Cleaning up object files'
$(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS) rev.o rev.cpp $(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS)
mrproper: clean mrproper: clean
$(Q)rm -f rev.cpp $(Q)rm -f $(SRC_DIR)/rev.cpp $(SRC_DIR)/ottdres.rc
%.o: %.o:
@echo '$(STAGE) No such source-file: $(@:%.o=%).[c|cpp|mm|rc]' @echo '$(STAGE) No such source-file: $(@:%.o=%).[c|cpp|mm|rc]'

View File

@ -745,7 +745,7 @@ make_cflags_and_ldflags() {
# General CFlags for BUILD # General CFlags for BUILD
CFLAGS_BUILD="" CFLAGS_BUILD=""
# General CFlags for HOST # General CFlags for HOST
CFLAGS="$CFLAGS -D$os -DWITH_REV" CFLAGS="$CFLAGS -D$os"
# CFlags for HOST and C-Compiler # CFlags for HOST and C-Compiler
CC_FLAGS="" CC_FLAGS=""
# Libs to compile. In fact this is just LDFLAGS # Libs to compile. In fact this is just LDFLAGS

View File

@ -0,0 +1,129 @@
Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
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
Sub UpdateFile(version, cur_date, filename)
FSO.CopyFile filename & ".in", filename
FindReplaceInFile filename, "@@VERSION@@", version
FindReplaceInFile filename, "@@DATE@@", cur_date
End Sub
Sub UpdateFiles(version)
Dim cur_date
cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date)
UpdateFile version, cur_date, "../src/rev.cpp"
UpdateFile version, cur_date, "../src/ottdres.rc"
End Sub
Function DetermineSVNVersion()
Dim WshShell, version, url, oExec
Set WshShell = CreateObject("WScript.Shell")
On Error Resume Next
' Try TortoiseSVN
' Get the directory where TortoiseSVN (should) reside(s)
Dim sTortoise
sTortoise = WshShell.RegRead("HKLM\SOFTWARE\TortoiseSVN\Directory")
Dim file
' Write some "magic" to a temporary file so we can acquire the svn revision/state
Set file = FSO.CreateTextFile("tsvn_tmp", -1, 0)
file.WriteLine "$WCREV$$WCMODS?M:$"
file.WriteLine "$WCURL$"
file.Close
Set oExec = WshShell.Exec(sTortoise & "\bin\SubWCRev.exe ../src tsvn_tmp tsvn_tmp")
' Wait till the application is finished ...
Do
OExec.StdOut.ReadLine()
Loop While Not OExec.StdOut.atEndOfStream
Set file = FSO.OpenTextFile("tsvn_tmp", 1, 0, 0)
version = file.ReadLine
url = file.ReadLine
file.Close
Set file = FSO.GetFile("tsvn_tmp")
file.Delete
' Looks like there is no TortoiseSVN installed either. Then we don't know it.
If InStr(version, "$") Then
' Reset error and version
Err.Clear
version = "norev000"
' Do we have subversion installed? Check immediatelly whether we've got a modified WC.
Set oExec = WshShell.Exec("svnversion ../src")
If Err.Number = 0 Then
Dim modified
If InStr(OExec.StdOut.ReadLine(), "M") Then
modified = "M"
Else
modified = ""
End If
' Set the environment to english
WshShell.Environment("PROCESS")("LANG") = "en"
' And use svn info to get the correct revision and branch information.
Set oExec = WshShell.Exec("svn info ../src")
If Err.Number = 0 Then
Dim line
Do
line = OExec.StdOut.ReadLine()
If InStr(line, "URL") Then
url = line
End If
If InStr(line, "Last Changed Rev") Then
version = Mid(line, 19) & modified
End If
Loop While Not OExec.StdOut.atEndOfStream
End If
End If
End If
If version <> "norev000" Then
If InStr(url, "branches") Then
url = Mid(url, InStr(url, "branches") + 8)
url = Mid(url, 1, InStr(2, url, "/") - 1)
version = version & Replace(url, "/", "-")
End If
End If
DetermineSVNVersion = version
End Function
Function IsCachedVersion(version)
Dim cache_file, cached_version
cached_version = ""
Set cache_file = FSO.OpenTextFile("../config.cache.version", 1, True, 0)
If Not cache_file.atEndOfStream Then
cached_version = cache_file.ReadLine()
End If
cache_file.Close
If version <> cached_version Then
Set cache_file = fso.CreateTextFile("../config.cache.version", True)
cache_file.WriteLine(version)
cache_file.Close
IsCachedVersion = False
Else
IsCachedVersion = True
End If
End Function
Dim version
version = DetermineSVNVersion
If Not (IsCachedVersion(version) And FSO.FileExists("../src/rev.cpp") And FSO.FileExists("../src/ottdres.rc")) Then
UpdateFiles version
End If

View File

@ -73,7 +73,9 @@
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"/>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"/>
<Tool <Tool
@ -135,7 +137,9 @@
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"/>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"/>
<Tool <Tool
@ -319,6 +323,9 @@
<File <File
RelativePath=".\..\src\rail.cpp"> RelativePath=".\..\src\rail.cpp">
</File> </File>
<File
RelativePath=".\..\src\rev.cpp">
</File>
<File <File
RelativePath=".\..\src\saveload.cpp"> RelativePath=".\..\src\saveload.cpp">
</File> </File>

View File

@ -73,7 +73,9 @@
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"/>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"/>
<Tool <Tool
@ -135,7 +137,9 @@
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"/>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"/>
<Tool <Tool

View File

@ -33,6 +33,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -144,6 +146,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -255,6 +259,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -350,6 +356,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -655,6 +663,10 @@
RelativePath=".\..\src\rail.cpp" RelativePath=".\..\src\rail.cpp"
> >
</File> </File>
<File
RelativePath=".\..\src\rev.cpp"
>
</File>
<File <File
RelativePath=".\..\src\saveload.cpp" RelativePath=".\..\src\saveload.cpp"
> >

View File

@ -33,6 +33,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -144,6 +146,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -255,6 +259,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -350,6 +356,8 @@
> >
<Tool <Tool
Name="VCPreBuildEventTool" Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="$(InputDir)/determineversion.vbs"
/> />
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"

View File

@ -57,6 +57,7 @@ pathfind.cpp
players.cpp players.cpp
queue.cpp queue.cpp
rail.cpp rail.cpp
rev.cpp
saveload.cpp saveload.cpp
screenshot.cpp screenshot.cpp
#if SDL #if SDL

View File

@ -3,15 +3,7 @@
#include "../stdafx.h" #include "../stdafx.h"
#include "network_data.h" #include "network_data.h"
#if defined(WITH_REV) extern const char _openttd_revision[];
extern const char _openttd_revision[];
#elif defined(WITH_REV_HACK)
#define WITH_REV
extern const char _openttd_revision[] = WITH_REV_HACK;
#else
extern const char _openttd_revision[] = NOREV_STRING;
#endif
#ifdef ENABLE_NETWORK #ifdef ENABLE_NETWORK
@ -1463,8 +1455,6 @@ void NetworkShutDown()
/** /**
* Checks whether the given version string is compatible with our version. * Checks whether the given version string is compatible with our version.
* It'll check the first NETWORK_REVISION_LENGTH - 1 characters (-1 for '\0')
* against the current version and the NOREV_STRING.
* @param other the version string to compare to * @param other the version string to compare to
*/ */
bool IsNetworkCompatibleVersion(const char *other) bool IsNetworkCompatibleVersion(const char *other)

View File

@ -3,8 +3,6 @@
#ifndef NETWORK_H #ifndef NETWORK_H
#define NETWORK_H #define NETWORK_H
#define NOREV_STRING "norev000"
#ifdef ENABLE_NETWORK #ifdef ENABLE_NETWORK
#include "../player.h" #include "../player.h"

View File

@ -84,14 +84,14 @@ BEGIN
VALUE "Comments", "This program is licensed under the GNU General Public License.\0" VALUE "Comments", "This program is licensed under the GNU General Public License.\0"
VALUE "CompanyName", "OpenTTD Development Team\0" VALUE "CompanyName", "OpenTTD Development Team\0"
VALUE "FileDescription", "OpenTTD\0" VALUE "FileDescription", "OpenTTD\0"
VALUE "FileVersion", "Development Version\0" VALUE "FileVersion", "Development @@VERSION@@\0"
VALUE "InternalName", "openttd\0" VALUE "InternalName", "openttd\0"
VALUE "LegalCopyright", "Copyright © OpenTTD Developers 2002-2007. All Rights Reserved.\0" VALUE "LegalCopyright", "Copyright © OpenTTD Developers 2002-2007. All Rights Reserved.\0"
VALUE "LegalTrademarks", "\0" VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "openttd.exe\0" VALUE "OriginalFilename", "openttd.exe\0"
VALUE "PrivateBuild", "\0" VALUE "PrivateBuild", "\0"
VALUE "ProductName", "OpenTTD\0" VALUE "ProductName", "OpenTTD\0"
VALUE "ProductVersion", "Development Version\0" VALUE "ProductVersion", "Development @@VERSION@@\0"
VALUE "SpecialBuild", "-\0" VALUE "SpecialBuild", "-\0"
END END
END END

4
src/rev.cpp.in Normal file
View File

@ -0,0 +1,4 @@
extern const char _openttd_revision[] = "@@VERSION@@";
#ifdef __MORPHOS__
extern const char morphos_versions_tag[] = "\\0$VER: OpenTTD @@VERSION@@ (@@DATE@@) OpenTTD Team [MorphOS, PowerPC]";
#endif