Files
cappuccino/Objective-J/Jakefile
T
Martin CarlbergandGitHub 1c866931f3 New: The compiler will now create warnings for variables that are never read (#2871)
This new warning adds a lot of warnings in the Cappuccino frameworks. I have turned off
the warning in the Jakefiles when compiling most of the Cappuccino frameworks. But it is
on as default for any user projects.

So there is also a new feature to turn off/on warnings as a compiler flag.

These flags are (all flags are on as default):
-Wunused-but-set-variable                    Warning when a local variable is never read.
-Wshadow-ivar                                Warning when a local variable is shadowing an instance variable for the class.
-Wcreate-global-inside-function-or-method    Warning when creating a global variable inside a function or method.
-Wunknown-class-or-global                    Warning when a class or global variable is not known.
-Wunknown-ivar-type                          Warning when the type for an instance variable is not known.

To turn off a flag add a 'no-' prefix. Example: -Wno-unused-but-set-variable

For an example how to use it in a Jakefile please look at the Jakefiles in this commit.
2020-02-21 14:29:48 +01:00

171 lines
5.8 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
*/
require("../common.jake");
// Make sure we can use new functions in an in old javascript engines like Rhino
// This is only needed if new things are introduced in OldBrowserCompatibility.js
// as we are running in an already built Objective-J environment
require("./OldBrowserCompatibility");
var FILE = require("file"),
OS = require("os"),
stream = require("narwhal/term").stream;
var walk = require("./acornwalk").acorn.walk;
acorn = {walk: walk};
acorn = require("./acorn").acorn;
var compiler = require("./ObjJAcornCompiler").ObjJCompiler;
//$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() + "'"];
$DEBUG_FLAGS = $CONFIGURATION === "Debug" ? ["-DDEBUG=1"] : [""];
$OBJECTIVEJ_FILES = new FileList("*.js");
$BROWSER_FILES = new FileList($BROWSER_FILE).include($OBJECTIVEJ_FILES);
filedir($BUILD_BROWSER_FILE, $BROWSER_FILES, function(aTask)
{
gcc($BROWSER_FILE,
$BUILD_BROWSER_FILE,
environmentFlags("Browser", "ObjJ").concat($INCLUDE_FLAGS, $DEBUG_FLAGS, ["-Wno-unused-but-set-variable"]), $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, new FileList(aFilename).include($OBJECTIVEJ_FILES), function ()
{
if (FILE.extension(aFilename) !== ".js")
{
stream.print("Copying... \0green(" + aFilename +"\0)");
cp(aFilename, buildFilename);
}
else
gcc(aFilename,
buildFilename,
environmentFlags("CommonJS", "ObjJ").concat($INCLUDE_FLAGS, $DEBUG_FLAGS, ["-Wno-unused-but-set-variable"]), false);
});
// HACK: narwhal should copy permissions
if (FILE.dirname(aFilename) === FILE.join("CommonJS", "bin"))
{
filedir (buildFilename, function ()
{
FILE.chmod(buildFilename, 0755);
});
}
task ("build", buildFilename);
CLOBBER.include(buildFilename);
});
task ("build", function() {
setPackageMetadata(FILE.join($BUILD_CJS_OBJECTIVE_J, "package.json"));
});
$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()
{
var environments = Array.prototype.slice.call(arguments)
return environments.map(function(anEnvironment) {
return "-D" + anEnvironment.toUpperCase();
}).concat("-DENVIRONMENTS=" + JSON.stringify(environments));
}
var SHRINKSAFE = require("minify/shrinksafe");
function compressor(code) {
return SHRINKSAFE.compress(code, { charset : "UTF-8", useServer : true });
}
var headerText = FILE.read("header.txt", { charset : "UTF-8" });
function gcc(inputFilePath, outputFilePath, flags, compress)
{
stream.print("Building... \0green(" + outputFilePath +"\0)");
var source = FILE.read(inputFilePath, { charset : "UTF-8" });
var compilerOptions = compiler.parseGccCompilerFlags(flags.join(" "));
var acornOptions = compilerOptions.acornOptions || (compilerOptions.acornOptions = {});
acornOptions.preprocessGetIncludeFile = function(filePath, isQuoted) {
var includeContent = FILE.read(filePath, { charset : "UTF-8" });
//print ("Include content for file '" + filePath + "': " + includeContent);
//print ("Include file '" + filePath + "'");
return {include: includeContent, sourceFile: filePath};
}
var c = compiler.compile(source, inputFilePath, compilerOptions);
var warnings = [],
anyErrors = false;
for (var i = 0; i < c.warningsAndErrors.length; i++)
{
var warning = c.warningsAndErrors[i],
message = c.prettifyMessage(warning);
// Set anyErrors to 'true' if there are any errors in the list
anyErrors = anyErrors || warning.messageType === "ERROR";
print(message);
}
if (anyErrors) throw "Compilation Error";
var code = c.code();
var contents = headerText + code;
if (FILE.extension(inputFilePath) === ".js" && compress)
contents = compressor(contents);
FILE.write(outputFilePath, contents, { charset : "UTF-8" });
}
task("build", [$BUILD_BROWSER_FILE, $BUILD_LICENSE, $BUILD_CJS_OBJECTIVE_J_FRAMEWORK]);