Merge remote-tracking branch 'dfhack/develop' into remote_reader
						commit
						5e95bd9cf2
					
				@ -0,0 +1,350 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "environments": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "environment": "msvc_2015_x86",
 | 
				
			||||||
 | 
					      "PATH": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\BIN\\amd64_x86;${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\BIN\\amd64;${env.ProgramFiles(x86)}\\Windows Kits\\10\\bin\\x86;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\bin\\x86;${env.PATH}",
 | 
				
			||||||
 | 
					      "VS140COMNTOOLS": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\Common7\\Tools\\",
 | 
				
			||||||
 | 
					      "VCINSTALLDIR": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\",
 | 
				
			||||||
 | 
					      "WindowsSdkDir": "${env.ProgramFiles(x86)}\\Windows Kits\\10\\",
 | 
				
			||||||
 | 
					      "UCRTVersion": "10.0.10240.0",
 | 
				
			||||||
 | 
					      "UniversalCRTSdkDir": "${env.ProgramFiles(x86)}\\Windows Kits\\10\\",
 | 
				
			||||||
 | 
					      "LIB": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\LIB;${env.ProgramFiles(x86)}\\Windows Kits\\10\\lib\\10.0.10240.0\\ucrt\\x86;${env.ProgramFiles(x86)}\\Windows Kits\\10\\lib\\um\\x86;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\Lib\\winv6.3\\um\\x86",
 | 
				
			||||||
 | 
					      "INCLUDE": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\INCLUDE;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\10.0.10240.0\\ucrt;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\shared;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\um;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\winrt;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\Include\\um;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\Include\\shared",
 | 
				
			||||||
 | 
					      "LIBPATH": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\LIB"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "environment": "msvc_2015_x64",
 | 
				
			||||||
 | 
					      "PATH": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\BIN\\amd64;${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\BIN;${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\BIN\\1033;${env.ProgramFiles(x86)}\\Windows Kits\\bin\\x64;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\bin\\x64;${env.PATH}",
 | 
				
			||||||
 | 
					      "VS140COMNTOOLS": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\Common7\\Tools\\",
 | 
				
			||||||
 | 
					      "VCINSTALLDIR": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\",
 | 
				
			||||||
 | 
					      "WindowsSdkDir": "${env.ProgramFiles(x86)}\\Windows Kits\\10\\",
 | 
				
			||||||
 | 
					      "UCRTVersion": "10.0.10240.0",
 | 
				
			||||||
 | 
					      "UniversalCRTSdkDir": "${env.ProgramFiles(x86)}\\Windows Kits\\10\\",
 | 
				
			||||||
 | 
					      "LIB": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\LIB\\amd64;${env.ProgramFiles(x86)}\\Windows Kits\\10\\lib\\10.0.10240.0\\ucrt\\x64;${env.ProgramFiles(x86)}\\Windows Kits\\10\\lib\\um\\x64;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\Lib\\winv6.3\\um\\x64",
 | 
				
			||||||
 | 
					      "INCLUDE": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\INCLUDE;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\10.0.10240.0\\ucrt;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\shared;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\um;${env.ProgramFiles(x86)}\\Windows Kits\\10\\include\\winrt;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\Include\\um;${env.ProgramFiles(x86)}\\Windows Kits\\8.1\\Include\\shared",
 | 
				
			||||||
 | 
					      "LIBPATH": "${env.ProgramFiles(x86)}\\Microsoft Visual Studio 14.0\\VC\\LIB\\amd64"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "configurations": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "MSVC 32 Debug",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "RelWithDebInfo",
 | 
				
			||||||
 | 
					      "inheritEnvironments": [ "msvc_x86_x64", "msvc_2015_x86" ],
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "32"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "REMOVE_SYMBOLS_FROM_DF_STUBS",
 | 
				
			||||||
 | 
					          "value": "0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_INCLUDE_CORE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "MSVC 32 Release",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "Release",
 | 
				
			||||||
 | 
					      "inheritEnvironments": [ "msvc_x86_x64", "msvc_2015_x86" ],
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "32"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "MSVC 64 Debug",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "RelWithDebInfo",
 | 
				
			||||||
 | 
					      "inheritEnvironments": [ "msvc_x64_x64", "msvc_2015_x64" ],
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "64"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "REMOVE_SYMBOLS_FROM_DF_STUBS",
 | 
				
			||||||
 | 
					          "value": "0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_INCLUDE_CORE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "MSVC 64 Release",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "Release",
 | 
				
			||||||
 | 
					      "inheritEnvironments": [ "msvc_x64_x64", "msvc_2015_x64" ],
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "64"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 32 Debug",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/debug-32",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "RelWithDebInfo",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x86",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "32"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "REMOVE_SYMBOLS_FROM_DF_STUBS",
 | 
				
			||||||
 | 
					          "value": "0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_INCLUDE_CORE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 32 Release",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/release-32",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "Release",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x86",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "32"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 64 Debug",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/debug-64",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "RelWithDebInfo",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x64",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "64"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "REMOVE_SYMBOLS_FROM_DF_STUBS",
 | 
				
			||||||
 | 
					          "value": "0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_INCLUDE_CORE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 64 Release",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/release-64",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "Release",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x64",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "64"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 4.8 32 Debug",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/debug-32-48",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "RelWithDebInfo",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x86",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_C_COMPILER",
 | 
				
			||||||
 | 
					          "value": "gcc-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_CXX_COMPILER",
 | 
				
			||||||
 | 
					          "value": "g++-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "32"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "REMOVE_SYMBOLS_FROM_DF_STUBS",
 | 
				
			||||||
 | 
					          "value": "0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_INCLUDE_CORE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 4.8 32 Release",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/release-32-48",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "Release",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x86",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_C_COMPILER",
 | 
				
			||||||
 | 
					          "value": "gcc-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_CXX_COMPILER",
 | 
				
			||||||
 | 
					          "value": "g++-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "32"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 4.8 64 Debug",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/debug-64-48",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "RelWithDebInfo",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x64",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_C_COMPILER",
 | 
				
			||||||
 | 
					          "value": "gcc-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_CXX_COMPILER",
 | 
				
			||||||
 | 
					          "value": "g++-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "64"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "REMOVE_SYMBOLS_FROM_DF_STUBS",
 | 
				
			||||||
 | 
					          "value": "0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_INCLUDE_CORE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "name": "GCC 4.8 64 Release",
 | 
				
			||||||
 | 
					      "remoteMachineName": "${defaultRemoteMachineName}",
 | 
				
			||||||
 | 
					      "remoteCMakeListsRoot": "/tmp/dfhack-${workspaceHash}/src",
 | 
				
			||||||
 | 
					      "remoteBuildRoot": "/tmp/dfhack-${workspaceHash}/release-64-48",
 | 
				
			||||||
 | 
					      "rsyncCommandArgs": "--exclude=build --include=.git",
 | 
				
			||||||
 | 
					      "remoteCopySources": true,
 | 
				
			||||||
 | 
					      "cmakeExecutable": "$(which cmake)/..",
 | 
				
			||||||
 | 
					      "generator": "Ninja",
 | 
				
			||||||
 | 
					      "configurationType": "Release",
 | 
				
			||||||
 | 
					      "intelliSenseMode": "linux-gcc-x64",
 | 
				
			||||||
 | 
					      "variables": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_C_COMPILER",
 | 
				
			||||||
 | 
					          "value": "gcc-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "CMAKE_CXX_COMPILER",
 | 
				
			||||||
 | 
					          "value": "g++-4.8"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "DFHACK_BUILD_ARCH",
 | 
				
			||||||
 | 
					          "value": "64"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "BUILD_STONESENSE",
 | 
				
			||||||
 | 
					          "value": "1"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					git-describe.cmake
 | 
				
			||||||
@ -1,52 +0,0 @@
 | 
				
			|||||||
if(NOT EXISTS ${dfhack_SOURCE_DIR}/.git/index OR NOT EXISTS ${dfhack_SOURCE_DIR}/.git/modules/library/xml/index)
 | 
					 | 
				
			||||||
    MESSAGE(FATAL_ERROR "Could not find git index file(s)")
 | 
					 | 
				
			||||||
endif()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set(git_describe_tmp_h ${dfhack_SOURCE_DIR}/library/include/git-describe.tmp.h)
 | 
					 | 
				
			||||||
set(git_describe_h ${dfhack_SOURCE_DIR}/library/include/git-describe.h)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(EXISTS ${git_describe_tmp_h} AND
 | 
					 | 
				
			||||||
        NOT(${dfhack_SOURCE_DIR}/.git/index IS_NEWER_THAN ${git_describe_tmp_h}) AND
 | 
					 | 
				
			||||||
        NOT(${dfhack_SOURCE_DIR}/.git/modules/library/xml/index IS_NEWER_THAN ${git_describe_tmp_h}) AND
 | 
					 | 
				
			||||||
        NOT(${dfhack_SOURCE_DIR}/library/git-describe.cmake IS_NEWER_THAN ${git_describe_tmp_h}))
 | 
					 | 
				
			||||||
    return()
 | 
					 | 
				
			||||||
endif()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --long
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
					 | 
				
			||||||
    OUTPUT_VARIABLE DFHACK_GIT_DESCRIPTION)
 | 
					 | 
				
			||||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
					 | 
				
			||||||
    OUTPUT_VARIABLE DFHACK_GIT_COMMIT)
 | 
					 | 
				
			||||||
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --exact-match
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
					 | 
				
			||||||
    RESULT_VARIABLE DFHACK_GIT_TAGGED_RESULT
 | 
					 | 
				
			||||||
    OUTPUT_QUIET ERROR_QUIET)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Check library/xml for matching commits
 | 
					 | 
				
			||||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD:library/xml
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
					 | 
				
			||||||
    OUTPUT_VARIABLE DFHACK_GIT_XML_EXPECTED_COMMIT)
 | 
					 | 
				
			||||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}/library/xml"
 | 
					 | 
				
			||||||
    OUTPUT_VARIABLE DFHACK_GIT_XML_COMMIT)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
