summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-09-12 07:11:48 +0000
committerrubidium <rubidium@openttd.org>2007-09-12 07:11:48 +0000
commit9e7931f6ea41eea7052e7f40cc841694feed252b (patch)
tree2a8a491bac20ead349d11179cf161aaf43c0cb74
parent7b7c66fb6b604e32dbcfb6104771b33fa6f32dc1 (diff)
downloadopenttd-9e7931f6ea41eea7052e7f40cc841694feed252b.tar.xz
(svn r11089) -Codechange: add revision detection to MSVC.
-rw-r--r--Makefile.src.in26
-rw-r--r--config.lib2
-rw-r--r--projects/determineversion.vbs129
-rw-r--r--projects/openttd.vcproj11
-rw-r--r--projects/openttd.vcproj.in8
-rw-r--r--projects/openttd_vs80.vcproj12
-rw-r--r--projects/openttd_vs80.vcproj.in8
-rw-r--r--source.list1
-rw-r--r--src/network/network.cpp12
-rw-r--r--src/network/network.h2
-rw-r--r--src/ottdres.rc.in (renamed from src/ottdres.rc)4
-rw-r--r--src/rev.cpp.in4
12 files changed, 182 insertions, 37 deletions
diff --git a/Makefile.src.in b/Makefile.src.in
index 2d3a5205c..7d2be57b3 100644
--- a/Makefile.src.in
+++ b/Makefile.src.in
@@ -249,15 +249,15 @@ $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP)
$(BIN_DIR)/$(TTD): $(TTD)
$(Q)cp $< $@
-$(TTD): rev.o $(OBJS) $(CONFIG_CACHE_LINKER)
+$(TTD): $(OBJS) $(CONFIG_CACHE_LINKER)
$(E) '$(STAGE) Linking $@'
ifeq ($(OS), PSP)
# 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
# CC to link OpenTTD for PSP
- $(Q)$(CC_HOST) $(LDFLAGS) rev.o $(OBJS) $(LIBS) -o $@
+ $(Q)$(CC_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
else
- $(Q)$(CXX_HOST) $(LDFLAGS) rev.o $(OBJS) $(LIBS) -o $@
+ $(Q)$(CXX_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
endif
ifdef STRIP
$(Q)$(STRIP) $@
@@ -275,19 +275,11 @@ $(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
# Revision files
-rev.cpp: $(CONFIG_CACHE_VERSION)
-# setting the revision number in a place, there the binary can read it
- @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
+$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
+ $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s#@@VERSION@@#$(REV)#g;s#@@DATE@@#`date +%d.%m.%y`#g" > $(SRC_DIR)/rev.cpp
-rev.o: rev.cpp $(FILE_DEP)
- $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
- $(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $<
+$(SRC_DIR)/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/ottdres.rc.in
+ $(Q)cat $(SRC_DIR)/ottdres.rc.in | sed "s#@@VERSION@@#$(REV)#g;s#@@DATE@@#`date +%d.%m.%y`#g" > $(SRC_DIR)/ottdres.rc
FORCE:
@@ -295,10 +287,10 @@ depend: $(DEPS)
clean:
$(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
- $(Q)rm -f rev.cpp
+ $(Q)rm -f $(SRC_DIR)/rev.cpp $(SRC_DIR)/ottdres.rc
%.o:
@echo '$(STAGE) No such source-file: $(@:%.o=%).[c|cpp|mm|rc]'
diff --git a/config.lib b/config.lib
index bd3fbdb9c..dff8be929 100644
--- a/config.lib
+++ b/config.lib
@@ -745,7 +745,7 @@ make_cflags_and_ldflags() {
# General CFlags for BUILD
CFLAGS_BUILD=""
# General CFlags for HOST
- CFLAGS="$CFLAGS -D$os -DWITH_REV"
+ CFLAGS="$CFLAGS -D$os"
# CFlags for HOST and C-Compiler
CC_FLAGS=""
# Libs to compile. In fact this is just LDFLAGS
diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs
new file mode 100644
index 000000000..fc1c31405
--- /dev/null
+++ b/projects/determineversion.vbs
@@ -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
diff --git a/projects/openttd.vcproj b/projects/openttd.vcproj
index bd6617768..fae3678b5 100644
--- a/projects/openttd.vcproj
+++ b/projects/openttd.vcproj
@@ -73,7 +73,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
@@ -135,7 +137,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
@@ -320,6 +324,9 @@
RelativePath=".\..\src\rail.cpp">
</File>
<File
+ RelativePath=".\..\src\rev.cpp">
+ </File>
+ <File
RelativePath=".\..\src\saveload.cpp">
</File>
<File
diff --git a/projects/openttd.vcproj.in b/projects/openttd.vcproj.in
index 0bf01c070..bf58713a0 100644
--- a/projects/openttd.vcproj.in
+++ b/projects/openttd.vcproj.in
@@ -73,7 +73,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
@@ -135,7 +137,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj
index c7128fd1e..e2a5414ba 100644
--- a/projects/openttd_vs80.vcproj
+++ b/projects/openttd_vs80.vcproj
@@ -33,6 +33,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
@@ -144,6 +146,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
@@ -255,6 +259,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
@@ -350,6 +356,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
@@ -656,6 +664,10 @@
>
</File>
<File
+ RelativePath=".\..\src\rev.cpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\saveload.cpp"
>
</File>
diff --git a/projects/openttd_vs80.vcproj.in b/projects/openttd_vs80.vcproj.in
index 83dab75d3..de8feb428 100644
--- a/projects/openttd_vs80.vcproj.in
+++ b/projects/openttd_vs80.vcproj.in
@@ -33,6 +33,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
@@ -144,6 +146,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
@@ -255,6 +259,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
@@ -350,6 +356,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine="$(InputDir)/determineversion.vbs"
/>
<Tool
Name="VCCustomBuildTool"
diff --git a/source.list b/source.list
index c6d6c02d2..40c077610 100644
--- a/source.list
+++ b/source.list
@@ -57,6 +57,7 @@ pathfind.cpp
players.cpp
queue.cpp
rail.cpp
+rev.cpp
saveload.cpp
screenshot.cpp
#if SDL
diff --git a/src/network/network.cpp b/src/network/network.cpp
index 0752b0fd8..828fc3ee0 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -3,15 +3,7 @@
#include "../stdafx.h"
#include "network_data.h"
-#if defined(WITH_REV)
- 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
-
+extern const char _openttd_revision[];
#ifdef ENABLE_NETWORK
@@ -1463,8 +1455,6 @@ void NetworkShutDown()
/**
* 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
*/
bool IsNetworkCompatibleVersion(const char *other)
diff --git a/src/network/network.h b/src/network/network.h
index 9907716ac..513c77539 100644
--- a/src/network/network.h
+++ b/src/network/network.h
@@ -3,8 +3,6 @@
#ifndef NETWORK_H
#define NETWORK_H
-#define NOREV_STRING "norev000"
-
#ifdef ENABLE_NETWORK
#include "../player.h"
diff --git a/src/ottdres.rc b/src/ottdres.rc.in
index efb6864f1..a75294fe1 100644
--- a/src/ottdres.rc
+++ b/src/ottdres.rc.in
@@ -84,14 +84,14 @@ BEGIN
VALUE "Comments", "This program is licensed under the GNU General Public License.\0"
VALUE "CompanyName", "OpenTTD Development Team\0"
VALUE "FileDescription", "OpenTTD\0"
- VALUE "FileVersion", "Development Version\0"
+ VALUE "FileVersion", "Development @@VERSION@@\0"
VALUE "InternalName", "openttd\0"
VALUE "LegalCopyright", "Copyright © OpenTTD Developers 2002-2007. All Rights Reserved.\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "openttd.exe\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "OpenTTD\0"
- VALUE "ProductVersion", "Development Version\0"
+ VALUE "ProductVersion", "Development @@VERSION@@\0"
VALUE "SpecialBuild", "-\0"
END
END
diff --git a/src/rev.cpp.in b/src/rev.cpp.in
new file mode 100644
index 000000000..badec3c0d
--- /dev/null
+++ b/src/rev.cpp.in
@@ -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