From c8d00a8034a5c526ea76031fa985e53d2282183a Mon Sep 17 00:00:00 2001
From: General Kroll <generalkroll0@gmail.com>
Date: Tue, 3 Jan 2023 09:58:14 +1100
Subject: version-configurable

Summary:

- `mingw` version configurable through input.
- If no version is supplied, then `mingw` version will fall back to package manager default.
---
 README.md  | 26 ++++++++++++++------------
 action.yml | 30 ++++++++++++++++++++++++++----
 2 files changed, 40 insertions(+), 16 deletions(-)

diff --git a/README.md b/README.md
index cea903d..d0494aa 100644
--- a/README.md
+++ b/README.md
@@ -30,18 +30,20 @@ Disable this by setting the `cc` parameter to `0`.
 API
 ---
 
-| Input     | Value   | Default | Description
-| --------- | ------- | ------- | -----------
-| platform  | x64     | ✓       | Install the x86_64 toolchain.
-|           | *any*   |         | Install the i686 toolchain.
-| cygwin    | *any*   | ✓       | Install native binaries.
-|           | 1       |         | Install Cygwin packages.
-| static    | 1       | ✓       | Enable the static-linking workaround.
-|           | *any*   |         | Disable the static-linking workaround.
-| cc        | 1       | ✓       | Set up `cc`/`c++` executables.
-|           | *any*   |         | Don't set up `cc`/`c++`.
-| hardlinks | *any*   | ✓       | Cygwin: don't convert any symlinks.
-|           | 1       |         | Cygwin: convert symlinks in /usr/bin to hardlinks.
+| Input     | Value    | Default | Description
+| --------- | -------- | ------- | -----------
+| platform  | x64      | ✓       | Install the x86_64 toolchain.
+|           | *any*    |         | Install the i686 toolchain.
+| cygwin    | *any*    | ✓       | Install native binaries.
+|           | 1        |         | Install Cygwin packages.
+| static    | 1        | ✓       | Enable the static-linking workaround.
+|           | *any*    |         | Disable the static-linking workaround.
+| cc        | 1        | ✓       | Set up `cc`/`c++` executables.
+|           | *any*    |         | Don't set up `cc`/`c++`.
+| hardlinks | *any*    | ✓       | Cygwin: don't convert any symlinks.
+|           | 1        |         | Cygwin: convert symlinks in /usr/bin to hardlinks.
+| version   |          | ✓       | Mingw version will be package manager default.
+|           | *string* |         | Mingw version specified will be installed, packager manager permitting.
 
 | Output  | Example                  | Description
 | ------- | ------------------------ | -----------
diff --git a/action.yml b/action.yml
index 4cd1eab..083430a 100644
--- a/action.yml
+++ b/action.yml
@@ -22,6 +22,10 @@ inputs:
     description: On Cygwin, replace executable symlinks with hardlinks
     required: false
     default: 0
+  version:
+    description: Specify mingw version; will fall back to package manager default if not supplied
+    required: false
+    default: ''
 
 outputs:
   prefix:
@@ -43,6 +47,8 @@ runs:
     - id: setup
       run: |
         New-Variable os -Value '${{ runner.os }}' -Option Constant
+        New-Variable mingw_version -Value '${{ inputs.version }}' -Option Constant
+        New-Variable mingw_version_supplied -Value ('${{ inputs.version }}' -ne '') -Option Constant
 
         New-Variable linux_host -Value ($os -eq 'Linux') -Option Constant
         New-Variable cygwin_host -Value ('${{ inputs.cygwin }}' -eq '1') -Option Constant
@@ -104,7 +110,11 @@ runs:
         }
 
         if ($linux_host) {
-            Install-Package mingw-w64
+            if ($mingw_version_supplied) {
+                Install-Package mingw-w64=$mingw_version
+            } else {
+                Install-Package mingw-w64
+            }
 
             # Make the compilers use the POSIX threading model, whatever that
             # is.  Without it, the stuff from <mutex>/<thread>/etc. doesn't
@@ -125,7 +135,11 @@ runs:
             }
         } elseif ($cygwin_host) {
             $pkg = if ($x64) { 'mingw64-x86_64-gcc-g++' } else { 'mingw64-i686-gcc-g++' }
-            Install-Package $pkg
+            if ($mingw_version_supplied) {
+                Install-Package $pkg --version $mingw_version
+            } else {
+                Install-Package $pkg
+            }
 
             $bin_dir = cygpath.exe -wa "/usr/$prefix/sys-root/mingw/bin"
             $lib_dir = cygpath.exe -wa "/usr/$prefix/sys-root/mingw/lib"
@@ -153,11 +167,19 @@ runs:
             if ($x64) {
                 # If the 32-bit version is installed, we won't detect that.
                 # But it's not that important, and we save a lot of time.
-                Install-Package $pkg
+                if ($mingw_version_supplied) {
+                    Install-Package $pkg --version $mingw_version
+                } else {
+                    Install-Package $pkg
+                }
             } else {
                 # Assuming the 64-bit version is installed.
                 Remove-Package $pkg
-                Install-Package $pkg --x86
+                if ($mingw_version_supplied) {
+                    Install-Package $pkg --version $mingw_version --x86
+                } else {
+                    Install-Package $pkg  --x86
+                }
             }
             echo $mingw_bin >> $env:GITHUB_PATH
 
-- 
cgit v1.2.3