From 0f9e5021c6dd2883e91ee00bfb52d23f6480eeec Mon Sep 17 00:00:00 2001
From: Sebastian Oberschwendtner <sebastian.oberschwendtner@tum.de>
Date: Wed, 6 Mar 2024 14:29:45 +0100
Subject: [PATCH] Adds instructions how to build with Windows.

---
 docs/developer/build-environment/linux.md     | 49 +++++++++++
 docs/developer/build-environment/macos.md     | 13 +++
 docs/developer/build-environment/mingw.md     | 13 +++
 docs/developer/build-environment/windows.md   | 59 ++++++++------
 docs/developer/build-python.md                |  0
 docs/developer/{build-cpp.md => build/cpp.md} | 70 +++++++++++-----
 .../unix.md => build/python.md}               |  0
 docs/developer/cmake-presets.md               | 81 +++++++++++++++++++
 docs/developer/contribute.md                  | 67 +++++++++++++++
 docs/developer/environment-python.md          |  0
 docs/developer/ide-setup.md                   | 19 +++++
 docs/developer/including-libraries.md         |  2 +-
 docs/developer/prerequisites.md               |  9 ---
 docs/developer/setup.md                       |  8 --
 mkdocs.yml                                    | 49 +++++------
 15 files changed, 353 insertions(+), 86 deletions(-)
 create mode 100644 docs/developer/build-environment/linux.md
 create mode 100644 docs/developer/build-environment/macos.md
 create mode 100644 docs/developer/build-environment/mingw.md
 delete mode 100644 docs/developer/build-python.md
 rename docs/developer/{build-cpp.md => build/cpp.md} (71%)
 rename docs/developer/{build-environment/unix.md => build/python.md} (100%)
 create mode 100644 docs/developer/cmake-presets.md
 delete mode 100644 docs/developer/environment-python.md
 delete mode 100644 docs/developer/prerequisites.md
 delete mode 100644 docs/developer/setup.md