file(WRITE ${git_describe_tmp_h} "")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
macro(git_describe_definition var)
 | 
					 | 
				
			||||||
    string(STRIP "${${var}}" GIT_DEF_VALUE)
 | 
					 | 
				
			||||||
    file(APPEND ${git_describe_tmp_h} "#define ${var} \"${GIT_DEF_VALUE}\"\n")
 | 
					 | 
				
			||||||
endmacro()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
git_describe_definition(DFHACK_GIT_DESCRIPTION)
 | 
					 | 
				
			||||||
git_describe_definition(DFHACK_GIT_COMMIT)
 | 
					 | 
				
			||||||
git_describe_definition(DFHACK_GIT_XML_EXPECTED_COMMIT)
 | 
					 | 
				
			||||||
git_describe_definition(DFHACK_GIT_XML_COMMIT)
 | 
					 | 
				
			||||||
if(${DFHACK_GIT_TAGGED_RESULT} EQUAL 0)
 | 
					 | 
				
			||||||
    file(APPEND ${git_describe_tmp_h} "#define DFHACK_GIT_TAGGED\n")
 | 
					 | 
				
			||||||
endif()
 | 
					 | 
				
			||||||
if(${DFHACK_GIT_XML_COMMIT} STREQUAL ${DFHACK_GIT_XML_EXPECTED_COMMIT})
 | 
					 | 
				
			||||||
    file(APPEND ${git_describe_tmp_h} "#define DFHACK_GIT_XML_MATCH\n")
 | 
					 | 
				
			||||||
