feat(Gruntfile.js): Updated for Windows build ;

This commit is contained in:
Pierre Renaux
2015-08-13 16:30:58 +08:00
parent 0de0186fbd
commit 3e0a3697df

View File

@@ -1,28 +1,52 @@
'use strict'; 'use strict';
module.exports = function(grunt) { module.exports = function(grunt) {
var fs = require('fs');
var path = require('path');
var isWindows = /^win/.test(process.platform);
require('load-grunt-tasks')(grunt); require('load-grunt-tasks')(grunt);
// config
var config = { var config = {
libName: 'css-layout', libName: 'css-layout',
distFolder: 'dist', distFolder: 'dist',
srcFolder: 'src', srcFolder: 'src',
testFolder: 'src/__tests__', testFolder: 'src/__tests__',
cTestFiles: 'src/__tests__/Layout-test.c src/Layout.c src/Layout-test-utils.c',
cTestOutput: 'c_test',
javaLibFolder: 'src/java/lib', javaLibFolder: 'src/java/lib',
javaSource: 'src/java/tests/com/facebook/csslayout/*.java', javaSource: 'src/java/tests/com/facebook/csslayout/*.java',
javaTestFiles: 'org.junit.runner.JUnitCore com.facebook.csslayout.LayoutEngineTest com.facebook.csslayout.LayoutCachingTest com.facebook.csslayout.CSSNodeTest' javaTestFiles: 'org.junit.runner.JUnitCore com.facebook.csslayout.LayoutEngineTest com.facebook.csslayout.LayoutCachingTest com.facebook.csslayout.CSSNodeTest'
}; };
// Create the dist folder if it doesn't exist. It is deleted by the 'clean' task.
if (!fs.existsSync(config.distFolder)){
fs.mkdirSync(config.distFolder);
}
// C compilation configuration
var cTestClean, cTestCompile, cTestExecute;
if (isWindows) {
// Windows build, assumes cl is in the path (see https://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx).
config.cTestOutput = 'c_test.exe';
cTestCompile = 'cl -nologo -Zi -Tpsrc/__tests__/Layout-test.c -Tpsrc/Layout.c -Tpsrc/Layout-test-utils.c -link -incremental:no -out:"<%= config.cTestOutput %>"';
cTestExecute = '<%= config.cTestOutput %>';
cTestClean = ['<%= config.cTestOutput %>','*.obj','*.pdb'];
}
else {
// GCC build (OSX, Linux, ...), assumes gcc is in the path.
config.cTestOutput = 'c_test';
cTestCompile = 'gcc -std=c99 -Werror -Wno-padded src/__tests__/Layout-test.c src/Layout.c src/Layout-test-utils.c -lm -o "./<%= config.cTestOutput %>"';
cTestExecute = './<%= config.cTestOutput %>';
cTestClean = ['<%= config.cTestOutput %>'];
}
grunt.initConfig({ grunt.initConfig({
config: config, config: config,
clean: { clean: {
dist: ['<%= config.distFolder %>'], dist: ['<%= config.distFolder %>'],
cTest: ['<%= config.cTestOutput %>'], cTest: cTestClean,
javaTest: ['**/*.class'] javaTest: ['**/*.class']
}, },
@@ -80,16 +104,25 @@ module.exports = function(grunt) {
shell: { shell: {
cCompile: { cCompile: {
command: 'gcc -std=c99 -Werror -Wno-padded <%= config.cTestFiles %> -lm -o "./<%= config.cTestOutput %>"' command: cTestCompile
}, },
cTestExecute: { cTestExecute: {
command: './<%= config.cTestOutput %>' command: cTestExecute
}, },
javaCompile: { javaCompile: {
command: 'javac -cp <%= config.javaLibFolder %>/junit4.jar:<%= config.javaLibFolder %>/jsr305.jar:<%= config.javaLibFolder %>/infer-annotations-1.4.jar -sourcepath ./src/java/src:./src/java/tests <%= config.javaSource %>' command: 'javac -cp <%= config.javaLibFolder %>/junit4.jar' +
path.delimiter + '<%= config.javaLibFolder %>/jsr305.jar' +
path.delimiter + '<%= config.javaLibFolder %>/infer-annotations-1.4.jar' +
' -sourcepath ./src/java/src' +
path.delimiter + './src/java/tests' +
' <%= config.javaSource %>'
}, },
javaTestExecute: { javaTestExecute: {
command: 'java -cp ./src/java/src:./src/java/tests:<%= config.javaLibFolder %>/junit4.jar:<%= config.javaLibFolder %>/infer-annotations-1.4.jar <%= config.javaTestFiles %>' command: 'java -cp ./src/java/src' +
path.delimiter + './src/java/tests' +
path.delimiter + '<%= config.javaLibFolder %>/junit4.jar' +
path.delimiter + '<%= config.javaLibFolder %>/infer-annotations-1.4.jar' +
' <%= config.javaTestFiles %>'
}, },
javaPackage: { javaPackage: {
command: 'jar cf <%= config.distFolder %>/<%= config.libName %>.jar <%= config.javaSource %>' command: 'jar cf <%= config.distFolder %>/<%= config.libName %>.jar <%= config.javaSource %>'
@@ -109,7 +142,7 @@ module.exports = function(grunt) {
// Lints and tests the JavaScritp using Chrome // Lints and tests the JavaScritp using Chrome
grunt.registerTask('test-javascript', ['eslint', 'karma']); grunt.registerTask('test-javascript', ['eslint', 'karma']);
// Packages the JavaScript as a single UMD module and minifies // Packages the JavaScript as a single UMD module and minifies
grunt.registerTask('package-javascript', ['includereplace', 'uglify']); grunt.registerTask('package-javascript', ['includereplace', 'uglify']);
// Packages the Java as a JAR // Packages the Java as a JAR