setup-cpp
Version:
Install all the tools required for building and testing C++/C projects.
75 lines • 9.27 kB
JavaScript
import { existsSync } from "fs";
import { join } from "path";
import { execa } from "execa";
import { getBrewBinPath, getBrewDir } from "./install.js";
export function brewPackNameAndVersion(name, version) {
return (version !== undefined && version !== "") ? `${name}@${version}` : name;
}
/**
* Get the installation directory of a package
* @param name The name of the package
* @param nameAndVersion The name and version of the package
* @returns The installation directory of the package
*/
export async function brewPackInstallDir(name, version) {
const nameAndVersion = brewPackNameAndVersion(name, version);
// first try with --prefix
const nameAndVersionPrefix = await getBrewPackPrefix(nameAndVersion);
if (nameAndVersionPrefix !== undefined) {
return nameAndVersionPrefix;
}
// try with --prefix name
const namePrefix = await getBrewPackPrefix(name);
if (namePrefix !== undefined) {
return namePrefix;
}
// if that fails, try with searchInstallDir
return searchInstallDir(name, nameAndVersion);
}
async function getBrewPackPrefix(packArg) {
try {
const brewPath = getBrewBinPath();
return (await execa(brewPath, ["--prefix", packArg], { stdio: "pipe" })).stdout;
}
catch {
return undefined;
}
}
/**
* Searches for the installation directory of a package
* @param name The name of the package
* @param nameAndVersion The name and version of the package
* @returns The installation directory of the package
*/
function searchInstallDir(name, nameAndVersion) {
const brewDir = getBrewDir();
// Check in opt directory (most common location)
const nameAndVersionOptDir = join(brewDir, "opt", nameAndVersion);
if (existsSync(nameAndVersionOptDir)) {
return nameAndVersionOptDir;
}
const nameOptDir = join(brewDir, "opt", name);
if (existsSync(nameOptDir)) {
return nameOptDir;
}
// Check in Cellar (where casks and some formulae are installed)
const nameAndVersionCellarDir = join(brewDir, "Cellar", nameAndVersion);
if (existsSync(nameAndVersionCellarDir)) {
return nameAndVersionCellarDir;
}
const nameCellarDir = join(brewDir, "Cellar", name);
if (existsSync(nameCellarDir)) {
return nameCellarDir;
}
// Check in lib directory
const nameAndVersionLibDir = join(brewDir, "lib", nameAndVersion);
if (existsSync(nameAndVersionLibDir)) {
return nameAndVersionLibDir;
}
const nameLibDir = join(brewDir, "lib", name);
if (existsSync(nameLibDir)) {
return nameLibDir;
}
return undefined;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFjay1pbnN0YWxsLWRpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wYWNrLWluc3RhbGwtZGlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMzQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXpELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFZLEVBQUUsT0FBMkI7SUFDOUUsT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ2hGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUVILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsSUFBWSxFQUFFLE9BQTJCO0lBQ2hGLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUU1RCwwQkFBMEI7SUFDMUIsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksb0JBQW9CLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdkMsT0FBTyxvQkFBb0IsQ0FBQTtJQUM3QixDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsS0FBSyxVQUFVLGlCQUFpQixDQUFDLE9BQWU7SUFDOUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsY0FBYyxFQUFFLENBQUE7UUFDakMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0lBQ2pGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUNEOzs7OztHQUtHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsY0FBc0I7SUFDNUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUE7SUFFNUIsZ0RBQWdEO0lBQ2hELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDakUsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sb0JBQW9CLENBQUE7SUFDN0IsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzdDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ3ZFLElBQUksVUFBVSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztRQUN4QyxPQUFPLHVCQUF1QixDQUFBO0lBQ2hDLENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNuRCxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sYUFBYSxDQUFBO0lBQ3RCLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNqRSxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxvQkFBb0IsQ0FBQTtJQUM3QixDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDN0MsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IGV4ZWNhIH0gZnJvbSBcImV4ZWNhXCJcbmltcG9ydCB7IGdldEJyZXdCaW5QYXRoLCBnZXRCcmV3RGlyIH0gZnJvbSBcIi4vaW5zdGFsbC5qc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBicmV3UGFja05hbWVBbmRWZXJzaW9uKG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmIHZlcnNpb24gIT09IFwiXCIpID8gYCR7bmFtZX1AJHt2ZXJzaW9ufWAgOiBuYW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFja2FnZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2VcbiAqIEBwYXJhbSBuYW1lQW5kVmVyc2lvbiBUaGUgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGUgcGFja2FnZVxuICogQHJldHVybnMgVGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgdGhlIHBhY2thZ2VcbiAqL1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnJld1BhY2tJbnN0YWxsRGlyKG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG5hbWVBbmRWZXJzaW9uID0gYnJld1BhY2tOYW1lQW5kVmVyc2lvbihuYW1lLCB2ZXJzaW9uKVxuXG4gIC8vIGZpcnN0IHRyeSB3aXRoIC0tcHJlZml4XG4gIGNvbnN0IG5hbWVBbmRWZXJzaW9uUHJlZml4ID0gYXdhaXQgZ2V0QnJld1BhY2tQcmVmaXgobmFtZUFuZFZlcnNpb24pXG4gIGlmIChuYW1lQW5kVmVyc2lvblByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5hbWVBbmRWZXJzaW9uUHJlZml4XG4gIH1cblxuICAvLyB0cnkgd2l0aCAtLXByZWZpeCBuYW1lXG4gIGNvbnN0IG5hbWVQcmVmaXggPSBhd2FpdCBnZXRCcmV3UGFja1ByZWZpeChuYW1lKVxuICBpZiAobmFtZVByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5hbWVQcmVmaXhcbiAgfVxuXG4gIC8vIGlmIHRoYXQgZmFpbHMsIHRyeSB3aXRoIHNlYXJjaEluc3RhbGxEaXJcbiAgcmV0dXJuIHNlYXJjaEluc3RhbGxEaXIobmFtZSwgbmFtZUFuZFZlcnNpb24pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJyZXdQYWNrUHJlZml4KHBhY2tBcmc6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGJyZXdQYXRoID0gZ2V0QnJld0JpblBhdGgoKVxuICAgIHJldHVybiAoYXdhaXQgZXhlY2EoYnJld1BhdGgsIFtcIi0tcHJlZml4XCIsIHBhY2tBcmddLCB7IHN0ZGlvOiBcInBpcGVcIiB9KSkuc3Rkb3V0XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxufVxuLyoqXG4gKiBTZWFyY2hlcyBmb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgYSBwYWNrYWdlXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZVxuICogQHBhcmFtIG5hbWVBbmRWZXJzaW9uIFRoZSBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZVxuICovXG5mdW5jdGlvbiBzZWFyY2hJbnN0YWxsRGlyKG5hbWU6IHN0cmluZywgbmFtZUFuZFZlcnNpb246IHN0cmluZykge1xuICBjb25zdCBicmV3RGlyID0gZ2V0QnJld0RpcigpXG5cbiAgLy8gQ2hlY2sgaW4gb3B0IGRpcmVjdG9yeSAobW9zdCBjb21tb24gbG9jYXRpb24pXG4gIGNvbnN0IG5hbWVBbmRWZXJzaW9uT3B0RGlyID0gam9pbihicmV3RGlyLCBcIm9wdFwiLCBuYW1lQW5kVmVyc2lvbilcbiAgaWYgKGV4aXN0c1N5bmMobmFtZUFuZFZlcnNpb25PcHREaXIpKSB7XG4gICAgcmV0dXJuIG5hbWVBbmRWZXJzaW9uT3B0RGlyXG4gIH1cbiAgY29uc3QgbmFtZU9wdERpciA9IGpvaW4oYnJld0RpciwgXCJvcHRcIiwgbmFtZSlcbiAgaWYgKGV4aXN0c1N5bmMobmFtZU9wdERpcikpIHtcbiAgICByZXR1cm4gbmFtZU9wdERpclxuICB9XG5cbiAgLy8gQ2hlY2sgaW4gQ2VsbGFyICh3aGVyZSBjYXNrcyBhbmQgc29tZSBmb3JtdWxhZSBhcmUgaW5zdGFsbGVkKVxuICBjb25zdCBuYW1lQW5kVmVyc2lvbkNlbGxhckRpciA9IGpvaW4oYnJld0RpciwgXCJDZWxsYXJcIiwgbmFtZUFuZFZlcnNpb24pXG4gIGlmIChleGlzdHNTeW5jKG5hbWVBbmRWZXJzaW9uQ2VsbGFyRGlyKSkge1xuICAgIHJldHVybiBuYW1lQW5kVmVyc2lvbkNlbGxhckRpclxuICB9XG4gIGNvbnN0IG5hbWVDZWxsYXJEaXIgPSBqb2luKGJyZXdEaXIsIFwiQ2VsbGFyXCIsIG5hbWUpXG4gIGlmIChleGlzdHNTeW5jKG5hbWVDZWxsYXJEaXIpKSB7XG4gICAgcmV0dXJuIG5hbWVDZWxsYXJEaXJcbiAgfVxuXG4gIC8vIENoZWNrIGluIGxpYiBkaXJlY3RvcnlcbiAgY29uc3QgbmFtZUFuZFZlcnNpb25MaWJEaXIgPSBqb2luKGJyZXdEaXIsIFwibGliXCIsIG5hbWVBbmRWZXJzaW9uKVxuICBpZiAoZXhpc3RzU3luYyhuYW1lQW5kVmVyc2lvbkxpYkRpcikpIHtcbiAgICByZXR1cm4gbmFtZUFuZFZlcnNpb25MaWJEaXJcbiAgfVxuICBjb25zdCBuYW1lTGliRGlyID0gam9pbihicmV3RGlyLCBcImxpYlwiLCBuYW1lKVxuICBpZiAoZXhpc3RzU3luYyhuYW1lTGliRGlyKSkge1xuICAgIHJldHVybiBuYW1lTGliRGlyXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG4iXX0=