mathjs/Jakefile.js
2013-03-15 23:15:32 +01:00

122 lines
2.9 KiB
JavaScript

/**
* Jake build script for mathjs
*/
var util = require('./tools/jake-utils.js');
/**
* Constants
*/
var MATHJS = './math.js';
var MATHJS_MIN = './math.min.js';
var HEADER = './src/header.js';
// register start time
var start = +new Date();
/**
* default task
*/
desc('Execute all tasks: build and test the library');
task('default', ['build', 'test'], function () {
// calculate duration
var end = +new Date();
var duration = end - start;
console.log('Done (' + duration + ' ms)');
});
/**
* build task
*/
desc('Build the library');
task('build', ['concat', 'minify']);
/**
* concat task
*/
desc('Concatenate all source files into one file');
task('concat', function () {
var result = util.concat({
src: [
'./src/exports.js',
'./src/util.js',
'./src/type/**/*.js',
'./src/constants.js',
'./src/functions.js',
'./src/function/**/*.js',
'./src/parser/node/Node.js',
'./src/parser/node/Symbol.js',
'./src/parser/node/Constant.js',
'./src/parser/node/ArrayNode.js',
'./src/parser/node/Block.js',
'./src/parser/node/Assignment.js',
'./src/parser/node/FunctionAssignment.js',
'./src/parser/Scope.js',
'./src/parser/Parser.js',
'./src/parser/Workspace.js'
],
dest: MATHJS,
header: util.read(HEADER) + '\n(function() {\n',
separator: '\n',
footer: '\n})();\n'
});
updateVersion(MATHJS);
console.log('Concatenated ' + result.src.length + ' files into ' +
MATHJS + ' (' + filesize(result.code.length, 1) + ')');
});
/**
* minify task
*/
desc('Minify the library');
task('minify', ['concat'], function () {
var result = util.minify({
src: MATHJS,
dest: MATHJS_MIN,
header: util.read(HEADER)
});
updateVersion(MATHJS_MIN);
console.log('Minified ' +
MATHJS + ' (' + filesize(util.read(result.src[0]).length, 1) + ') to ' +
MATHJS_MIN + ' (' + filesize(result.code.length, 1) + ')');
});
/**
* test task
*/
desc('Test the library');
task('test', ['concat'], function () {
require('./test/all.js');
console.log('Tests successful');
});
/**
* Update version and date patterns in given file.
* Patterns '@@date' and '@@version' will be replaced with current date and
* version.
* @param {String} file
*/
function updateVersion(file) {
// update date and version number
util.replace({
replacements: [
{pattern: '@@date', replacement: util.today()},
{pattern: '@@version', replacement: util.version()}
],
src: file
});
}
/**
* Return the filesize in kilo bytes
* @param {Number} size Size in Bytes
* @return {String} str Formatted string like "50.7KB"
*/
function filesize (size) {
return (size / 1024).toPrecision(3) + 'KB';
}