setup-sdl: Use ninja build tool

From fce827625022e42e6e9538437a5c9741f22d8c27 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 17 Jun 2023 21:20:16 +0200
Subject: [PATCH] Use ninja build tool

---
 action.yml                    |    4 +
 package-lock.json             |  144 +-
 package.json                  |    4 +-
 packed/index.js               | 4531 +++++++++++++++++++++++++++++++--
 src/{tags.ts => constants.ts} |    5 +-
 src/main.ts                   |   57 +-
 src/ninja.ts                  |   59 +
 src/platform.ts               |   51 +
 src/{error.ts => util.ts}     |    0
 src/version.ts                |    4 +-
 10 files changed, 4536 insertions(+), 323 deletions(-)
 rename src/{tags.ts => constants.ts} (87%)
 create mode 100644 src/ninja.ts
 create mode 100644 src/platform.ts
 rename src/{error.ts => util.ts} (100%)

diff --git a/action.yml b/action.yml
index 2f53fd2..1b0dde7 100644
--- a/action.yml
+++ b/action.yml
@@ -13,6 +13,10 @@ inputs:
     description: "CMake build type (Release/Debug/RelWithDebInfo/MinSizeRel)"
     default: "Release"
     required: true
+  ninja:
+    description: "Use Ninja make files"
+    default: "true"
+    required: true
 outputs:
   prefix:
     description: "Actual root of the SDL package"
diff --git a/package-lock.json b/package-lock.json
index 292c695..fafbf4d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,7 +7,9 @@
       "name": "setup-sdl",
       "license": "MIT",
       "dependencies": {
-        "@actions/core": "^1.10.0"
+        "@actions/core": "^1.10.0",
+        "@actions/tool-cache": "^2.0.1",
+        "nodejs-file-downloader": "^4.12.1"
       },
       "devDependencies": {
         "@types/node": "^18.11.18",
@@ -30,6 +32,14 @@
         "uuid": "^8.3.2"
       }
     },
+    "node_modules/@actions/exec": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
+      "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
+      "dependencies": {
+        "@actions/io": "^1.0.1"
+      }
+    },
     "node_modules/@actions/http-client": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.1.0.tgz",
@@ -38,6 +48,41 @@
         "tunnel": "^0.0.6"
       }
     },
+    "node_modules/@actions/io": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz",
+      "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q=="
+    },
+    "node_modules/@actions/tool-cache": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-2.0.1.tgz",
+      "integrity": "sha512-iPU+mNwrbA8jodY8eyo/0S/QqCKDajiR8OxWTnSk/SnYg0sj8Hp4QcUEVC1YFpHWXtrfbQrE13Jz4k4HXJQKcA==",
+      "dependencies": {
+        "@actions/core": "^1.2.6",
+        "@actions/exec": "^1.0.0",
+        "@actions/http-client": "^2.0.1",
+        "@actions/io": "^1.1.1",
+        "semver": "^6.1.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "node_modules/@actions/tool-cache/node_modules/semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@actions/tool-cache/node_modules/uuid": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+      "bin": {
+        "uuid": "bin/uuid"
+      }
+    },
     "node_modules/@babel/runtime": {
       "version": "7.22.5",
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
@@ -422,6 +467,17 @@
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -756,7 +812,6 @@
       "version": "4.3.4",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
       "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
       "dependencies": {
         "ms": "2.1.2"
       },
@@ -1538,6 +1593,25 @@
       "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
       "dev": true
     },
+    "node_modules/follow-redirects": {
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/for-each": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -1804,6 +1878,18 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/ignore": {
       "version": "5.2.4",
       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -2266,6 +2352,25 @@
         "node": ">=8.6"
       }
     },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -2290,8 +2395,7 @@
     "node_modules/ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
     "node_modules/natural-compare": {
       "version": "1.4.0",
@@ -2311,6 +2415,17 @@
       "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
       "dev": true
     },
