mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
169 lines
4.8 KiB
JavaScript
169 lines
4.8 KiB
JavaScript
#!/usr/bin/env node
|
|
// Archive packaging script. Takes one argument, which is the path to the
|
|
// repository's root. Requires 7-zip and Git to be installed, and Git to be
|
|
// available on the system path.
|
|
|
|
var child_process = require('child_process');
|
|
var path = require('path');
|
|
var fs = require('fs-extra');
|
|
|
|
function vulcanize() {
|
|
return child_process.execFileSync('node', [
|
|
'scripts/vulcanize.js',
|
|
root_path
|
|
]);
|
|
}
|
|
|
|
function getGitDescription() {
|
|
return String(child_process.execFileSync('git', [
|
|
'describe',
|
|
'--tags',
|
|
'--long'
|
|
])).slice(0, -1);
|
|
}
|
|
|
|
function compress(source_path, dest_path) {
|
|
var sevenzip_path = path.join('C:\\', 'Program Files', '7-Zip', '7z.exe');
|
|
|
|
// First remove any existing archive.
|
|
fs.removeSync(dest_path);
|
|
|
|
// The last argument must have a leading dot for the subdirectory not to
|
|
// be present in the archive, but path.join removes it, so it's prefixed.
|
|
return child_process.execFileSync(sevenzip_path, [
|
|
'a',
|
|
'-r',
|
|
dest_path,
|
|
'.' + path.sep + path.join(source_path, '*')
|
|
]);
|
|
}
|
|
|
|
function createAppArchive(dest_path) {
|
|
// Ensure that the output directory is empty.
|
|
fs.emptyDirSync(temp_path);
|
|
|
|
// Copy LOOT exectuable and CEF files.
|
|
[
|
|
'LOOT.exe',
|
|
'd3dcompiler_47.dll',
|
|
'libEGL.dll',
|
|
'libGLESv2.dll',
|
|
'libcef.dll',
|
|
'wow_helper.exe',
|
|
'natives_blob.bin',
|
|
'snapshot_blob.bin',
|
|
'cef.pak',
|
|
'cef_100_percent.pak',
|
|
'cef_200_percent.pak',
|
|
'devtools_resources.pak',
|
|
'icudtl.dat'
|
|
].forEach(function(file){
|
|
fs.copySync(
|
|
path.join(root_path, 'build', 'Release', file),
|
|
path.join(temp_path, file)
|
|
);
|
|
});
|
|
|
|
// CEF locale file.
|
|
fs.mkdirsSync(path.join(temp_path, 'resources', 'l10n'));
|
|
fs.copySync(
|
|
path.join(root_path, 'build', 'Release', 'resources', 'l10n', 'en-US.pak'),
|
|
path.join(temp_path, 'resources', 'l10n', 'en-US.pak')
|
|
);
|
|
|
|
// Translation files.
|
|
[
|
|
'es', 'ru', 'fr', 'zh_CN', 'pl',
|
|
'pt_BR', 'fi', 'de', 'da', 'ko'
|
|
].forEach(function(lang){
|
|
fs.mkdirsSync(path.join(temp_path, 'resources', 'l10n', lang, 'LC_MESSAGES'));
|
|
fs.copySync(
|
|
path.join(root_path, 'resources', 'l10n', lang, 'LC_MESSAGES', 'loot.mo'),
|
|
path.join(temp_path, 'resources', 'l10n', lang, 'LC_MESSAGES', 'loot.mo')
|
|
);
|
|
});
|
|
|
|
// UI files.
|
|
fs.mkdirsSync(path.join(temp_path, 'resources', 'ui', 'css'));
|
|
fs.copySync(
|
|
path.join(root_path, 'build', 'Release', 'resources', 'ui', 'index.html'),
|
|
path.join(temp_path, 'resources', 'ui', 'index.html')
|
|
);
|
|
fs.copySync(
|
|
path.join(root_path, 'resources', 'ui', 'css', 'dark-theme.css'),
|
|
path.join(temp_path, 'resources', 'ui', 'css', 'dark-theme.css')
|
|
);
|
|
fs.copySync(
|
|
path.join(root_path, 'resources', 'ui', 'fonts'),
|
|
path.join(temp_path, 'resources', 'ui', 'fonts')
|
|
);
|
|
|
|
// Docs.
|
|
fs.mkdirsSync(path.join(temp_path, 'docs'));
|
|
[
|
|
'images',
|
|
'licenses',
|
|
'LOOT Metadata Syntax.html',
|
|
'LOOT Readme.html'
|
|
].forEach(function(item){
|
|
fs.copySync(
|
|
path.join(root_path, 'docs', item),
|
|
path.join(temp_path, 'docs', item)
|
|
);
|
|
});
|
|
|
|
// Now compress the folder to a 7-zip archive.
|
|
compress(temp_path, dest_path);
|
|
|
|
// Finally, delete the temporary folder.
|
|
fs.removeSync(temp_path);
|
|
}
|
|
|
|
function createApiArchive(dest_path) {
|
|
// Ensure that the output directory is empty.
|
|
fs.emptyDirSync(temp_path);
|
|
|
|
// API binary.
|
|
fs.copySync(
|
|
path.join(root_path, 'build', 'Release', 'loot32.dll'),
|
|
path.join(temp_path, 'loot32.dll')
|
|
);
|
|
|
|
// API header file.
|
|
fs.mkdirsSync(path.join(temp_path, 'include', 'loot'));
|
|
fs.copySync(
|
|
path.join(root_path, 'src', 'api', 'api.h'),
|
|
path.join(temp_path, 'include', 'loot', 'api.h')
|
|
);
|
|
|
|
// Docs.
|
|
fs.mkdirsSync(path.join(temp_path, 'docs'));
|
|
fs.copySync(
|
|
path.join(root_path, 'docs', 'latex', 'refman.pdf'),
|
|
path.join(temp_path, 'docs', 'readme.pdf')
|
|
);
|
|
fs.copySync(
|
|
path.join(root_path, 'docs', 'licenses'),
|
|
path.join(temp_path, 'docs', 'licenses')
|
|
);
|
|
|
|
|
|
// Now compress the folder to a 7-zip archive.
|
|
compress(temp_path, dest_path);
|
|
|
|
// Finally, delete the temporary folder.
|
|
fs.removeSync(temp_path);
|
|
}
|
|
|
|
if (process.argv.length < 3) {
|
|
var root_path = '.';
|
|
} else {
|
|
var root_path = process.argv[2];
|
|
}
|
|
var temp_path = path.join(root_path, 'build', 'archive.tmp');
|
|
|
|
var git_desc = getGitDescription();
|
|
vulcanize();
|
|
createAppArchive(path.join(root_path, 'build', 'LOOT ' + git_desc + '.7z'));
|
|
createApiArchive(path.join(root_path, 'build', 'LOOT API ' + git_desc + '.7z'));
|