diff options
author | rubidium <rubidium@openttd.org> | 2007-09-12 07:11:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-09-12 07:11:48 +0000 |
commit | e9924421bf53275ccdcf7d9ecd15e584dee6ad35 (patch) | |
tree | 2a8a491bac20ead349d11179cf161aaf43c0cb74 | |
parent | ccf13f3cccf6216393b2f6c893146ece86c078d0 (diff) | |
download | openttd-e9924421bf53275ccdcf7d9ecd15e584dee6ad35.tar.xz |
(svn r11089) -Codechange: add revision detection to MSVC.
-rw-r--r-- | Makefile.src.in | 26 | ||||
-rw-r--r-- | config.lib | 2 | ||||
-rw-r--r-- | projects/determineversion.vbs | 129 | ||||
-rw-r--r-- | projects/openttd.vcproj | 11 | ||||
-rw-r--r-- | projects/openttd.vcproj.in | 8 | ||||
-rw-r--r-- | projects/openttd_vs80.vcproj | 12 | ||||
-rw-r--r-- | projects/openttd_vs80.vcproj.in | 8 | ||||
-rw-r--r-- | source.list | 1 | ||||
-rw-r--r-- | src/network/network.cpp | 12 | ||||
-rw-r--r-- | src/network/network.h | 2 | ||||
-rw-r--r-- | src/ottdres.rc.in (renamed from src/ottdres.rc) | 4 | ||||
-rw-r--r-- | src/rev.cpp.in | 4 |
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 |