Ignacio R. Morelle aae8e70c7a log/windows: Add our own stdout/stderr redirection on Windows
This replaces SDL 1.2's built-in stdout/stderr redirection, which writes
the log file to the process working directory (usually an
admin-restricted location) instead of a more accessible user-writable
location.

My approach combines stdout and stderr into a single log file which
includes the process id and timestamp in its filename in order to
accomodate multiple instances and (coming later) log rotation. The log
file is created in the user's temporary directory defined by Windows,
and then relocated to the game user data dir as soon as it is set-up the
first time, placed in the Windows-specific logs/ subdir.

The most pressing issues this solves are the lack of built-in
stdout/stderr redirection in SDL 2's SDL2main.lib entry point, and
Unicode path issues with SDL 1.2 (bug #22897). Additionally, it allows
us to not have to rely on UAC virtualization anymore; this is arguably
far more important because it has been known to break on occasion (e.g.
<http://r.wesnoth.org/t42970>), and starting with version 1.13.2 we want
to declare Windows Vista - 10 compatibility in our side-by-side manifest
(see commit e119f4071f047c6d740ebec4636985fdf39349bc).

Currently missing features coming later:

 * Log rotation (otherwise the logs/ dir may grow forever)
 * wesnothd support (although the code is already required to be linked
   into wesnothd due to it being required by the FS API)
 * Integration with the version info dialog
2015-11-23 03:21:42 -03:00

146 lines
5.9 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="wesnothd" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Release">
<Option output="../../wesnothd" prefix_auto="1" extension_auto="1" />
<Option working_dir="../../" />
<Option object_output=".objs-release" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O3" />
</Compiler>
</Target>
<Target title="Debug">
<Option output="../../wesnothd-debug" prefix_auto="1" extension_auto="1" />
<Option working_dir="../../" />
<Option object_output=".objs-debug" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-mthreads" />
<Add option="-fexceptions" />
<Add option="-fdiagnostics-show-option" />
<Add option="-fopenmp" />
<Add option="-DHAVE_PYTHON" />
<Add option="-DUSE_GZIP" />
<Add directory="../../src" />
</Compiler>
<Linker>
<Add option="-mthreads" />
<Add option="-fopenmp" />
<Add library="mingw32" />
<Add library="mingwthrd" />
<Add library="SDLmain" />
<Add library="SDL" />
<Add library="SDL_net" />
<Add library="ws2_32" />
<Add library="libboost_iostreams-mgw51-mt-1_58.a" />
<Add library="libboost_bzip2-mgw51-mt-1_58.a" />
<Add library="libboost_filesystem-mgw51-mt-1_58.a" />
<Add library="libboost_locale-mgw51-mt-1_58.a" />
<Add library="libboost_random-mgw51-mt-1_58.a" />
<Add library="libboost_system-mgw51-mt-1_58.a" />
<Add library="libboost_zlib-mgw51-mt-1_58.a" />
</Linker>
<Unit filename="../../packaging/windows/wesnothd.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Unit filename="../../src/about.hpp" />
<Unit filename="../../src/color_range.cpp" />
<Unit filename="../../src/config.cpp" />
<Unit filename="../../src/config.hpp" />
<Unit filename="../../src/filesystem.hpp" />
<Unit filename="../../src/filesystem_boost.cpp" />
<Unit filename="../../src/filesystem_common.cpp" />
<Unit filename="../../src/filesystem_win32.ii" />
<Unit filename="../../src/game_config.cpp" />
<Unit filename="../../src/game_config.hpp" />
<Unit filename="../../src/gettext.hpp" />
<Unit filename="../../src/gettext_boost.cpp" />
<Unit filename="../../src/global.hpp" />
<Unit filename="../../src/libc_error.hpp" />
<Unit filename="../../src/loadscreen.hpp" />
<Unit filename="../../src/loadscreen_empty.cpp" />
<Unit filename="../../src/log.cpp" />
<Unit filename="../../src/log.hpp" />
<Unit filename="../../src/log_windows.cpp" />
<Unit filename="../../src/log_windows.hpp" />
<Unit filename="../../src/map.hpp" />
<Unit filename="../../src/mt_rng.cpp" />
<Unit filename="../../src/mt_rng.hpp" />
<Unit filename="../../src/network.cpp" />
<Unit filename="../../src/network.hpp" />
<Unit filename="../../src/network_worker.cpp" />
<Unit filename="../../src/network_worker.hpp" />
<Unit filename="../../src/scoped_resource.hpp" />
<Unit filename="../../src/seed_rng.cpp" />
<Unit filename="../../src/seed_rng.hpp" />
<Unit filename="../../src/serialization/binary_or_text.cpp" />
<Unit filename="../../src/serialization/binary_or_text.hpp" />
<Unit filename="../../src/serialization/compression.hpp" />
<Unit filename="../../src/serialization/parser.cpp" />
<Unit filename="../../src/serialization/parser.hpp" />
<Unit filename="../../src/serialization/preprocessor.cpp" />
<Unit filename="../../src/serialization/preprocessor.hpp" />
<Unit filename="../../src/serialization/string_utils.cpp" />
<Unit filename="../../src/serialization/string_utils.hpp" />
<Unit filename="../../src/serialization/tokenizer.cpp" />
<Unit filename="../../src/serialization/unicode.cpp" />
<Unit filename="../../src/serialization/unicode.hpp" />
<Unit filename="../../src/server/ban.cpp" />
<Unit filename="../../src/server/ban.hpp" />
<Unit filename="../../src/server/forum_user_handler.cpp" />
<Unit filename="../../src/server/forum_user_handler.hpp" />
<Unit filename="../../src/server/game.cpp" />
<Unit filename="../../src/server/game.hpp" />
<Unit filename="../../src/server/input_stream.cpp" />
<Unit filename="../../src/server/input_stream.hpp" />
<Unit filename="../../src/server/metrics.cpp" />
<Unit filename="../../src/server/metrics.hpp" />
<Unit filename="../../src/server/player.cpp" />
<Unit filename="../../src/server/player.hpp" />
<Unit filename="../../src/server/player_network.cpp" />
<Unit filename="../../src/server/player_network.hpp" />
<Unit filename="../../src/server/proxy.cpp" />
<Unit filename="../../src/server/proxy.hpp" />
<Unit filename="../../src/server/room.cpp" />
<Unit filename="../../src/server/room.hpp" />
<Unit filename="../../src/server/room_manager.cpp" />
<Unit filename="../../src/server/room_manager.hpp" />
<Unit filename="../../src/server/sample_user_handler.cpp" />
<Unit filename="../../src/server/sample_user_handler.hpp" />
<Unit filename="../../src/server/server.cpp" />
<Unit filename="../../src/server/server.hpp" />
<Unit filename="../../src/server/simple_wml.cpp" />
<Unit filename="../../src/server/simple_wml.hpp" />
<Unit filename="../../src/server/user_handler.cpp" />
<Unit filename="../../src/server/user_handler.hpp" />
<Unit filename="../../src/thread.cpp" />
<Unit filename="../../src/thread.hpp" />
<Unit filename="../../src/tstring.cpp" />
<Unit filename="../../src/tstring.hpp" />
<Unit filename="../../src/util.cpp" />
<Unit filename="../../src/util.hpp" />
<Unit filename="../../src/version.cpp" />
<Unit filename="../../src/version.hpp" />
<Unit filename="../../src/wesconfig.h" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>