Steve Cotton cc8dddea6e Support negative numbers in ranges
Adds support for using these in the weapons and ability filters:
* "-1", which was previously treated as an parse error (no number before the separator).
* "-3--1"
* "-infinity" as the lower number in the range, provided a different upper number is given.

This treats "-infinity" (with no other number), "-infinity--infinity",
"infinity" (with no other number) and "infinity-infinity" as errors. It seems
unlikely that someone would intend to use a filter that can't match any
reasonable number.

The range "-infinity-infinity" will be parsed successfully. I don't see a use
case for that, but nor do I see a reason to add extra C++ to reject it.
However, it's not added to the schema, as I think it's good for the schema to
give a warning when someone creates a filter which will accept every value
(including accepting the default, so "-infinity-infinity" accepts the unset
value too).

Includes new unit tests for the C++ and the Lua stringx.parse_range functions.
The next commit adds more WML tests, but is kept separate to credit the author.

This started as a change to move common filter functions from unit.cpp to
somewhere that they could be reused for other config-based filters. In the
process a missing feature was found and added, the move is still included in a
single Git commit because the move was required in order to make these
functions accessible to the Boost unit tests.

Two CodeBlocks project files additionally get src/utils/any.hpp added,
which was in one of them but missing from the other two. I noticed because
these are alphabetically at the start of the src/utils file list.

Thanks to @CelticMinstrel for the review comments and Xcode project updates.
2023-08-11 21:59:06 +02:00
..
2023-08-11 21:59:06 +02:00
2023-08-11 21:59:06 +02:00

Compiling Wesnoth on Windows using CodeBlocks

(Last tested using Wesnoth 1.15.9+ on Code::Blocks 17.12)

  1. Get a Wesnoth source tarball or Git repository clone. The folder which contains the data/, projectfiles/, and src/ subfolders is referred to as wesnoth_root in this file.

  2. Install CodeBlocks from http://www.codeblocks.org/. MinGW is not needed.

  3. Download and unpack MinGW-w64 from https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z. Note that the project files in wesnoth_root/projectfiles/CodeBlocks/ may contain a setting to compile with OpenMP support, so you should make sure that this option is enabled while installing the compiler (mark the checkbox for this when choosing components to install).

    NOTE: You must make sure to download the 64-bit version.

    If you download the 32 bit version and you have out of memory errors when creating debug builds, you can follow these steps:

    1. If you use 32-bit Windows, run in admin command prompt
    bcdedit/set IncreaseUserVa 3072
    
    1. Install MASM32;

    2. Open cmd (also as admin);

    3. Run these commands in an admin command prompt

    cd C:\..\mingw32\libexec\gcc\i686-w64-mingw32\7.2.0
    
    C:\masm32\bineditbin.exe /LARGEADDRESSAWARE cc1plus.exe
    

    If you use the 64-bit version then you cannot use MASM32 since it doesn't have a 64 bit version, which means you cannot make a debug build.

  4. Download the latest CodeBlocksWinSDK*.zip package from http://sourceforge.net/projects/wesnoth/files/SDK/. The package contains the right version/build combination of source headers, build-time libraries (*.a) and run-time libraries (*.dll) needed to build and run Wesnoth. Older versions of the package may no longer be useful after new dependencies are added to Wesnoth or its version requirements change.

    for versions > 1.12, follow the steps in libraries.md to update libraries yourself.

    Unpack the file to any path of your choice, which will be referred to as sdk_root for the remainder of this file.

    The exact names of the folders containing the required files may vary; take note of them for the next steps.

  5. In CodeBlocks, open wesnoth_root/projectfiles/CodeBlocks/wesnoth.workspace.

    NOTE: The first time CodeBlocks is opened you will be asked to select a compiler. If installation from step 3 is complete it may detect it for you, in which case you can select the GNU GCC compiler which will produce some default selections for step 6 - be sure to change any that don't match as directed below.

  6. Go to the Settings -> Compiler option in the menu, and choose the Global compiler settings -> Toolchain executables tab in the settings dialog. Enter the following settings into the text boxes:

    • Compiler's installation directory: the path to which you installed mingw-w64 (click on ... to browse for it).
    • C compiler, C++ compiler, Linker for dynamic libs: g++.exe
    • Linker for static libs: ar.exe
  7. Change to the Search directories -> Compiler tab and choose Add; enter the path to sdk_root/include_w64-mingw32/.

  8. Change to the Search directories -> Linker tab and choose Add; enter the path to sdk_root/lib_w64-mingw32/.

  9. OPTIONAL: By default, CodeBlocks will only run one compiler instance at a time, making the overall build process very slow even with fast hardware. If you have a multi-core processor, you may make better use of its power by increasing the value of the option "Number of processes for parallel builds" in the Build options tab. It is recommended to set this to the number of CPU cores your system has.

  10. Close the settings dialog.

  11. Choose the Build -> Build workspace option in the CodeBlocks menu. Once finished, wesnoth.exe and wesnothd.exe should appear in wesnoth_root.

  12. To be able to run your build, copy all *.dll files from the sdk_root/dll/ folder to wesnoth_root where the *.exe files are.