1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/tools/fetchdlls/fetchdlls.sln Sat May 24 06:48:35 2008 +0000
1.3 @@ -0,0 +1,20 @@
1.4 +
1.5 +Microsoft Visual Studio Solution File, Format Version 10.00
1.6 +# Visual Studio 2008
1.7 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fetchdlls", "fetchdlls.vcproj", "{3C1C562B-1080-445F-A632-EA9EC9793389}"
1.8 +EndProject
1.9 +Global
1.10 + GlobalSection(SolutionConfigurationPlatforms) = preSolution
1.11 + Debug|Win32 = Debug|Win32
1.12 + Release|Win32 = Release|Win32
1.13 + EndGlobalSection
1.14 + GlobalSection(ProjectConfigurationPlatforms) = postSolution
1.15 + {3C1C562B-1080-445F-A632-EA9EC9793389}.Debug|Win32.ActiveCfg = Debug|Win32
1.16 + {3C1C562B-1080-445F-A632-EA9EC9793389}.Debug|Win32.Build.0 = Debug|Win32
1.17 + {3C1C562B-1080-445F-A632-EA9EC9793389}.Release|Win32.ActiveCfg = Release|Win32
1.18 + {3C1C562B-1080-445F-A632-EA9EC9793389}.Release|Win32.Build.0 = Release|Win32
1.19 + EndGlobalSection
1.20 + GlobalSection(SolutionProperties) = preSolution
1.21 + HideSolutionNode = FALSE
1.22 + EndGlobalSection
1.23 +EndGlobal
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/tools/fetchdlls/fetchdlls.vcproj Sat May 24 06:48:35 2008 +0000
2.3 @@ -0,0 +1,196 @@
2.4 +<?xml version="1.0" encoding="Windows-1252"?>
2.5 +<VisualStudioProject
2.6 + ProjectType="Visual C++"
2.7 + Version="9.00"
2.8 + Name="fetchdlls"
2.9 + ProjectGUID="{3C1C562B-1080-445F-A632-EA9EC9793389}"
2.10 + RootNamespace="fetchdlls"
2.11 + Keyword="Win32Proj"
2.12 + TargetFrameworkVersion="196613"
2.13 + >
2.14 + <Platforms>
2.15 + <Platform
2.16 + Name="Win32"
2.17 + />
2.18 + </Platforms>
2.19 + <ToolFiles>
2.20 + </ToolFiles>
2.21 + <Configurations>
2.22 + <Configuration
2.23 + Name="Debug|Win32"
2.24 + OutputDirectory="$(SolutionDir)$(ConfigurationName)"
2.25 + IntermediateDirectory="$(ConfigurationName)"
2.26 + ConfigurationType="1"
2.27 + UseOfATL="0"
2.28 + CharacterSet="2"
2.29 + >
2.30 + <Tool
2.31 + Name="VCPreBuildEventTool"
2.32 + />
2.33 + <Tool
2.34 + Name="VCCustomBuildTool"
2.35 + />
2.36 + <Tool
2.37 + Name="VCXMLDataGeneratorTool"
2.38 + />
2.39 + <Tool
2.40 + Name="VCWebServiceProxyGeneratorTool"
2.41 + />
2.42 + <Tool
2.43 + Name="VCMIDLTool"
2.44 + />
2.45 + <Tool
2.46 + Name="VCCLCompilerTool"
2.47 + Optimization="0"
2.48 + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
2.49 + MinimalRebuild="true"
2.50 + BasicRuntimeChecks="3"
2.51 + RuntimeLibrary="3"
2.52 + UsePrecompiledHeader="0"
2.53 + WarningLevel="3"
2.54 + DebugInformationFormat="4"
2.55 + />
2.56 + <Tool
2.57 + Name="VCManagedResourceCompilerTool"
2.58 + />
2.59 + <Tool
2.60 + Name="VCResourceCompilerTool"
2.61 + />
2.62 + <Tool
2.63 + Name="VCPreLinkEventTool"
2.64 + />
2.65 + <Tool
2.66 + Name="VCLinkerTool"
2.67 + AdditionalDependencies="dbghelp.lib"
2.68 + LinkIncremental="2"
2.69 + GenerateDebugInformation="true"
2.70 + SubSystem="1"
2.71 + TargetMachine="1"
2.72 + />
2.73 + <Tool
2.74 + Name="VCALinkTool"
2.75 + />
2.76 + <Tool
2.77 + Name="VCManifestTool"
2.78 + />
2.79 + <Tool
2.80 + Name="VCXDCMakeTool"
2.81 + />
2.82 + <Tool
2.83 + Name="VCBscMakeTool"
2.84 + />
2.85 + <Tool
2.86 + Name="VCFxCopTool"
2.87 + />
2.88 + <Tool
2.89 + Name="VCAppVerifierTool"
2.90 + />
2.91 + <Tool
2.92 + Name="VCPostBuildEventTool"
2.93 + />
2.94 + </Configuration>
2.95 + <Configuration
2.96 + Name="Release|Win32"
2.97 + OutputDirectory="$(SolutionDir)$(ConfigurationName)"
2.98 + IntermediateDirectory="$(ConfigurationName)"
2.99 + ConfigurationType="1"
2.100 + CharacterSet="2"
2.101 + WholeProgramOptimization="1"
2.102 + >
2.103 + <Tool
2.104 + Name="VCPreBuildEventTool"
2.105 + />
2.106 + <Tool
2.107 + Name="VCCustomBuildTool"
2.108 + />
2.109 + <Tool
2.110 + Name="VCXMLDataGeneratorTool"
2.111 + />
2.112 + <Tool
2.113 + Name="VCWebServiceProxyGeneratorTool"
2.114 + />
2.115 + <Tool
2.116 + Name="VCMIDLTool"
2.117 + />
2.118 + <Tool
2.119 + Name="VCCLCompilerTool"
2.120 + Optimization="2"
2.121 + EnableIntrinsicFunctions="true"
2.122 + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
2.123 + RuntimeLibrary="2"
2.124 + EnableFunctionLevelLinking="true"
2.125 + UsePrecompiledHeader="0"
2.126 + WarningLevel="3"
2.127 + DebugInformationFormat="3"
2.128 + />
2.129 + <Tool
2.130 + Name="VCManagedResourceCompilerTool"
2.131 + />
2.132 + <Tool
2.133 + Name="VCResourceCompilerTool"
2.134 + />
2.135 + <Tool
2.136 + Name="VCPreLinkEventTool"
2.137 + />
2.138 + <Tool
2.139 + Name="VCLinkerTool"
2.140 + AdditionalDependencies="dbghelp.lib"
2.141 + LinkIncremental="1"
2.142 + GenerateDebugInformation="true"
2.143 + SubSystem="1"
2.144 + OptimizeReferences="2"
2.145 + EnableCOMDATFolding="2"
2.146 + TargetMachine="1"
2.147 + />
2.148 + <Tool
2.149 + Name="VCALinkTool"
2.150 + />
2.151 + <Tool
2.152 + Name="VCManifestTool"
2.153 + />
2.154 + <Tool
2.155 + Name="VCXDCMakeTool"
2.156 + />
2.157 + <Tool
2.158 + Name="VCBscMakeTool"
2.159 + />
2.160 + <Tool
2.161 + Name="VCFxCopTool"
2.162 + />
2.163 + <Tool
2.164 + Name="VCAppVerifierTool"
2.165 + />
2.166 + <Tool
2.167 + Name="VCPostBuildEventTool"
2.168 + />
2.169 + </Configuration>
2.170 + </Configurations>
2.171 + <References>
2.172 + </References>
2.173 + <Files>
2.174 + <Filter
2.175 + Name="Source Files"
2.176 + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
2.177 + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
2.178 + >
2.179 + <File
2.180 + RelativePath=".\main.cpp"
2.181 + >
2.182 + </File>
2.183 + </Filter>
2.184 + <Filter
2.185 + Name="Header Files"
2.186 + Filter="h;hpp;hxx;hm;inl;inc;xsd"
2.187 + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
2.188 + >
2.189 + </Filter>
2.190 + <Filter
2.191 + Name="Resource Files"
2.192 + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
2.193 + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
2.194 + >
2.195 + </Filter>
2.196 + </Files>
2.197 + <Globals>
2.198 + </Globals>
2.199 +</VisualStudioProject>
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/tools/fetchdlls/main.cpp Sat May 24 06:48:35 2008 +0000
3.3 @@ -0,0 +1,192 @@
3.4 +#include <stdio.h>
3.5 +#include <windows.h>
3.6 +#include <DbgHelp.h>
3.7 +
3.8 +void mdmp_string(void *mdmp, RVA addr, char *buffer, size_t maxlength)
3.9 +{
3.10 + int len;
3.11 + MINIDUMP_STRING *str;
3.12 +
3.13 + str = (MINIDUMP_STRING *)((char *)mdmp + addr);
3.14 + len = WideCharToMultiByte(CP_UTF8,
3.15 + 0,
3.16 + str->Buffer,
3.17 + str->Length / sizeof(WCHAR),
3.18 + buffer,
3.19 + maxlength,
3.20 + NULL,
3.21 + NULL);
3.22 + buffer[len] = '\0';
3.23 +}
3.24 +
3.25 +int find_revision(const char *version, MINIDUMP_MODULE *module, const char *name)
3.26 +{
3.27 + FILE *fp;
3.28 + char msg[255];
3.29 + size_t i, len;
3.30 + char path[255];
3.31 + char buffer[3000];
3.32 + int last_revision;
3.33 +
3.34 + len = _snprintf(path, sizeof(path), "%s", name);
3.35 + for (i = 0; i < len; i++)
3.36 + {
3.37 + if (path[i] == '\\')
3.38 + {
3.39 + path[i] = '/';
3.40 + }
3.41 + }
3.42 +
3.43 + DeleteFile("_svnlog.txt");
3.44 + _snprintf(buffer,
3.45 + sizeof(buffer),
3.46 + "svn log svn://svn.alliedmods.net/svnroot/Packages/sourcemod/sourcemod-%d.%d/windows/base/addons/sourcemod/%s > _svnlog.txt",
3.47 + (module->VersionInfo.dwFileVersionMS >> 16),
3.48 + (module->VersionInfo.dwFileVersionMS & 0xFFFF),
3.49 + path);
3.50 + system(buffer);
3.51 +
3.52 + if ((fp = fopen("_svnlog.txt", "rt")) == NULL)
3.53 + {
3.54 + return -1;
3.55 + }
3.56 +
3.57 + _snprintf(msg,
3.58 + sizeof(msg),
3.59 + "sourcemod-%s",
3.60 + version);
3.61 +
3.62 + while (fgets(buffer, sizeof(buffer), fp) != NULL)
3.63 + {
3.64 + if (buffer[0] == 'r')
3.65 + {
3.66 + last_revision = atoi(&buffer[1]);
3.67 + }
3.68 + else if (strstr(buffer, msg) != NULL)
3.69 + {
3.70 + fclose(fp);
3.71 +
3.72 + _snprintf(buffer,
3.73 + sizeof(buffer),
3.74 + "svn export -q -r %d svn://svn.alliedmods.net/svnroot/Packages/sourcemod/sourcemod-%d.%d/windows/base/addons/sourcemod/%s",
3.75 + last_revision,
3.76 + (module->VersionInfo.dwFileVersionMS >> 16),
3.77 + (module->VersionInfo.dwFileVersionMS & 0xFFFF),
3.78 + path);
3.79 + system(buffer);
3.80 +
3.81 + return last_revision;
3.82 + }
3.83 + }
3.84 +
3.85 + fclose(fp);
3.86 +
3.87 + return -1;
3.88 +}
3.89 +
3.90 +int main(int argc, char **argv)
3.91 +{
3.92 + int rev;
3.93 + ULONG32 m;
3.94 + LPVOID mdmp;
3.95 + HANDLE hFile;
3.96 + const char *name;
3.97 + ULONG stream_size;
3.98 + char name_buf[255];
3.99 + HANDLE hFileMapping;
3.100 + MINIDUMP_MODULE *module;
3.101 + MINIDUMP_DIRECTORY *dir;
3.102 + MINIDUMP_MODULE_LIST *modules;
3.103 +
3.104 + if (argc < 3)
3.105 + {
3.106 + fprintf(stderr, "Usage: <build> <mdmp>\n");
3.107 + exit(-1);
3.108 + }
3.109 +
3.110 + if ((hFile = CreateFile(argv[2],
3.111 + GENERIC_READ,
3.112 + FILE_SHARE_READ,
3.113 + NULL,
3.114 + OPEN_EXISTING,
3.115 + FILE_ATTRIBUTE_NORMAL,
3.116 + NULL))
3.117 + == INVALID_HANDLE_VALUE)
3.118 + {
3.119 + fprintf(stderr, "Could not open file (error %d)\n", GetLastError());
3.120 + exit(-1);
3.121 + }
3.122 +
3.123 + hFileMapping = CreateFileMapping(
3.124 + hFile,
3.125 + NULL,
3.126 + PAGE_READONLY,
3.127 + 0,
3.128 + 0,
3.129 + NULL);
3.130 + if (hFileMapping == NULL)
3.131 + {
3.132 + fprintf(stderr, "Could not open file mapping (error %d)\n", GetLastError());
3.133 + CloseHandle(hFile);
3.134 + exit(-1);
3.135 + }
3.136 +
3.137 + mdmp = MapViewOfFile(hFileMapping,
3.138 + FILE_MAP_READ,
3.139 + 0,
3.140 + 0,
3.141 + 0);
3.142 + if (mdmp == NULL)
3.143 + {
3.144 + fprintf(stderr, "Could not create map view (error %d)\n", GetLastError());
3.145 + CloseHandle(hFileMapping);
3.146 + CloseHandle(hFile);
3.147 + exit(-1);
3.148 + }
3.149 +
3.150 + if (!MiniDumpReadDumpStream(mdmp,
3.151 + ModuleListStream,
3.152 + &dir,
3.153 + (void **)&modules,
3.154 + &stream_size))
3.155 + {
3.156 + fprintf(stderr, "Could not read the module list stream.\n");
3.157 + UnmapViewOfFile(mdmp);
3.158 + CloseHandle(hFileMapping);
3.159 + CloseHandle(hFile);
3.160 + }
3.161 +
3.162 + for (m = 0; m < modules->NumberOfModules; m++)
3.163 + {
3.164 + module = &modules->Modules[m];
3.165 +
3.166 + mdmp_string(mdmp, module->ModuleNameRva, name_buf, sizeof(name_buf));
3.167 +
3.168 + if ((name = strstr(name_buf, "sourcemod\\")) != NULL)
3.169 + {
3.170 + name += 10;
3.171 + fprintf(stdout,
3.172 + "looking for: %s (%d.%d.%d.%d of build %s)... ",
3.173 + name,
3.174 + (module->VersionInfo.dwFileVersionMS >> 16),
3.175 + (module->VersionInfo.dwFileVersionMS & 0xFFFF),
3.176 + (module->VersionInfo.dwFileVersionLS >> 16),
3.177 + (module->VersionInfo.dwFileVersionLS & 0xFFFF),
3.178 + argv[1]
3.179 + );
3.180 + fflush(stdout);
3.181 + if ((rev = find_revision(argv[1], module, name)) == -1)
3.182 + {
3.183 + fprintf(stdout, "not found :(\n");
3.184 + continue;
3.185 + }
3.186 + fprintf(stdout, "downloaded! (pkgrev %d)\n", rev);
3.187 + }
3.188 + }
3.189 +
3.190 + UnmapViewOfFile(mdmp);
3.191 + CloseHandle(hFileMapping);
3.192 + CloseHandle(hFile);
3.193 +
3.194 + return 0;
3.195 +}