mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-27 22:17:03 +00:00
This allows us to inline the message send function in DEBUG mode. This is great when stepping into a method in the debugger as the message send function is not a separate function. Also the stack traces in the debugger is much more compact as the message send function is not there.
244 lines
7.9 KiB
JavaScript
244 lines
7.9 KiB
JavaScript
/*
|
|
* Jakefile
|
|
* __project.name__
|
|
*
|
|
* Created by __user.name__ on __project.date__.
|
|
*
|
|
* Copyright __project.year__, __organization.name__. All rights reserved.
|
|
*
|
|
* 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
|
|
*/
|
|
|
|
//===========================================================
|
|
// DO NOT REMOVE
|
|
//===========================================================
|
|
|
|
var SYS = require("system"),
|
|
ENV = SYS.env,
|
|
FILE = require("file"),
|
|
OS = require("os");
|
|
|
|
|
|
//===========================================================
|
|
// USER CONFIGURABLE VARIABLES
|
|
//===========================================================
|
|
|
|
/*
|
|
The directory in which the project will be built. By default
|
|
it is built in $CAPP_BUILD if that is defined, otherwise
|
|
in a "Build" directory within the project directory.
|
|
*/
|
|
var buildDir = ENV["BUILD_PATH"] || ENV["CAPP_BUILD"] || "Build";
|
|
|
|
/*
|
|
The list of directories containing Objective-J source
|
|
that should be compiled by jake. The main framework
|
|
directory is always checked for Objective-J source,
|
|
you only need to edit this if you have source in
|
|
subdirectories. Do NOT include a leading ortrailing slash
|
|
in the directory name.
|
|
|
|
Example:
|
|
|
|
var sourceDirs = [
|
|
"Core",
|
|
"Modules",
|
|
"Modules/Foo",
|
|
"Modules/Bar"
|
|
];
|
|
*/
|
|
var sourceDirs = [
|
|
];
|
|
|
|
|
|
//===========================================================
|
|
// AUTOMATICALLY GENERATED
|
|
//
|
|
// Do not edit! (unless you know what you are doing)
|
|
//===========================================================
|
|
|
|
var stream = require("narwhal/term").stream,
|
|
JAKE = require("jake"),
|
|
task = JAKE.task,
|
|
CLEAN = require("jake/clean").CLEAN,
|
|
CLOBBER = require("jake/clean").CLOBBER,
|
|
FileList = JAKE.FileList,
|
|
filedir = JAKE.filedir,
|
|
framework = require("cappuccino/jake").framework,
|
|
browserEnvironment = require("objective-j/jake/environment").Browser,
|
|
configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug",
|
|
productName = "__project.nameasidentifier__",
|
|
buildPath = FILE.canonical(FILE.join(buildDir, productName + ".build")),
|
|
packageFrameworksPath = FILE.join(SYS.prefix, "packages", "cappuccino", "Frameworks"),
|
|
debugPackagePath = FILE.join(packageFrameworksPath, "Debug", productName);
|
|
releasePackagePath = FILE.join(packageFrameworksPath, productName);
|
|
|
|
var frameworkTask = framework (productName, function(frameworkTask)
|
|
{
|
|
frameworkTask.setBuildIntermediatesPath(FILE.join(buildPath, configuration));
|
|
frameworkTask.setBuildPath(FILE.join(buildDir, configuration));
|
|
|
|
frameworkTask.setProductName(productName);
|
|
frameworkTask.setIdentifier("__project.identifier__");
|
|
frameworkTask.setVersion("1.0");
|
|
frameworkTask.setAuthor("__organization.name__");
|
|
frameworkTask.setEmail("__organization.email__");
|
|
frameworkTask.setSummary("__project.name__");
|
|
|
|
var includes = sourceDirs.map(function(dir) { return dir + "/*.j"; }),
|
|
fileList = new FileList();
|
|
|
|
includes.unshift("*.j");
|
|
fileList.include(includes);
|
|
frameworkTask.setSources(fileList);
|
|
frameworkTask.setResources(new FileList("Resources/**/*"));
|
|
frameworkTask.setFlattensSources(true);
|
|
frameworkTask.setInfoPlistPath("Info.plist");
|
|
frameworkTask.setLicense(BundleTask.License.LGPL_v2_1);
|
|
//frameworkTask.setEnvironments([browserEnvironment]);
|
|
|
|
if (configuration === "Debug")
|
|
frameworkTask.setCompilerFlags("-DDEBUG -g -S --inline-msg-send");
|
|
else
|
|
frameworkTask.setCompilerFlags("-O2");
|
|
});
|
|
|
|
task ("debug", function()
|
|
{
|
|
ENV["CONFIGURATION"] = "Debug";
|
|
JAKE.subjake(["."], "build", ENV);
|
|
});
|
|
|
|
task ("release", function()
|
|
{
|
|
ENV["CONFIGURATION"] = "Release";
|
|
JAKE.subjake(["."], "build", ENV);
|
|
});
|
|
|
|
task ("default", ["release"]);
|
|
|
|
var frameworkCJS = FILE.join(buildDir, configuration, "CommonJS", "cappuccino", "Frameworks", productName);
|
|
|
|
filedir (frameworkCJS, [productName], function()
|
|
{
|
|
if (FILE.exists(frameworkCJS))
|
|
FILE.rmtree(frameworkCJS);
|
|
|
|
FILE.copyTree(frameworkTask.buildProductPath(), frameworkCJS);
|
|
});
|
|
|
|
task ("build", [productName, frameworkCJS]);
|
|
|
|
task ("all", ["debug", "release"]);
|
|
|
|
task ("install", ["debug", "release"], function()
|
|
{
|
|
install("copy");
|
|
});
|
|
|
|
task ("install-symlinks", ["debug", "release"], function()
|
|
{
|
|
install("symlink");
|
|
});
|
|
|
|
task ("help", function()
|
|
{
|
|
var app = JAKE.application().name();
|
|
|
|
colorPrint("--------------------------------------------------------------------------", "bold+green");
|
|
colorPrint("__project.name__ - Framework", "bold+green");
|
|
colorPrint("--------------------------------------------------------------------------", "bold+green");
|
|
|
|
describeTask(app, "debug", "Builds a debug version at " + FILE.join(buildDir, "Debug", productName));
|
|
describeTask(app, "release", "Builds a release version at " + FILE.join(buildDir, "Release", productName));
|
|
describeTask(app, "all", "Builds a debug and release version");
|
|
describeTask(app, "install", "Builds a debug and release version, then installs in " + packageFrameworksPath);
|
|
describeTask(app, "install-symlinks", "Builds a debug and release version, then symlinks the built versions into " + packageFrameworksPath);
|
|
describeTask(app, "clean", "Removes the intermediate build files");
|
|
describeTask(app, "clobber", "Removes the intermediate build files and the installed frameworks");
|
|
|
|
colorPrint("--------------------------------------------------------------------------", "bold+green");
|
|
});
|
|
|
|
CLEAN.include(buildPath);
|
|
CLOBBER.include(FILE.join(buildDir, "Debug", productName))
|
|
.include(FILE.join(buildDir, "Release", productName))
|
|
.include(debugPackagePath)
|
|
.include(releasePackagePath);
|
|
|
|
var install = function(action)
|
|
{
|
|
var packageFrameworksPath = FILE.join(SYS.prefix, "packages", "cappuccino", "Frameworks");
|
|
|
|
["Release", "Debug"].forEach(function(aConfig)
|
|
{
|
|
colorPrint((action === "symlink" ? "Symlinking " : "Copying ") + aConfig + "...", "cyan");
|
|
|
|
if (aConfig === "Debug")
|
|
packageFrameworksPath = FILE.join(packageFrameworksPath, aConfig);
|
|
|
|
if (!FILE.isDirectory(packageFrameworksPath))
|
|
sudo(["mkdir", "-p", packageFrameworksPath]);
|
|
|
|
var buildPath = FILE.absolute(FILE.join(buildDir, aConfig, productName)),
|
|
targetPath = FILE.join(packageFrameworksPath, productName);
|
|
|
|
if (action === "symlink")
|
|
directoryOp(["ln", "-sf", buildPath, targetPath]);
|
|
else
|
|
directoryOp(["cp", "-rf", buildPath, targetPath]);
|
|
});
|
|
};
|
|
|
|
var directoryOp = function(cmd)
|
|
{
|
|
var targetPath = cmd[cmd.length - 1];
|
|
|
|
if (FILE.isDirectory(targetPath))
|
|
sudo(["rm", "-rf", targetPath]);
|
|
|
|
sudo(cmd);
|
|
};
|
|
|
|
var sudo = function(cmd)
|
|
{
|
|
if (OS.system(cmd))
|
|
OS.system(["sudo"].concat(cmd));
|
|
};
|
|
|
|
var describeTask = function(application, task, description)
|
|
{
|
|
colorPrint("\n" + application + " " + task, "violet");
|
|
description.split("\n").forEach(function(line)
|
|
{
|
|
stream.print(" " + line);
|
|
});
|
|
};
|
|
|
|
var colorPrint = function(message, color)
|
|
{
|
|
var matches = color.match(/(bold(?: |\+))?(.+)/);
|
|
|
|
if (!matches)
|
|
return;
|
|
|
|
message = "\0" + matches[2] + "(" + message + "\0)";
|
|
|
|
if (matches[1])
|
|
message = "\0bold(" + message + "\0)";
|
|
|
|
stream.print(message);
|
|
};
|