django-vue3-admin-web/node_modules/aws-crt/scripts/build.js
2025-10-20 21:21:14 +08:00

108 lines
3.4 KiB
JavaScript

/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
const fs = require("fs");
const crypto = require('crypto');
const process = require("process");
const path = require("path");
const nativeSourceDir = "crt/";
const build_step_tar = require("./build_dependencies/build_step_tar");
const build_step_cmake = require("./build_dependencies/build_step_cmake");
function rmRecursive(rmPath) {
let rmBasePath = path.basename(rmPath);
if (rmBasePath == "." || rmBasePath == "..") {
throw new Error("\".\" and \"..\" may not be removed");
}
var files = [];
if (fs.existsSync(rmPath)) {
if (fs.lstatSync(rmPath).isDirectory()) {
files = fs.readdirSync(rmPath);
files.forEach(function (file,) {
var curPath = rmPath + "/" + file;
if (fs.lstatSync(curPath).isDirectory()) {
rmRecursive(curPath);
} else {
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(rmPath);
}
else {
fs.unlinkSync(rmPath);
}
}
};
async function buildFromRemoteSource(tmpPath) {
if (fs.existsSync(nativeSourceDir)) {
//teardown the local source code
rmRecursive(nativeSourceDir);
}
fs.mkdirSync(tmpPath);
fs.mkdirSync(nativeSourceDir);
// AWS common runtime aws-crt-nodejs cloudfront distribution.
let host = "https://d332vdhbectycy.cloudfront.net";
if (process.env.AWS_CRT_BINARY_HOST) {
// Use the host specified by user
host = process.env.AWS_CRT_BINARY_HOST;
}
let rawData = fs.readFileSync('package.json');
const version = JSON.parse(rawData)["version"];
// Get the file using tar, loaded as an install-time dependency (see scripts/build_dependencies)
try {
await build_step_tar.performStep(host, version, tmpPath, nativeSourceDir);
} catch (error) {
console.log("tar perform step failed with" + error);
throw error;
} finally {
rmRecursive(tmpPath);
}
// Clean up temp directory
// Kick off local build using cmake-js loaded as an install-time dependency (see scripts/build_dependencies)
try {
await build_step_cmake.performStep();
} catch (error) {
console.log("tar perform step failed with" + error);
throw error;
} finally {
// Local build finished successfully, we don't need source anymore.
rmRecursive(nativeSourceDir);
}
}
function checkDoDownload() {
if (!fs.existsSync(".git/") || process.argv.includes('--source_download')) {
return true;
}
return false;
}
(async function main() {
// Makes sure the work directory is what we need
const workDir = path.join(__dirname, "../")
process.chdir(workDir);
if (checkDoDownload()) {
const tmpPath = path.join(__dirname, `temp${crypto.randomBytes(16).toString("hex")}/`);
try {
buildFromRemoteSource(tmpPath);
}
catch (err) {
// teardown tmpPath and source directory on failure
rmRecursive(tmpPath);
rmRecursive(nativeSourceDir);
console.log("build from remote source failed with" + err);
throw err;
}
} else {
// kick off local build
await build_step_cmake.performStep();
}
})().catch((reason) => {
console.error(reason)
process.exitCode = 1
})