endif()
 | 
					 | 
				
			||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
 | 
					 | 
				
			||||||
    ${git_describe_tmp_h} ${git_describe_h})
 | 
					 | 
				
			||||||
@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					# Generated from git-describe.cmake.in
 | 
				
			||||||
 | 
					set(DFHACK_BUILD_ID "@DFHACK_BUILD_ID@")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --long
 | 
				
			||||||
 | 
					    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
				
			||||||
 | 
					    OUTPUT_VARIABLE DFHACK_GIT_DESCRIPTION
 | 
				
			||||||
 | 
					    OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
				
			||||||
 | 
					execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
 | 
				
			||||||
 | 
					    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
				
			||||||
 | 
					    OUTPUT_VARIABLE DFHACK_GIT_COMMIT
 | 
				
			||||||
 | 
					    OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
				
			||||||
 | 
					execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --exact-match
 | 
				
			||||||
 | 
					    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
				
			||||||
 | 
					    RESULT_VARIABLE DFHACK_GIT_TAGGED_RESULT
 | 
				
			||||||
 | 
					    OUTPUT_QUIET ERROR_QUIET)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Check library/xml for matching commits
 | 
				
			||||||
 | 
					execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD:library/xml
 | 
				
			||||||
 | 
					    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}"
 | 
				
			||||||
 | 
					    OUTPUT_VARIABLE DFHACK_GIT_XML_EXPECTED_COMMIT
 | 
				
			||||||
 | 
					    OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
				
			||||||
 | 
					execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
 | 
				
			||||||
 | 
					    WORKING_DIRECTORY "${dfhack_SOURCE_DIR}/library/xml"
 | 
				
			||||||
 | 
					    OUTPUT_VARIABLE DFHACK_GIT_XML_COMMIT
 | 
				
			||||||
 | 
					    OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(${DFHACK_GIT_TAGGED_RESULT} EQUAL 0)
 | 
				
			||||||
 | 
					    set(DFHACK_GIT_TAGGED TRUE)
 | 
				
			||||||
 | 
					else()
 | 
				
			||||||
 | 
					    set(DFHACK_GIT_TAGGED FALSE)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(${DFHACK_GIT_XML_COMMIT} STREQUAL ${DFHACK_GIT_XML_EXPECTED_COMMIT})
 | 
				
			||||||
 | 
					    set(DFHACK_GIT_XML_MATCH TRUE)
 | 
				
			||||||
 | 
					else()
 | 
				
			||||||
 | 
					    set(DFHACK_GIT_XML_MATCH FALSE)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_file(${dfhack_SOURCE_DIR}/library/include/git-describe.h.in ${dfhack_SOURCE_DIR}/library/include/git-describe.h)
 | 
				
			||||||
