From 1bc1e914c86701e6858ee213ca3a605da398f37a Mon Sep 17 00:00:00 2001
From: Joscha Schmiedt <joscha@schmiedt.dev>
Date: Tue, 15 Oct 2024 21:04:50 +0200
Subject: [PATCH] Add Windows "Makefile"

---
 make.ps1 | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 make.ps1

diff --git a/make.ps1 b/make.ps1
new file mode 100644
index 0000000..ad8e12f
--- /dev/null
+++ b/make.ps1
@@ -0,0 +1,89 @@
+param (
+    [string]$target
+)
+
+$buildType = "Release"
+$cppStd=17
+
+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=$buildType -s compiler.cppstd=$cppStd 
+        cmake --preset conan-default
+}
+
+function Invoke-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_inttests.sln)) {
+        Write-Output "Please run conan-install first."
+        exit 1
+    }
+    msbuild .\build\liblinkahead_inttests.sln /property:Configuration=$buildType
+}
+
+function Invoke-Tests {
+    Write-Output "Running tests..."
+
+    Set-Location .\build\
+    ctest
+    Set-Location ..\
+}
+
+function Invoke-Create {
+    Write-Output "Creating Conan package..."
+    conan create . 
+}
+
+# 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"
+    exit 1
+}
+
+# locate the latest Visual Studio installation
+$currentPath = Get-Location
+$installPath = &"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath
+Import-Module (Join-Path $installPath "Common7\Tools\Microsoft.VisualStudio.DevShell.dll")
+Enter-VsDevShell -VsInstallPath $installPath
+Set-Location $currentPath
+
+
+# Windows is with Release only for now
+
+switch ($target) {
+    "build" {
+        Invoke-Build
+    }
+    "test" {
+        Invoke-Tests
+    }
+    "conan-install" {
+        Install-Conan
+    }
+    "conan-create" {
+        Invoke-Create
+    }
+    "clean"{
+        Write-Output "Cleaning the project..."
+        Remove-Item -Recurse -Force .\build\*
+    }
+    "all" {
+        Install-Conan
+        Invoke-Build
+        Invoke-Tests
+        Invoke-Create
+    }
+    default {
+        Write-Output "Usage: .\make.ps1 [all|conan-install|build|test|clean]"
+    }
+}
-- 
GitLab