From 530cc3976dd43d3654222f375d505ac5c13be468 Mon Sep 17 00:00:00 2001
From: Joscha Schmiedt <schmiedt@uni-bremen.de>
Date: Fri, 6 Sep 2024 20:38:44 +0200
Subject: [PATCH] Update build instructions on Windows to use make.ps1

---
 doc/Install_develop.rst | 29 +++++++---------
 make.ps1                | 77 ++++++++++++++++++++++++-----------------
 2 files changed, 59 insertions(+), 47 deletions(-)

diff --git a/doc/Install_develop.rst b/doc/Install_develop.rst
index 0f1b193..8661d8b 100644
--- a/doc/Install_develop.rst
+++ b/doc/Install_develop.rst
@@ -108,22 +108,19 @@ How to build on Windows
 We use `Visual Studio
 2022 <https://visualstudio.microsoft.com/de/vs/features/cplusplus/>`__
 as compiler. We use `cmake <https://cmake.org/download/>`__ as build
-tool.
-
-1. Install Python and create a virtual environment with the dependencies in `requirements.txt`.
-2. Activate the environment run in the repository folder: ``conan install . --build=missing -s build_type=Release``
-3. ``cmake --preset conan-default``
-4. Open ``build/liblinkahead.sln`` with Visual Studio, change the
-   buildtype to ``Release`` and build the project (ALL_BUILD). (You
-   can open Tools/Command Line/Developer Command Prompt and execute
-   ``msbuild liblinkahead.sln /property:Configuration=Release``)
-5. Try running the cli clients in ``.\build\Release\``.
-
-Known problems
-^^^^^^^^^^^^^^
-
--  Building the unit tests on Windows currently fails with linker errors. See 
-   `#90 <https://gitlab.indiscale.com/caosdb/src/caosdb-cpplib/-/issues/90>`__
+tool, which can be installed together with Visual Studio. 
+
+1. Install Python and create a virtual environment with the dependencies in
+   `requirements.txt`.
+2. In a PowerShell, activate the environment and run the following commands from the
+   repository root:
+3. ``conan profile detect --force`` (and check the output)
+3. ``make.ps1 conan-install``
+4. ``make.ps1 build``
+
+You'll find the shared libraries and cli clients in ``.\build\Release\``. To run the tests,
+use ``make.ps1 test``. As a shortcut to run all steps, use ``make.ps1 all``.
+
 
 Troubleshooting
 ~~~~~~~~~~~~~~~
diff --git a/make.ps1 b/make.ps1
index 72c2230..64d73e6 100644
--- a/make.ps1
+++ b/make.ps1
@@ -2,6 +2,43 @@ param (
     [string]$target
 )
 
+function Install-Conan {
+    Write-Output "Installing Release dependencies with Conan..."
+        # check if conan is available
+        if (-not (Get-Command conan -ErrorAction SilentlyContinue)) {
+            Write-Output "Conan is not available. Please install Conan or activate the Conan environment venv"
+            exit 1
+        }
+        conan install . --build=missing -s build_type=Release -s compiler.cppstd=17 
+        cmake --preset conan-default
+}
+
+function Build-Project {
+    Write-Output "Building the project..."
+    # check if msbuild is available
+    if (-not (Get-Command msbuild -ErrorAction SilentlyContinue)) {
+        Write-Output "msbuild is not available. Please install Visual Studio or open the Developer PowerShell."
+        exit 1
+    }
+    # check if conan install was run
+    if (-not (Test-Path .\build\liblinkahead.sln)) {
+        Write-Output "Please run conan-install first."
+        exit 1
+    }
+    msbuild .\build\liblinkahead.sln /property:Configuration=Release
+}
+
+function Invoke-Tests {
+    Write-Output "Running tests..."
+    # check if build was run before
+    if (-not (Test-Path .\build\Release\linkahead.dll)) {
+        Write-Output "Please build the project first."
+        exit 1
+    }
+    Set-Location .\build\
+    ctest
+}
+
 # check if vswhere is available
 if (-not (Test-Path "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe")) {
     Write-Output "vswhere is not available. Please install Visual Studio"
@@ -20,46 +57,24 @@ Set-Location $currentPath
 
 switch ($target) {
     "build" {
-        Write-Output "Building the project..."
-        # check if msbuild is available
-        if (-not (Get-Command msbuild -ErrorAction SilentlyContinue)) {
-            Write-Output "msbuild is not available. Please install Visual Studio or open the Developer PowerShell:."
-            exit 1
-        }
-        # check if conan install was run
-        if (-not (Test-Path .\build\liblinkahead.sln)) {
-            Write-Output "Please run conan-install first."
-            exit 1
-        }
-	    msbuild .\build\liblinkahead.sln /property:Configuration=Release
+        Build-Project
     }
     "test" {
-        Write-Output "Running tests..."
-        # check if build was run before
-        if (-not (Test-Path .\build\Release\linkahead.dll)) {
-            Write-Output "Please build the project first."
-            exit 1
-        }
-        Set-Location .\build\
-        ctest
-        
+        Invoke-Tests
     }
     "conan-install" {
-        Write-Output "Installing Release dependencies with Conan..."
-        # check if conan is available
-        if (-not (Get-Command conan -ErrorAction SilentlyContinue)) {
-            Write-Output "Conan is not available. Please install Conan or activate the Conan environment venv"
-            exit 1
-        }
-        conan install . --build=missing -s build_type=Release -s compiler.cppstd=17 
-	cmake --preset conan-default
+        Install-Conan
     }
     "clean"{
         Write-Output "Cleaning the project..."
         Remove-Item -Recurse -Force .\build\*
     }
-
+    "all" {
+        Install-Conan
+        Build-Project
+        Invoke-Tests
+    }
     default {
-        Write-Output "Usage: .\script.ps1 [conan-install|build|test|clean]"
+        Write-Output "Usage: .\make.ps1 [all|conan-install|build|test|clean]"
     }
 }
-- 
GitLab