68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
const path = require("path");
|
|
const fs = require("fs");
|
|
const process = require("child_process");
|
|
|
|
const ROOT_DIR = path.resolve(__dirname, "../");
|
|
const MOC_AUTOGEN_DIR = path.resolve(ROOT_DIR, "src/cpp/autogen");
|
|
const MOC_GYPI_FILE = path.resolve(ROOT_DIR, "config/moc.gypi");
|
|
|
|
const getConfig = () => {
|
|
const configFilePath = path.resolve(ROOT_DIR, "config/moc.json");
|
|
return JSON.parse(fs.readFileSync(configFilePath));
|
|
};
|
|
|
|
const generateCommand = (headerFilePath, includeFilePath) => {
|
|
const infilePath = path.resolve(ROOT_DIR, headerFilePath);
|
|
const parsed = path.parse(infilePath);
|
|
const outfilePath = path.format({
|
|
dir: MOC_AUTOGEN_DIR,
|
|
name: `${parsed.name}_moc`,
|
|
ext: ".cpp"
|
|
});
|
|
const command = `moc ${infilePath} -o ${outfilePath} --include ${includeFilePath}`;
|
|
return {
|
|
command,
|
|
infilePath,
|
|
outfilePath
|
|
};
|
|
};
|
|
|
|
const generateMocGypiFile = outFilePaths => {
|
|
const sources = outFilePaths.map(eachOutFilePath => {
|
|
return path.relative(path.parse(MOC_GYPI_FILE).dir, eachOutFilePath);
|
|
});
|
|
|
|
const gypiConfig = {
|
|
target_defaults: {
|
|
sources: sources
|
|
}
|
|
};
|
|
const comment = `# AUTOGENERATED FILE. DO NOT MODIFY . ALL CHANGES WILL BE LOST\n# RUN: npm run automoc after updating moc.json\n`;
|
|
console.log("Updating moc.gypi...");
|
|
const fileContent = JSON.stringify(gypiConfig, null, 4);
|
|
fs.writeFileSync(MOC_GYPI_FILE, comment.concat(fileContent));
|
|
console.log("Updated moc.gypi");
|
|
};
|
|
|
|
const main = () => {
|
|
const config = getConfig();
|
|
const includeFilePath = path.resolve(ROOT_DIR, config.include);
|
|
const outFiles = config.headers.map(eachHeaderPath => {
|
|
const { command, outfilePath } = generateCommand(
|
|
eachHeaderPath,
|
|
includeFilePath
|
|
);
|
|
console.log(command);
|
|
process.exec(command, error => {
|
|
if (error) {
|
|
console.error(`exec error: ${error}`);
|
|
return;
|
|
}
|
|
});
|
|
return outfilePath;
|
|
});
|
|
generateMocGypiFile(outFiles);
|
|
};
|
|
|
|
main();
|