diff --git a/build.ps1 b/build.ps1 index 1f35f0f1..00b83a3b 100644 --- a/build.ps1 +++ b/build.ps1 @@ -20,9 +20,26 @@ if (-not (Test-Path "build")) { } Set-Location "build" +# Locate vcpkg toolchain file +$vcpkgRoot = $env:VCPKG_ROOT +if (-not $vcpkgRoot) { + foreach ($candidate in @("C:\vcpkg", "C:\dev\vcpkg", "$env:LOCALAPPDATA\vcpkg")) { + if (Test-Path "$candidate\scripts\buildsystems\vcpkg.cmake") { + $vcpkgRoot = $candidate + break + } + } +} +if (-not $vcpkgRoot) { + Write-Error "Could not find vcpkg. Set VCPKG_ROOT or install vcpkg to C:\vcpkg." + exit 1 +} +$toolchainFile = "$vcpkgRoot\scripts\buildsystems\vcpkg.cmake" +Write-Host "Using vcpkg toolchain: $toolchainFile" + # Configure with CMake Write-Host "Configuring with CMake..." -& cmake .. -DCMAKE_BUILD_TYPE=Release +& cmake .. -DCMAKE_BUILD_TYPE=Release "-DCMAKE_TOOLCHAIN_FILE=$toolchainFile" -DVCPKG_TARGET_TRIPLET=x64-windows if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } # Build with all cores diff --git a/include/core/logger.hpp b/include/core/logger.hpp index a927abee..a705c69b 100644 --- a/include/core/logger.hpp +++ b/include/core/logger.hpp @@ -103,42 +103,19 @@ private: }; // Convenience macros. -// Guard calls at the macro site so variadic arguments are not evaluated -// when the corresponding level is disabled. -#define LOG_DEBUG(...) do { \ - auto& _wowee_logger = wowee::core::Logger::getInstance(); \ - if (_wowee_logger.shouldLog(wowee::core::LogLevel::DEBUG)) { \ - _wowee_logger.debug(__VA_ARGS__); \ - } \ -} while (0) - -#define LOG_INFO(...) do { \ - auto& _wowee_logger = wowee::core::Logger::getInstance(); \ - if (_wowee_logger.shouldLog(wowee::core::LogLevel::INFO)) { \ - _wowee_logger.info(__VA_ARGS__); \ - } \ -} while (0) - -#define LOG_WARNING(...) do { \ - auto& _wowee_logger = wowee::core::Logger::getInstance(); \ - if (_wowee_logger.shouldLog(wowee::core::LogLevel::WARNING)) { \ - _wowee_logger.warning(__VA_ARGS__); \ - } \ -} while (0) - -#define LOG_ERROR(...) do { \ - auto& _wowee_logger = wowee::core::Logger::getInstance(); \ - if (_wowee_logger.shouldLog(wowee::core::LogLevel::ERROR)) { \ - _wowee_logger.error(__VA_ARGS__); \ - } \ -} while (0) - -#define LOG_FATAL(...) do { \ - auto& _wowee_logger = wowee::core::Logger::getInstance(); \ - if (_wowee_logger.shouldLog(wowee::core::LogLevel::FATAL)) { \ - _wowee_logger.fatal(__VA_ARGS__); \ - } \ -} while (0) +// +// Each Logger method (debug/info/warning/error/fatal) already guards on +// shouldLog() internally, so the macros are simple direct calls. +// +// IMPORTANT: do NOT reference LogLevel enum values here. Windows' +// wingdi.h defines `#define ERROR 0` which would corrupt `LogLevel::ERROR` +// at any call site compiled after . Keeping the enum names +// out of the macro bodies avoids that problem entirely. +#define LOG_DEBUG(...) wowee::core::Logger::getInstance().debug(__VA_ARGS__) +#define LOG_INFO(...) wowee::core::Logger::getInstance().info(__VA_ARGS__) +#define LOG_WARNING(...) wowee::core::Logger::getInstance().warning(__VA_ARGS__) +#define LOG_ERROR(...) wowee::core::Logger::getInstance().error(__VA_ARGS__) +#define LOG_FATAL(...) wowee::core::Logger::getInstance().fatal(__VA_ARGS__) } // namespace core } // namespace wowee