summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe George <joe@zeroc.com>2015-02-18 15:43:52 -0500
committerJoe George <joe@zeroc.com>2015-02-18 15:43:52 -0500
commite1f8da73ec82a44bd23f6dfe430a3ed23b8c3e7c (patch)
tree75be9d70a067f0898abea22684e9eb41b2f6a297
parentUndo bogus change where EventLoggerMsg.h/.rc was added to the git repo. (diff)
downloadice-e1f8da73ec82a44bd23f6dfe430a3ed23b8c3e7c.tar.bz2
ice-e1f8da73ec82a44bd23f6dfe430a3ed23b8c3e7c.tar.xz
ice-e1f8da73ec82a44bd23f6dfe430a3ed23b8c3e7c.zip
ICE-6301 - Align nodejs source and npm distributions
-rwxr-xr-xdistribution/bin/makejspackages.py12
-rw-r--r--distribution/src/js/zeroc-icejs/README.md11
-rw-r--r--distribution/src/js/zeroc-icejs/gulp/util.js19
-rw-r--r--distribution/src/js/zeroc-icejs/gulpfile.js17
-rw-r--r--distribution/src/js/zeroc-icejs/package.json24
-rwxr-xr-xdistribution/src/js/zeroc-slice2js/bin/slice2js-cli.js2
-rw-r--r--distribution/src/js/zeroc-slice2js/slice2js.js23
-rw-r--r--js/gulp/bundle.js (renamed from js/gulp/gulp-bundle/index.js)28
-rw-r--r--js/gulp/commonTasks.js117
-rw-r--r--js/gulp/gulp-slice2js/index.js15
-rw-r--r--js/gulp/libTasks.js207
-rw-r--r--js/gulp/testAndDemoTasks.js180
-rw-r--r--js/gulp/util.js44
-rw-r--r--js/gulpfile.js454
14 files changed, 681 insertions, 472 deletions
diff --git a/distribution/bin/makejspackages.py b/distribution/bin/makejspackages.py
index 8421a4aae41..97f68fb4fef 100755
--- a/distribution/bin/makejspackages.py
+++ b/distribution/bin/makejspackages.py
@@ -70,7 +70,7 @@ for package in packages:
# copy dist files to repositories
#
runCommand("cp -rf distfiles-@ver@/src/js/%(package)s/* packages/%(package)s/" % {"package": package})
-
+
#
# copy license files to each package
#
@@ -86,7 +86,7 @@ copy("%s/mcpp-2.7.2/src" % thirdPartyPackage, "packages/zeroc-slice2js/mcpp/src"
for d in ["IceUtil", "Slice", "slice2js"]:
copyMatchingFiles(os.path.join("Ice-@ver@/cpp/src", d), os.path.join("packages/zeroc-slice2js/src", d), ["*.cpp", "*.h"])
-
+
for d in ["IceUtil", "Slice"]:
copyMatchingFiles(os.path.join("Ice-@ver@/cpp/include", d), os.path.join("packages/zeroc-slice2js/include", d), ["*.h"])
@@ -103,10 +103,8 @@ copy("Ice-@ver@/js/gulp/gulp-slice2js/index.js", "packages/gulp-zeroc-slice2js/i
#
# zeroc-icejs package
#
-for d in ["Ice", "Glacier2", "IceStorm", "IceGrid"]:
- copyMatchingFiles(os.path.join("Ice-@ver@/js/src", d), os.path.join("packages/zeroc-icejs/src", d), ["*.js"])
-copy("Ice-@ver@/js/src/zeroc-icejs.js", "packages/zeroc-icejs/src/zeroc-icejs.js")
-
+copy("Ice-@ver@/js/src", "packages/zeroc-icejs/src")
+copyMatchingFiles("Ice-@ver@/js/gulp", "packages/zeroc-icejs/gulp", ['bundle.js', 'libTasks.js'])
copyMatchingFiles("Ice-@ver@/js/lib", "packages/zeroc-icejs/lib", ["*.js", "*.gz"])
#
@@ -129,6 +127,6 @@ for key, value in jshintDemo["globals"].iteritems():
json.dump(jshint, open("packages/icejs-demos/.jshintrc_browser", "w"), indent = 4, separators=(',', ': '))
for package in packages:
- runCommand("cd packages/%(package)s && git add . && git commit . -m '%(package)s version @ver@'" %
+ runCommand("cd packages/%(package)s && git add . && git commit . -m '%(package)s version @ver@'" %
{"package": package})
diff --git a/distribution/src/js/zeroc-icejs/README.md b/distribution/src/js/zeroc-icejs/README.md
index e5bd9b47daa..794322c272a 100644
--- a/distribution/src/js/zeroc-icejs/README.md
+++ b/distribution/src/js/zeroc-icejs/README.md
@@ -51,6 +51,17 @@ Add the necessary `<script>` tags to your html to include the Ice for JavaScript
Minified versions are available with the `.min.js` extension.
+## Rebuild Browser Libraries
+
+You can rebuild the Ice for Javascript browser libraries by using the following gulp tasks:
+```bash
+$ npm run gulp:build // Build the browser libraries
+$ npm run gulp:watch // Watch for file changes and reload
+$ npm run gulp:clean // Clean the browser libraries
+```
+
+Note: You must have installed `zeroc-icejs` without the `--production` flag.
+
## Documentation
See the [Ice Documentation](https://doc.zeroc.com/display/Ice36/JavaScript+Mapping).
diff --git a/distribution/src/js/zeroc-icejs/gulp/util.js b/distribution/src/js/zeroc-icejs/gulp/util.js
new file mode 100644
index 00000000000..e96ee3f33d4
--- /dev/null
+++ b/distribution/src/js/zeroc-icejs/gulp/util.js
@@ -0,0 +1,19 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+var path = require('path');
+var gulpSlice2js = require('gulp-zeroc-slice2js');
+var sliceDir = gulpSlice2js.sliceDir;
+
+function slice2js(options) {
+ return gulpSlice2js.compile(options);
+}
+
+module.exports.slice2js = slice2js;
+module.exports.sliceDir = sliceDir;
diff --git a/distribution/src/js/zeroc-icejs/gulpfile.js b/distribution/src/js/zeroc-icejs/gulpfile.js
new file mode 100644
index 00000000000..42daa330a6b
--- /dev/null
+++ b/distribution/src/js/zeroc-icejs/gulpfile.js
@@ -0,0 +1,17 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+var gulp = require('gulp');
+var path = require('path');
+
+var libTasks = require('./gulp/libTasks')(gulp);
+
+gulp.task('build', libTasks.buildTasks);
+gulp.task('clean', libTasks.cleanTasks);
+gulp.task('watch', libTasks.watchTasks);
diff --git a/distribution/src/js/zeroc-icejs/package.json b/distribution/src/js/zeroc-icejs/package.json
index 970e1e610f8..aa8113cd2d2 100644
--- a/distribution/src/js/zeroc-icejs/package.json
+++ b/distribution/src/js/zeroc-icejs/package.json
@@ -1,6 +1,6 @@
{
"name": "zeroc-icejs",
- "version": "@jsonver@",
+ "version": "3.6.0-beta.0",
"description": "Ice for JavaScript runtime",
"author": "Zeroc, Inc.",
"homepage": "https://www.zeroc.com",
@@ -16,5 +16,25 @@
"keywords": [
"Ice",
"IceJS"
- ]
+ ],
+ "devDependencies": {
+ "del": "^1.1.1",
+ "esprima": "^2.0.0",
+ "gulp": "^3.8.11",
+ "gulp-ext-replace": "^0.1.0",
+ "gulp-gzip": "0.0.8",
+ "gulp-newer": "^0.5.0",
+ "gulp-sourcemaps": "^1.3.0",
+ "browser-sync": "^1.8.2",
+ "gulp-uglify": "^1.1.0",
+ "gulp-util": "^3.0.3",
+ "gulp-zeroc-slice2js": "^3.6.0-beta.0",
+ "source-map": "^0.3.0",
+ "through2": "^0.6.3",
+ },
+ "scripts": {
+ "gulp:build": "gulp build",
+ "gulp:watch": "gulp watch",
+ "gulp:clean": "gulp clean"
+ }
}
diff --git a/distribution/src/js/zeroc-slice2js/bin/slice2js-cli.js b/distribution/src/js/zeroc-slice2js/bin/slice2js-cli.js
index b200680842c..fc99a46940f 100755
--- a/distribution/src/js/zeroc-slice2js/bin/slice2js-cli.js
+++ b/distribution/src/js/zeroc-slice2js/bin/slice2js-cli.js
@@ -11,4 +11,4 @@
'use strict';
var slice2js = require('../slice2js');
-slice2js(process.argv.slice(2), {stdio: 'inherit'}).on('exit', process.exit);
+slice2js.compile(process.argv.slice(2), {stdio: 'inherit'}).on('exit', process.exit);
diff --git a/distribution/src/js/zeroc-slice2js/slice2js.js b/distribution/src/js/zeroc-slice2js/slice2js.js
index ed7a8f52226..4ae111604dc 100644
--- a/distribution/src/js/zeroc-slice2js/slice2js.js
+++ b/distribution/src/js/zeroc-slice2js/slice2js.js
@@ -13,16 +13,17 @@ var os = require('os');
var platform = os.platform();
var arch = os.arch();
-module.exports = function(args, options)
-{
- var bin_dir = path.join(__dirname, 'build', 'Release');
- var slice2js = platform === 'win32' ? 'slice2js.exe' : 'slice2js';
- slice2js = path.join(bin_dir, slice2js);
-
- var slice_dir = path.resolve(path.join(__dirname, 'slice'));
+var sliceDir = path.resolve(path.join(__dirname, 'slice'));
+var slice2js = path.join(path.join(__dirname, 'build', 'Release'),
+ platform === 'win32' ? 'slice2js.exe' : 'slice2js');
- var slice2js_args = args.slice();
- slice2js_args.push('-I' + slice_dir);
+function compile(args, options)
+{
+ args = args || [];
+ var slice2jsArgs = args.slice();
+ slice2jsArgs.push('-I' + sliceDir);
+ return spawn(slice2js, slice2jsArgs, options);
+}
- return spawn(slice2js, slice2js_args, options);
-};
+module.exports.compile = compile;
+module.exports.sliceDir = sliceDir;
diff --git a/js/gulp/gulp-bundle/index.js b/js/gulp/bundle.js
index 34820c11295..cf78a02b7b0 100644
--- a/js/gulp/gulp-bundle/index.js
+++ b/js/gulp/bundle.js
@@ -7,13 +7,13 @@
//
// **********************************************************************
-var gutil = require("gulp-util");
+var gutil = require("gulp-util");
var PluginError = gutil.PluginError;
var PLUGIN_NAME = "gulp-slice2js-bundle";
-var through = require("through2");
-var fs = require("fs");
-var path = require("path");
-var sourcemap = require('source-map');
+var through = require("through2");
+var fs = require("fs");
+var path = require("path");
+var sourcemap = require('source-map');
function rmfile(path)
{
@@ -269,7 +269,7 @@ function bundle(args)
cb();
},
function(cb)
- {
+ {
if(!isfile(args.target) ||
files.some(function(f){ return isnewer(f.path, args.target); }))
{
@@ -283,7 +283,7 @@ function bundle(args)
});
d.depends = d.expand().sort();
-
+
var sourceMap = new sourcemap.SourceMapGenerator(
{
file: path.basename(args.target)
@@ -316,12 +316,12 @@ function bundle(args)
sb.write(preamble);
lineOffset += 2;
-
+
args.modules.forEach(
function(m){
sb.write(" window." + m + " = window." + m + " || {};\n");
lineOffset++;
-
+
if(m == "Ice")
{
sb.write(" Ice.Slice = Ice.Slice || {};\n");
@@ -330,12 +330,12 @@ function bundle(args)
});
sb.write(" var Slice = Ice.Slice;\n");
lineOffset++;
-
+
for(var i = 0; i < d.depends.length; ++i)
{
sb.write(modulePreamble);
lineOffset += 3;
-
+
var data = d.depends[i].file.contents.toString();
var file = d.depends[i].file;
var lines = data.toString().split("\n");
@@ -423,9 +423,9 @@ function bundle(args)
{
continue;
}
-
+
sb.write(" " + out + "\n");
-
+
sourceMap.addMapping(
{
generated:
@@ -447,7 +447,7 @@ function bundle(args)
}
sb.write("\n");
lineOffset++;
-
+
//
// Now exports the modules to the global Window object.
//
diff --git a/js/gulp/commonTasks.js b/js/gulp/commonTasks.js
new file mode 100644
index 00000000000..a0219c1390e
--- /dev/null
+++ b/js/gulp/commonTasks.js
@@ -0,0 +1,117 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+var browserSync = require("browser-sync");
+var concat = require('gulp-concat');
+var del = require("del");
+var gzip = require('gulp-gzip');
+var minifycss = require('gulp-minify-css');
+var newer = require('gulp-newer');
+var path = require('path');
+var uglify = require("gulp-uglify");
+
+var util = require('./util');
+
+module.exports = function(gulp) {
+ var common =
+ {
+ "scripts": [
+ "bower_components/foundation/js/vendor/modernizr.js",
+ "bower_components/foundation/js/vendor/jquery.js",
+ "bower_components/foundation/js/foundation.min.js",
+ "bower_components/nouislider/distribute/jquery.nouislider.all.js",
+ "bower_components/animo.js/animo.js",
+ "bower_components/spin.js/spin.js",
+ "bower_components/spin.js/jquery.spin.js",
+ "bower_components/highlightjs/highlight.pack.js",
+ "assets/icejs.js"],
+ "styles":
+ ["bower_components/foundation/css/foundation.css",
+ "bower_components/animo.js/animate+animo.css",
+ "bower_components/highlightjs/styles/vs.css",
+ "bower_components/nouislider/distribute/jquery.nouislider.min.css",
+ "assets/icejs.css"]
+ };
+
+ gulp.task("common:slice", [],
+ function()
+ {
+ return gulp.src(["test/Common/Controller.ice"])
+ .pipe(util.slice2js({dest: "test/Common"}))
+ .pipe(gulp.dest("test/Common"));
+ });
+
+ gulp.task("common:slice:clean", [],
+ function()
+ {
+ del(["test/Common/Controller.js"]);
+ });
+
+ gulp.task("common:slice:watch", ["common:slice"],
+ function()
+ {
+ gulp.watch(["test/Common/Controller.ice"], function(){
+ gulp.start("common:slice", function(){
+ browserSync.reload("test/Common/Controller.js");
+ });
+ });
+ });
+
+ gulp.task("common:js", ["bower"],
+ function()
+ {
+ return gulp.src(common.scripts)
+ .pipe(newer("assets/common.min.js"))
+ .pipe(concat("common.min.js"))
+ .pipe(uglify())
+ .pipe(gulp.dest("assets"))
+ .pipe(gzip())
+ .pipe(gulp.dest("assets"));
+ });
+
+ gulp.task("common:js:watch", ["common:js"],
+ function()
+ {
+ gulp.watch(common.scripts,
+ function(){
+ gulp.start("common:js", function(){
+ browserSync.reload("assets/common.min.js");
+ });
+ });
+ });
+
+ gulp.task("common:css", ["bower"],
+ function()
+ {
+ return gulp.src(common.styles)
+ .pipe(newer("assets/common.css"))
+ .pipe(concat("common.css"))
+ .pipe(minifycss())
+ .pipe(gulp.dest("assets"))
+ .pipe(gzip())
+ .pipe(gulp.dest("assets"));
+ });
+
+ gulp.task("common:css:watch", ["common:css"],
+ function()
+ {
+ gulp.watch(common.styles,
+ function(){
+ gulp.start("common:css", function(){
+ browserSync.reload("assets/common.css");
+ });
+ });
+ });
+
+ gulp.task("common:clean", [],
+ function()
+ {
+ del(["assets/common.css", "assets/common.min.js"]);
+ });
+};
diff --git a/js/gulp/gulp-slice2js/index.js b/js/gulp/gulp-slice2js/index.js
index 22b8833a901..0135f48fb95 100644
--- a/js/gulp/gulp-slice2js/index.js
+++ b/js/gulp/gulp-slice2js/index.js
@@ -120,7 +120,7 @@ function compile(slice2js, file, args, cb)
});
}
-module.exports = function(options)
+module.exports.compile = function(options)
{
var opts = options || {};
var slice2js;
@@ -130,7 +130,7 @@ module.exports = function(options)
{
try
{
- slice2js = require("zeroc-slice2js");
+ slice2js = require("zeroc-slice2js").compile;
}
catch(e)
{
@@ -200,3 +200,14 @@ module.exports = function(options)
}
});
};
+
+module.exports.sliceDir = (function() {
+ try
+ {
+ return require('zeroc-slice2js').sliceDir;
+ }
+ catch(e)
+ {
+ return null;
+ }
+})();
diff --git a/js/gulp/libTasks.js b/js/gulp/libTasks.js
new file mode 100644
index 00000000000..9715bd25d1a
--- /dev/null
+++ b/js/gulp/libTasks.js
@@ -0,0 +1,207 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+var browserSync = require("browser-sync");
+var del = require("del");
+var extreplace = require("gulp-ext-replace");
+var fs = require("fs");
+var gulp = require('gulp');
+var gzip = require('gulp-gzip');
+var newer = require('gulp-newer');
+var path = require('path');
+var sourcemaps = require('gulp-sourcemaps');
+var uglify = require("gulp-uglify");
+
+var bundle = require("./bundle");
+var util = require('./util');
+
+var root = path.resolve(path.join('__dirname', '..'));
+var sliceDir = null;
+var libs = ["Ice", "Glacier2", "IceStorm", "IceGrid"];
+
+function generateTask(name)
+{
+ return name.toLowerCase() + ":generate";
+}
+function libTask(name)
+{
+ return name.toLowerCase() + ":lib";
+}
+function minLibTask(name)
+{
+ return name.toLowerCase() + ":lib-min";
+}
+function libFile(name)
+{
+ return path.join(root, "lib", name + ".js");
+}
+function libFileMin(name)
+{
+ return path.join(root, "lib", name + ".min.js");
+}
+function srcDir(name)
+{
+ return "src/" + name;
+}
+function libCleanTask(lib)
+{
+ return lib + ":clean";
+}
+function libWatchTask(lib)
+{
+ return lib + ":watch";
+}
+
+function libFiles(name)
+{
+ return [
+ path.join(root, "lib", name + ".js"),
+ path.join(root, "lib", name + ".js.gz"),
+ path.join(root, "lib", name + ".min.js"),
+ path.join(root, "lib", name + ".min.js.gz")];
+}
+
+function mapFiles(name)
+{
+ return [
+ path.join(root, "lib", name + ".js.map"),
+ path.join(root, "lib", name + ".js.map.gz"),
+ path.join(root, "lib", name + ".min.js.map"),
+ path.join(root, "lib", name + ".min.js.map.gz")];
+}
+
+function libSources(lib, sources)
+{
+ var srcs = sources.common || [];
+ if(sources.browser)
+ {
+ srcs = sources.common.concat(sources.browser);
+ }
+
+ srcs = srcs.map(function(f)
+ {
+ return path.join(srcDir(lib), f);
+ });
+
+ if(sources.slice)
+ {
+ srcs = srcs.concat(sources.slice.map(function(f)
+ {
+ return path.join(srcDir(lib), path.basename(f, ".ice") + ".js");
+ }));
+ }
+
+ return srcs;
+}
+
+function libGeneratedFiles(lib, sources)
+{
+ return sources.slice.map(function(f)
+ {
+ return path.join(srcDir(lib), path.basename(f, ".ice") + ".js");
+ })
+ .concat(libFiles(lib))
+ .concat(mapFiles(lib))
+ .concat([path.join(srcDir(lib), ".depend", "*")]);
+}
+
+function watchSources(lib, sources)
+{
+ var srcs = sources.common || [];
+ if(sources.browser)
+ {
+ srcs = sources.common.concat(sources.browser);
+ }
+
+ srcs = srcs.map(function(f)
+ {
+ return path.join(srcDir(lib), f);
+ });
+ return srcs;
+}
+
+function generateGulpTasks(gulp) {
+ function sliceFile(f)
+ {
+ return path.join(util.sliceDir, f);
+ }
+
+ libs.forEach(
+ function(lib)
+ {
+ var sources = JSON.parse(fs.readFileSync(path.join(srcDir(lib), "sources.json"), {encoding: "utf8"}));
+
+ gulp.task(generateTask(lib),
+ function()
+ {
+ return gulp.src(sources.slice.map(sliceFile))
+ .pipe(util.slice2js({args: ["--ice","--icejs"], dest: srcDir(lib)}))
+ .pipe(gulp.dest(srcDir(lib)));
+ });
+
+ gulp.task(libTask(lib), [generateTask(lib)],
+ function()
+ {
+ return gulp.src(libSources(lib, sources))
+ .pipe(sourcemaps.init())
+ .pipe(bundle(
+ {
+ srcDir: srcDir(lib),
+ modules: sources.modules,
+ target: libFile(lib)
+ }))
+ .pipe(sourcemaps.write("../lib", {sourceRoot:"/src"}))
+ .pipe(gulp.dest("lib"))
+ .pipe(gzip())
+ .pipe(gulp.dest("lib"));
+ });
+
+ gulp.task(minLibTask(lib), [libTask(lib)],
+ function()
+ {
+ return gulp.src(libFile(lib))
+ .pipe(newer(libFileMin(lib)))
+ .pipe(sourcemaps.init({loadMaps:true, sourceRoot:"./"}))
+ .pipe(uglify({compress:false}))
+ .pipe(extreplace(".min.js"))
+ .pipe(sourcemaps.write("../lib", {includeContent: false}))
+ .pipe(gulp.dest("lib"))
+ .pipe(gzip())
+ .pipe(gulp.dest("lib"));
+ });
+
+ gulp.task(libCleanTask(lib), [],
+ function()
+ {
+ del(libGeneratedFiles(lib, sources));
+ });
+
+ gulp.task(libWatchTask(lib), [minLibTask(lib)],
+ function()
+ {
+ gulp.watch(sources.slice.map(sliceFile).concat(watchSources(lib, sources)),
+ function(){
+ gulp.start(minLibTask(lib), function(){
+ browserSync.reload(libFileMin(lib));
+ });
+ });
+ });
+ });
+}
+
+module.exports = function(gulp) {
+ generateGulpTasks(gulp);
+ return {
+ buildTasks : libs.map(minLibTask),
+ cleanTasks: libs.map(libCleanTask),
+ watchTasks: libs.map(libCleanTask)
+ };
+};
+
+
diff --git a/js/gulp/testAndDemoTasks.js b/js/gulp/testAndDemoTasks.js
new file mode 100644
index 00000000000..73bc01594e9
--- /dev/null
+++ b/js/gulp/testAndDemoTasks.js
@@ -0,0 +1,180 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+var browserSync = require("browser-sync");
+var concat = require('gulp-concat');
+var del = require("del");
+var extreplace = require("gulp-ext-replace");
+var gzip = require('gulp-gzip');
+var newer = require('gulp-newer');
+var path = require('path');
+var paths = require('vinyl-paths');
+var uglify = require("gulp-uglify");
+
+var util = require('./util');
+
+module.exports = function(gulp) {
+
+ var subprojects =
+ {
+ test: [
+ "Ice/acm", "Ice/ami", "Ice/binding", "Ice/defaultValue", "Ice/enums", "Ice/exceptions",
+ "Ice/exceptionsBidir", "Ice/facets", "Ice/facetsBidir", "Ice/hold", "Ice/inheritance",
+ "Ice/inheritanceBidir", "Ice/location", "Ice/objects", "Ice/operations", "Ice/operationsBidir",
+ "Ice/optional", "Ice/optionalBidir", "Ice/promise", "Ice/properties", "Ice/proxy", "Ice/retry",
+ "Ice/slicing/exceptions", "Ice/slicing/objects", "Ice/timeout", "Glacier2/router"],
+ demo: ["Ice/hello", "Ice/throughput", "Ice/minimal", "Ice/latency", "Ice/bidir", "Glacier2/chat",
+ "ChatDemo"]
+ };
+
+ var minDemos =
+ {
+ "Ice/minimal":
+ {
+ srcs: [
+ "lib/Ice.min.js",
+ "demo/Ice/minimal/Hello.js",
+ "demo/Ice/minimal/browser/Client.js"],
+ dest: "demo/Ice/minimal/browser/"
+ },
+ "ChatDemo":
+ {
+ srcs: [
+ "lib/Ice.min.js",
+ "lib/Glacier2.min.js",
+ "demo/ChatDemo/Chat.js",
+ "demo/ChatDemo/ChatSession.js",
+ "demo/ChatDemo/Client.js"],
+ dest: "demo/ChatDemo"
+ }
+ };
+
+ function testHtmlTask(name) { return "test_" + name.replace("/", "_") + ":html"; }
+ function testHtmlCleanTask(name) { return "test_" + name.replace("/", "_") + ":html:clean"; }
+
+ subprojects.test.forEach(
+ function(name)
+ {
+ gulp.task(testHtmlTask(name), [],
+ function()
+ {
+ return gulp.src("test/Common/index.html")
+ .pipe(newer(path.join("test", name, "index.html")))
+ .pipe(gulp.dest(path.join("test", name)));
+ });
+
+ gulp.task(testHtmlCleanTask(name), [],
+ function()
+ {
+ del(path.join("test", name, "index.html"));
+ });
+ });
+
+ gulp.task("html", subprojects.test.map(testHtmlTask));
+ gulp.task("html:watch", ["html"],
+ function()
+ {
+ gulp.watch(["test/Common/index.html"], ["html"]);
+ });
+ gulp.task("html:clean", subprojects.test.map(testHtmlCleanTask));
+
+ Object.keys(subprojects).forEach(
+ function(group)
+ {
+ function groupTask(name) { return group + "_" + name.replace("/", "_"); }
+ function groupGenerateTask(name) { return groupTask(name); }
+ function groupWatchTask(name) { return groupTask(name) + ":watch"; }
+ function groupCleanTask(name) { return groupTask(name) + ":clean"; }
+
+ subprojects[group].forEach(
+ function(name)
+ {
+ gulp.task(groupGenerateTask(name), (util.useBinDist ? [] : ["dist"]),
+ function()
+ {
+ return gulp.src(path.join(group, name, "*.ice"))
+ .pipe(util.slice2js(
+ {
+ args: ["-I" + path.join(group, name)],
+ dest: path.join(group, name)
+ }))
+ .pipe(gulp.dest(path.join(group, name)));
+ });
+
+ gulp.task(groupWatchTask(name),
+ (group == "test" ? [groupGenerateTask(name), "html"] : [groupGenerateTask(name)]),
+ function()
+ {
+ gulp.watch([path.join(group, name, "*.ice")], [groupGenerateTask(name)]);
+
+ gulp.watch([path.join(group, name, "*.js"),
+ path.join(group, name, "browser", "*.js"),
+ path.join(group, name, "*.html")], function(e){
+ browserSync.reload(e.path);
+ });
+ });
+
+ gulp.task(groupCleanTask(name), [],
+ function()
+ {
+ return gulp.src(path.join(group, name, "*.ice"))
+ .pipe(extreplace(".js"))
+ .pipe(paths(del));
+ });
+ });
+
+ gulp.task(group, subprojects[group].map(groupGenerateTask).concat(
+ group == "test" ? ["common:slice", "common:js", "common:css"].concat(subprojects.test.map(testHtmlTask)) :
+ ["common:slice", "common:js", "common:css", "demo_Ice_minimal:min", "demo_ChatDemo:min"]));
+
+ gulp.task(group + ":watch", subprojects[group].map(groupWatchTask).concat(
+ group == "test" ? ["common:slice:watch", "common:css:watch", "common:js:watch", "html:watch"] :
+ ["common:css:watch", "common:js:watch"].concat(Object.keys(minDemos).map(minDemoWatchTaskName))));
+
+ gulp.task(group + ":clean", subprojects[group].map(groupCleanTask).concat(
+ group == "test" ? subprojects.test.map(testHtmlCleanTask).concat(["common:slice:clean"]) :
+ ["demo_Ice_minimal:min:clean", "demo_ChatDemo:min:clean"]));
+ });
+
+ function demoTaskName(name) { return "demo_" + name.replace("/", "_"); }
+ function minDemoTaskName(name) { return demoTaskName(name) + ":min"; }
+ function minDemoWatchTaskName(name) { return minDemoTaskName(name) + ":watch"; }
+ function minDemoCleanTaskName(name) { return minDemoTaskName(name) + ":clean"; }
+
+ Object.keys(minDemos).forEach(
+ function(name)
+ {
+ var demo = minDemos[name];
+
+ gulp.task(minDemoTaskName(name), [demoTaskName(name)],
+ function()
+ {
+ return gulp.src(demo.srcs)
+ .pipe(newer(path.join(demo.dest, "Client.min.js")))
+ .pipe(concat("Client.min.js"))
+ .pipe(uglify())
+ .pipe(gulp.dest(demo.dest))
+ .pipe(gzip())
+ .pipe(gulp.dest(demo.dest));
+ });
+
+ gulp.task(minDemoWatchTaskName(name), [minDemoTaskName(name)],
+ function()
+ {
+ gulp.watch(demo.srcs, [minDemoTaskName(name)]);
+ });
+
+ gulp.task(minDemoCleanTaskName(name), [],
+ function()
+ {
+ del([path.join(demo.dest, "Client.min.js"),
+ path.join(demo.dest, "Client.min.js.gz")]);
+ });
+ });
+};
diff --git a/js/gulp/util.js b/js/gulp/util.js
new file mode 100644
index 00000000000..ac17a3ad5f7
--- /dev/null
+++ b/js/gulp/util.js
@@ -0,0 +1,44 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+var path = require('path');
+
+var gulpSlice2js = require("./gulp-slice2js");
+var sliceDir = path.resolve(__dirname, '..', '..', 'slice');
+
+var useBinDist = process.env.USE_BIN_DIST == "yes";
+
+function getSliceArgs(options)
+{
+ var defaults = {};
+ var opts = options || {};
+
+ defaults.args = opts.args || [];
+ defaults.dest = opts.dest;
+
+ if(useBinDist)
+ {
+ defaults.exe = undefined;
+ }
+ else
+ {
+ defaults.args = defaults.args.concat(["-I" + sliceDir]);
+ defaults.exe = opts.exe || path.resolve(
+ path.join("../cpp/bin", process.platform == "win32" ? "slice2js.exe" : "slice2js"));
+ }
+ return defaults;
+}
+
+function slice2js(options) {
+ return gulpSlice2js.compile(getSliceArgs(options));
+}
+
+module.exports.useBinDist = useBinDist;
+module.exports.slice2js = slice2js;
+module.exports.sliceDir = sliceDir;
diff --git a/js/gulpfile.js b/js/gulpfile.js
index 2c4acbcc96f..e54f8a10c53 100644
--- a/js/gulpfile.js
+++ b/js/gulpfile.js
@@ -9,191 +9,18 @@
var bower = require("bower");
var browserSync = require("browser-sync");
-var concat = require('gulp-concat');
-var del = require("del");
-var extreplace = require("gulp-ext-replace");
-var fs = require("fs");
var gulp = require("gulp");
-var gzip = require("gulp-gzip");
var jshint = require('gulp-jshint');
-var minifycss = require('gulp-minify-css');
-var newer = require('gulp-newer');
var open = require("gulp-open");
-var path = require("path");
-var paths = require('vinyl-paths');
var spawn = require("child_process").spawn;
-var sourcemaps = require('gulp-sourcemaps');
-var uglify = require("gulp-uglify");
-var HttpServer = require("./bin/HttpServer");
-var slice2js = require("./gulp/gulp-slice2js");
-var bundle = require("./gulp/gulp-bundle");
+var useBinDist = require('./gulp/util').useBinDist;
+var HttpServer = require("./bin/HttpServer");
-var useBinDist = process.env.USE_BIN_DIST == "yes";
-
-function getSliceArgs(options)
-{
- var defaults = {};
- var opts = options || {};
-
- defaults.args = opts.args || [];
- defaults.dest = opts.dest;
-
- if(useBinDist)
- {
- defaults.exe = undefined;
- }
- else
- {
- defaults.args = defaults.args.concat(["-I" + path.resolve("../slice/")]);
- defaults.exe = opts.exe || path.resolve(
- path.join("../cpp/bin", process.platform == "win32" ? "slice2js.exe" : "slice2js"));
- }
- return defaults;
-}
-
-function sliceFile(f){ return path.join("../slice/", f); }
-
-function libSources(lib, sources)
-{
- var srcs = sources.common || [];
- if(sources.browser)
- {
- srcs = sources.common.concat(sources.browser);
- }
-
- srcs = srcs.map(function(f)
- {
- return path.join(srcDir(lib), f);
- });
-
- if(sources.slice)
- {
- srcs = srcs.concat(sources.slice.map(function(f)
- {
- return path.join(srcDir(lib), path.basename(f, ".ice") + ".js");
- }));
- }
-
- return srcs;
-}
-
-function watchSources(lib, sources)
-{
- var srcs = sources.common || [];
- if(sources.browser)
- {
- srcs = sources.common.concat(sources.browser);
- }
-
- srcs = srcs.map(function(f)
- {
- return path.join(srcDir(lib), f);
- });
- return srcs;
-}
-
-function generateTask(name) { return name.toLowerCase() + ":generate"; }
-function libTask(name) { return name.toLowerCase() + ":lib"; }
-function minLibTask(name) { return name.toLowerCase() + ":lib-min"; }
-function libFile(name) { return path.join("lib", name + ".js"); }
-function libFileMin(name) { return path.join("lib", name + ".min.js"); }
-function srcDir(name) { return "src/" + name; }
-function libCleanTask(lib){ return lib + ":clean"; }
-function libWatchTask(lib){ return lib + ":watch"; }
-
-function libFiles(name)
-{
- return [
- path.join("lib", name + ".js"),
- path.join("lib", name + ".js.gz"),
- path.join("lib", name + ".min.js"),
- path.join("lib", name + ".min.js.gz")];
-}
-
-function mapFiles(name)
-{
- return [
- path.join("lib", name + ".js.map"),
- path.join("lib", name + ".js.map.gz"),
- path.join("lib", name + ".min.js.map"),
- path.join("lib", name + ".min.js.map.gz")];
-}
-
-function libGeneratedFiles(lib, sources)
-{
- return sources.slice.map(function(f)
- {
- return path.join(srcDir(lib), path.basename(f, ".ice") + ".js");
- })
- .concat(libFiles(lib))
- .concat(mapFiles(lib))
- .concat([path.join(srcDir(lib), ".depend", "*")]);
-}
-
-var libs = ["Ice", "Glacier2", "IceStorm", "IceGrid"];
-
-libs.forEach(
- function(lib)
- {
- var sources = JSON.parse(fs.readFileSync(path.join(srcDir(lib), "sources.json"), {encoding: "utf8"}));
-
- gulp.task(generateTask(lib),
- function()
- {
- return gulp.src(sources.slice.map(sliceFile))
- .pipe(slice2js(getSliceArgs({args: ["--ice","--icejs"], dest: srcDir(lib)})))
- .pipe(gulp.dest(srcDir(lib)));
- });
-
- gulp.task(libTask(lib), [generateTask(lib)],
- function()
- {
- return gulp.src(libSources(lib, sources))
- .pipe(sourcemaps.init())
- .pipe(bundle(
- {
- srcDir: srcDir(lib),
- modules: sources.modules,
- target: libFile(lib)
- }))
- .pipe(sourcemaps.write("../lib", {sourceRoot:"/src"}))
- .pipe(gulp.dest("lib"))
- .pipe(gzip())
- .pipe(gulp.dest("lib"));
- });
-
- gulp.task(minLibTask(lib), [libTask(lib)],
- function()
- {
- return gulp.src(libFile(lib))
- .pipe(newer(libFileMin(lib)))
- .pipe(sourcemaps.init({loadMaps:true, sourceRoot:"./"}))
- .pipe(uglify({compress:false}))
- .pipe(extreplace(".min.js"))
- .pipe(sourcemaps.write("../lib", {includeContent: false}))
- .pipe(gulp.dest("lib"))
- .pipe(gzip())
- .pipe(gulp.dest("lib"));
- });
-
- gulp.task(libCleanTask(lib), [],
- function()
- {
- del(libGeneratedFiles(lib, sources));
- });
-
- gulp.task(libWatchTask(lib), [minLibTask(lib)],
- function()
- {
- gulp.watch(sources.slice.map(sliceFile).concat(watchSources(lib, sources)),
- function(){
- gulp.start(minLibTask(lib), function(){
- browserSync.reload(libFileMin(lib));
- });
- });
- });
- });
+//
+// Tasks to build IceJS Distribution
+//
+var libTasks = require('./gulp/libTasks')(gulp);
gulp.task("bower", [],
function(cb)
@@ -208,262 +35,19 @@ gulp.task("dist:libs", ["bower"],
.pipe(gulp.dest("lib"));
});
-gulp.task("dist", useBinDist ? ["dist:libs"] : libs.map(minLibTask));
-gulp.task("dist:watch", libs.map(libWatchTask));
-gulp.task("dist:clean", libs.map(libCleanTask));
-
-var common =
-{
- "scripts": [
- "bower_components/foundation/js/vendor/modernizr.js",
- "bower_components/foundation/js/vendor/jquery.js",
- "bower_components/foundation/js/foundation.min.js",
- "bower_components/nouislider/distribute/jquery.nouislider.all.js",
- "bower_components/animo.js/animo.js",
- "bower_components/spin.js/spin.js",
- "bower_components/spin.js/jquery.spin.js",
- "bower_components/highlightjs/highlight.pack.js",
- "assets/icejs.js"],
- "styles":
- ["bower_components/foundation/css/foundation.css",
- "bower_components/animo.js/animate+animo.css",
- "bower_components/highlightjs/styles/vs.css",
- "bower_components/nouislider/distribute/jquery.nouislider.min.css",
- "assets/icejs.css"]
-};
-
-gulp.task("common:slice", [],
- function()
- {
- return gulp.src(["test/Common/Controller.ice"])
- .pipe(slice2js(getSliceArgs({dest: "test/Common"})))
- .pipe(gulp.dest("test/Common"));
- });
-
-gulp.task("common:slice:clean", [],
- function()
- {
- del(["test/Common/Controller.js"]);
- });
-
-gulp.task("common:slice:watch", ["common:slice"],
- function()
- {
- gulp.watch(["test/Common/Controller.ice"], function(){
- gulp.start("common:slice", function(){
- browserSync.reload("test/Common/Controller.js");
- });
- });
- });
-
-gulp.task("common:js", ["bower"],
- function()
- {
- return gulp.src(common.scripts)
- .pipe(newer("assets/common.min.js"))
- .pipe(concat("common.min.js"))
- .pipe(uglify())
- .pipe(gulp.dest("assets"))
- .pipe(gzip())
- .pipe(gulp.dest("assets"));
- });
-
-gulp.task("common:js:watch", ["common:js"],
- function()
- {
- gulp.watch(common.scripts,
- function(){
- gulp.start("common:js", function(){
- browserSync.reload("assets/common.min.js");
- });
- });
- });
-
-gulp.task("common:css", ["bower"],
- function()
- {
- return gulp.src(common.styles)
- .pipe(newer("assets/common.css"))
- .pipe(concat("common.css"))
- .pipe(minifycss())
- .pipe(gulp.dest("assets"))
- .pipe(gzip())
- .pipe(gulp.dest("assets"));
- });
-
-gulp.task("common:css:watch", ["common:css"],
- function()
- {
- gulp.watch(common.styles,
- function(){
- gulp.start("common:css", function(){
- browserSync.reload("assets/common.css");
- });
- });
- });
-
-gulp.task("common:clean", [],
- function()
- {
- del(["assets/common.css", "assets/common.min.js"]);
- });
-
-var subprojects =
-{
- test: [
- "Ice/acm", "Ice/ami", "Ice/binding", "Ice/defaultValue", "Ice/enums", "Ice/exceptions",
- "Ice/exceptionsBidir", "Ice/facets", "Ice/facetsBidir", "Ice/hold", "Ice/inheritance",
- "Ice/inheritanceBidir", "Ice/location", "Ice/objects", "Ice/operations", "Ice/operationsBidir",
- "Ice/optional", "Ice/optionalBidir", "Ice/promise", "Ice/properties", "Ice/proxy", "Ice/retry",
- "Ice/slicing/exceptions", "Ice/slicing/objects", "Ice/timeout", "Glacier2/router"],
- demo: ["Ice/hello", "Ice/throughput", "Ice/minimal", "Ice/latency", "Ice/bidir", "Glacier2/chat",
- "ChatDemo"]
-};
-
-var minDemos =
-{
- "Ice/minimal":
- {
- srcs: [
- "lib/Ice.min.js",
- "demo/Ice/minimal/Hello.js",
- "demo/Ice/minimal/browser/Client.js"],
- dest: "demo/Ice/minimal/browser/"
- },
- "ChatDemo":
- {
- srcs: [
- "lib/Ice.min.js",
- "lib/Glacier2.min.js",
- "demo/ChatDemo/Chat.js",
- "demo/ChatDemo/ChatSession.js",
- "demo/ChatDemo/Client.js"],
- dest: "demo/ChatDemo"
- }
-};
-
-function testHtmlTask(name) { return "test_" + name.replace("/", "_") + ":html"; }
-function testHtmlCleanTask(name) { return "test_" + name.replace("/", "_") + ":html:clean"; }
-
-subprojects.test.forEach(
- function(name)
- {
- gulp.task(testHtmlTask(name), [],
- function()
- {
- return gulp.src("test/Common/index.html")
- .pipe(newer(path.join("test", name, "index.html")))
- .pipe(gulp.dest(path.join("test", name)));
- });
-
- gulp.task(testHtmlCleanTask(name), [],
- function()
- {
- del(path.join("test", name, "index.html"));
- });
- });
+gulp.task("dist", useBinDist ? ["dist:libs"] : libTasks.buildTasks);
+gulp.task("dist:watch", libTasks.watchTasks);
+gulp.task("dist:clean", libTasks.cleanTasks);
-gulp.task("html", subprojects.test.map(testHtmlTask));
-gulp.task("html:watch", ["html"],
- function()
- {
- gulp.watch(["test/Common/index.html"], ["html"]);
- });
-gulp.task("html:clean", subprojects.test.map(testHtmlCleanTask));
-
-Object.keys(subprojects).forEach(
- function(group)
- {
- function groupTask(name) { return group + "_" + name.replace("/", "_"); }
- function groupGenerateTask(name) { return groupTask(name); }
- function groupWatchTask(name) { return groupTask(name) + ":watch"; }
- function groupCleanTask(name) { return groupTask(name) + ":clean"; }
-
- subprojects[group].forEach(
- function(name)
- {
- gulp.task(groupGenerateTask(name), (useBinDist ? [] : ["dist"]),
- function()
- {
- return gulp.src(path.join(group, name, "*.ice"))
- .pipe(slice2js(getSliceArgs(
- {
- args: ["-I" + path.join(group, name)],
- dest: path.join(group, name)
- })))
- .pipe(gulp.dest(path.join(group, name)));
- });
-
- gulp.task(groupWatchTask(name),
- (group == "test" ? [groupGenerateTask(name), "html"] : [groupGenerateTask(name)]),
- function()
- {
- gulp.watch([path.join(group, name, "*.ice")], [groupGenerateTask(name)]);
-
- gulp.watch([path.join(group, name, "*.js"),
- path.join(group, name, "browser", "*.js"),
- path.join(group, name, "*.html")], function(e){
- browserSync.reload(e.path);
- });
- });
-
- gulp.task(groupCleanTask(name), [],
- function()
- {
- return gulp.src(path.join(group, name, "*.ice"))
- .pipe(extreplace(".js"))
- .pipe(paths(del));
- });
- });
-
- gulp.task(group, subprojects[group].map(groupGenerateTask).concat(
- group == "test" ? ["common:slice", "common:js", "common:css"].concat(subprojects.test.map(testHtmlTask)) :
- ["common:slice", "common:js", "common:css", "demo_Ice_minimal:min", "demo_ChatDemo:min"]));
-
- gulp.task(group + ":watch", subprojects[group].map(groupWatchTask).concat(
- group == "test" ? ["common:slice:watch", "common:css:watch", "common:js:watch", "html:watch"] :
- ["common:css:watch", "common:js:watch"].concat(Object.keys(minDemos).map(minDemoWatchTaskName))));
-
- gulp.task(group + ":clean", subprojects[group].map(groupCleanTask).concat(
- group == "test" ? subprojects.test.map(testHtmlCleanTask).concat(["common:slice:clean"]) :
- ["demo_Ice_minimal:min:clean", "demo_ChatDemo:min:clean"]));
- });
-
-function demoTaskName(name) { return "demo_" + name.replace("/", "_"); }
-function minDemoTaskName(name) { return demoTaskName(name) + ":min"; }
-function minDemoWatchTaskName(name) { return minDemoTaskName(name) + ":watch"; }
-function minDemoCleanTaskName(name) { return minDemoTaskName(name) + ":clean"; }
-
-Object.keys(minDemos).forEach(
- function(name)
- {
- var demo = minDemos[name];
-
- gulp.task(minDemoTaskName(name), [demoTaskName(name)],
- function()
- {
- return gulp.src(demo.srcs)
- .pipe(newer(path.join(demo.dest, "Client.min.js")))
- .pipe(concat("Client.min.js"))
- .pipe(uglify())
- .pipe(gulp.dest(demo.dest))
- .pipe(gzip())
- .pipe(gulp.dest(demo.dest));
- });
-
- gulp.task(minDemoWatchTaskName(name), [minDemoTaskName(name)],
- function()
- {
- gulp.watch(demo.srcs, [minDemoTaskName(name)]);
- });
+//
+// Common Tasks for the tests and demos
+//
+require('./gulp/commonTasks')(gulp);
- gulp.task(minDemoCleanTaskName(name), [],
- function()
- {
- del([path.join(demo.dest, "Client.min.js"),
- path.join(demo.dest, "Client.min.js.gz")]);
- });
- });
+//
+// Test and demo tasks
+//
+require('./gulp/testAndDemoTasks')(gulp);
gulp.task("watch", ["test:watch", "demo:watch"].concat(useBinDist ? [] : ["dist:watch"]));
@@ -472,7 +56,7 @@ gulp.task("demo:run", ["watch"],
{
browserSync();
HttpServer();
-
+
return gulp.src("./index.html").pipe(open("", {url: "http://127.0.0.1:8080/index.html"}));
});
@@ -481,7 +65,7 @@ gulp.task("test:run-with-browser", ["watch"].concat(useBinDist ? ["test", "demo"
{
browserSync();
HttpServer();
-
+
var p = require("child_process").spawn("python", ["../scripts/TestController.py"], {stdio: "inherit"});
function exit() { p.kill(); }
process.on("SIGINT", exit);