fennec-search/Gruntfile.js

179 строки
6.0 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
module.exports = function (grunt) {
var TREE = grunt.option('tree') || process.env.MC || grunt.fail.fatal("must specify mozilla source tree");
require('load-grunt-tasks')(grunt);
var path = require('path');
var packageName = "org.mozilla.fennec_" + process.env.USER;
var defines = {
ANDROID_PACKAGE_NAME: packageName,
MOZ_ANDROID_SHARED_ID: packageName + ".sharedID",
ANDROID_TARGET_SDK: 19,
};
// A task for preprocessing a src into a dest using Mozilla's Python preprocessor.
grunt.task.registerMultiTask("preprocess", "Preprocesses using the Mozilla Python preprocessor.", function () {
var options = this.options();
grunt.log.writelns("Preprocessing " + options.src + " >>> " + options.dest);
var defines = [];
Object.keys(options.defines).forEach(function(key) {
defines.push("-D " + key + "=" + options.defines[key]);
});
var args = [ "python",
path.join(TREE, "python/mozbuild/mozbuild/preprocessor.py"),
options.src,
"-o",
options.dest,
].concat(defines);
var taskName = this.nameArgs.replace(':', '_');
grunt.config("shell." + taskName + ".command", args.join(" "));
grunt.task.run(["shell:" + taskName]);
});
// A task for exporting src to a dest under the Mozilla source tree.
grunt.task.registerMultiTask("export", "export from local to mozilla source tree.", function () {
grunt.task.run(["mozbuild"]);
var options = this.options();
options.dest = path.join(TREE, options.dest);
var taskName = this.nameArgs.replace(':', '_');
grunt.config("rsync." + taskName + '.options', options);
grunt.task.run(["rsync:" + taskName]);
});
grunt.task.registerMultiTask("mozbuild", "Generate a mozbuild file from a local directory.", function () {
var done = this.async();
var options = this.options({
});
var fileNames = [];
this.files.forEach(function(file) {
file.src.forEach(function(src) {
fileNames.push(path.join(file.dest, src));
});
});
fileNames.sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
var fs = require('fs');
var stream = fs.createWriteStream(options.dest);
stream
.once('open', function(fd) {
stream.write("# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-\n");
stream.write("# vim: set filetype=python:\n");
stream.write("# This Source Code Form is subject to the terms of the Mozilla Public\n");
stream.write("# License, v. 2.0. If a copy of the MPL was not distributed with this\n");
stream.write("# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n");
stream.write("\n");
stream.write(options.python_list + " = [\n");
fileNames.forEach(function (file) {
stream.write(" '" + file + "',\n");
});
stream.write("]\n");
stream.end();
})
.once('finish', function () {
done();
});
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
mozbuild: {
java: {
options: {
dest: path.join(TREE, "mobile/android/search/search_activity_sources.mozbuild"),
python_list: "search_activity_sources",
},
files: [
{ cwd: 'app/src/main/java', src: "**/*.java", dest: "java/" },
],
},
},
export: {
options: {
// args: ["--verbose"],
recursive: true,
syncDest: true,
},
main: {
options: {
src: [ "app/src/main/java",
"strings",
"manifests",
],
dest: "mobile/android/search/",
}
},
res: {
options: {
src: "app/src/main/res",
dest: "mobile/android/search/",
exclude: ["*strings.xml"],
}
},
manifests: {
options: {
src: "manifests",
dest: "mobile/android/search/",
exclude: ["AndroidManifest.xml.in"],
}
},
strings: {
options: {
src: "strings",
dest: "mobile/android/search/",
exclude: ["strings.xml.in"],
}
},
},
preprocess: {
options: {
defines: defines,
},
manifest: {
options: {
src: "manifests/AndroidManifest.xml.in",
dest: "app/src/main/AndroidManifest.xml",
},
},
strings: {
options: {
src: "strings/strings.xml.in",
dest: "app/src/main/res/values/strings.xml",
},
},
},
});
var preprocessedFiles = [];
Object.keys(grunt.config("preprocess")).forEach(function (task) {
var task = grunt.config("preprocess." + task);
if (task.options && task.options.dest) {
preprocessedFiles.push(task.options.dest);
}
});
grunt.config("clean.preprocessed.src", preprocessedFiles);
grunt.registerTask('default', ['preprocess']);
};