Files
cappuccino/Objective-J/Jakefile
T
2010-01-30 00:35:59 -08:00

139 lines
4.5 KiB
JavaScript

/*
* Jakefile
* Objective-J
*
* Created by Francisco Tolmasky.
* Copyright 2009, 280 North, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
var FILE = require("file"),
OS = require("os");
require("../common.jake");
//$BUILD_CONFIGURATION_DIR = "../Build"
$BROWSER_FILE = FILE.join("Browser", "Objective-J.js");
$BUILD_OBJECTIVE_J = FILE.join($BUILD_CONFIGURATION_DIR, "Objective-J");
$BUILD_BROWSER_FILE = FILE.join($BUILD_OBJECTIVE_J, "Objective-J.js");
$INCLUDE_FLAGS = " -I" + FILE.cwd();
filedir($BUILD_BROWSER_FILE, $BROWSER_FILE, function(aTask)
{/*
var methods = ["join", "isAbsolute", "absolute", "basename"],
implementations = { };
methods.forEach(function(aMethod)
{
implementations[aMethod] = FILE[aMethod].toString().replace(/exports/, "FILE");
print(implementations[aMethod])
});
*/
gcc($BROWSER_FILE,
$BUILD_BROWSER_FILE,
environmentFlags("Browser", "ObjJ") + $INCLUDE_FLAGS, $CONFIGURATION !== "Debug");
});
$LICENSE = FILE.join("CommonJS", "lib", "objective-j", "jake", "LICENSES", "LGPL-v2.1");
$BUILD_LICENSE = FILE.join($BUILD_OBJECTIVE_J, "LICENSE");
filedir($BUILD_LICENSE, [$LICENSE], function()
{
FILE.copy($LICENSE, $BUILD_LICENSE);
});
new FileList("CommonJS/**/*").forEach(function(aFilename)
{
// . files should be left out of FileList...
if (!FILE.isFile(aFilename) || FILE.basename(aFilename).charAt(0) === ".")
return;
var buildFilename = FILE.join($BUILD_CJS_OBJECTIVE_J, FILE.relative("CommonJS/", aFilename));
filedir (buildFilename, [aFilename], function ()
{
if (FILE.extension(aFilename) !== ".js")
cp(aFilename, buildFilename)
else
gcc(aFilename,
buildFilename,
environmentFlags("CommonJS", "ObjJ") + $INCLUDE_FLAGS, false);
});
if (FILE.dirname(aFilename) === FILE.join("CommonJS", "bin"))
{
filedir (buildFilename, function ()
{
FILE.chmod(buildFilename, 0755);
});
}
task ("build", buildFilename);
CLOBBER.include(buildFilename);
});
$BUILD_CJS_OBJECTIVE_J_FRAMEWORK = FILE.join($BUILD_CJS_OBJECTIVE_J, "Frameworks", "Objective-J");
filedir($BUILD_CJS_OBJECTIVE_J_FRAMEWORK, function()
{
cp_r($BUILD_OBJECTIVE_J, $BUILD_CJS_OBJECTIVE_J_FRAMEWORK);
});
CLOBBER.include($BUILD_OBJECTIVE_J);
function environmentFlags()
{
return Array.prototype.map.apply(arguments, [function(anEnvironment)
{
return "-D" + anEnvironment.toUpperCase();
}]).join(" ") +
" -DENVIRONMENTS=\"[" + Array.prototype.map.apply(arguments, [function(anEnvironment) {
return "\\\"" + anEnvironment + "\\\"";
}]).join(", ") + "]\"";
}
function gcc(inputFilePath, outputFilePath, flags, compress)
{
// GCC preprocess the file.
var gcc = OS.popen("gcc -E -x c -P " + flags + " " + inputFilePath, { charset:"UTF-8" }),
gccFilePath = FILE.join("", "tmp", "objj-gcc.js"),
chunk = null,
fileContents = FILE.read("header.txt", { charset : "UTF-8" });
while (chunk = gcc.stdout.read())
fileContents += chunk;
FILE.write(gccFilePath, fileContents, { charset:"UTF-8" });
if (FILE.extension(inputFilePath) === ".js" && compress)
{
var compressor = OS.popen("java -server -Dfile.encoding=UTF-8 -classpath CommonJS/shrinksafe/js.jar:CommonJS/shrinksafe/shrinksafe.jar org.dojotoolkit.shrinksafe.Main", { charset:"UTF-8" });
compressor.stdin.write(FILE.absolute(gccFilePath) + "\n");
compressor.stdin.flush();
fileContents = "";
while ((chunk = compressor.stdout.readLine()) !== "/*----*/\n")
fileContents += chunk;
}
FILE.write(outputFilePath, fileContents, { charset : "UTF-8" });
}
task("build", [$BUILD_BROWSER_FILE, $BUILD_LICENSE, $BUILD_CJS_OBJECTIVE_J_FRAMEWORK]);