+    "node_modules/nodejs-file-downloader": {
+      "version": "4.12.1",
+      "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz",
+      "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==",
+      "dependencies": {
+        "follow-redirects": "^1.15.1",
+        "https-proxy-agent": "^5.0.0",
+        "mime-types": "^2.1.27",
+        "sanitize-filename": "^1.6.3"
+      }
+    },
     "node_modules/object-inspect": {
       "version": "1.12.3",
       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -2699,6 +2814,14 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/sanitize-filename": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz",
+      "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==",
+      "dependencies": {
+        "truncate-utf8-bytes": "^1.0.0"
+      }
+    },
     "node_modules/semver": {
       "version": "7.5.2",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
@@ -2888,6 +3011,14 @@
         "node": ">=8.0"
       }
     },
+    "node_modules/truncate-utf8-bytes": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
+      "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
+      "dependencies": {
+        "utf8-byte-length": "^1.0.1"
+      }
+    },
     "node_modules/tsconfig-paths": {
       "version": "3.14.2",
       "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
@@ -3034,6 +3165,11 @@
         "punycode": "^2.1.0"
       }
     },
+    "node_modules/utf8-byte-length": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
+      "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA=="
+    },
     "node_modules/uuid": {
       "version": "8.3.2",
       "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
diff --git a/package.json b/package.json
index c71e7ee..be150c3 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,9 @@
     "SDL"
   ],
   "dependencies": {
-    "@actions/core": "^1.10.0"
+    "@actions/core": "^1.10.0",
+    "@actions/tool-cache": "^2.0.1",
+    "nodejs-file-downloader": "^4.12.1"
   },
   "devDependencies": {
     "@types/node": "^18.11.18",
diff --git a/packed/index.js b/packed/index.js
index d3dce68..c6ffc3f 100644
--- a/packed/index.js
+++ b/packed/index.js
@@ -1,24 +1,58 @@
 /******/ (() => { // webpackBootstrap
 /******/ 	var __webpack_modules__ = ({
 
-/***/ 624:
+/***/ 7077:
 /***/ ((__unused_webpack_module, exports) => {
 
 "use strict";
 
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.SetupSdlError = void 0;
-class SetupSdlError extends Error {
-    constructor(message) {
-        super(message);
-    }
-}
-exports.SetupSdlError = SetupSdlError;
+exports.SDL_TAGS = exports.SDL_GIT_URL = exports.NINJA_VERSION = void 0;
+exports.NINJA_VERSION = "1.11.1";
+exports.SDL_GIT_URL = "https://github.com/libsdl-org/SDL.git";
+exports.SDL_TAGS = [
+    "2.0.22-RC1",
+    "2.0.22-RC2",
+    "2.0.22-RC3",
+    "release-2.0.0",
+    "release-2.0.1",
+    "release-2.0.2",
+    "release-2.0.3",
+    "release-2.0.4",
+    "release-2.0.5",
+    "release-2.0.6",
+    "release-2.0.7",
+    "release-2.0.8",
+    "release-2.0.9",
+    "release-2.0.10",
+    "release-2.0.12",
+    "release-2.0.14",
+    "release-2.0.16",
+    "release-2.0.18",
+    "release-2.0.20",
+    "release-2.0.22",
+    "prerelease-2.23.1",
+    "prerelease-2.23.2",
+    "release-2.24.0",
+    "release-2.24.1",
+    "release-2.24.2",
+    "prerelease-2.25.1",
+    "release-2.26.0",
+    "release-2.26.1",
+    "release-2.26.2",
+    "release-2.26.3",
+    "release-2.26.4",
+    "release-2.26.5",
+    "prerelease-2.27.1",
+    // Add SDL2 releases here
+    "prerelease-3.0.0",
+    // Add SDL3 releases here
+];
 
 
 /***/ }),
 
-/***/ 538:
+/***/ 9538:
 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
 
 "use strict";
@@ -47,48 +81,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
     return result;
 };
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-const child_process = __importStar(__nccwpck_require__(81));
-const fs = __importStar(__nccwpck_require__(147));
-const os = __importStar(__nccwpck_require__(37));
-const core = __importStar(__nccwpck_require__(186));
-const error_1 = __nccwpck_require__(624);
-const version_1 = __nccwpck_require__(970);
-const SDL_GIT_URL = "https://github.com/libsdl-org/SDL.git";
-var SdlBuildPlatform;
-(function (SdlBuildPlatform) {
-    SdlBuildPlatform["Windows"] = "Windows";
-    SdlBuildPlatform["Linux"] = "Linux";
-    SdlBuildPlatform["Macos"] = "MacOS";
-})(SdlBuildPlatform || (SdlBuildPlatform = {}));
-function get_sdl_build_platform() {
-    switch (os.platform()) {
-        case "linux":
-            return SdlBuildPlatform.Linux;
-        case "darwin":
-            return SdlBuildPlatform.Macos;
-        case "win32":
-            return SdlBuildPlatform.Windows;
-    }
-    throw new error_1.SetupSdlError("Unsupported build platform");
-}
-function get_platform_root_directory(build_platform) {
-    const root = core.getInput("root");
-    if (root) {
-        return root;
-    }
-    switch (build_platform) {
-        case SdlBuildPlatform.Windows:
-            return "C:/setupsdl";
-        case SdlBuildPlatform.Macos:
-        case SdlBuildPlatform.Linux:
-            return "/tmp/setup-sdl";
-        default:
-            throw new error_1.SetupSdlError("Unsupported SDL build platform");
-    }
-}
+const child_process = __importStar(__nccwpck_require__(2081));
+const fs = __importStar(__nccwpck_require__(7147));
+const core = __importStar(__nccwpck_require__(2186));
+const constants_1 = __nccwpck_require__(7077);
+const ninja_1 = __nccwpck_require__(6526);
+const util_1 = __nccwpck_require__(9731);
+const version_1 = __nccwpck_require__(6970);
+const platform_1 = __nccwpck_require__(5527);
 async function convert_git_branch_tag_to_hash(branch_tag) {
     const git_hash = await core.group(`Calculating git hash of ${branch_tag}`, async () => {
-        const command = `git ls-remote ${SDL_GIT_URL} ${branch_tag}`;
+        const command = `git ls-remote ${constants_1.SDL_GIT_URL} ${branch_tag}`;
         core.info(`Executing "${command}"`);
         const output = child_process.execSync(command, {
             stdio: "pipe",
@@ -108,7 +111,7 @@ async function checkout_sdl_git_hash(branch_tag_hash, directory) {
     fs.mkdirSync(directory, { recursive: true });
     await core.group(`Checking out ${branch_tag_hash} into ${directory}`, async () => {
         await echo_command_and_execute(`git init`, directory);
-        await echo_command_and_execute(`git remote add SDL ${SDL_GIT_URL}`, directory);
+        await echo_command_and_execute(`git remote add SDL ${constants_1.SDL_GIT_URL}`, directory);
         await echo_command_and_execute(`git fetch --depth 1 SDL ${branch_tag_hash}`, directory);
         await echo_command_and_execute(`git checkout FETCH_HEAD`, directory);
     });
@@ -134,10 +137,11 @@ async function cmake_configure_build(source_dir, build_dir, prefix_dir, build_ty
     });
 }
 async function run() {
-    const SDL_BUILD_PLATFORM = get_sdl_build_platform();
+    const SDL_BUILD_PLATFORM = (0, platform_1.get_sdl_build_platform)();
     core.info(`build platform=${SDL_BUILD_PLATFORM}`);
-    const SETUP_SDL_ROOT = get_platform_root_directory(SDL_BUILD_PLATFORM);
+    const SETUP_SDL_ROOT = (0, platform_1.get_platform_root_directory)(SDL_BUILD_PLATFORM);
     core.info(`root=${SETUP_SDL_ROOT}`);
+    const USE_NINJA = core.getBooleanInput("ninja");
     const REQUESTED_VERSION_TYPE = (0, version_1.parse_requested_sdl_version)(core.getInput("version"));
     const CMAKE_BUILD_TYPE = core.getInput("build-type");
     const CMAKE_BUILD_TYPES = [
@@ -147,7 +151,7 @@ async function run() {
         "RelWithDebInfo",
     ];
     if (!CMAKE_BUILD_TYPES.includes(CMAKE_BUILD_TYPE)) {
-        throw new error_1.SetupSdlError("Invalid build-type");
+        throw new util_1.SetupSdlError("Invalid build-type");
     }
     let git_branch_hash;
     if (REQUESTED_VERSION_TYPE == null) {
@@ -163,22 +167,30 @@ async function run() {
                 git_branch_hash = "main";
             }
             else {
-                throw new error_1.SetupSdlError("Invalid -head version");
+                throw new util_1.SetupSdlError("Invalid -head version");
             }
         }
         else {
             const sdl_release = version_1.SdlRelease.find_release(requested_version, core.getBooleanInput("pre-release"), requested_type);
             if (!sdl_release) {
-                throw new error_1.SetupSdlError(`Could not find a matching SDL release for ${requested_version}`);
+                throw new util_1.SetupSdlError(`Could not find a matching SDL release for ${requested_version}`);
             }
             git_branch_hash = sdl_release.tag;
         }
     }
     const git_hash = await convert_git_branch_tag_to_hash(git_branch_hash);
+    if (USE_NINJA) {
+        await core.group(`Configuring Ninja`, async () => {
+            await (0, ninja_1.configure_ninja_build_tool)(SDL_BUILD_PLATFORM);
+        });
+    }
     const source_dir = `${SETUP_SDL_ROOT}/src`;
     const build_dir = `${SETUP_SDL_ROOT}/build`;
     const install_dir = `${SETUP_SDL_ROOT}`;
-    const cmake_args = `-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}`;
+    let cmake_args = `-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}`;
+    if (USE_NINJA) {
+        cmake_args += " -GNinja";
+    }
     await checkout_sdl_git_hash(git_hash, source_dir);
     await cmake_configure_build(source_dir, build_dir, install_dir, CMAKE_BUILD_TYPE, cmake_args);
     core.setOutput("prefix", install_dir);
@@ -188,72 +200,192 @@ run();
 
 /***/ }),
 
-/***/ 11:
+/***/ 6526:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.configure_ninja_build_tool = exports.get_ninja_download_url = void 0;
+const fs = __importStar(__nccwpck_require__(7147));
+const process = __importStar(__nccwpck_require__(7282));
+const core = __importStar(__nccwpck_require__(2186));
+const tc = __importStar(__nccwpck_require__(7784));
+const constants_1 = __nccwpck_require__(7077);
+const platform_1 = __nccwpck_require__(5527);
+function get_ninja_download_url(platform, version) {
+    let zip_filename;
+    switch (platform) {
+        case platform_1.SdlBuildPlatform.Linux:
+            zip_filename = "ninja-linux.zip";
+            break;
+        case platform_1.SdlBuildPlatform.Macos:
+            zip_filename = "ninja-mac.zip";
+            break;
+        case platform_1.SdlBuildPlatform.Windows:
+            zip_filename = "ninja-windows.zip";
+            break;
+    }
+    return `https://github.com/ninja-build/ninja/releases/download/v${version}/${zip_filename}`;
+}
+exports.get_ninja_download_url = get_ninja_download_url;
+async function configure_ninja_build_tool(platform) {
+    const ninja_dir = `${(0, platform_1.get_platform_root_directory)(platform)}/ninja`;
+    fs.mkdirSync(ninja_dir, { recursive: true });
+    const cache_name = `sdl-${platform}`;
+    let ninja_directory = tc.find(cache_name, constants_1.NINJA_VERSION);
+    if (!ninja_directory) {
+        core.info(`Could not find ninja ${constants_1.NINJA_VERSION} in the cache.`);
+        const ninja_url = get_ninja_download_url(platform, constants_1.NINJA_VERSION);
+        core.info(`Downloading ${ninja_url}.`);
+        const ninja_zip_path = await tc.downloadTool(ninja_url);
+        core.info(`Extracting ${ninja_zip_path}.`);
+        const ninja_extract_folder = await tc.extractZip(ninja_zip_path, ninja_dir);
+        ninja_directory = await tc.cacheDir(ninja_extract_folder, cache_name, constants_1.NINJA_VERSION);
+    }
+    const path_env_sep = (0, platform_1.get_platform_path_env_separator)(platform);
+    process.env.PATH = ninja_directory + path_env_sep + process.env.PATH;
+}
+exports.configure_ninja_build_tool = configure_ninja_build_tool;
+
+
+/***/ }),
+
+/***/ 5527:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.get_platform_root_directory = exports.get_platform_path_env_separator = exports.get_sdl_build_platform = exports.SdlBuildPlatform = void 0;
+const os = __importStar(__nccwpck_require__(2037));
+const core = __importStar(__nccwpck_require__(2186));
+const util_1 = __nccwpck_require__(9731);
+var SdlBuildPlatform;
+(function (SdlBuildPlatform) {
+    SdlBuildPlatform["Windows"] = "Windows";
+    SdlBuildPlatform["Linux"] = "Linux";
+    SdlBuildPlatform["Macos"] = "MacOS";
+})(SdlBuildPlatform = exports.SdlBuildPlatform || (exports.SdlBuildPlatform = {}));
+function get_sdl_build_platform() {
+    switch (os.platform()) {
+        case "linux":
+            return SdlBuildPlatform.Linux;
+        case "darwin":
+            return SdlBuildPlatform.Macos;
+        case "win32":
+            return SdlBuildPlatform.Windows;
+    }
+    throw new util_1.SetupSdlError("Unsupported build platform");
+}
+exports.get_sdl_build_platform = get_sdl_build_platform;
+function get_platform_path_env_separator(platform) {
+    switch (platform) {
+        case SdlBuildPlatform.Windows:
+            return ";";
+        case SdlBuildPlatform.Macos:
+        case SdlBuildPlatform.Linux:
+        default:
+            return ":";
+    }
+}
+exports.get_platform_path_env_separator = get_platform_path_env_separator;
+function get_platform_root_directory(platform) {
+    const root = core.getInput("root");
+    if (root) {
+        return root;
+    }
+    switch (platform) {
+        case SdlBuildPlatform.Windows:
+            return "C:/setupsdl";
+        case SdlBuildPlatform.Macos:
+        case SdlBuildPlatform.Linux:
+            return "/tmp/setup-sdl";
+    }
+}
+exports.get_platform_root_directory = get_platform_root_directory;
+
+
+/***/ }),
+
+/***/ 9731:
 /***/ ((__unused_webpack_module, exports) => {
 
 "use strict";
 
-// Available SDL releases
-//   After a (successful)
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.SDL_TAGS = void 0;
-exports.SDL_TAGS = [
-    "2.0.22-RC1",
-    "2.0.22-RC2",
-    "2.0.22-RC3",
-    "release-2.0.0",
-    "release-2.0.1",
-    "release-2.0.2",
-    "release-2.0.3",
-    "release-2.0.4",
-    "release-2.0.5",
-    "release-2.0.6",
-    "release-2.0.7",
-    "release-2.0.8",
-    "release-2.0.9",
-    "release-2.0.10",
-    "release-2.0.12",
-    "release-2.0.14",
-    "release-2.0.16",
-    "release-2.0.18",
-    "release-2.0.20",
-    "release-2.0.22",
-    "prerelease-2.23.1",
-    "prerelease-2.23.2",
-    "release-2.24.0",
-    "release-2.24.1",
-    "release-2.24.2",
-    "prerelease-2.25.1",
-    "release-2.26.0",
-    "release-2.26.1",
-    "release-2.26.2",
-    "release-2.26.3",
-    "release-2.26.4",
-    "release-2.26.5",
-    "prerelease-2.27.1",
-    // Add SDL2 releases here
-    "prerelease-3.0.0",
-    // Add SDL3 releases here
-];
+exports.SetupSdlError = void 0;
+class SetupSdlError extends Error {
+    constructor(message) {
+        super(message);
+    }
+}
+exports.SetupSdlError = SetupSdlError;
 
 
 /***/ }),
 
-/***/ 970:
+/***/ 6970:
 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
 
 "use strict";
 
 Object.defineProperty(exports, "__esModule", ({ value: true }));
 exports.parse_requested_sdl_version = exports.SdlRelease = exports.SdlReleaseType = exports.SdlVersion = void 0;
-const tags_1 = __nccwpck_require__(11);
-const error_1 = __nccwpck_require__(624);
+const constants_1 = __nccwpck_require__(7077);
+const util_1 = __nccwpck_require__(9731);
 class SdlVersion {
     constructor(version) {
         if (typeof version == "string") {
             const v_list = version.split(".");
             if (v_list.length == 0 || v_list.length > 3) {
-                throw new error_1.SetupSdlError(`Cannot convert version (${version}) to MAJOR.MINOR.PATCH`);
+                throw new util_1.SetupSdlError(`Cannot convert version (${version}) to MAJOR.MINOR.PATCH`);
             }
             this.major = Number(v_list[0]);
             if (v_list.length > 0) {
@@ -275,7 +407,7 @@ class SdlVersion {
             this.patch = version.patch;
         }
         if (isNaN(this.major) || isNaN(this.minor) || isNaN(this.patch)) {
-            throw new error_1.SetupSdlError(`Cannot convert version (${version}) to MAJOR.MINOR.PATCH`);
+            throw new util_1.SetupSdlError(`Cannot convert version (${version}) to MAJOR.MINOR.PATCH`);
         }
     }
     compare(other) {
@@ -323,10 +455,10 @@ class SdlRelease {
     static get_releases() {
         const releases = [];
         const R = new RegExp("(release-|prerelease-)([0-9.]+)(-RC([0-9]+))");
-        for (const tag of tags_1.SDL_TAGS) {
+        for (const tag of constants_1.SDL_TAGS) {
             const m = tag.match(R);
             if (m == null) {
-                throw new error_1.SetupSdlError(`Invalid tag: ${tag}`);
+                throw new util_1.SetupSdlError(`Invalid tag: ${tag}`);
             }
             let prerelease = null;
             if (m[1] != null) {
@@ -431,7 +563,7 @@ exports.parse_requested_sdl_version = parse_requested_sdl_version;
 
 /***/ }),
 
-/***/ 351:
+/***/ 7351:
 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
 
 "use strict";
@@ -457,8 +589,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
 };
 Object.defineProperty(exports, "__esModule", ({ value: true }));
 exports.issue = exports.issueCommand = void 0;
-const os = __importStar(__nccwpck_require__(37));
-const utils_1 = __nccwpck_require__(278);
+const os = __importStar(__nccwpck_require__(2037));
+const utils_1 = __nccwpck_require__(5278);
 /**
  * Commands
  *
@@ -530,7 +662,7 @@ function escapeProperty(s) {
 
 /***/ }),
 
-/***/ 186:
+/***/ 2186:
 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
 
 "use strict";
@@ -565,12 +697,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
 };
 Object.defineProperty(exports, "__esModule", ({ value: true }));
 exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
-const command_1 = __nccwpck_require__(351);
+const command_1 = __nccwpck_require__(7351);
 const file_command_1 = __nccwpck_require__(717);
-const utils_1 = __nccwpck_require__(278);
-const os = __importStar(__nccwpck_require__(37));
-const path = __importStar(__nccwpck_require__(17));
-const oidc_utils_1 = __nccwpck_require__(41);
+const utils_1 = __nccwpck_require__(5278);
+const os = __importStar(__nccwpck_require__(2037));
+const path = __importStar(__nccwpck_require__(1017));
+const oidc_utils_1 = __nccwpck_require__(8041);
 /**
  * The code to exit an action
  */
@@ -855,17 +987,17 @@ exports.getIDToken = getIDToken;
 /**
  * Summary exports
  */
-var summary_1 = __nccwpck_require__(327);
+var summary_1 = __nccwpck_require__(1327);
 Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } }));
 /**
  * @deprecated use core.summary
  */
-var summary_2 = __nccwpck_require__(327);
+var summary_2 = __nccwpck_require__(1327);
 Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } }));
 /**
  * Path exports
  */
-var path_utils_1 = __nccwpck_require__(981);
+var path_utils_1 = __nccwpck_require__(2981);
 Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } }));
 Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } }));
 Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } }));
@@ -902,10 +1034,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
 exports.prepareKeyValueMessage = exports.issueFileCommand = void 0;
 // We use any as a valid input type
 /* eslint-disable @typescript-eslint/no-explicit-any */
-const fs = __importStar(__nccwpck_require__(147));
-const os = __importStar(__nccwpck_require__(37));
-const uuid_1 = __nccwpck_require__(840);
-const utils_1 = __nccwpck_require__(278);
+const fs = __importStar(__nccwpck_require__(7147));
+const os = __importStar(__nccwpck_requir

(Patch may be truncated, please check the link at the top of this post.)