diff --git a/docs/developer/build-environment/linux.md b/docs/developer/build-environment/linux.md
new file mode 100644
index 0000000..645b8e6
--- /dev/null
+++ b/docs/developer/build-environment/linux.md
@@ -0,0 +1,49 @@
+---
+title: Setup Linux Environment
+summary: How to create the C++ build environment on Linux Systems
+authors:
+    - Sebastian Oberschwendtner
+date: 2024-03-01
+---
+## Introduction
+We use the basic linux tools to build *UNICADO* on Linux.
+The tools used are:
+
+- Compiler: `GCC` + `make`
+- Generator tool: `CMake`
+- Package manager: &rarr; The package manager of your **Linux** distribution should suffice
+
+---
+
+## Install Build Tools
+Since there are many distributions out there and they all call the package which contains all build tools differently, we can provide just a small set of examples.
+If you distribution is not listed here, make sure you at least install:
+
+- `gcc` + `g++`
+- `make`
+- `gdb`
+- `git`
+
+=== "Arch"
+
+    ```{.sh .copy}
+    sudo pacman -Syu
+    sudo pacman -S devtools
+    ```
+
+=== "Ubuntu"
+
+    ```{.sh .copy}
+    sudo apt-get update
+    sudo apt-get install build-essential
+    ```
+---
+
+## Install Other Tools
+For the other tools, we assume you know how to use your package manager. :wink:
+Please install the following:
+
+|Package|Version|
+|---|---|
+|`python`| Preferably **3.11**|
+|`cmake`| > **3.25**|
\ No newline at end of file
diff --git a/docs/developer/build-environment/macos.md b/docs/developer/build-environment/macos.md
new file mode 100644
index 0000000..c641236
--- /dev/null
+++ b/docs/developer/build-environment/macos.md
@@ -0,0 +1,13 @@
+---
+title: Setup MacOS Environment
+summary: How to create the C++ build environment on MacOS Systems
+authors:
+    - Sebastian Oberschwendtner
+date: 2024-03-01
+---
+
+!!! info
+    We have no documentation (yet) how to setup the build environment for *MacOS*.
+    Bit since it is also a *Unix* based system, the standard **GCC** compiler should work as well.
+    &rArr; Feel free to experiment and provide documentation of your findings. :apple: :wink:
+
diff --git a/docs/developer/build-environment/mingw.md b/docs/developer/build-environment/mingw.md
new file mode 100644
index 0000000..61a54b6
--- /dev/null
+++ b/docs/developer/build-environment/mingw.md
@@ -0,0 +1,13 @@
+---
+title: Setup MSYS2/MinGW Environment
+summary: How to create the C++ build environment on Windows using MSYS2.
+authors:
+    - Sebastian Oberschwendtner
+date: 2024-03-01
+---
+!!! warning
+    Using **MSYS2** to build *UNICADO* may work, but is no longer maintained by us!
+    So things could have changed in the meantime.
+
+> Microsoft provides a good manual how to install **MSYS2**/MinGW in their [Documenation :octicons-link-external-16:](https://code.visualstudio.com/docs/cpp/config-mingw){:target="_blank"}.
+Although this targets their IDE, the process of installing **MYS2** applies for us as well regardless of which IDE you use.
\ No newline at end of file
diff --git a/docs/developer/build-environment/windows.md b/docs/developer/build-environment/windows.md
index 915f249..657b286 100644
--- a/docs/developer/build-environment/windows.md
+++ b/docs/developer/build-environment/windows.md
@@ -17,8 +17,18 @@ The tools used are:
 
 ---
 
+## Install Python
+- Download and install **Python**: [Download Python :octicons-link-external-16:](https://www.python.org/downloads/windows/){:target="_blank"}
+
+!!! warning
+    Please install version  **3.11**!
+
+- Select all the default options and check the option to add Python to *PATH*.
+
+---
+
 ## Install Build Tools
-- Download the build tools from Microsoft: [Download Build Tools :octicons-link-external-16:](https://visualstudio.microsoft.com/downloads/?q=build+tools#build-tools-for-visual-studio-2022)
+- Download the build tools from Microsoft: [Download Build Tools :octicons-link-external-16:](https://visualstudio.microsoft.com/downloads/?q=build+tools#build-tools-for-visual-studio-2022){:target="_blank"}
 
 The page should like something like this:
 ![Download Build Tools](../../assets/images/screenshots/download-build-tools.png)
@@ -26,8 +36,7 @@ The page should like something like this:
 - Execute the installer and install at least these components:
     - *Desktop development with C++*
     - *C++ CMake tools for Windows*
-    - *C++ Clang Compiler for Windows*
-    - *C++ Clang tools for Windows*
+    - *C++ Clang tools for Windows* (&rArr; This will include the Clang compiler as well.)
 
 !!! attention
     The latest Version of Visual Studio can change throughout time. Just download the latest one and keep a note which version that is.
@@ -35,41 +44,43 @@ The page should like something like this:
 ---
 
 ## Install CMake
-- Download and Install the lates Release of **CMake**: [Download CMake :octicons-link-external-16:](https://cmake.org/download/)
+- Download and Install the latest Release of **CMake**: [Download CMake :octicons-link-external-16:](https://cmake.org/download/){:target="_blank"}
 
-!!! note 
-    Install at least **Version 3.25**!
+!!! important 
+    Install at least version **3.25**!
 
 - Enable the option to make **CMake** available in *PATH*.
 
 ---
 
+## Install Git
+- Download and Install the latest Release of **Git**: [Download Git :octicons-link-external-16:](https://git-scm.com/download/win){:target="_blank"}
+- Enable the option to make **Git** available in *PATH*.
+- Leave the rest of the options to their defaults.
+
+---
+
 ## Install vcpkg
 *vcpkg* is the open-source package manager maintained by Microsoft we use to install and manage our dependencies.
 
-- Follow the instructions [here :octicons-link-external-16:](https://vcpkg.io/en/getting-started)
+- *vcpkg* recommends to keep the path where you install it short, so create the following folder:
+
+    :octicons-file-directory-16: `C:\dev`
 
 !!! warning
-    Make sure to use the install path `C:\dev\vcpkg` as mentioned in the *get started* guide!
+    From now on we assume, that you installed *vcpkg* in this folder!
+
+- Open a terminal inside `C:\dev`
+- Clone the *vcpkg* repository:
 
-&rArr; The getting started guide also explains how to install packages and use them with **Cmake**.
-Make sure your IDE is configured to pass the additional parameters needed to include *vcpkg* to **CMake**, which is:
-```sh
--DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake
+```{.sh .copy}
+git clone git@github.com:microsoft/vcpkg.git
 ```
 
----
+- Create the *vcpkg* executable by executing this command in the opened terminal:
 
-## Building via terminal
-- First make sure all required dependencies are installed using **vcpgk**!
-- Configure the project you want to build with **CMake**:
-```sh
-cmake -B build -S . -G "Visual Studio 17 2022" -A x64 -T ClangCL,host=x64 -DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake
+```{.cmd .copy}
+.\vcpkg\bootstrap-vcpkg.bat
 ```
-!!! tip
-    The version of *Visual Studio* depends on which version of the build tools you have installed! :point_up:
 
-- Build in *Debug* mode:
-```sh
-cmake --build build --config=Debug
-```
\ No newline at end of file
+You can get more information how *vcpkg* can be installed in the [Readme :octicons-link-external-16:](https://github.com/microsoft/vcpkg/?tab=readme-ov-file#getting-started){:target="_blank"} of the project itself.
\ No newline at end of file
diff --git a/docs/developer/build-python.md b/docs/developer/build-python.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/developer/build-cpp.md b/docs/developer/build/cpp.md
similarity index 71%
rename from docs/developer/build-cpp.md
rename to docs/developer/build/cpp.md
index dd3ba20..feee417 100644
--- a/docs/developer/build-cpp.md
+++ b/docs/developer/build/cpp.md
@@ -5,38 +5,68 @@ authors:
     - Sebastian Oberschwendtner
 date: 2023-09-12
 ---
-**UNICADO** uses [CMake :octicons-link-external-16:](https://cmake.org/) for generating the build files.
+**UNICADO** uses [CMake :octicons-link-external-16:](https://cmake.org/){:target="_blank"} for generating the build files.
 CMake is a build system generator, which allows for cross-platform compilation.
-For more information about this system, please refer to its [Documentation :octicons-link-external-16:](https://cmake.org/cmake/help/latest/).
+For more information about this system, please refer to its [Documentation :octicons-link-external-16:](https://cmake.org/cmake/help/latest/){:target="_blank"}.
+
+## Install required dependencies
+We do not provide an automatic way to get the required dependencies, since we do not want to force any specific package manager on you.
+*UNICADO* has currently these external dependencies for building:
+
+- [Eigen3 :octicons-link-external-16:](https://eigen.tuxfamily.org/index.php?title=Main_Page){:target="_blank"}
+- [Boost :octicons-link-external-16:](https://www.boost.org/){:target="_blank"}
+- [CGAL :octicons-link-external-16:](https://www.cgal.org/){:target="_blank"}
+
+However, if you followed the instructions in *Prerequisites* you can install them as follows:
+
+=== "Windows"
+
+    ``` { .cmd .copy }
+    C:\dev\vcpkg\vcpkg.exe install eigen3 boost cgal
+    ```
+
+    !!! note
+        This may take some time and you can install one package after the other.
+
+=== "MinGW"
+
+    ``` { .sh .copy }
+    pacman -S mingw-w64-ucrt-x86_64-eigen3 mingw-w64-ucrt-x86_64-boost mingw-w64-ucrt-x86_64-cgal
+    ```
+=== "Unix"
+
+    &rArr; Use your the package manager of your distribution to install the packages. :wink:
+
 
 ## Configure CMake
 Since **CMake** is independent of the used platform, it needs to figure out on which platform you are running your current build. This process is called *Configuration*. During configuration, **CMake** checks on which platform you are and selects the appropriate build system/compiler.
 **CMake** wants to separate the build specific files from the source files. Usually, this is done by providing a separate *build* directory, where all the intermediate files are stored before actually executing the build.
-With this information in mind the configuration steps are:
 
-1. Open a terminal inside the root directory of the *rAircraftDesign* repository.
-2. Create a folder called `build` if it does not exist yet with `mkdir build`.
+!!! note
+    **CMake** introduced the concept of [Presets :octicons-link-external-16:](https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html){:target="_blank"} which allows to specify different sets of arguments which are passed to **CMake** when configuring the project.
+    We provide a basic preset file which contains a reasonable default configuration for each platform we support. You can however, create your own :octicons-file-16: `CMakeUserPresets.json` file along our preset file to override our settings. See [CMale Presets](../cmake-presets.md) for more information about that.
 
-    !!! note
-        This *build* folder is not part of the repository.
+### Terminal
+The programmers way to configure **CMake**:
 
-3. Configure **CMake** by explicitly telling it to generate build files for your platform with the option `-G`:
+1. Open a terminal inside the root directory of the *rAircraftDesign* repository.
+2. Configure **CMake** by explicitly telling it which preset to use:
 
 === "Windows"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "Visual Studio 16 2019" -A x86 -T ClangCL,hosT=x86
+    cmake -B build -S . --preset Windows
     ```
 
 === "MinGW"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "MinGW Makefiles"
+    cmake -B build -S . --preset MSYS2
     ```
-=== "Unix"
+=== "Linux"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "Unix Makefiles"
+    cmake -B build -S . --preset Linux
     ```
 
 During this configuration, **CMake** generates a cache file which remembers some parameters which are re-used when you configure **CMake** again.
@@ -46,18 +76,18 @@ When this happens, you can tell **CMake** explicitly to refresh this cache by:
 === "Windows"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "Visual Studio 16 2019" -A x86 -T ClangCL,hosT=x86 --fresh
+    cmake -B build -S . --preset Windows --fresh
     ```
 
 === "MinGW"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "MinGW Makefiles" --fresh
+    cmake -B build -S . --preset MSYS2 --fresh
     ```
-=== "Unix"
+=== "Linux"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "Unix Makefiles" --fresh
+    cmake -B build -S . --preset Linux --fresh
     ```
 
 Alternatively, you can just delete everything inside the build directory before configuring **CMake** again.
@@ -73,19 +103,19 @@ The default build configuration of **CMake** is ^^Release^^. The build configura
 === "MinGW"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE:STRING=Debug 
+    cmake -B build -S . --preset MSYS2 -DCMAKE_BUILD_TYPE:STRING=Debug 
     ```
-=== "Unix"
+=== "Linux"
 
     ``` { .sh .copy }
-    cmake -B build -S . -G "Unix Makefiles"-DCMAKE_BUILD_TYPE:STRING=Debug 
+    cmake -B build -S . --preset Linux -DCMAKE_BUILD_TYPE:STRING=Debug
     ```
 
 ### GUI
 **CMake** also comes with a GUI which can be used for the configuration process.
 The GUI looks like this:
 
-![CMake GUI](../assets/images/screenshots/cmake-gui.png)
+![CMake GUI](../../assets/images/screenshots/cmake-gui.png)
 
 It works the same as the command line interface.
 You have to specify the path to the source files and to the build directory.
diff --git a/docs/developer/build-environment/unix.md b/docs/developer/build/python.md
similarity index 100%
rename from docs/developer/build-environment/unix.md
rename to docs/developer/build/python.md
diff --git a/docs/developer/cmake-presets.md b/docs/developer/cmake-presets.md
new file mode 100644
index 0000000..8e47e07
--- /dev/null
+++ b/docs/developer/cmake-presets.md
@@ -0,0 +1,81 @@
+---
+title: CMake Presets
+summary: How to define your custom CMake preset
+authors:
+    - Sebastian Oberschwendtner
+date: 2024-03-06
+---
+## Introduction
+If you don't know what **CMake** presets are, read about them in their [Documenation :octicons-link-external-16:](https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html){:target="_blank"}.
+
+We provide as standard set of presets in :octicons-file-16: `CMakePresets.json` which gives you some reasonable defaults.
+However, our assumptions may not apply to your build environment.
+So there is the option to provide a custom :octicons-file-16: `CMakeUserPresets.json` which can override certain options of our presets.
+Just make sure your preset inherits our defaults.
+The following provides preset templates you can build your preset upon.
+
+!!! warning
+    Do not include the :octicons-file-16: `CMakeUserPresets.json` file into version control!
+    This file should be an untracked local file on your machine.
+
+## User Presets
+
+=== "Windows"
+
+    A possible user preset for the *Windows* preset:
+    ```{.json .copy}
+    {
+        "version": 6
+        "configurePresets": [
+            {
+                "name": "default",
+                "inherits": "Windows",
+                <your custom overrides here>
+            }
+        ]
+    }
+    ```
+
+=== "MinGW"
+
+    A possible user preset for running *MSYS2* on Windows:
+    ```{.json .copy}
+    {
+        "version": 6
+        "configurePresets": [
+            {
+                "name": "default",
+                "inherits": "MSYS2",
+                <your custom overrides here>
+            }
+        ]
+    }
+    ```
+
+=== "Linux"
+
+    A possible user preset for the *Linux* preset:
+    ```{.json .copy}
+    {
+        "version": 6
+        "configurePresets": [
+            {
+                "name": "default",
+                "inherits": "Linux",
+                <your custom overrides here>
+            }
+        ]
+    }
+    ```
+
+!!! note
+    The templates do not provide any concrete custom settings, since those might be very specific to your system. In general, **CMake** will tell you when something is wrong with the default settings and then you can add your custom override in the user preset.
+    Feel free to look at our presets to understand what each provided preset does and why this may not be applicable to your system.
+
+If you used the `name` parameter as shown in the templates you can use the custom preset when configuring **CMake** like this:
+```
+cmake -B build -S . --preset default
+``` 
+
+!!! tip
+    Most **CMake** IDE plugins should recognize these preset files and provide a way for you to select the preset you want.
\ No newline at end of file
diff --git a/docs/developer/contribute.md b/docs/developer/contribute.md
index e69de29..f65d268 100644
--- a/docs/developer/contribute.md
+++ b/docs/developer/contribute.md
@@ -0,0 +1,67 @@
+---
+title: How to contribute to UNICADO
+summary: Explains the basic procedure how to contribute.
+authors:
+    - Sebastian Oberschwendtner
+date: 2024-03-05
+---
+# How to contribute to UNICADO
+
+You want to contribute to UNICADO?
+
+Awesome! :sunglasses: Please make sure to read our *style guides* first:
+
+- Our [&rdca; C++ Code Style](style/cpp.md).
+- Our [&rdca; Python Code Style](style/python.md).
+
+## Commit rules and messages
+
+- Commit messages should be clear and concise.
+- Use **English** language.
+- Use the `#` to close and refer to issues. 
+- Please use **present tense** to express what the commit does.
+- **Don't** commit code which you know is not working.
+
+## Types of contribution
+We use *issues* and *merge request* to manage the contribution to UNICADO.
+You should always create an issue **first**, before creating the merge request.
+The issue is used to discuss and plan the required work.
+An issue should always have at least the following *labels*:
+
+- **Type:** The type of the issue, can be: `type::bug` `type::feature` `type::todo` `type::documentation`
+- **Tool:** Specify which *tool manager* is responsible, i.e. `library::aixml` or `module::calculatePolar`
+- **Priority**: *Optional*, can be: `priority::low` `priority::medium` `priority::high`
+
+We have *issue templates* for each issue **type**.
+Please use them accordingly and fill out all relevant information.
+The following gives you further information when to use which template:
+
+### Did you find a bug?
+
+- **Ensure the bug was not already reported** by searching under *Issues*.
+- If you're unable to find a related issue addressing the problem, open a new one.
+Be sure to use the `Bug` **Issue Template** and give a fitting **title and clear description**.
+Give as much relevant information as possible.
+- Please include **test to reproduce** the bug.
+
+### Do you intend to add a new feature or method?
+
+- Create an issue using the `Feature` template.
+- If you are implementing a new method, please provide relevant references.
+
+### Do you want to assign a maintenance task to yourself or somebody?
+
+- Create an issue using the `Todo` template.
+- Please describe the task in a meaningful manner, so others can understand what the task involves and could take over.
+
+### Is something unclear in the documentation?
+
+- Please ask the person who implemented the part the documentation refers to.
+The issues should **not** be used as a *Q/A* forum.
+- If you have concrete information/ideas how the documentation can be improved, create an issue using the `Documentation` template.
+
+---
+
+:heart: Thanks for reading this! We are looking forward to your contributions!
+
+UNICADO Team
diff --git a/docs/developer/environment-python.md b/docs/developer/environment-python.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/developer/ide-setup.md b/docs/developer/ide-setup.md
index e69de29..cba423b 100644
--- a/docs/developer/ide-setup.md
+++ b/docs/developer/ide-setup.md
@@ -0,0 +1,19 @@
+---
+title: IDE Setup
+summary: How to setup certain IDEs
+authors:
+    - Sebastian Oberschwendtner
+data: 2024-03-06
+---
+## Introduction
+In general, the build system of *UNICADO* is not based on a specific IDE.
+All the required tools can be called directly via a terminal.
+We cannot provide a manual for every IDE out there, but here is a quick overview of the most popular IDEs we use in the project:
+
+## Visual Studio Code - VS Code
+[VSCode :octicons-link-external-16:](https://code.visualstudio.com/){:target="_blank"} is a popular open-source IDE from Microsoft.
+It offers great flexibility with its capability to install extensions.
+You can explorer the good [Documentation :octicons-link-external-16:](https://code.visualstudio.com/docs/cpp/config-msvc){:target="_blank"} of **VSCode** how to set it up for C++.
+
+!!! note
+    Do not confuse **VS Code** with _Visual Studio_. :point_up: Those are two __different__ IDEs...
\ No newline at end of file
diff --git a/docs/developer/including-libraries.md b/docs/developer/including-libraries.md
index f4d41a1..01079fb 100644
--- a/docs/developer/including-libraries.md
+++ b/docs/developer/including-libraries.md
@@ -20,7 +20,7 @@ In the **UNICADO** project, the most important decisions to make are:
 
 Each of those decisions has a corresponding option when configuring **CMake**.
 So you can decide for your situation what suits your workflow the best.
-The default configuration when [Building with CMake](build-cpp.md) is:
+The default configuration when [Building with CMake](build/cpp.md) is:
 
 - `BUILD_SHARED_LIBS=OFF` :fontawesome-solid-arrow-right: Build **static** libraries.
 - `FIND_LIBRARIES_AS_PACKAGE=OFF` :fontawesome-solid-arrow-right: Include **targets** from the submodule and recompile libraries each time there are changes.
diff --git a/docs/developer/prerequisites.md b/docs/developer/prerequisites.md
deleted file mode 100644
index 1b32b97..0000000
--- a/docs/developer/prerequisites.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: Build Instructions
-summary: Contains the instruction to get the build process up and running.
-authors:
-    - Sebastian Oberschwendtner
-date: 2023-09-06
-glightbox: false
----
-# Build Instructions
\ No newline at end of file
diff --git a/docs/developer/setup.md b/docs/developer/setup.md
deleted file mode 100644
index 958f7d5..0000000
--- a/docs/developer/setup.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Software Development Setup
-summary: How to setup the environment to successfully contribute to UNICADO.
-authors:
-    - Sebastian Oberschwendtner
-date: 2023-09-06
-glightbox: false
----
diff --git a/mkdocs.yml b/mkdocs.yml
index 9766863..c5f6711 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -92,35 +92,36 @@ nav:
     - 'getting-started/takeoff.md'
   - 'Developer':
     - 'How to Contribute': 'developer/contribute.md'
-    - 'Build Environment':
-      - 'IDE Setup': 'developer/ide-setup.md'
-      - 'C++ Environment':
-        - 'Windows': 'developer/build-environment/windows.md'
-        - 'Unix': 'developer/build-environment/unix.md'
-      - 'Python Environment': 'developer/environment-python.md'
     - 'Build Instructions':
-      - 'Prerequisites': 'developer/prerequisites.md'
-      - 'Building C++ Modules': 'developer/build-cpp.md'
-      - 'Build Python Modules': 'developer/build-python.md'
+      - 'Prerequisites':
+        - 'Windows': 'developer/build-environment/windows.md'
+        - 'Linux': 'developer/build-environment/linux.md'
+        - 'MacOS': 'developer/build-environment/macos.md'
+        - 'MSYS2/MinGW (deprecated)': 'developer/build-environment/mingw.md'
+      - 'Build':
+        - 'C++': 'developer/build/cpp.md'
+        - 'Python': 'developer/build/python.md'
       - 'Libraries': 'developer/including-libraries.md'
+      - 'CMake Presets': 'developer/cmake-presets.md'
     - 'Style Guide':
       - 'C++': 'developer/style/cpp.md'
       - 'Python': 'developer/style/python.md'
-  - 'Aircraft Exchange File':
-    - 'General': 'aircraft-xml/general.md'
-    - 'MassesAndLoadings': 'aircraft-xml/masses.md'
-    - 'Geometry': 'aircraft-xml/geometry.md'
-    - 'Structure': 'aircraft-xml/structure.md'
-    - 'Accommodation': 'aircraft-xml/accommodation.md'
-    - 'Propulsion': 'aircraft-xml/propulsion.md'
-    - 'Systems': 'aircraft-xml/systems.md'
-    - 'Aerodynamics': 'aircraft-xml/aerodynamics.md'
-    - 'StabilityAndControlCharacteristics': 'aircraft-xml/stability.md'
-    - 'Performance': 'aircraft-xml/performance.md'
-    - 'MonetaryValues': 'aircraft-xml/monetary.md'
-    - 'EcologicalValues': 'aircraft-xml/ecological.md'
-    - 'Requirements': 'aircraft-xml/requirements.md'
-    - 'DesignSpecification': 'aircraft-xml/specification.md'
+    - 'IDE Setup': 'developer/ide-setup.md'
+  # - 'Aircraft Exchange File':
+  #   - 'General': 'aircraft-xml/general.md'
+  #   - 'MassesAndLoadings': 'aircraft-xml/masses.md'
+  #   - 'Geometry': 'aircraft-xml/geometry.md'
+  #   - 'Structure': 'aircraft-xml/structure.md'
+  #   - 'Accommodation': 'aircraft-xml/accommodation.md'
+  #   - 'Propulsion': 'aircraft-xml/propulsion.md'
+  #   - 'Systems': 'aircraft-xml/systems.md'
+  #   - 'Aerodynamics': 'aircraft-xml/aerodynamics.md'
+  #   - 'StabilityAndControlCharacteristics': 'aircraft-xml/stability.md'
+  #   - 'Performance': 'aircraft-xml/performance.md'
+  #   - 'MonetaryValues': 'aircraft-xml/monetary.md'
+  #   - 'EcologicalValues': 'aircraft-xml/ecological.md'
+  #   - 'Requirements': 'aircraft-xml/requirements.md'
+  #   - 'DesignSpecification': 'aircraft-xml/specification.md'
   - 'About':
     - 'license.md'
     - 'contact.md'
-- 
GitLab