@ -1 +1 @@
 | 
				
			|||||||
git-describe.*
 | 
					git-describe.h
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					#cmakedefine DFHACK_GIT_DESCRIPTION "@DFHACK_GIT_DESCRIPTION@"
 | 
				
			||||||
 | 
					#cmakedefine DFHACK_GIT_COMMIT "@DFHACK_GIT_COMMIT@"
 | 
				
			||||||
 | 
					#cmakedefine DFHACK_GIT_XML_EXPECTED_COMMIT "@DFHACK_GIT_XML_EXPECTED_COMMIT@"
 | 
				
			||||||
 | 
					#cmakedefine DFHACK_GIT_XML_COMMIT "@DFHACK_GIT_XML_COMMIT@"
 | 
				
			||||||
 | 
					#define DFHACK_BUILD_ID "@DFHACK_BUILD_ID@"
 | 
				
			||||||
 | 
					#cmakedefine DFHACK_GIT_TAGGED
 | 
				
			||||||
 | 
					#cmakedefine DFHACK_GIT_XML_MATCH
 | 
				
			||||||
@ -1 +1 @@
 | 
				
			|||||||
Subproject commit 372993c58851153320f3390119cdd2d97caef9db
 | 
					Subproject commit 57928311390bb67fe0cd5deec14e2d4621b13a58
 | 
				
			||||||
@ -1,3 +0,0 @@
 | 
				
			|||||||
# You can add custom plugins here to avoid touching plugins/CMakeLists.txt,
 | 
					 | 
				
			||||||
# This can be useful if you've made modifications to that file and try to
 | 
					 | 
				
			||||||
