diff --git a/.gitmodules b/.gitmodules index 40cf5267..4f5ca60f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,7 +3,7 @@ url = https://github.com/asmjit/asmjit.git [submodule "udis86"] path = udis86 - url = https://github.com/vmt/udis86 + url = https://github.com/LePresidente/udis86 [submodule "fmt"] path = fmt url = https://github.com/fmtlib/fmt.git diff --git a/appveyor.yml b/appveyor.yml index 4eead89d..6da1eded 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,18 +1,20 @@ version: 1.0.{build} image: Visual Studio 2017 -init: -- ps: echo $Env:Arch $Env:Platform $Env:Boost_Addressmode +configuration: Release +platform: +- x64 +- x86 environment: - matrix: - - Platform: x64 - Boost_Addressmode: 64 - Arch: x64 - - Platform: win32 - Boost_Addressmode: 32 - Arch: x86 + GTEST_PATH: C:\Libraries\googletest + BOOST_PATH: C:\Libraries\boost_1_66_0 install: - ps: $blockRdp = $false; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) -build_script: -- ps: "New-Item c:\\projects\\usvfs\\build -type directory\nNew-Item c:\\projects\\install -type directory\nNew-Item c:\\temp -type directory\n\ngit clone --depth=1 --branch=master https://github.com/TanninOne/spdlog.git c:\\libraries\\spdlog 2> $null\ngit clone --depth=1 --branch=3.0.0 https://github.com/fmtlib/fmt.git c:\\libraries\\fmtlib 2> $null\ngit clone --depth=1 --branch=master https://github.com/google/googletest.git c:\\libraries\\googletest 2> $null\ngit clone --branch=master https://github.com/kobalicek/asmjit.git c:\\libraries\\asmjit 2> $null\ngit clone --depth=1 --branch=v1.7.2 https://github.com/vmt/udis86.git c:\\libraries\\udis86 2> $null\n\nSet-Location -Path c:\\libraries\\googletest \ncmake . -Dgtest_force_shared_crt=ON -DBUILD_GMOCK=OFF -DBUILD_GTEST=ON -DCMAKE_GENERATOR_PLATFORM=\"$Env:Platform\" -G\"Visual Studio 15 2017\"\ncmake --build . --config Release -- /p:Platform=$Env:Platform\nCopy-Item C:\\Libraries\\googletest\\googletest\\Release\\gtest.lib c:\\libraries\\googletest\\googletest\n\nSet-Location -Path c:\\libraries\\fmtlib\ncmake . -DCMAKE_GENERATOR_PLATFORM=\"$Env:Platform\" -DCMAKE_BUILD_TYPE=Release -G\"Visual Studio 15 2017\"\ncmake --build . --config Release\nCopy-Item c:\\libraries\\fmtlib\\fmt\\Release\\fmt.lib c:\\libraries\\fmtlib\n\nSet-Location -Path c:\\libraries\\asmjit\ngit checkout fb9f82cb61df36aa513d054e748dc6769045f33e\ncmake . -DASMJIT_STATIC=TRUE -DASMJIT_DISABLE_COMPILER=TRUE -DCMAKE_BUILD_TYPE=Release -DCMAKE_GENERATOR_PLATFORM=\"$Env:Platform\" -G\"Visual Studio 15 2017\"\ncmake --build . --config Release\nRename-Item c:\\libraries\\asmjit\\Release c:\\libraries\\asmjit\\build\n\nSet-Location -Path c:\\libraries\\udis86\\BuildVS2010\n& 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\IDE\\devenv.exe' /Upgrade .\\udis86.sln\nStart-Sleep -s 15\nmsbuild.exe udis86.sln /t:Clean\nmsbuild.exe build.proj /t:BuildRelease_$Env:Arch\nCopy-Item c:\\libraries\\udis86\\BuildVS2010\\build\\lib\\x64\\libudis86.lib c:\\libraries\\udis86\n\nSet-Location -Path C:\\Libraries\\boost_1_65_1\n.\"C:\\Python27-x64\\Scripts\\pip.exe\" install \"patch==1.*\"\n.\"C:\\Python27-x64\\python.exe\" -m patch \"C:\\projects\\usvfs\\patches\\type_traits_vs15_fix.patch\"\n.\\bootstrap.bat\n.\\b2 address-model=\"$Env:Boost_Addressmode\" toolset=msvc-14.1 windows-api=desktop variant=release link=static threading=multi runtime-link=shared --with-filesystem --with-date_time --with-thread --with-locale\n\nSet-Location -Path c:\\projects\\usvfs\\build\ncmake .. -DPROJ_ARCH=\"$Env:Arch\" -DCMAKE_GENERATOR_PLATFORM=\"$Env:Platform\" -DCMAKE_BUILD_TYPE=Release -DDEPENDENCIES_DIR=c:\\libraries -G\"Visual Studio 15 2017\"\ncmake --build . --config Release\n\nNew-Item c:\\projects\\usvfs\\install -type directory\n\nCopy-Item c:\\projects\\usvfs\\build\\testinject_bin\\Release\\testinject_bin.exe c:\\projects\\usvfs\\build\\tinjectlib_test\\Release\nCopy-Item c:\\projects\\usvfs\\build\\testinject_dll\\Release\\testinject_dll.dll c:\\projects\\usvfs\\build\\tinjectlib_test\\Release\nCopy-Item c:\\projects\\usvfs\\build\\testinject_dll\\Release\\testinject_dll.dll c:\\projects\\usvfs\\build\\tinjectlib_test\\Release\\testinject_dll-d.dll\nCopy-Item c:\\projects\\usvfs\\build\\usvfs\\Release\\usvfs_$Env:Arch.dll c:\\projects\\usvfs\\build\\usvfs_test\\Release\nctest -VV -C Release" -test_script: +before_build: +- ps: "echo $env:Platform\nif (${env:Platform} -eq \"x64\") {\n set-item -path Env:BOOST_LIBPATH -value C:\\Libraries\\boost_1_66_0\\lib64-msvc-14.1\n set-item -path Env:GTEST_BUILDDIR -value c:\\libraries\\googletest\\build \n}\nElse {\n set-item -path Env:BOOST_LIBPATH -value C:\\Libraries\\boost_1_66_0\\lib32-msvc-14.1\n set-item -path Env:GTEST_BUILDDIR -value c:\\libraries\\googletest\\build_32\n}\n\n. git clone --depth=1 --branch=master https://github.com/google/googletest.git c:\\libraries\\googletest 2> $null\nNew-Item $Env:GTEST_BUILDDIR -type directory\nSet-Location -Path $Env:GTEST_BUILDDIR\n. cmd /c \"`\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat`\" $env:Platform && cmake -G `\"NMake Makefiles`\" -DCMAKE_BUILD_TYPE=Release ..`\"\"\n. cmd /c \"`\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat`\" $env:Platform && nmake\"\n\nSet-Location -Path c:\\projects\\usvfs\\vsbuild\n#Tempory fix due to that appveyor has boost lib files in a custom output folder\nGet-ChildItem -Path *.props -recurse | ForEach {If (Get-Content $_.FullName | Select-String -Pattern '\\$\\(BOOST_PATH\\)\\\\.*\\\\lib') {(Get-Content $_ | ForEach {$_ -replace '\\$\\(BOOST_PATH\\)\\\\.*\\\\lib', \"$Env:BOOST_LIBPATH\"}) | Set-Content $_ }}\n\n#Need to tell usvfs to not use the BOOST_BUILDID\nGet-ChildItem -Path *.props -recurse | ForEach {If (Get-Content $_.FullName | Select-String -Pattern 'BOOST_LIB_BUILDID=x86;') {(Get-Content $_ | ForEach {$_ -replace 'BOOST_LIB_BUILDID=x86;', \"\"}) | Set-Content $_ }}\n\nSet-Location -Path c:\\projects\\usvfs\ngit submodule -q update --init --recursive\nSet-Location -Path c:\\projects\\usvfs\\udis86\ngit pull -q origin master" +build: + project: vsbuild/usvfs.sln + parallel: true + verbosity: normal +test: off +on_failure: - ps: $blockRdp = $false; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) \ No newline at end of file diff --git a/include/usvfs.h b/include/usvfs.h index 43441038..8a09d551 100644 --- a/include/usvfs.h +++ b/include/usvfs.h @@ -139,6 +139,11 @@ DLLEXPORT BOOL WINAPI CreateVFSDump(LPSTR buffer, size_t *size); */ DLLEXPORT VOID WINAPI BlacklistExecutable(LPWSTR executableName); +/** + * clears the executable blacklist + */ +DLLEXPORT VOID WINAPI ClearExecutableBlacklist(); + /** * print debugging info about the vfs. The format is currently not fixed and may * change between usvfs versions diff --git a/include/usvfs_version.h b/include/usvfs_version.h index a83c455d..8470464e 100644 --- a/include/usvfs_version.h +++ b/include/usvfs_version.h @@ -2,7 +2,7 @@ #define USVFS_VERSION_MAJOR 0 #define USVFS_VERSION_MINOR 4 -#define USVFS_VERSION_BUILD 1 +#define USVFS_VERSION_BUILD 2 #define USVFS_VERSION_REVISION 0 #define USVFS_BUILD_STRING "" diff --git a/src/shared/shmlogger.cpp b/src/shared/shmlogger.cpp index 04ad61d5..ae90af6c 100644 --- a/src/shared/shmlogger.cpp +++ b/src/shared/shmlogger.cpp @@ -25,12 +25,17 @@ along with usvfs. If not, see . #include #include #include +#include #include #include +#include +#include #pragma warning(pop) #pragma warning(disable : 4996) +#pragma comment(lib, "comsuppw") + using namespace boost::interprocess; SHMLogger *SHMLogger::s_Instance = nullptr; @@ -194,3 +199,18 @@ void spdlog::sinks::shm_sink::output(level::level_enum lev, m_DroppedMessages.fetch_add(1, std::memory_order_relaxed); } } + +void __cdecl boost::interprocess::ipcdetail::get_shared_dir(std::string &shared_dir) +{ + PWSTR path; + if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_ProgramData, 0, NULL, &path))) { + _bstr_t bPath(path); + shared_dir = (char*)bPath; + shared_dir += "\\USVFS"; + } else { + shared_dir = "C:\\ProgramData\\USVFS"; + } + boost::filesystem::path boostPath(shared_dir); + if (!boost::filesystem::exists(boostPath)) + boost::filesystem::create_directories(boostPath); +} \ No newline at end of file diff --git a/src/usvfs_dll/hookcontext.cpp b/src/usvfs_dll/hookcontext.cpp index 1570e535..5342e8c0 100644 --- a/src/usvfs_dll/hookcontext.cpp +++ b/src/usvfs_dll/hookcontext.cpp @@ -26,7 +26,7 @@ along with usvfs. If not, see . #include #include #include "loghelpers.h" - +#include namespace bi = boost::interprocess; using usvfs::shared::SharedMemoryT; @@ -209,6 +209,22 @@ void HookContext::blacklistExecutable(const std::wstring &executableName) m_Parameters->processBlacklist.get_allocator())); } +void HookContext::clearExecutableBlacklist() +{ + m_Parameters->processBlacklist.clear(); +} + +BOOL HookContext::executableBlacklisted(const std::wstring &executableName) const +{ + for (shared::StringT exec : m_Parameters->processBlacklist) { + if (boost::algorithm::iends_with(executableName, + "\\" + std::string(exec.data(), exec.size()))) { + return TRUE; + } + } + return FALSE; +} + void HookContext::unregisterCurrentProcess() { auto iter = m_Parameters->processList.find(::GetCurrentProcessId()); diff --git a/src/usvfs_dll/hookcontext.h b/src/usvfs_dll/hookcontext.h index 25a65f05..8e435b06 100644 --- a/src/usvfs_dll/hookcontext.h +++ b/src/usvfs_dll/hookcontext.h @@ -199,6 +199,8 @@ class HookContext std::vector registeredProcesses() const; void blacklistExecutable(const std::wstring &executableName); + void clearExecutableBlacklist(); + BOOL executableBlacklisted(const std::wstring &executableName) const; void setLogLevel(LogLevel level); void setCrashDumpsType(CrashDumpsType type); diff --git a/src/usvfs_dll/hooks/kernel32.cpp b/src/usvfs_dll/hooks/kernel32.cpp index 6c5ca204..d74e5dc5 100644 --- a/src/usvfs_dll/hooks/kernel32.cpp +++ b/src/usvfs_dll/hooks/kernel32.cpp @@ -276,8 +276,8 @@ class RerouteW } else { - if (m_PathCreated) - addDirectoryMapping(context, fs::path(m_RealPath).parent_path(), fs::path(m_FileName).parent_path()); + //if (m_PathCreated) + //addDirectoryMapping(context, fs::path(m_RealPath).parent_path(), fs::path(m_FileName).parent_path()); spdlog::get("hooks")->info("mapping file in vfs: {}, {}", ush::string_cast(m_RealPath, ush::CodePage::UTF8), @@ -291,6 +291,9 @@ class RerouteW void removeMapping(const usvfs::HookContext::ConstPtr &readContext, bool directory = false) { + bool addToDelete = false; + bool dontAddToDelete = false; + // We need to track deleted files even if they were not rerouted (i.e. files deleted from the real folder which there is // a virtualized mapped folder on top of it). Since we don't want to add, *every* file which is deleted we check this: if (!directory) { @@ -305,7 +308,7 @@ class RerouteW found = true; } if (found) - k32DeleteTracker.insert(m_RealPath, m_FileName); + addToDelete = true; } if (wasRerouted()) { @@ -324,6 +327,7 @@ class RerouteW parent = fs::path(parent).parent_path().wstring(); if (k32FakeDirTracker.contains(parent)) { + dontAddToDelete = true; if (RemoveDirectoryW(parent.c_str())) { k32FakeDirTracker.erase(parent); spdlog::get("usvfs")->info("removed empty fake directory: {}", string_cast(parent)); @@ -339,6 +343,9 @@ class RerouteW } } } + if (addToDelete && !dontAddToDelete) { + k32DeleteTracker.insert(m_RealPath, m_FileName); + } } static bool createFakePath(fs::path path, LPSECURITY_ATTRIBUTES securityAttributes) @@ -807,20 +814,49 @@ BOOL WINAPI usvfs::hook_CreateProcessInternalW( newToken); POST_REALCALL + BOOL blacklisted = FALSE; + if (applicationReroute.fileName()) { + auto context = READ_CONTEXT(); + if (context->executableBlacklisted(applicationReroute.fileName())) { + spdlog::get("hooks")->info( + "not injecting {} as application is blacklisted", + ush::string_cast( + applicationReroute.fileName(), + ush::CodePage::UTF8 + ) + ); + blacklisted = TRUE; + } + } else if (cmdReroute.fileName()) { + auto context = READ_CONTEXT(); + if (context->executableBlacklisted(cmdReroute.fileName())) { + spdlog::get("hooks")->info( + "not injecting {} as command line is blacklisted", + ush::string_cast( + cmdReroute.fileName(), + ush::CodePage::UTF8 + ) + ); + blacklisted = TRUE; + } + } + if (res) { - try { - injectProcess(dllPath, callParameters, *lpProcessInformation); - } catch (const std::exception &e) { - spdlog::get("hooks") - ->error("failed to inject into {0}: {1}", - lpApplicationName != nullptr - ? log::wrap(applicationReroute.fileName()) - : log::wrap(static_cast(lpCommandLine)), - e.what()); + if (!blacklisted) { + try { + injectProcess(dllPath, callParameters, *lpProcessInformation); + } catch (const std::exception &e) { + spdlog::get("hooks") + ->error("failed to inject into {0}: {1}", + lpApplicationName != nullptr + ? log::wrap(applicationReroute.fileName()) + : log::wrap(static_cast(lpCommandLine)), + e.what()); + } } - // resume unless process is suposed to start suspended + // resume unless process is supposed to start suspended if (!susp && (ResumeThread(lpProcessInformation->hThread) == (DWORD)-1)) { spdlog::get("hooks")->error("failed to inject into spawned process"); res = FALSE; @@ -830,9 +866,10 @@ BOOL WINAPI usvfs::hook_CreateProcessInternalW( LOG_CALL() .PARAM(lpApplicationName) .PARAM(applicationReroute.fileName()) - .PARAM(cmdline) + .PARAM(cmdReroute.fileName()) .PARAM(res) - .PARAM(callContext.lastError()); + .PARAM(callContext.lastError()) + .PARAM(cmdline); HOOK_END return res; @@ -2048,7 +2085,6 @@ HANDLE WINAPI usvfs::hook_FindFirstFileExW(LPCWSTR lpFileName, FINDEX_INFO_LEVEL bool usedRewrite = false; - if (boost::algorithm::icontains(lpFileName, tempPathStr)) { PRE_REALCALL //Force the mutEXHook to match NtQueryDirectoryFile so it calls the non hooked NtQueryDirectoryFile. diff --git a/src/usvfs_dll/usvfs.cpp b/src/usvfs_dll/usvfs.cpp index 356b5642..1515b1b8 100644 --- a/src/usvfs_dll/usvfs.cpp +++ b/src/usvfs_dll/usvfs.cpp @@ -716,6 +716,11 @@ VOID WINAPI BlacklistExecutable(LPWSTR executableName) context->blacklistExecutable(executableName); } +VOID WINAPI ClearExecutableBlacklist() +{ + context->clearExecutableBlacklist(); +} + VOID WINAPI PrintDebugInfo() { diff --git a/src/usvfs_helper/inject.cpp b/src/usvfs_helper/inject.cpp index 5e6342f1..8fbe5306 100644 --- a/src/usvfs_helper/inject.cpp +++ b/src/usvfs_helper/inject.cpp @@ -154,8 +154,8 @@ void usvfs::injectProcess(const std::wstring &applicationPath + ush::string_cast(exePath.wstring())) << ex_win_errcode(result.errorCode)); } else { - // wait for proxy completion. this shouldn't take long, 5 seconds is very generous - switch (WaitForSingleObject(result.processInfo.hProcess, 5000)) { + // wait for proxy completion. this shouldn't take long, 15 seconds is very generous + switch (WaitForSingleObject(result.processInfo.hProcess, 15000)) { case WAIT_TIMEOUT: { spdlog::get("usvfs")->debug("proxy timeout"); TerminateProcess(result.processInfo.hProcess, 1); diff --git a/src/usvfs_proxy/main.cpp b/src/usvfs_proxy/main.cpp index 17615f53..93e00403 100644 --- a/src/usvfs_proxy/main.cpp +++ b/src/usvfs_proxy/main.cpp @@ -28,6 +28,9 @@ along with usvfs. If not, see . #include #include #include +#include +#include +#include namespace bi = boost::interprocess; @@ -68,6 +71,27 @@ T getParameter(std::vector &arguments, const std::string &key, cons } } +static void exceptionDialog(int line, int num, ...) { + va_list args; + va_start(args, num); + + std::wstring wstr; + WCHAR buf[256]; + wstr.append(L"Unhandled USVFS proxy exception (line "); + wsprintf(buf, L"%d): ", line); + wstr.append(buf); + for (int i = 0; i < num; i++ ) { + wsprintf(buf, L"%S", va_arg(args, const char *)); + if (i < num-1) + wsprintf(buf, L", "); + wstr.append(buf); + } + + MessageBox(NULL, wstr.data(), NULL, MB_OK); + + va_end(args); +} + int main(int argc, char **argv) { std::shared_ptr logger; @@ -83,11 +107,13 @@ int main(int argc, char **argv) { instance = getParameter(arguments, "instance", true); } catch (const std::exception &e) { if (logger.get() == nullptr) { + exceptionDialog(__LINE__, 1, e.what()); return 1; } try { logger->critical("{}", e.what()); - } catch (const spdlog::spdlog_ex &) { + } catch (const spdlog::spdlog_ex &e2) { + exceptionDialog(__LINE__, 2, e.what(), e2.what()); // no way to log this } catch (const std::exception &) { logger->critical() << e.what(); @@ -135,8 +161,24 @@ int main(int argc, char **argv) { if (tid != 0) { threadHandle = OpenThread(THREAD_ALL_ACCESS, FALSE, tid); } - usvfs::injectProcess(p.parent_path().wstring(), par, processHandle, - threadHandle); + + BOOL blacklisted = FALSE; + TCHAR szModName[MAX_PATH]; + if (GetModuleFileNameEx(processHandle, NULL, szModName, sizeof(szModName) / sizeof(TCHAR))) { + for (usvfs::shared::StringT exec : params.first->processBlacklist) { + if (boost::algorithm::iends_with(std::wstring(szModName), + "\\" + std::string(exec.data(), exec.size()))) { + logger->info("not injecting {} as application is blacklisted", + usvfs::shared::string_cast(std::wstring(szModName))); + blacklisted = TRUE; + break; + } + } + } + if (!blacklisted) { + usvfs::injectProcess(p.parent_path().wstring(), par, processHandle, + threadHandle); + } } else { winapi::process::Result process = winapi::ansi::createProcess(executable) @@ -148,7 +190,19 @@ int main(int argc, char **argv) { return 1; } - usvfs::injectProcess(p.parent_path().wstring(), par, process.processInfo); + BOOL blacklisted = FALSE; + for (usvfs::shared::StringT exec : params.first->processBlacklist) { + if (boost::algorithm::iends_with(executable, + "\\" + std::string(exec.data(), exec.size()))) { + logger->info("not injecting {} as application is blacklisted", + std::string(exec.data(), exec.size())); + blacklisted = TRUE; + break; + } + } + if (!blacklisted) { + usvfs::injectProcess(p.parent_path().wstring(), par, process.processInfo); + } ResumeThread(process.processInfo.hThread); } @@ -158,8 +212,9 @@ int main(int argc, char **argv) { try { logger->critical("unhandled exception: {}", e.what()); logExtInfo(e); - } catch (const spdlog::spdlog_ex &) { + } catch (const spdlog::spdlog_ex &e2) { // no way to log this + exceptionDialog(__LINE__, 2, e.what(), e2.what()); } catch (const std::exception &) { logger->critical() << e.what(); } diff --git a/udis86 b/udis86 index 56ff6c87..dda4a95b 160000 --- a/udis86 +++ b/udis86 @@ -1 +1 @@ -Subproject commit 56ff6c87c11de0ffa725b14339004820556e343d +Subproject commit dda4a95b816ac3f749cd4f798b99d8ed076e83ff diff --git a/vsbuild/common.props b/vsbuild/common.props index 33a10b7c..1c410517 100644 --- a/vsbuild/common.props +++ b/vsbuild/common.props @@ -11,7 +11,7 @@ MultiThreaded false true - _WINDOWS;NDEBUG;BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE;%(PreprocessorDefinitions) + _WINDOWS;NDEBUG;BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE;BOOST_INTERPROCESS_SHARED_DIR_FUNC;%(PreprocessorDefinitions) diff --git a/vsbuild/external_dependencies.props b/vsbuild/external_dependencies.props index f8c26636..2d64f847 100644 --- a/vsbuild/external_dependencies.props +++ b/vsbuild/external_dependencies.props @@ -4,7 +4,7 @@ - ..\..\boost_1_67_0 + ..\..\boost_1_68_0 $(BOOST_PATH) ..\..\googletest @@ -18,4 +18,4 @@ $(GTEST_PATH) - \ No newline at end of file + diff --git a/vsbuild/platform_x64.props b/vsbuild/platform_x64.props index b15018c7..7317e5c7 100644 --- a/vsbuild/platform_x64.props +++ b/vsbuild/platform_x64.props @@ -14,6 +14,9 @@ _WIN64;%(PreprocessorDefinitions) + + $(BOOST_PATH)\lib64-msvc-14.1\lib;%(AdditionalLibraryDirectories) + diff --git a/vsbuild/platform_x86.props b/vsbuild/platform_x86.props index f9bb0630..7b66bb75 100644 --- a/vsbuild/platform_x86.props +++ b/vsbuild/platform_x86.props @@ -11,9 +11,9 @@ - - BOOST_LIB_BUILDID=x86;%(PreprocessorDefinitions) - + + $(BOOST_PATH)\lib32-msvc-14.1\lib;%(AdditionalLibraryDirectories) + diff --git a/vsbuild/shared_common.props b/vsbuild/shared_common.props index cb88e726..c4c45109 100644 --- a/vsbuild/shared_common.props +++ b/vsbuild/shared_common.props @@ -11,9 +11,6 @@ ..\include;$(BOOST_PATH);..\fmt;..\spdlog\include\spdlog;%(AdditionalIncludeDirectories) SPDLOG_NO_NAME;SPDLOG_NO_REGISTRY_MUTEX;NOMINMAX;%(PreprocessorDefinitions) - - $(BOOST_PATH)\stage\lib;%(AdditionalLibraryDirectories) - \ No newline at end of file diff --git a/vsbuild/test_common.props b/vsbuild/test_common.props index 25e42a4d..0e095312 100644 --- a/vsbuild/test_common.props +++ b/vsbuild/test_common.props @@ -14,7 +14,7 @@ UNITTEST;%(PreprocessorDefinitions) - %(AdditionalLibraryDirectories);$(GTEST_PATH)\build$(PLATFORM_32)\googlemock\gtest + %(AdditionalLibraryDirectories);$(GTEST_PATH)\build$(PLATFORM_32)\lib gtest.lib;%(AdditionalDependencies) diff --git a/vsbuild/udis86.vcxproj b/vsbuild/udis86.vcxproj index 1c53d730..1f7b72f8 100644 --- a/vsbuild/udis86.vcxproj +++ b/vsbuild/udis86.vcxproj @@ -95,7 +95,7 @@ C:\Games\MO2\build\usvfs_clean\udis86\libudis86;%(AdditionalIncludeDirectories) - py -2 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 || python ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 + py -3 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 Building udis86 optable @@ -113,7 +113,7 @@ C:\Games\MO2\build\usvfs_clean\udis86\libudis86;%(AdditionalIncludeDirectories) - py -2 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 || python ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 + py -3 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 Building udis86 optable @@ -137,7 +137,7 @@ true - py -2 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 || python ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 + py -3 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 Building udis86 optable @@ -161,7 +161,7 @@ true - py -2 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 || python ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 + py -3 ..\udis86\scripts\ud_itab.py ..\udis86\docs\x86\optable.xml ..\udis86\libudis86 Building udis86 optable