forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
414
Kha/Tools/khamake/out/HaxeProject.js
Normal file
414
Kha/Tools/khamake/out/HaxeProject.js
Normal file
@ -0,0 +1,414 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.writeHaxeProject = void 0;
|
||||
const fs = require("fs-extra");
|
||||
const path = require("path");
|
||||
const XmlWriter_1 = require("./XmlWriter");
|
||||
function copyAndReplace(from, to, names, values) {
|
||||
let data = fs.readFileSync(from, { encoding: 'utf8' });
|
||||
for (let i = 0; i < names.length; ++i) {
|
||||
data = data.replace(new RegExp(names[i], 'g'), values[i]);
|
||||
}
|
||||
fs.writeFileSync(to, data, { encoding: 'utf8' });
|
||||
}
|
||||
function escapeXml(s) {
|
||||
return s.replace(/[<>&'"]/g, c => {
|
||||
switch (c) {
|
||||
case '<': return '<';
|
||||
case '>': return '>';
|
||||
case '&': return '&';
|
||||
case '\'': return ''';
|
||||
case '"': return '"';
|
||||
default: throw 'unreachable code';
|
||||
}
|
||||
});
|
||||
}
|
||||
function IntelliJ(projectdir, options) {
|
||||
let indir = path.join(__dirname, '..', 'Data', 'intellij');
|
||||
let outdir = path.join(projectdir, options.safeName + '-' + options.system + '-intellij');
|
||||
let sources = '';
|
||||
for (let i = 0; i < options.sources.length; ++i) {
|
||||
if (path.isAbsolute(options.sources[i])) {
|
||||
sources += ' <sourceFolder url="file://' + options.sources[i] + '" isTestSource="false" />\n';
|
||||
}
|
||||
else {
|
||||
sources += ' <sourceFolder url="file://$MODULE_DIR$/' + path.relative(outdir, path.resolve(options.from, options.sources[i])).replace(/\\/g, '/') + '" isTestSource="false" />\n';
|
||||
}
|
||||
}
|
||||
let libraries = '';
|
||||
for (let i = 0; i < options.libraries.length; ++i) {
|
||||
if (path.isAbsolute(options.libraries[i].libpath)) {
|
||||
libraries += ' <content url="file://' + options.libraries[i].libroot + '">\n';
|
||||
libraries += ' <sourceFolder url="file://' + options.libraries[i].libpath + '" isTestSource="false" />\n';
|
||||
}
|
||||
else {
|
||||
libraries += ' <content url="file://$MODULE_DIR$/' + path.relative(outdir, path.resolve(options.from, options.libraries[i].libroot)).replace(/\\/g, '/') + '">\n';
|
||||
libraries += ' <sourceFolder url="file://$MODULE_DIR$/' + path.relative(outdir, path.resolve(options.from, options.libraries[i].libpath)).replace(/\\/g, '/') + '" isTestSource="false" />\n';
|
||||
}
|
||||
libraries += ' </content>\n';
|
||||
}
|
||||
let args = '';
|
||||
let defines = '';
|
||||
for (let i = 0; i < options.defines.length; ++i) {
|
||||
defines += options.defines[i];
|
||||
if (i < options.defines.length - 1)
|
||||
defines += ',';
|
||||
}
|
||||
for (let param of options.parameters) {
|
||||
defines += param + ',';
|
||||
}
|
||||
let target;
|
||||
switch (options.language) {
|
||||
case 'hl':
|
||||
case 'cpp':
|
||||
target = 'C++';
|
||||
break;
|
||||
case 'as':
|
||||
target = 'Flash';
|
||||
args = '-swf-version 16.0';
|
||||
break;
|
||||
case 'cs':
|
||||
target = 'C#';
|
||||
if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'netlib'))) {
|
||||
args = '-net-std ' + path.relative(outdir, path.join(options.haxeDirectory, 'netlib'));
|
||||
}
|
||||
break;
|
||||
case 'java':
|
||||
target = 'Java';
|
||||
if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'))) {
|
||||
args = '-java-lib ' + path.relative(outdir, path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'));
|
||||
}
|
||||
break;
|
||||
case 'js':
|
||||
target = 'JavaScript';
|
||||
break;
|
||||
}
|
||||
fs.copySync(path.join(indir, 'name.iml'), path.join(outdir, options.name + '.iml'), { overwrite: true });
|
||||
copyAndReplace(path.join(indir, 'name.iml'), path.join(outdir, options.name + '.iml'), ['{name}', '{sources}', '{libraries}', '{target}', '{system}', '{args}'], [options.safeName, sources, libraries, target, options.system, args]);
|
||||
fs.copySync(path.join(indir, 'idea', 'compiler.xml'), path.join(outdir, '.idea', 'compiler.xml'), { overwrite: true });
|
||||
copyAndReplace(path.join(indir, 'idea', 'haxe.xml'), path.join(outdir, '.idea', 'haxe.xml'), ['{defines}'], [defines]);
|
||||
fs.copySync(path.join(indir, 'idea', 'misc.xml'), path.join(outdir, '.idea', 'misc.xml'), { overwrite: true });
|
||||
copyAndReplace(path.join(indir, 'idea', 'modules.xml'), path.join(outdir, '.idea', 'modules.xml'), ['{name}'], [options.name]);
|
||||
fs.copySync(path.join(indir, 'idea', 'vcs.xml'), path.join(outdir, '.idea', 'vcs.xml'), { overwrite: true });
|
||||
copyAndReplace(path.join(indir, 'idea', 'name'), path.join(outdir, '.idea', '.name'), ['{name}'], [options.name]);
|
||||
fs.copySync(path.join(indir, 'idea', 'copyright', 'profiles_settings.xml'), path.join(outdir, '.idea', 'copyright', 'profiles_settings.xml'), { overwrite: true });
|
||||
}
|
||||
function hxml(projectdir, options) {
|
||||
let data = '';
|
||||
let lines = [];
|
||||
// returns only unique lines and '' otherwise
|
||||
function unique(line) {
|
||||
if (lines.indexOf(line) === -1) {
|
||||
lines.push(line);
|
||||
return line;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
for (let i = 0; i < options.sources.length; ++i) {
|
||||
if (path.isAbsolute(options.sources[i])) {
|
||||
data += unique('-cp ' + options.sources[i] + '\n');
|
||||
}
|
||||
else {
|
||||
data += unique('-cp ' + path.relative(projectdir, path.resolve(options.from, options.sources[i])) + '\n'); // from.resolve('build').relativize(from.resolve(this.sources[i])).toString());
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < options.libraries.length; ++i) {
|
||||
if (path.isAbsolute(options.libraries[i].libpath)) {
|
||||
data += unique('-cp ' + options.libraries[i].libpath + '\n');
|
||||
}
|
||||
else {
|
||||
data += unique('-cp ' + path.relative(projectdir, path.resolve(options.from, options.libraries[i].libpath)) + '\n'); // from.resolve('build').relativize(from.resolve(this.sources[i])).toString());
|
||||
}
|
||||
}
|
||||
for (let d in options.defines) {
|
||||
let define = options.defines[d];
|
||||
data += unique('-D ' + define + '\n');
|
||||
}
|
||||
if (options.language === 'cpp') {
|
||||
data += unique('-cpp ' + path.normalize(options.to) + '\n');
|
||||
}
|
||||
else if (options.language === 'cs') {
|
||||
data += unique('-cs ' + path.normalize(options.to) + '\n');
|
||||
if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'netlib'))) {
|
||||
data += unique('-net-std ' + path.relative(projectdir, path.join(options.haxeDirectory, 'netlib')) + '\n');
|
||||
}
|
||||
}
|
||||
else if (options.language === 'java') {
|
||||
data += unique('-java ' + path.normalize(options.to) + '\n');
|
||||
if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'))) {
|
||||
data += unique('-java-lib ' + path.relative(projectdir, path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar')) + '\n');
|
||||
}
|
||||
}
|
||||
else if (options.language === 'js') {
|
||||
data += unique('-js ' + path.normalize(options.to) + '\n');
|
||||
}
|
||||
else if (options.language === 'as') {
|
||||
data += unique('-swf ' + path.normalize(options.to) + '\n');
|
||||
data += unique('-swf-version ' + options.swfVersion + '\n');
|
||||
data += unique('-swf-header ' + options.width + ':' + options.height + ':' + options.framerate + ':' + options.stageBackground + '\n');
|
||||
}
|
||||
else if (options.language === 'xml') {
|
||||
data += unique('-xml ' + path.normalize(options.to) + '\n');
|
||||
data += unique('--macro include(\'kha\')\n');
|
||||
}
|
||||
else if (options.language === 'hl') {
|
||||
data += unique('-hl ' + path.normalize(options.to) + '\n');
|
||||
}
|
||||
for (let param of options.parameters) {
|
||||
data += unique(param + '\n');
|
||||
}
|
||||
if (!options.parameters.some((param) => param.includes('-main '))) {
|
||||
const entrypoint = options ? options.main ? options.main : 'Main' : 'Main';
|
||||
data += unique('-main ' + entrypoint + '\n');
|
||||
}
|
||||
fs.outputFileSync(path.join(projectdir, 'project-' + options.system + '.hxml'), data);
|
||||
}
|
||||
function FlashDevelop(projectdir, options) {
|
||||
let platform;
|
||||
switch (options.language) {
|
||||
case 'hl':
|
||||
case 'cpp':
|
||||
platform = 'C++';
|
||||
break;
|
||||
case 'as':
|
||||
platform = 'Flash Player';
|
||||
break;
|
||||
case 'cs':
|
||||
platform = 'C#';
|
||||
break;
|
||||
case 'java':
|
||||
platform = 'Java';
|
||||
break;
|
||||
case 'js':
|
||||
platform = 'JavaScript';
|
||||
break;
|
||||
}
|
||||
options.swfVersion = 'swfVersion' in options ? options.swfVersion : 16.0;
|
||||
options.stageBackground = 'stageBackground' in options ? options.stageBackground : 'ffffff';
|
||||
options.framerate = 'framerate' in options ? options.framerate : 30;
|
||||
let swfVersion = parseFloat(options.swfVersion).toFixed(1).split('.');
|
||||
let output = {
|
||||
n: 'output',
|
||||
e: [
|
||||
{
|
||||
n: 'movie',
|
||||
outputType: 'Application'
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
input: ''
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
path: path.normalize(options.to)
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
fps: options.framerate
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
width: options.width
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
height: options.height
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
version: swfVersion[0]
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
minorVersion: swfVersion[1]
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
platform: platform
|
||||
},
|
||||
{
|
||||
n: 'movie',
|
||||
background: '#' + options.stageBackground
|
||||
}
|
||||
]
|
||||
};
|
||||
if (fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory()) {
|
||||
output.e.push({
|
||||
n: 'movie',
|
||||
preferredSDK: path.relative(projectdir, options.haxeDirectory)
|
||||
});
|
||||
}
|
||||
let classpaths = [];
|
||||
for (let i = 0; i < options.sources.length; ++i) {
|
||||
classpaths.push(path.relative(projectdir, path.resolve(options.from, options.sources[i])));
|
||||
}
|
||||
for (let i = 0; i < options.libraries.length; ++i) {
|
||||
classpaths.push(path.relative(projectdir, path.resolve(options.from, options.libraries[i].libpath)));
|
||||
}
|
||||
let otheroptions = [
|
||||
{
|
||||
n: 'option',
|
||||
showHiddenPaths: 'False'
|
||||
}
|
||||
];
|
||||
if (options.language === 'cpp' || options.system === 'krom') {
|
||||
otheroptions.push({
|
||||
n: 'option',
|
||||
testMovie: 'Custom'
|
||||
});
|
||||
otheroptions.push({
|
||||
n: 'option',
|
||||
testMovieCommand: 'run_' + options.system + '.bat'
|
||||
});
|
||||
}
|
||||
else if (options.language === 'cs' || options.language === 'java') {
|
||||
otheroptions.push({
|
||||
n: 'option',
|
||||
testMovie: 'OpenDocument'
|
||||
});
|
||||
otheroptions.push({
|
||||
n: 'option',
|
||||
testMovieCommand: ''
|
||||
});
|
||||
}
|
||||
else if (options.language === 'js') {
|
||||
otheroptions.push({
|
||||
n: 'option',
|
||||
testMovie: 'Webserver'
|
||||
});
|
||||
otheroptions.push({
|
||||
n: 'option',
|
||||
testMovieCommand: path.join(path.parse(options.to).dir, 'index.html')
|
||||
});
|
||||
}
|
||||
else {
|
||||
otheroptions.push({
|
||||
n: 'option',
|
||||
testMovie: 'Default'
|
||||
});
|
||||
}
|
||||
let def = '';
|
||||
for (let d of options.defines) {
|
||||
def += '-D ' + d + '
';
|
||||
}
|
||||
if (options.language === 'java' && fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar'))) {
|
||||
def += '-java-lib ' + path.relative(projectdir, path.join(options.haxeDirectory, 'hxjava', 'hxjava-std.jar')) + '
';
|
||||
}
|
||||
if (options.language === 'cs' && fs.existsSync(options.haxeDirectory) && fs.statSync(options.haxeDirectory).isDirectory() && fs.existsSync(path.join(options.haxeDirectory, 'netlib'))) {
|
||||
def += '-net-std ' + path.relative(projectdir, path.join(options.haxeDirectory, 'netlib')) + '
';
|
||||
}
|
||||
def += '-D kha_output="' + path.resolve(path.join(projectdir, options.to)) + '"
';
|
||||
let mainClass = 'Main';
|
||||
for (let param of options.parameters) {
|
||||
const mainRe = /-main\s+([^\s]+)/.exec(param);
|
||||
if (mainRe) {
|
||||
mainClass = mainRe[1];
|
||||
}
|
||||
else {
|
||||
def += escapeXml(param) + '
';
|
||||
}
|
||||
}
|
||||
let project = {
|
||||
n: 'project',
|
||||
version: '2',
|
||||
e: [
|
||||
'Output SWF options',
|
||||
output,
|
||||
'Other classes to be compiled into your SWF',
|
||||
{
|
||||
n: 'classpaths',
|
||||
e: classpaths
|
||||
.reduce((a, b) => {
|
||||
if (a.indexOf(b) < 0)
|
||||
a.push(b);
|
||||
return a;
|
||||
}, [])
|
||||
.map((e) => {
|
||||
return { n: 'class', path: e };
|
||||
})
|
||||
},
|
||||
'Build options',
|
||||
{
|
||||
n: 'build',
|
||||
e: [
|
||||
{
|
||||
n: 'option',
|
||||
directives: ''
|
||||
},
|
||||
{
|
||||
n: 'option',
|
||||
flashStrict: 'False'
|
||||
},
|
||||
{
|
||||
n: 'option',
|
||||
noInlineOnDebug: 'False'
|
||||
},
|
||||
{
|
||||
n: 'option',
|
||||
mainClass: mainClass
|
||||
},
|
||||
{
|
||||
n: 'option',
|
||||
enabledebug: options.language === 'as' ? 'True' : 'False'
|
||||
},
|
||||
{
|
||||
n: 'option',
|
||||
additional: def
|
||||
}
|
||||
]
|
||||
},
|
||||
'haxelib libraries',
|
||||
{
|
||||
n: 'haxelib',
|
||||
e: [
|
||||
'example: <library name="..." />'
|
||||
]
|
||||
},
|
||||
'Class files to compile (other referenced classes will automatically be included)',
|
||||
{
|
||||
n: 'compileTargets',
|
||||
e: [
|
||||
{
|
||||
n: 'compile',
|
||||
path: '..\\Sources\\Main.hx'
|
||||
}
|
||||
]
|
||||
},
|
||||
'Paths to exclude from the Project Explorer tree',
|
||||
{
|
||||
n: 'hiddenPaths',
|
||||
e: [
|
||||
'example: <hidden path="..." />'
|
||||
]
|
||||
},
|
||||
'Executed before build',
|
||||
{
|
||||
n: 'preBuildCommand'
|
||||
},
|
||||
'Executed after build',
|
||||
{
|
||||
n: 'postBuildCommand',
|
||||
alwaysRun: 'False'
|
||||
},
|
||||
'Other project options',
|
||||
{
|
||||
n: 'options',
|
||||
e: otheroptions
|
||||
},
|
||||
'Plugin storage',
|
||||
{
|
||||
n: 'storage'
|
||||
}
|
||||
]
|
||||
};
|
||||
(0, XmlWriter_1.writeXml)(project, path.join(projectdir, options.safeName + '-' + options.system + '.hxproj'));
|
||||
}
|
||||
function writeHaxeProject(projectdir, projectFiles, options) {
|
||||
hxml(projectdir, options);
|
||||
if (projectFiles) {
|
||||
FlashDevelop(projectdir, options);
|
||||
IntelliJ(projectdir, options);
|
||||
}
|
||||
}
|
||||
exports.writeHaxeProject = writeHaxeProject;
|
||||
//# sourceMappingURL=HaxeProject.js.map
|
Reference in New Issue
Block a user