# switch between branches that have also made modifications to it.
 | 
					 | 
				
			||||||
@ -1 +1 @@
 | 
				
			|||||||
Subproject commit 6849148e8694f5da415cd6920dd9094c352110de
 | 
					Subproject commit 66b39d888e5f2d4f5c194ece08ba62ac7f110478
 | 
				
			||||||
@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					function test.getCurViewscreen()
 | 
				
			||||||
 | 
					    local scr = dfhack.gui.getCurViewscreen()
 | 
				
			||||||
 | 
					    local scr2 = df.global.gview.view
 | 
				
			||||||
 | 
					    for i = 1, 100 do
 | 
				
			||||||
 | 
					        if scr2.child then
 | 
				
			||||||
 | 
					            scr2 = scr2.child
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    expect.eq(scr, scr2)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function test.getViewscreenByType()
 | 
				
			||||||
 | 
					    local scr = dfhack.gui.getCurViewscreen()
 | 
				
			||||||
 | 
					    local scr2 = dfhack.gui.getViewscreenByType(scr._type)
 | 
				
			||||||
 | 
					    expect.eq(scr, scr2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local bad_type = df.viewscreen_titlest
 | 
				
			||||||
 | 
					    if scr._type == bad_type then
 | 
				
			||||||
 | 
					        bad_type = df.viewscreen_optionst
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    local scr_bad = dfhack.gui.getViewscreenByType(bad_type)
 | 
				
			||||||
 | 
					    expect.eq(scr_bad, nil)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					local utils = require 'utils'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function test.OrderedTable()
 | 
				
			||||||
 | 
					    local t = utils.OrderedTable()
 | 
				
			||||||
 | 
					    local keys = {'a', 'c', 'e', 'd', 'b', 'q', 58, -1.2}
 | 
				
			||||||
 | 
					    for i = 1, #keys do
 | 
				
			||||||
 | 
					        t[keys[i]] = i
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    local i = 1
 | 
				
			||||||
 | 
					    for k, v in pairs(t) do
 | 
				
			||||||
 | 
					        expect.eq(k, keys[i], 'key order')
 | 
				
			||||||
 | 
					        expect.eq(v, i, 'correct value')
 | 
				
			||||||
 | 
					        i = i + 1
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@ -1,10 +1,172 @@
 | 
				
			|||||||
 | 
					local script = require 'gui.script'
 | 
				
			||||||
 | 
					local utils = require 'utils'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local args = {...}
 | 
				
			||||||
 | 
					local done_command = args[1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					expect = {}
 | 
				
			||||||
 | 
					function expect.true_(value, comment)
 | 
				
			||||||
 | 
					    return not not value, comment, 'expected true'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					function expect.false_(value, comment)
 | 
				
			||||||
 | 
					    return not value, comment, 'expected false'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					function expect.eq(a, b, comment)
 | 
				
			||||||
 | 
					    return a == b, comment, ('%s ~= %s'):format(a, b)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					function expect.ne(a, b, comment)
 | 
				
			||||||
 | 
					    return a ~= b, comment, ('%s == %s'):format(a, b)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					function expect.error(func, ...)
 | 
				
			||||||
 | 
					    local ok, ret = pcall(func, ...)
 | 
				
			||||||
 | 
					    if ok then
 | 
				
			||||||
 | 
					        return false, 'no error raised by function call'
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        return true
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function delay(frames)
 | 
				
			||||||
 | 
					    frames = frames or 1
 | 
				
			||||||
 | 
					    script.sleep(frames, 'frames')
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function build_test_env()
 | 
				
			||||||
 | 
					    local env = {
 | 
				
			||||||
 | 
					        test = utils.OrderedTable(),
 | 
				
			||||||
 | 
					        expect = {},
 | 
				
			||||||
 | 
					        delay = delay,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    local private = {
 | 
				
			||||||
 | 
					        checks = 0,
 | 
				
			||||||
 | 
					        checks_ok = 0,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for name, func in pairs(expect) do
 | 
				
			||||||
 | 
					        env.expect[name] = function(...)
 | 
				
			||||||
 | 
					            private.checks = private.checks + 1
 | 
				
			||||||
 | 
					            local ret = {func(...)}
 | 
				
			||||||
 | 
					            local ok = table.remove(ret, 1)
 | 
				
			||||||
 | 
					            local msg = ''
 | 
				
			||||||
 | 
					            for _, part in pairs(ret) do
 | 
				
			||||||
 | 
					                if part then
 | 
				
			||||||
 | 
					                    msg = msg .. ': ' .. tostring(part)
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					            msg = msg:sub(3) -- strip leading ': '
 | 
				
			||||||
 | 
					            if ok then
 | 
				
			||||||
 | 
					                private.checks_ok = private.checks_ok + 1
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                dfhack.printerr('Check failed! ' .. (msg or '(no message)'))
 | 
				
			||||||
 | 
					                local info = debug.getinfo(2)
 | 
				
			||||||
 | 
					                dfhack.printerr(('  at %s:%d'):format(info.short_src, info.currentline))
 | 
				
			||||||
 | 
					                print('')
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    setmetatable(env, {__index = _G})
 | 
				
			||||||
 | 
					    return env, private
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function get_test_files()
 | 
				
			||||||
 | 
					    local files = {}
 | 
				
			||||||
 | 
					    for _, entry in ipairs(dfhack.filesystem.listdir_recursive(dfhack.getHackPath() .. 'test')) do
 | 
				
			||||||
 | 
					        if not entry.isdir and not entry.path:match('main.lua') then
 | 
				
			||||||
 | 
					            table.insert(files, entry.path)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    table.sort(files)
 | 
				
			||||||
 | 
					    return files
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function set_test_stage(stage)
 | 
					function set_test_stage(stage)
 | 
				
			||||||
    local f = io.open('test_stage.txt', 'w')
 | 
					    local f = io.open('test_stage.txt', 'w')
 | 
				
			||||||
    f:write(stage)
 | 
					    f:write(stage)
 | 
				
			||||||
    f:close()
 | 
					    f:close()
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
print('running tests')
 | 
					function finish_tests(ok)
 | 
				
			||||||
 | 
					    if ok then
 | 
				
			||||||
 | 
					        print('Tests finished')
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        dfhack.printerr('Tests failed!')
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    if done_command then
 | 
				
			||||||
 | 
					        dfhack.run_command(done_command)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function main()
 | 
				
			||||||
 | 
					    local files = get_test_files()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local counts = {
 | 
				
			||||||
 | 
					        tests = 0,
 | 
				
			||||||
 | 
					        tests_ok = 0,
 | 
				
			||||||
 | 
					        checks = 0,
 | 
				
			||||||
 | 
					        checks_ok = 0,
 | 
				
			||||||
 | 
					        file_errors = 0,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    local passed = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print('Looking for title screen...')
 | 
				
			||||||
 | 
					    for i = 0, 100 do
 | 
				
			||||||
 | 
					        local scr = dfhack.gui.getCurViewscreen()
 | 
				
			||||||
 | 
					        if df.viewscreen_titlest:is_instance(scr) then
 | 
				
			||||||
 | 
					            print('Found title screen')
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            scr:feed_key(df.interface_key.LEAVESCREEN)
 | 
				
			||||||
 | 
					            delay(10)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    if not df.viewscreen_titlest:is_instance(dfhack.gui.getCurViewscreen()) then
 | 
				
			||||||
 | 
					        qerror('Could not find title screen')
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print('Running tests')
 | 
				
			||||||
 | 
					    for _, file in ipairs(files) do
 | 
				
			||||||
 | 
					        print('Running file: ' .. file:sub(file:find('test'), -1))
 | 
				
			||||||
 | 
					        local env, env_private = build_test_env()
 | 
				
			||||||
 | 
					        local code, err = loadfile(file, 't', env)
 | 
				
			||||||
 | 
					        if not code then
 | 
				
			||||||
 | 
					            passed = false
 | 
				
			||||||
 | 
					            counts.file_errors = counts.file_errors + 1
 | 
				
			||||||
 | 
					            dfhack.printerr('Failed to load file: ' .. tostring(err))
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            local ok, err = pcall(code)
 | 
				
			||||||
 | 
					            if not ok then
 | 
				
			||||||
 | 
					                passed = false
 | 
				
			||||||
 | 
					                counts.file_errors = counts.file_errors + 1
 | 
				
			||||||
 | 
					                dfhack.printerr('Error when running file: ' .. tostring(err))
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                for name, test in pairs(env.test) do
 | 
				
			||||||
 | 
					                    env_private.checks = 0
 | 
				
			||||||
 | 
					                    env_private.checks_ok = 0
 | 
				
			||||||
 | 
					                    counts.tests = counts.tests + 1
 | 
				
			||||||
 | 
					                    local ok, err = pcall(test)
 | 
				
			||||||
 | 
					                    if not ok then
 | 
				
			||||||
 | 
					                        dfhack.printerr('test errored: ' .. name .. ': ' .. tostring(err))
 | 
				
			||||||
 | 
					                        passed = false
 | 
				
			||||||
 | 
					                    elseif env_private.checks ~= env_private.checks_ok then
 | 
				
			||||||
 | 
					                        dfhack.printerr('test failed: ' .. name)
 | 
				
			||||||
 | 
					                        passed = false
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        print('test passed: ' .. name)
 | 
				
			||||||
 | 
					                        counts.tests_ok = counts.tests_ok + 1
 | 
				
			||||||
 | 
					                    end
 | 
				
			||||||
 | 
					                    counts.checks = counts.checks + (tonumber(env_private.checks) or 0)
 | 
				
			||||||
 | 
					                    counts.checks_ok = counts.checks_ok + (tonumber(env_private.checks_ok) or 0)
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print('\nTest summary:')
 | 
				
			||||||
 | 
					    print(('%d/%d tests passed'):format(counts.tests_ok, counts.tests))
 | 
				
			||||||
 | 
					    print(('%d/%d checks passed'):format(counts.checks_ok, counts.checks))
 | 
				
			||||||
 | 
					    print(('%d test files failed to load'):format(counts.file_errors))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    set_test_stage(passed and 'done' or 'fail')
 | 
				
			||||||
 | 
					    finish_tests(passed)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set_test_stage('done')
 | 
					script.start(main)
 | 
				
			||||||
dfhack.run_command('die')
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,109 @@
 | 
				
			|||||||
 | 
					import glob
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					actual = {'': {}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					with open(sys.argv[1]) as f:
 | 
				
			||||||
 | 
					    plugin_name = ''
 | 
				
			||||||
 | 
					    for line in f:
 | 
				
			||||||
 | 
					        line = line.rstrip()
 | 
				
			||||||
 | 
					        if line.startswith('// Plugin: '):
 | 
				
			||||||
 | 
					            plugin_name = line.split(' ')[2]
 | 
				
			||||||
 | 
					            if plugin_name not in actual:
 | 
				
			||||||
 | 
					                actual[plugin_name] = {}
 | 
				
			||||||
 | 
					        elif line.startswith('// RPC '):
 | 
				
			||||||
 | 
					            parts = line.split(' ')
 | 
				
			||||||
 | 
					            actual[plugin_name][parts[2]] = (parts[4], parts[6])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					expected = {'': {}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for p in glob.iglob('library/proto/*.proto'):
 | 
				
			||||||
 | 
					    with open(p) as f:
 | 
				
			||||||
 | 
					        for line in f:
 | 
				
			||||||
 | 
					            line = line.rstrip()
 | 
				
			||||||
 | 
					            if line.startswith('// RPC '):
 | 
				
			||||||
 | 
					                parts = line.split(' ')
 | 
				
			||||||
 | 
					                expected[''][parts[2]] = (parts[4], parts[6])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for p in glob.iglob('plugins/proto/*.proto'):
 | 
				
			||||||
 | 
					    plugin_name = ''
 | 
				
			||||||
 | 
					    with open(p) as f:
 | 
				
			||||||
 | 
					        for line in f:
 | 
				
			||||||
 | 
					            line = line.rstrip()
 | 
				
			||||||
 | 
					            if line.startswith('// Plugin: '):
 | 
				
			||||||
 | 
					                plugin_name = line.split(' ')[2]
 | 
				
			||||||
 | 
					                if plugin_name not in expected:
 | 
				
			||||||
 | 
					                    expected[plugin_name] = {}
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if plugin_name == '':
 | 
				
			||||||
 | 
					        continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with open(p) as f:
 | 
				
			||||||
 | 
					        for line in f:
 | 
				
			||||||
 | 
					            line = line.rstrip()
 | 
				
			||||||
 | 
					            if line.startswith('// RPC '):
 | 
				
			||||||
 | 
					                parts = line.split(' ')
 | 
				
			||||||
 | 
					                expected[plugin_name][parts[2]] = (parts[4], parts[6])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error_count = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for plugin_name in actual:
 | 
				
			||||||
 | 
					    methods = actual[plugin_name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if plugin_name not in expected:
 | 
				
			||||||
 | 
					        print('Missing documentation for plugin proto files: ' + plugin_name)
 | 
				
			||||||
 | 
					        print('Add the following lines:')
 | 
				
			||||||
 | 
					        print('// Plugin: ' + plugin_name)
 | 
				
			||||||
 | 
					        error_count += 1
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            print('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					            error_count += 1
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        missing = []
 | 
				
			||||||
 | 
					        wrong = []
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            if m in expected[plugin_name]:
 | 
				
			||||||
 | 
					                if expected[plugin_name][m] != io:
 | 
				
			||||||
 | 
					                    wrong.add('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                missing.add('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(missing) > 0:
 | 
				
			||||||
 | 
					            print('Incomplete documentation for ' + ('core' if plugin_name == '' else 'plugin "' + plugin_name + '"') + ' proto files. Add the following lines:')
 | 
				
			||||||
 | 
					            for m in missing:
 | 
				
			||||||
 | 
					                print(m)
 | 
				
			||||||
 | 
					                error_count += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(wrong) > 0:
 | 
				
			||||||
 | 
					            print('Incorrect documentation for ' + ('core' if plugin_name == '' else 'plugin "' + plugin_name + '"') + ' proto files. Replace the following comments:')
 | 
				
			||||||
 | 
					            for m in wrong:
 | 
				
			||||||
 | 
					                print(m)
 | 
				
			||||||
 | 
					                error_count += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for plugin_name in expected:
 | 
				
			||||||
 | 
					    methods = expected[plugin_name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if plugin_name not in actual:
 | 
				
			||||||
 | 
					        print('Incorrect documentation for plugin proto files: ' + plugin_name)
 | 
				
			||||||
 | 
					        print('The following methods are documented, but the plugin does not provide any RPC methods:')
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            print('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					            error_count += 1
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        missing = []
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            if m not in actual[plugin_name]:
 | 
				
			||||||
 | 
					                missing.add('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(missing) > 0:
 | 
				
			||||||
 | 
					            print('Incorrect documentation for ' + ('core' if plugin_name == '' else 'plugin "' + plugin_name + '"') + ' proto files. Remove the following lines:')
 | 
				
			||||||
 | 
					            for m in missing:
 | 
				
			||||||
 | 
					                print(m)
 | 
				
			||||||
 | 
					                error_count += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sys.exit(min(100, error_count))
 | 
				
			||||||
@ -1,2 +1,4 @@
 | 
				
			|||||||
:lua dfhack.internal.addScriptPath(os.getenv('TRAVIS_BUILD_DIR'))
 | 
					devel/dump-rpc dfhack-rpc.txt
 | 
				
			||||||
test/main
 | 
					
 | 
				
			||||||
 | 
					:lua dfhack.internal.addScriptPath(dfhack.getHackPath())
 | 
				
			||||||
 | 
					test/main die
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue