<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.open-xchange.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Robert.lihm</id>
	<title>Open-Xchange - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.open-xchange.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Robert.lihm"/>
	<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Special:Contributions/Robert.lihm"/>
	<updated>2026-06-30T19:15:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:UI_build_system&amp;diff=18666</id>
		<title>AppSuite:UI build system</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:UI_build_system&amp;diff=18666"/>
		<updated>2014-09-30T12:23:52Z</updated>

		<summary type="html">&lt;p&gt;Robert.lihm: /* coreDir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stability-experimental}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Build System&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' This document describes the build system of OX App Suite. It is intended for app developers who use the build system to create apps as well as for OX App Suite developers who not only use the build system but also may wish to extend it.&lt;br /&gt;
&lt;br /&gt;
The build system is used to create source archives from source files. These source archives can be used to compile installable packages for various Linux distributions. The build system can generate archives for the core UI as well as for independently installed apps.&lt;br /&gt;
&lt;br /&gt;
The OX App Suite build system uses [https://github.com/mde/jake Jake], a port of Rake from Ruby to [http://nodejs.org Node.js]. Both Rake and Jake are dependency-based build systems like Make, which allows quick incremental builds. But unlike Make, Jake doesn't have its own syntax. Instead, it provides an API in JavaScript. The API is used not only to specify dependencies between files using a full programming language, but also to implement the generation of files in the same language. This allows easy implementation of complex build systems, of which the OX App Suite build system is an example. Using the same language for the developed project and for its build system also allows any core developer to quickly extend the build system without having to switch to another language.&lt;br /&gt;
&lt;br /&gt;
== Using the Build System ==&lt;br /&gt;
&lt;br /&gt;
While easily extensible, most of the time the build system will be used as-is. This chapter describes how to set up and use the build system to develop apps and the OX App Suite core.&lt;br /&gt;
&lt;br /&gt;
All command examples are given for the Debian operating system. The instructions should work similarly on other POSIX systems. The first character of each command indicates whether it should be executed as root (#) or as a normal user ($).&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
Installing the right environment for running the &amp;lt;code&amp;gt;appserver&amp;lt;/code&amp;gt; and the UI build system is described in [[AppSuite:GettingStarted#Installing | the getting started article]].&lt;br /&gt;
&lt;br /&gt;
== Running ==&lt;br /&gt;
&lt;br /&gt;
The build system is executed by invoking the command &amp;lt;code&amp;gt;build-appsuite&amp;lt;/code&amp;gt;. Similar to most build systems, the build system can perform multiple tasks, which are specified as parameters on the command line. Each task can require any number of parameters. These parameters can be specified either on the command line, using the syntax &amp;lt;code&amp;gt;name=value&amp;lt;/code&amp;gt;, or as environment variables.&lt;br /&gt;
&lt;br /&gt;
If present, the file &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; is sourced by a shell script before the build process starts. This file can export environment variables which are specific to the local system, without checking them into a version control system. Typically, it defines values for &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Since the build system is based on Jake, it also accepts all other Jake options. In addition, the environment variable &amp;lt;code&amp;gt;$nodeopts&amp;lt;/code&amp;gt; can be used to pass command line parameters to Node.js. One of the most useful parameters is &amp;lt;code&amp;gt;--debug-brk&amp;lt;/code&amp;gt;, which can be used to debug the build system.&lt;br /&gt;
&lt;br /&gt;
When developing external apps, the build system must be run from the top directory of the app's source. As a safety precaution, execution is aborted if the subdirectory &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;, which usually contains JavaScript source code, is not found. This Article is written assuming, you're working in your workspace directory, containing the subfolder &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
The build system is used not only to create source archives for packaging. It can also directly install and update the built UI in a directory during development, help with the setup of the source of a new external app and more. While all of these tasks are described in the reference section, daily work involves just a few of them.&lt;br /&gt;
&lt;br /&gt;
To have an easy example about how to [[AppSuite:GettingStarted#Writing | write]], [[AppSuite:GettingStarted#Building | build]] &amp;amp; [[AppSuite:GettingStarted#Running | host]] your javascript code and how to [[AppSuite:GettingStarted#Initialization | initialize]] &amp;amp; [[AppSuite:GettingStarted#Building_Packages | build]] your packages, please have a look at the [[AppSuite:GettingStarted | GettingStarted article]].&lt;br /&gt;
&lt;br /&gt;
==== JSHINT ====&lt;br /&gt;
&lt;br /&gt;
One step of the build process is running jshint to statically analyse the sources for certain errors. JSHint is configured with (what we think) sane defaults, but if you want to configure your own rules, edit &amp;lt;code&amp;gt;.jshintrc&amp;lt;/code&amp;gt; in your project`s root folder, according to your needs.&lt;br /&gt;
&lt;br /&gt;
=== default ===&lt;br /&gt;
&lt;br /&gt;
The default task is used instead of the app task when building the core OX App Suite. Since it is the default Jake task, it is not necessary to specify it on the command line when it's the only task.&lt;br /&gt;
&lt;br /&gt;
The top directory of OX App Suite source code includes the script &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt;, which should be used instead of calling a potentially unrelated version of &amp;lt;code&amp;gt;build-appsuite&amp;lt;/code&amp;gt;. The script changes the current directory to its own, so that it can be called from any directory.&lt;br /&gt;
&lt;br /&gt;
   $ web/ui/build.sh&lt;br /&gt;
&lt;br /&gt;
=== clean ===&lt;br /&gt;
&lt;br /&gt;
The build system uses dependencies and file timestamps to decide which files to rebuild. This assumes that any change to a file increases its timestamp to a value which is greater than the timestamp of any existing file. When this assumption is violated (e.g. after switching to a different source control branch with older files) it may become necessary to rebuild everything to restore the assumption about timestamps. The simplest way to achieve this is the clean task, which simply deletes all generated files.&lt;br /&gt;
&lt;br /&gt;
WARNING: This can be potentially dangerous, since the clean task simply deletes the directories specified by the variables builddir, destDir, l10nDir, manifestDir, and helpDir.&lt;br /&gt;
&lt;br /&gt;
=== dist ===&lt;br /&gt;
&lt;br /&gt;
When the app is ready to be shipped, or rather all the time on a continuous build system, the app needs to be packaged in a format suitable for installation on a production system. Since there already exist tools to create packages from suitably arranged source code archives, the OX App Suite build system merely prepares such source archives.&lt;br /&gt;
&lt;br /&gt;
The dist task creates an archive with the source (the one ending in .orig.tar.bz2) and a few additional files necessary for Debian packaging. RPM packages can be generated using the same source archive and the .spec file created by init-packaging. The version of the package is extracted from the newest entry in the file debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Debian packages can also be generated manually either from the temporary directory left behind by dist, or even directly from the source tree. The second option pollutes the source tree with generated files, so it is not recommended, although the .gitignore file created by init-packaging can handle these generated files.&lt;br /&gt;
&lt;br /&gt;
   $ build-appsuite dist&lt;br /&gt;
   $ ls tmp/packaging/&lt;br /&gt;
   example-app-0.0.1                   example-app_0.0.1-1.dsc&lt;br /&gt;
   example-app_0.0.1-1.debian.tar.bz2  example-app_0.0.1.orig.tar.bz2&lt;br /&gt;
   $ cd tmp/packaging/example-app-0.0.1/&lt;br /&gt;
   $ dpkg-buildpackage -b&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
==== BASEDIR ====&lt;br /&gt;
The top directory of the build system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; all tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; installation directory of the build system&lt;br /&gt;
&lt;br /&gt;
Required to build external apps, since in this case, the build&lt;br /&gt;
system is not installed in the current directory. This variable is&lt;br /&gt;
automatically set as an environment variable by the build system&lt;br /&gt;
executable based on &amp;lt;code&amp;gt;$OX_APPSUITE_DEV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== branch ====&lt;br /&gt;
The Subversion branch of the CLDR to checkout.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;update-i18n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== builddir ====&lt;br /&gt;
The target directory for generated files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;docs&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Default: &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
The copyright line to be included in packaging metadata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#init-packaging|init-packaging]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;2012 Open-Xchange, Inc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== coreDir ====&lt;br /&gt;
Location of OX App Suite UI files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#app|app]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#default|default]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some tasks depend on installed files from the OX App Suite. When building external apps, &amp;lt;code&amp;gt;[[#coreDir|coreDir]]&amp;lt;/code&amp;gt; specified the directory which contains these files.&lt;br /&gt;
&lt;br /&gt;
Currently, this parameter is used to compile &amp;lt;code&amp;gt;.less&amp;lt;/code&amp;gt; files for every installed theme. This can be disabled by setting &amp;lt;code&amp;gt;[[#skipLess|skipLess]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== debug ====&lt;br /&gt;
Enables a debug build.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To simplify debugging of OX App Suite, compression of source code&lt;br /&gt;
can be disabled by specifying &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== description ====&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The description of the app to be included in packaging metadata.&lt;br /&gt;
&lt;br /&gt;
==== destDir ====&lt;br /&gt;
Output directory for source archives created by&lt;br /&gt;
the &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; task.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;tmp/packaging&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== disableStrictMode ====&lt;br /&gt;
Removes all &amp;lt;code&amp;gt;&amp;quot;use strict&amp;quot;&amp;lt;/code&amp;gt; directives from processed&lt;br /&gt;
JavaScript code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some debugging tools which use code instrumentation have problems&lt;br /&gt;
when the debugged code uses strict mode. This setting enables code&lt;br /&gt;
processing even whe using &amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt; mode, so line numbers&lt;br /&gt;
will not match the original source code.&lt;br /&gt;
&lt;br /&gt;
==== forceDeb ====&lt;br /&gt;
Whether an error during the generation of Debian source packages is an error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is useful when Debian packages are generated automatically, and a failure of &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is also a failure of the entire build. By default it merely produces a warning.&lt;br /&gt;
&lt;br /&gt;
==== from ====&lt;br /&gt;
The root of the printed dependency tree between Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== helpDir ====&lt;br /&gt;
The location of online help files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the value contains the string &amp;lt;code&amp;gt;@lang@&amp;lt;/code&amp;gt;, it will be&lt;br /&gt;
replaced by the lowercase language code (e.g. &amp;lt;code&amp;gt;en-us&amp;lt;/code&amp;gt;) to&lt;br /&gt;
allow per-language directories.&lt;br /&gt;
&lt;br /&gt;
==== l10nDir ====&lt;br /&gt;
The location of compiled l10n files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the value contains the string &amp;lt;code&amp;gt;@lang@&amp;lt;/code&amp;gt;, it will be&lt;br /&gt;
replaced by the lowercase language code (e.g. &amp;lt;code&amp;gt;en-us&amp;lt;/code&amp;gt;) to&lt;br /&gt;
allow per-language directories.&lt;br /&gt;
&lt;br /&gt;
==== license ====&lt;br /&gt;
File name of the full text of the distribution license.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; based on &amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== licenseName ====&lt;br /&gt;
Name of the distribution license to be included in packaging&lt;br /&gt;
metadata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;CC-BY-NC-SA-3.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manifestDir ====&lt;br /&gt;
The location of the combined manifest file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maintainer ====&lt;br /&gt;
Name and email address of the package maintainer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Format:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;Name&amp;lt;/var&amp;gt; &amp;amp;lt;&amp;lt;var&amp;gt;email&amp;lt;/var&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== package ====&lt;br /&gt;
The name of the package for the built app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; all tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; the package name in the first line of&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the name of the manifest file contains the package name and it&lt;br /&gt;
is required to determine build dependencies, the package name must&lt;br /&gt;
be always known. This means either &amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;&lt;br /&gt;
must exist and contain at least one entry, or the parameter must be&lt;br /&gt;
explicitly specified.&lt;br /&gt;
&lt;br /&gt;
==== reverse ====&lt;br /&gt;
Reverses the direction of printed dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When specified, the &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt; task prints modules which&lt;br /&gt;
depend on the specified modules, instead of modules on which&lt;br /&gt;
the specified module depends.&lt;br /&gt;
&lt;br /&gt;
==== revision ====&lt;br /&gt;
Revision number of the package for the app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The revision number must increase with each rebuild of the same&lt;br /&gt;
version to enable the creation of unique version strings. These are&lt;br /&gt;
required in package names and to control content caching in clients.&lt;br /&gt;
&lt;br /&gt;
==== root ====&lt;br /&gt;
Specifies for which module to print the dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; print all roots&lt;br /&gt;
&lt;br /&gt;
If specified, only the dependencies of the specified module are&lt;br /&gt;
printed. Otherwise, the dependencies of all modules are printed.&lt;br /&gt;
&lt;br /&gt;
==== skipDeb ====&lt;br /&gt;
Whether to skip the generation of Debian source packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is useful when Debian packages are not required and/or&lt;br /&gt;
&amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is not available, e.g. on RPM based&lt;br /&gt;
systems.&lt;br /&gt;
&lt;br /&gt;
Even when using this flag, at least the file&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt; is still required, because it is used&lt;br /&gt;
to store the package name and version. &lt;br /&gt;
&lt;br /&gt;
==== skipLess ====&lt;br /&gt;
Whether to skip the preprocessing of LessCSS files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This flag skips the generation of CSS files in&lt;br /&gt;
the &amp;lt;code&amp;gt;apps/themes/*/less&amp;lt;/code&amp;gt; directories of all themes.&lt;br /&gt;
It is used by the packaging system, where the LessCSS files are&lt;br /&gt;
precompiled after installation on the target system instead of&lt;br /&gt;
while building the package.&lt;br /&gt;
&lt;br /&gt;
==== tag ====&lt;br /&gt;
The Subversion tag of the CLDR to checkout.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;update-i18n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== to ====&lt;br /&gt;
The leaf task in the printed dependency path between Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When specified, only a single path from the root to the leaf task is&lt;br /&gt;
printed (in reverse order).&lt;br /&gt;
&lt;br /&gt;
==== version ====&lt;br /&gt;
Version number of the app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The version should consist of a major, minor and patch version&lt;br /&gt;
separated by dots.&lt;br /&gt;
&lt;br /&gt;
=== Tasks ===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An up-to-date list of tasks can be printed using the -T command line option.&lt;br /&gt;
&lt;br /&gt;
==== app ====&lt;br /&gt;
Builds an external app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#BASEDIR|BASEDIR]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#coreDir|coreDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#disableStrictMode|disableStrictMode]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#l10nDir|l10nDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#manifestDir|manifestDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#package|package]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#revision|revision]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#version|version]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This is the main task used to build external apps.&lt;br /&gt;
&lt;br /&gt;
It works without explicitly specifying any variables, but during&lt;br /&gt;
development, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; is usually pointed to&lt;br /&gt;
the directory of a locally installed OX App Suite UI to avoid&lt;br /&gt;
additional copying steps. For debugging, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt; is also&lt;br /&gt;
often used. Note that &amp;lt;code&amp;gt;[[#clean|clean]]&amp;lt;/code&amp;gt; must be called when&lt;br /&gt;
changing any of the variables.&lt;br /&gt;
&lt;br /&gt;
==== clean ====&lt;br /&gt;
Removes all generated files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;l10nDir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;manifestDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task should be executed before a normal build using&lt;br /&gt;
&amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; after changing any build&lt;br /&gt;
variables and after a switch between Git branches. Normal&lt;br /&gt;
incremental builds can miss changed files if a branch switch&lt;br /&gt;
replaces files by older versions.&lt;br /&gt;
&lt;br /&gt;
==== default ====&lt;br /&gt;
Builds OX App Suite.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#BASEDIR|BASEDIR]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#disableStrictMode|disableStrictMode]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#l10nDir|l10nDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#manifestDir|manifestDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#package|package]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#revision|revision]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#version|version]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This is the main task to build OX App Suite. Since it is the default&lt;br /&gt;
Jake task, it does not need to be specified explicitly on&lt;br /&gt;
the command line when it is the only task.&lt;br /&gt;
&lt;br /&gt;
It works without explicitly specifying any variables, but during&lt;br /&gt;
development, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; is usually pointed to&lt;br /&gt;
a directory which is accessible to a local web server. For&lt;br /&gt;
debugging, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt; is also often used. Note that&lt;br /&gt;
&amp;lt;code&amp;gt;[[#clean|clean]]&amp;lt;/code&amp;gt; must be called when changing any of&lt;br /&gt;
the variables.&lt;br /&gt;
&lt;br /&gt;
==== deps ====&lt;br /&gt;
Prints module dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;reverse&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task visualizes dependencies of RequireJS modules. It prints&lt;br /&gt;
a tree of dependencies to &amp;lt;code&amp;gt;stdout&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; is specified, then only the dependencies of&lt;br /&gt;
that module are printed. Otherwise, the dependencies of all modules,&lt;br /&gt;
on which no other module depends are printed in sequence. &lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;reverse&amp;lt;/code&amp;gt; is specified, then this task prints&lt;br /&gt;
dependants instead of dependencies, i.e. modules which depend on&lt;br /&gt;
the specified module instead of modules on which the specified&lt;br /&gt;
module depends.&lt;br /&gt;
&lt;br /&gt;
==== dist ====&lt;br /&gt;
Creates source packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forceDeb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;l10nDir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;manifestDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;skipDeb&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task cleans the source tree by calling &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; and&lt;br /&gt;
packs the source into an archive which can be used to create Debian&lt;br /&gt;
and RPM packages. The necessary Debian metadata is created alongside&lt;br /&gt;
the source archive. All files necessary for Debian packaging are&lt;br /&gt;
placed in the directory specified by &amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;.&lt;br /&gt;
The generated &amp;lt;code&amp;gt;.orig.tar.bz2&amp;lt;/code&amp;gt; archive can also be used&lt;br /&gt;
together with the &amp;lt;code&amp;gt;.spec&amp;lt;/code&amp;gt; file to generate RPM packages.&lt;br /&gt;
&lt;br /&gt;
Unless the variable &amp;lt;code&amp;gt;skipDeb&amp;lt;/code&amp;gt; is set to&lt;br /&gt;
&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, the program &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is required&lt;br /&gt;
by this task. It is used to generate Debian-specific packaging&lt;br /&gt;
metadata.&lt;br /&gt;
&lt;br /&gt;
==== init-packaging ====&lt;br /&gt;
Initializes packaging information for a new app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maintainer&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task is the first task called when starting with&lt;br /&gt;
the development of a new external app. The directory from which it&lt;br /&gt;
is called must already contain at least the &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;&lt;br /&gt;
subdirectory. This is also the only task where&lt;br /&gt;
the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; variable must be specified explicitly.&lt;br /&gt;
Afterwards, the package name is looked up automatically in the file&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;, which is created by this task.&lt;br /&gt;
&lt;br /&gt;
The variables &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maintainer&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; are required to&lt;br /&gt;
fill out all necessary packaging metadata. Any of these variables&lt;br /&gt;
which are not specified explicitly will cause an interactive prompt.&lt;br /&gt;
This avoids the need to remember the list of variables before one&lt;br /&gt;
can start developing an app.&lt;br /&gt;
&lt;br /&gt;
==== jakedeps ====&lt;br /&gt;
Shows the dependency chain between two Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task visualized dependencies between Jake tasks. The variable&lt;br /&gt;
&amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; specifies the root of a dependency tree, with all&lt;br /&gt;
dependencies of &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; as inner and leaf nodes. If&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is not specified, then that entire tree is printed.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is also specified, then only the first found&lt;br /&gt;
dependency path from &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is&lt;br /&gt;
.printed with &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; at the top and &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; at&lt;br /&gt;
the bottom.&lt;br /&gt;
&lt;br /&gt;
==== merge ====&lt;br /&gt;
Updates all &amp;lt;code&amp;gt;.po&amp;lt;/code&amp;gt; files with the generated&lt;br /&gt;
&amp;lt;code&amp;gt;ox.pot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task updates the list of extracted i18n strings in&lt;br /&gt;
&amp;lt;code&amp;gt;ox.pot&amp;lt;/code&amp;gt; and calls the GNU Gettext tool&lt;br /&gt;
&amp;lt;code&amp;gt;msgmerge&amp;lt;/code&amp;gt; for every language in &amp;lt;code&amp;gt;i18n/*.po&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;i18n/en_US.po&amp;lt;/code&amp;gt; is not updated by this task because the original strings are already in the &amp;lt;code&amp;gt;en_US&amp;lt;/code&amp;gt; locale. It would only end up with every translation mapping every string to itself. The only entries in that file should be for cases when the &amp;lt;code&amp;gt;en_US&amp;lt;/code&amp;gt; text is not a suitable fallback for missing translations. The original string in such a case would be something internationally appropriate (e.&amp;amp;nbsp;g. a date written as &amp;quot;2013-01-01&amp;quot; instead of &amp;quot;01/01/2013&amp;quot;) and &amp;lt;code&amp;gt;i18n/en_US.po&amp;lt;/code&amp;gt; would contain a translation.&lt;br /&gt;
&lt;br /&gt;
==== update-i18n ====&lt;br /&gt;
Updates CLDR data in the source tree.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task downloads data from the Unicode CLDR and updates date&lt;br /&gt;
translations for all languages in &amp;lt;code&amp;gt;i18n/*.po&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The exact version of CLDR data is specified as Suubversion tag or&lt;br /&gt;
branch by the variables &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;,&lt;br /&gt;
respectively. If neither is specified, then the Subversion trunk is&lt;br /&gt;
checked out. If both are specified, &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
==== verify-doc ====&lt;br /&gt;
Generates a documentation skeleton for extension points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task is still under development. Currently, it creates a list of all extension points, which have a constant name in the source code. In the future it is supposed to update an existing list instead of overwriting it, and to handle non-constant extension point names.&lt;br /&gt;
&lt;br /&gt;
The list of extension points is stored as an HTML snippet in &amp;lt;code&amp;gt;doc/extensionpoints.html&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:UI]]&lt;/div&gt;</summary>
		<author><name>Robert.lihm</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:UI_build_system&amp;diff=18665</id>
		<title>AppSuite:UI build system</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:UI_build_system&amp;diff=18665"/>
		<updated>2014-09-30T12:23:12Z</updated>

		<summary type="html">&lt;p&gt;Robert.lihm: /* coreDir */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stability-experimental}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Build System&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' This document describes the build system of OX App Suite. It is intended for app developers who use the build system to create apps as well as for OX App Suite developers who not only use the build system but also may wish to extend it.&lt;br /&gt;
&lt;br /&gt;
The build system is used to create source archives from source files. These source archives can be used to compile installable packages for various Linux distributions. The build system can generate archives for the core UI as well as for independently installed apps.&lt;br /&gt;
&lt;br /&gt;
The OX App Suite build system uses [https://github.com/mde/jake Jake], a port of Rake from Ruby to [http://nodejs.org Node.js]. Both Rake and Jake are dependency-based build systems like Make, which allows quick incremental builds. But unlike Make, Jake doesn't have its own syntax. Instead, it provides an API in JavaScript. The API is used not only to specify dependencies between files using a full programming language, but also to implement the generation of files in the same language. This allows easy implementation of complex build systems, of which the OX App Suite build system is an example. Using the same language for the developed project and for its build system also allows any core developer to quickly extend the build system without having to switch to another language.&lt;br /&gt;
&lt;br /&gt;
== Using the Build System ==&lt;br /&gt;
&lt;br /&gt;
While easily extensible, most of the time the build system will be used as-is. This chapter describes how to set up and use the build system to develop apps and the OX App Suite core.&lt;br /&gt;
&lt;br /&gt;
All command examples are given for the Debian operating system. The instructions should work similarly on other POSIX systems. The first character of each command indicates whether it should be executed as root (#) or as a normal user ($).&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
Installing the right environment for running the &amp;lt;code&amp;gt;appserver&amp;lt;/code&amp;gt; and the UI build system is described in [[AppSuite:GettingStarted#Installing | the getting started article]].&lt;br /&gt;
&lt;br /&gt;
== Running ==&lt;br /&gt;
&lt;br /&gt;
The build system is executed by invoking the command &amp;lt;code&amp;gt;build-appsuite&amp;lt;/code&amp;gt;. Similar to most build systems, the build system can perform multiple tasks, which are specified as parameters on the command line. Each task can require any number of parameters. These parameters can be specified either on the command line, using the syntax &amp;lt;code&amp;gt;name=value&amp;lt;/code&amp;gt;, or as environment variables.&lt;br /&gt;
&lt;br /&gt;
If present, the file &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; is sourced by a shell script before the build process starts. This file can export environment variables which are specific to the local system, without checking them into a version control system. Typically, it defines values for &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Since the build system is based on Jake, it also accepts all other Jake options. In addition, the environment variable &amp;lt;code&amp;gt;$nodeopts&amp;lt;/code&amp;gt; can be used to pass command line parameters to Node.js. One of the most useful parameters is &amp;lt;code&amp;gt;--debug-brk&amp;lt;/code&amp;gt;, which can be used to debug the build system.&lt;br /&gt;
&lt;br /&gt;
When developing external apps, the build system must be run from the top directory of the app's source. As a safety precaution, execution is aborted if the subdirectory &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;, which usually contains JavaScript source code, is not found. This Article is written assuming, you're working in your workspace directory, containing the subfolder &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
The build system is used not only to create source archives for packaging. It can also directly install and update the built UI in a directory during development, help with the setup of the source of a new external app and more. While all of these tasks are described in the reference section, daily work involves just a few of them.&lt;br /&gt;
&lt;br /&gt;
To have an easy example about how to [[AppSuite:GettingStarted#Writing | write]], [[AppSuite:GettingStarted#Building | build]] &amp;amp; [[AppSuite:GettingStarted#Running | host]] your javascript code and how to [[AppSuite:GettingStarted#Initialization | initialize]] &amp;amp; [[AppSuite:GettingStarted#Building_Packages | build]] your packages, please have a look at the [[AppSuite:GettingStarted | GettingStarted article]].&lt;br /&gt;
&lt;br /&gt;
==== JSHINT ====&lt;br /&gt;
&lt;br /&gt;
One step of the build process is running jshint to statically analyse the sources for certain errors. JSHint is configured with (what we think) sane defaults, but if you want to configure your own rules, edit &amp;lt;code&amp;gt;.jshintrc&amp;lt;/code&amp;gt; in your project`s root folder, according to your needs.&lt;br /&gt;
&lt;br /&gt;
=== default ===&lt;br /&gt;
&lt;br /&gt;
The default task is used instead of the app task when building the core OX App Suite. Since it is the default Jake task, it is not necessary to specify it on the command line when it's the only task.&lt;br /&gt;
&lt;br /&gt;
The top directory of OX App Suite source code includes the script &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt;, which should be used instead of calling a potentially unrelated version of &amp;lt;code&amp;gt;build-appsuite&amp;lt;/code&amp;gt;. The script changes the current directory to its own, so that it can be called from any directory.&lt;br /&gt;
&lt;br /&gt;
   $ web/ui/build.sh&lt;br /&gt;
&lt;br /&gt;
=== clean ===&lt;br /&gt;
&lt;br /&gt;
The build system uses dependencies and file timestamps to decide which files to rebuild. This assumes that any change to a file increases its timestamp to a value which is greater than the timestamp of any existing file. When this assumption is violated (e.g. after switching to a different source control branch with older files) it may become necessary to rebuild everything to restore the assumption about timestamps. The simplest way to achieve this is the clean task, which simply deletes all generated files.&lt;br /&gt;
&lt;br /&gt;
WARNING: This can be potentially dangerous, since the clean task simply deletes the directories specified by the variables builddir, destDir, l10nDir, manifestDir, and helpDir.&lt;br /&gt;
&lt;br /&gt;
=== dist ===&lt;br /&gt;
&lt;br /&gt;
When the app is ready to be shipped, or rather all the time on a continuous build system, the app needs to be packaged in a format suitable for installation on a production system. Since there already exist tools to create packages from suitably arranged source code archives, the OX App Suite build system merely prepares such source archives.&lt;br /&gt;
&lt;br /&gt;
The dist task creates an archive with the source (the one ending in .orig.tar.bz2) and a few additional files necessary for Debian packaging. RPM packages can be generated using the same source archive and the .spec file created by init-packaging. The version of the package is extracted from the newest entry in the file debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Debian packages can also be generated manually either from the temporary directory left behind by dist, or even directly from the source tree. The second option pollutes the source tree with generated files, so it is not recommended, although the .gitignore file created by init-packaging can handle these generated files.&lt;br /&gt;
&lt;br /&gt;
   $ build-appsuite dist&lt;br /&gt;
   $ ls tmp/packaging/&lt;br /&gt;
   example-app-0.0.1                   example-app_0.0.1-1.dsc&lt;br /&gt;
   example-app_0.0.1-1.debian.tar.bz2  example-app_0.0.1.orig.tar.bz2&lt;br /&gt;
   $ cd tmp/packaging/example-app-0.0.1/&lt;br /&gt;
   $ dpkg-buildpackage -b&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
==== BASEDIR ====&lt;br /&gt;
The top directory of the build system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; all tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; installation directory of the build system&lt;br /&gt;
&lt;br /&gt;
Required to build external apps, since in this case, the build&lt;br /&gt;
system is not installed in the current directory. This variable is&lt;br /&gt;
automatically set as an environment variable by the build system&lt;br /&gt;
executable based on &amp;lt;code&amp;gt;$OX_APPSUITE_DEV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== branch ====&lt;br /&gt;
The Subversion branch of the CLDR to checkout.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;update-i18n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== builddir ====&lt;br /&gt;
The target directory for generated files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;docs&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Default: &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
The copyright line to be included in packaging metadata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#init-packaging|init-packaging]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;2012 Open-Xchange, Inc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== coreDir ====&lt;br /&gt;
Location of OX App Suite UI files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#app|app]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#default|default]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some tasks depend on installed files from the OX App Suite. When building external apps, &amp;lt;code&amp;gt;[[#coreDir|coreDir]]&amp;lt;/code&amp;gt; specified the directory which contains these files.&lt;br /&gt;
&lt;br /&gt;
Currently, this parameter is used to compile &amp;lt;code&amp;gt;.less&amp;lt;/code&amp;gt; files for every installed theme. This can be disabled by setting &amp;lt;code&amp;gt;[[#skipLess|skipLess]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;&amp;lt;span class=&amp;quot;mw-headline&amp;quot; id=&amp;quot;debuging&amp;quot;&amp;gt;debug&amp;lt;/span&amp;gt;&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enables a debug build.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To simplify debugging of OX App Suite, compression of source code&lt;br /&gt;
can be disabled by specifying &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== description ====&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The description of the app to be included in packaging metadata.&lt;br /&gt;
&lt;br /&gt;
==== destDir ====&lt;br /&gt;
Output directory for source archives created by&lt;br /&gt;
the &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; task.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;tmp/packaging&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== disableStrictMode ====&lt;br /&gt;
Removes all &amp;lt;code&amp;gt;&amp;quot;use strict&amp;quot;&amp;lt;/code&amp;gt; directives from processed&lt;br /&gt;
JavaScript code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some debugging tools which use code instrumentation have problems&lt;br /&gt;
when the debugged code uses strict mode. This setting enables code&lt;br /&gt;
processing even whe using &amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt; mode, so line numbers&lt;br /&gt;
will not match the original source code.&lt;br /&gt;
&lt;br /&gt;
==== forceDeb ====&lt;br /&gt;
Whether an error during the generation of Debian source packages is an error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is useful when Debian packages are generated automatically, and a failure of &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is also a failure of the entire build. By default it merely produces a warning.&lt;br /&gt;
&lt;br /&gt;
==== from ====&lt;br /&gt;
The root of the printed dependency tree between Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== helpDir ====&lt;br /&gt;
The location of online help files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the value contains the string &amp;lt;code&amp;gt;@lang@&amp;lt;/code&amp;gt;, it will be&lt;br /&gt;
replaced by the lowercase language code (e.g. &amp;lt;code&amp;gt;en-us&amp;lt;/code&amp;gt;) to&lt;br /&gt;
allow per-language directories.&lt;br /&gt;
&lt;br /&gt;
==== l10nDir ====&lt;br /&gt;
The location of compiled l10n files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the value contains the string &amp;lt;code&amp;gt;@lang@&amp;lt;/code&amp;gt;, it will be&lt;br /&gt;
replaced by the lowercase language code (e.g. &amp;lt;code&amp;gt;en-us&amp;lt;/code&amp;gt;) to&lt;br /&gt;
allow per-language directories.&lt;br /&gt;
&lt;br /&gt;
==== license ====&lt;br /&gt;
File name of the full text of the distribution license.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; based on &amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== licenseName ====&lt;br /&gt;
Name of the distribution license to be included in packaging&lt;br /&gt;
metadata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;CC-BY-NC-SA-3.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manifestDir ====&lt;br /&gt;
The location of the combined manifest file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maintainer ====&lt;br /&gt;
Name and email address of the package maintainer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Format:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;Name&amp;lt;/var&amp;gt; &amp;amp;lt;&amp;lt;var&amp;gt;email&amp;lt;/var&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== package ====&lt;br /&gt;
The name of the package for the built app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; all tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; the package name in the first line of&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the name of the manifest file contains the package name and it&lt;br /&gt;
is required to determine build dependencies, the package name must&lt;br /&gt;
be always known. This means either &amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;&lt;br /&gt;
must exist and contain at least one entry, or the parameter must be&lt;br /&gt;
explicitly specified.&lt;br /&gt;
&lt;br /&gt;
==== reverse ====&lt;br /&gt;
Reverses the direction of printed dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When specified, the &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt; task prints modules which&lt;br /&gt;
depend on the specified modules, instead of modules on which&lt;br /&gt;
the specified module depends.&lt;br /&gt;
&lt;br /&gt;
==== revision ====&lt;br /&gt;
Revision number of the package for the app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The revision number must increase with each rebuild of the same&lt;br /&gt;
version to enable the creation of unique version strings. These are&lt;br /&gt;
required in package names and to control content caching in clients.&lt;br /&gt;
&lt;br /&gt;
==== root ====&lt;br /&gt;
Specifies for which module to print the dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; print all roots&lt;br /&gt;
&lt;br /&gt;
If specified, only the dependencies of the specified module are&lt;br /&gt;
printed. Otherwise, the dependencies of all modules are printed.&lt;br /&gt;
&lt;br /&gt;
==== skipDeb ====&lt;br /&gt;
Whether to skip the generation of Debian source packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is useful when Debian packages are not required and/or&lt;br /&gt;
&amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is not available, e.g. on RPM based&lt;br /&gt;
systems.&lt;br /&gt;
&lt;br /&gt;
Even when using this flag, at least the file&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt; is still required, because it is used&lt;br /&gt;
to store the package name and version. &lt;br /&gt;
&lt;br /&gt;
==== skipLess ====&lt;br /&gt;
Whether to skip the preprocessing of LessCSS files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This flag skips the generation of CSS files in&lt;br /&gt;
the &amp;lt;code&amp;gt;apps/themes/*/less&amp;lt;/code&amp;gt; directories of all themes.&lt;br /&gt;
It is used by the packaging system, where the LessCSS files are&lt;br /&gt;
precompiled after installation on the target system instead of&lt;br /&gt;
while building the package.&lt;br /&gt;
&lt;br /&gt;
==== tag ====&lt;br /&gt;
The Subversion tag of the CLDR to checkout.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;update-i18n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== to ====&lt;br /&gt;
The leaf task in the printed dependency path between Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When specified, only a single path from the root to the leaf task is&lt;br /&gt;
printed (in reverse order).&lt;br /&gt;
&lt;br /&gt;
==== version ====&lt;br /&gt;
Version number of the app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The version should consist of a major, minor and patch version&lt;br /&gt;
separated by dots.&lt;br /&gt;
&lt;br /&gt;
=== Tasks ===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An up-to-date list of tasks can be printed using the -T command line option.&lt;br /&gt;
&lt;br /&gt;
==== app ====&lt;br /&gt;
Builds an external app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#BASEDIR|BASEDIR]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#coreDir|coreDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#disableStrictMode|disableStrictMode]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#l10nDir|l10nDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#manifestDir|manifestDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#package|package]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#revision|revision]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#version|version]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This is the main task used to build external apps.&lt;br /&gt;
&lt;br /&gt;
It works without explicitly specifying any variables, but during&lt;br /&gt;
development, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; is usually pointed to&lt;br /&gt;
the directory of a locally installed OX App Suite UI to avoid&lt;br /&gt;
additional copying steps. For debugging, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt; is also&lt;br /&gt;
often used. Note that &amp;lt;code&amp;gt;[[#clean|clean]]&amp;lt;/code&amp;gt; must be called when&lt;br /&gt;
changing any of the variables.&lt;br /&gt;
&lt;br /&gt;
==== clean ====&lt;br /&gt;
Removes all generated files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;l10nDir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;manifestDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task should be executed before a normal build using&lt;br /&gt;
&amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; after changing any build&lt;br /&gt;
variables and after a switch between Git branches. Normal&lt;br /&gt;
incremental builds can miss changed files if a branch switch&lt;br /&gt;
replaces files by older versions.&lt;br /&gt;
&lt;br /&gt;
==== default ====&lt;br /&gt;
Builds OX App Suite.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#BASEDIR|BASEDIR]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#disableStrictMode|disableStrictMode]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#l10nDir|l10nDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#manifestDir|manifestDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#package|package]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#revision|revision]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#version|version]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This is the main task to build OX App Suite. Since it is the default&lt;br /&gt;
Jake task, it does not need to be specified explicitly on&lt;br /&gt;
the command line when it is the only task.&lt;br /&gt;
&lt;br /&gt;
It works without explicitly specifying any variables, but during&lt;br /&gt;
development, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; is usually pointed to&lt;br /&gt;
a directory which is accessible to a local web server. For&lt;br /&gt;
debugging, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt; is also often used. Note that&lt;br /&gt;
&amp;lt;code&amp;gt;[[#clean|clean]]&amp;lt;/code&amp;gt; must be called when changing any of&lt;br /&gt;
the variables.&lt;br /&gt;
&lt;br /&gt;
==== deps ====&lt;br /&gt;
Prints module dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;reverse&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task visualizes dependencies of RequireJS modules. It prints&lt;br /&gt;
a tree of dependencies to &amp;lt;code&amp;gt;stdout&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; is specified, then only the dependencies of&lt;br /&gt;
that module are printed. Otherwise, the dependencies of all modules,&lt;br /&gt;
on which no other module depends are printed in sequence. &lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;reverse&amp;lt;/code&amp;gt; is specified, then this task prints&lt;br /&gt;
dependants instead of dependencies, i.e. modules which depend on&lt;br /&gt;
the specified module instead of modules on which the specified&lt;br /&gt;
module depends.&lt;br /&gt;
&lt;br /&gt;
==== dist ====&lt;br /&gt;
Creates source packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forceDeb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;l10nDir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;manifestDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;skipDeb&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task cleans the source tree by calling &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; and&lt;br /&gt;
packs the source into an archive which can be used to create Debian&lt;br /&gt;
and RPM packages. The necessary Debian metadata is created alongside&lt;br /&gt;
the source archive. All files necessary for Debian packaging are&lt;br /&gt;
placed in the directory specified by &amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;.&lt;br /&gt;
The generated &amp;lt;code&amp;gt;.orig.tar.bz2&amp;lt;/code&amp;gt; archive can also be used&lt;br /&gt;
together with the &amp;lt;code&amp;gt;.spec&amp;lt;/code&amp;gt; file to generate RPM packages.&lt;br /&gt;
&lt;br /&gt;
Unless the variable &amp;lt;code&amp;gt;skipDeb&amp;lt;/code&amp;gt; is set to&lt;br /&gt;
&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, the program &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is required&lt;br /&gt;
by this task. It is used to generate Debian-specific packaging&lt;br /&gt;
metadata.&lt;br /&gt;
&lt;br /&gt;
==== init-packaging ====&lt;br /&gt;
Initializes packaging information for a new app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maintainer&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task is the first task called when starting with&lt;br /&gt;
the development of a new external app. The directory from which it&lt;br /&gt;
is called must already contain at least the &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;&lt;br /&gt;
subdirectory. This is also the only task where&lt;br /&gt;
the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; variable must be specified explicitly.&lt;br /&gt;
Afterwards, the package name is looked up automatically in the file&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;, which is created by this task.&lt;br /&gt;
&lt;br /&gt;
The variables &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maintainer&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; are required to&lt;br /&gt;
fill out all necessary packaging metadata. Any of these variables&lt;br /&gt;
which are not specified explicitly will cause an interactive prompt.&lt;br /&gt;
This avoids the need to remember the list of variables before one&lt;br /&gt;
can start developing an app.&lt;br /&gt;
&lt;br /&gt;
==== jakedeps ====&lt;br /&gt;
Shows the dependency chain between two Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task visualized dependencies between Jake tasks. The variable&lt;br /&gt;
&amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; specifies the root of a dependency tree, with all&lt;br /&gt;
dependencies of &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; as inner and leaf nodes. If&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is not specified, then that entire tree is printed.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is also specified, then only the first found&lt;br /&gt;
dependency path from &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is&lt;br /&gt;
.printed with &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; at the top and &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; at&lt;br /&gt;
the bottom.&lt;br /&gt;
&lt;br /&gt;
==== merge ====&lt;br /&gt;
Updates all &amp;lt;code&amp;gt;.po&amp;lt;/code&amp;gt; files with the generated&lt;br /&gt;
&amp;lt;code&amp;gt;ox.pot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task updates the list of extracted i18n strings in&lt;br /&gt;
&amp;lt;code&amp;gt;ox.pot&amp;lt;/code&amp;gt; and calls the GNU Gettext tool&lt;br /&gt;
&amp;lt;code&amp;gt;msgmerge&amp;lt;/code&amp;gt; for every language in &amp;lt;code&amp;gt;i18n/*.po&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;i18n/en_US.po&amp;lt;/code&amp;gt; is not updated by this task because the original strings are already in the &amp;lt;code&amp;gt;en_US&amp;lt;/code&amp;gt; locale. It would only end up with every translation mapping every string to itself. The only entries in that file should be for cases when the &amp;lt;code&amp;gt;en_US&amp;lt;/code&amp;gt; text is not a suitable fallback for missing translations. The original string in such a case would be something internationally appropriate (e.&amp;amp;nbsp;g. a date written as &amp;quot;2013-01-01&amp;quot; instead of &amp;quot;01/01/2013&amp;quot;) and &amp;lt;code&amp;gt;i18n/en_US.po&amp;lt;/code&amp;gt; would contain a translation.&lt;br /&gt;
&lt;br /&gt;
==== update-i18n ====&lt;br /&gt;
Updates CLDR data in the source tree.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task downloads data from the Unicode CLDR and updates date&lt;br /&gt;
translations for all languages in &amp;lt;code&amp;gt;i18n/*.po&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The exact version of CLDR data is specified as Suubversion tag or&lt;br /&gt;
branch by the variables &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;,&lt;br /&gt;
respectively. If neither is specified, then the Subversion trunk is&lt;br /&gt;
checked out. If both are specified, &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
==== verify-doc ====&lt;br /&gt;
Generates a documentation skeleton for extension points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task is still under development. Currently, it creates a list of all extension points, which have a constant name in the source code. In the future it is supposed to update an existing list instead of overwriting it, and to handle non-constant extension point names.&lt;br /&gt;
&lt;br /&gt;
The list of extension points is stored as an HTML snippet in &amp;lt;code&amp;gt;doc/extensionpoints.html&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:UI]]&lt;/div&gt;</summary>
		<author><name>Robert.lihm</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:UI_build_system&amp;diff=18664</id>
		<title>AppSuite:UI build system</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:UI_build_system&amp;diff=18664"/>
		<updated>2014-09-30T12:22:05Z</updated>

		<summary type="html">&lt;p&gt;Robert.lihm: /* debug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stability-experimental}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Build System&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' This document describes the build system of OX App Suite. It is intended for app developers who use the build system to create apps as well as for OX App Suite developers who not only use the build system but also may wish to extend it.&lt;br /&gt;
&lt;br /&gt;
The build system is used to create source archives from source files. These source archives can be used to compile installable packages for various Linux distributions. The build system can generate archives for the core UI as well as for independently installed apps.&lt;br /&gt;
&lt;br /&gt;
The OX App Suite build system uses [https://github.com/mde/jake Jake], a port of Rake from Ruby to [http://nodejs.org Node.js]. Both Rake and Jake are dependency-based build systems like Make, which allows quick incremental builds. But unlike Make, Jake doesn't have its own syntax. Instead, it provides an API in JavaScript. The API is used not only to specify dependencies between files using a full programming language, but also to implement the generation of files in the same language. This allows easy implementation of complex build systems, of which the OX App Suite build system is an example. Using the same language for the developed project and for its build system also allows any core developer to quickly extend the build system without having to switch to another language.&lt;br /&gt;
&lt;br /&gt;
== Using the Build System ==&lt;br /&gt;
&lt;br /&gt;
While easily extensible, most of the time the build system will be used as-is. This chapter describes how to set up and use the build system to develop apps and the OX App Suite core.&lt;br /&gt;
&lt;br /&gt;
All command examples are given for the Debian operating system. The instructions should work similarly on other POSIX systems. The first character of each command indicates whether it should be executed as root (#) or as a normal user ($).&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
Installing the right environment for running the &amp;lt;code&amp;gt;appserver&amp;lt;/code&amp;gt; and the UI build system is described in [[AppSuite:GettingStarted#Installing | the getting started article]].&lt;br /&gt;
&lt;br /&gt;
== Running ==&lt;br /&gt;
&lt;br /&gt;
The build system is executed by invoking the command &amp;lt;code&amp;gt;build-appsuite&amp;lt;/code&amp;gt;. Similar to most build systems, the build system can perform multiple tasks, which are specified as parameters on the command line. Each task can require any number of parameters. These parameters can be specified either on the command line, using the syntax &amp;lt;code&amp;gt;name=value&amp;lt;/code&amp;gt;, or as environment variables.&lt;br /&gt;
&lt;br /&gt;
If present, the file &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; is sourced by a shell script before the build process starts. This file can export environment variables which are specific to the local system, without checking them into a version control system. Typically, it defines values for &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Since the build system is based on Jake, it also accepts all other Jake options. In addition, the environment variable &amp;lt;code&amp;gt;$nodeopts&amp;lt;/code&amp;gt; can be used to pass command line parameters to Node.js. One of the most useful parameters is &amp;lt;code&amp;gt;--debug-brk&amp;lt;/code&amp;gt;, which can be used to debug the build system.&lt;br /&gt;
&lt;br /&gt;
When developing external apps, the build system must be run from the top directory of the app's source. As a safety precaution, execution is aborted if the subdirectory &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;, which usually contains JavaScript source code, is not found. This Article is written assuming, you're working in your workspace directory, containing the subfolder &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
The build system is used not only to create source archives for packaging. It can also directly install and update the built UI in a directory during development, help with the setup of the source of a new external app and more. While all of these tasks are described in the reference section, daily work involves just a few of them.&lt;br /&gt;
&lt;br /&gt;
To have an easy example about how to [[AppSuite:GettingStarted#Writing | write]], [[AppSuite:GettingStarted#Building | build]] &amp;amp; [[AppSuite:GettingStarted#Running | host]] your javascript code and how to [[AppSuite:GettingStarted#Initialization | initialize]] &amp;amp; [[AppSuite:GettingStarted#Building_Packages | build]] your packages, please have a look at the [[AppSuite:GettingStarted | GettingStarted article]].&lt;br /&gt;
&lt;br /&gt;
==== JSHINT ====&lt;br /&gt;
&lt;br /&gt;
One step of the build process is running jshint to statically analyse the sources for certain errors. JSHint is configured with (what we think) sane defaults, but if you want to configure your own rules, edit &amp;lt;code&amp;gt;.jshintrc&amp;lt;/code&amp;gt; in your project`s root folder, according to your needs.&lt;br /&gt;
&lt;br /&gt;
=== default ===&lt;br /&gt;
&lt;br /&gt;
The default task is used instead of the app task when building the core OX App Suite. Since it is the default Jake task, it is not necessary to specify it on the command line when it's the only task.&lt;br /&gt;
&lt;br /&gt;
The top directory of OX App Suite source code includes the script &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt;, which should be used instead of calling a potentially unrelated version of &amp;lt;code&amp;gt;build-appsuite&amp;lt;/code&amp;gt;. The script changes the current directory to its own, so that it can be called from any directory.&lt;br /&gt;
&lt;br /&gt;
   $ web/ui/build.sh&lt;br /&gt;
&lt;br /&gt;
=== clean ===&lt;br /&gt;
&lt;br /&gt;
The build system uses dependencies and file timestamps to decide which files to rebuild. This assumes that any change to a file increases its timestamp to a value which is greater than the timestamp of any existing file. When this assumption is violated (e.g. after switching to a different source control branch with older files) it may become necessary to rebuild everything to restore the assumption about timestamps. The simplest way to achieve this is the clean task, which simply deletes all generated files.&lt;br /&gt;
&lt;br /&gt;
WARNING: This can be potentially dangerous, since the clean task simply deletes the directories specified by the variables builddir, destDir, l10nDir, manifestDir, and helpDir.&lt;br /&gt;
&lt;br /&gt;
=== dist ===&lt;br /&gt;
&lt;br /&gt;
When the app is ready to be shipped, or rather all the time on a continuous build system, the app needs to be packaged in a format suitable for installation on a production system. Since there already exist tools to create packages from suitably arranged source code archives, the OX App Suite build system merely prepares such source archives.&lt;br /&gt;
&lt;br /&gt;
The dist task creates an archive with the source (the one ending in .orig.tar.bz2) and a few additional files necessary for Debian packaging. RPM packages can be generated using the same source archive and the .spec file created by init-packaging. The version of the package is extracted from the newest entry in the file debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Debian packages can also be generated manually either from the temporary directory left behind by dist, or even directly from the source tree. The second option pollutes the source tree with generated files, so it is not recommended, although the .gitignore file created by init-packaging can handle these generated files.&lt;br /&gt;
&lt;br /&gt;
   $ build-appsuite dist&lt;br /&gt;
   $ ls tmp/packaging/&lt;br /&gt;
   example-app-0.0.1                   example-app_0.0.1-1.dsc&lt;br /&gt;
   example-app_0.0.1-1.debian.tar.bz2  example-app_0.0.1.orig.tar.bz2&lt;br /&gt;
   $ cd tmp/packaging/example-app-0.0.1/&lt;br /&gt;
   $ dpkg-buildpackage -b&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
==== BASEDIR ====&lt;br /&gt;
The top directory of the build system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; all tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; installation directory of the build system&lt;br /&gt;
&lt;br /&gt;
Required to build external apps, since in this case, the build&lt;br /&gt;
system is not installed in the current directory. This variable is&lt;br /&gt;
automatically set as an environment variable by the build system&lt;br /&gt;
executable based on &amp;lt;code&amp;gt;$OX_APPSUITE_DEV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== branch ====&lt;br /&gt;
The Subversion branch of the CLDR to checkout.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;update-i18n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== builddir ====&lt;br /&gt;
The target directory for generated files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;docs&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Default: &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
The copyright line to be included in packaging metadata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#init-packaging|init-packaging]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;2012 Open-Xchange, Inc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== coreDir ====&lt;br /&gt;
Location of OX App Suite UI files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#app|app]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#default|default]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some tasks depend on installed files from the OX App Suite. When building external apps, &amp;lt;code&amp;gt;[[#coreDir|coreDir]]&amp;lt;/code&amp;gt; specified the directory which contains these files.&lt;br /&gt;
&lt;br /&gt;
Currently, this parameter is used to compile &amp;lt;code&amp;gt;.less&amp;lt;/code&amp;gt; files for every installed theme. This can be disabled by setting &amp;lt;code&amp;gt;[[#skipLess|skipLess]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;mw-headline&amp;quot; id=&amp;quot;debuging&amp;quot;&amp;gt;debug&amp;lt;/span&amp;gt;&lt;br /&gt;
Enables a debug build.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To simplify debugging of OX App Suite, compression of source code&lt;br /&gt;
can be disabled by specifying &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== description ====&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The description of the app to be included in packaging metadata.&lt;br /&gt;
&lt;br /&gt;
==== destDir ====&lt;br /&gt;
Output directory for source archives created by&lt;br /&gt;
the &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; task.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;tmp/packaging&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== disableStrictMode ====&lt;br /&gt;
Removes all &amp;lt;code&amp;gt;&amp;quot;use strict&amp;quot;&amp;lt;/code&amp;gt; directives from processed&lt;br /&gt;
JavaScript code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some debugging tools which use code instrumentation have problems&lt;br /&gt;
when the debugged code uses strict mode. This setting enables code&lt;br /&gt;
processing even whe using &amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt; mode, so line numbers&lt;br /&gt;
will not match the original source code.&lt;br /&gt;
&lt;br /&gt;
==== forceDeb ====&lt;br /&gt;
Whether an error during the generation of Debian source packages is an error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is useful when Debian packages are generated automatically, and a failure of &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is also a failure of the entire build. By default it merely produces a warning.&lt;br /&gt;
&lt;br /&gt;
==== from ====&lt;br /&gt;
The root of the printed dependency tree between Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== helpDir ====&lt;br /&gt;
The location of online help files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the value contains the string &amp;lt;code&amp;gt;@lang@&amp;lt;/code&amp;gt;, it will be&lt;br /&gt;
replaced by the lowercase language code (e.g. &amp;lt;code&amp;gt;en-us&amp;lt;/code&amp;gt;) to&lt;br /&gt;
allow per-language directories.&lt;br /&gt;
&lt;br /&gt;
==== l10nDir ====&lt;br /&gt;
The location of compiled l10n files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the value contains the string &amp;lt;code&amp;gt;@lang@&amp;lt;/code&amp;gt;, it will be&lt;br /&gt;
replaced by the lowercase language code (e.g. &amp;lt;code&amp;gt;en-us&amp;lt;/code&amp;gt;) to&lt;br /&gt;
allow per-language directories.&lt;br /&gt;
&lt;br /&gt;
==== license ====&lt;br /&gt;
File name of the full text of the distribution license.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; based on &amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== licenseName ====&lt;br /&gt;
Name of the distribution license to be included in packaging&lt;br /&gt;
metadata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;CC-BY-NC-SA-3.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manifestDir ====&lt;br /&gt;
The location of the combined manifest file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; same as &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maintainer ====&lt;br /&gt;
Name and email address of the package maintainer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Format:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;Name&amp;lt;/var&amp;gt; &amp;amp;lt;&amp;lt;var&amp;gt;email&amp;lt;/var&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== package ====&lt;br /&gt;
The name of the package for the built app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; all tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; the package name in the first line of&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the name of the manifest file contains the package name and it&lt;br /&gt;
is required to determine build dependencies, the package name must&lt;br /&gt;
be always known. This means either &amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;&lt;br /&gt;
must exist and contain at least one entry, or the parameter must be&lt;br /&gt;
explicitly specified.&lt;br /&gt;
&lt;br /&gt;
==== reverse ====&lt;br /&gt;
Reverses the direction of printed dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When specified, the &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt; task prints modules which&lt;br /&gt;
depend on the specified modules, instead of modules on which&lt;br /&gt;
the specified module depends.&lt;br /&gt;
&lt;br /&gt;
==== revision ====&lt;br /&gt;
Revision number of the package for the app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The revision number must increase with each rebuild of the same&lt;br /&gt;
version to enable the creation of unique version strings. These are&lt;br /&gt;
required in package names and to control content caching in clients.&lt;br /&gt;
&lt;br /&gt;
==== root ====&lt;br /&gt;
Specifies for which module to print the dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;deps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; print all roots&lt;br /&gt;
&lt;br /&gt;
If specified, only the dependencies of the specified module are&lt;br /&gt;
printed. Otherwise, the dependencies of all modules are printed.&lt;br /&gt;
&lt;br /&gt;
==== skipDeb ====&lt;br /&gt;
Whether to skip the generation of Debian source packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is useful when Debian packages are not required and/or&lt;br /&gt;
&amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is not available, e.g. on RPM based&lt;br /&gt;
systems.&lt;br /&gt;
&lt;br /&gt;
Even when using this flag, at least the file&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt; is still required, because it is used&lt;br /&gt;
to store the package name and version. &lt;br /&gt;
&lt;br /&gt;
==== skipLess ====&lt;br /&gt;
Whether to skip the preprocessing of LessCSS files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This flag skips the generation of CSS files in&lt;br /&gt;
the &amp;lt;code&amp;gt;apps/themes/*/less&amp;lt;/code&amp;gt; directories of all themes.&lt;br /&gt;
It is used by the packaging system, where the LessCSS files are&lt;br /&gt;
precompiled after installation on the target system instead of&lt;br /&gt;
while building the package.&lt;br /&gt;
&lt;br /&gt;
==== tag ====&lt;br /&gt;
The Subversion tag of the CLDR to checkout.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;update-i18n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== to ====&lt;br /&gt;
The leaf task in the printed dependency path between Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;jakedeps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When specified, only a single path from the root to the leaf task is&lt;br /&gt;
printed (in reverse order).&lt;br /&gt;
&lt;br /&gt;
==== version ====&lt;br /&gt;
Version number of the app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Used by:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;init-packaging&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Default:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The version should consist of a major, minor and patch version&lt;br /&gt;
separated by dots.&lt;br /&gt;
&lt;br /&gt;
=== Tasks ===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An up-to-date list of tasks can be printed using the -T command line option.&lt;br /&gt;
&lt;br /&gt;
==== app ====&lt;br /&gt;
Builds an external app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#BASEDIR|BASEDIR]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#coreDir|coreDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#disableStrictMode|disableStrictMode]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#l10nDir|l10nDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#manifestDir|manifestDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#package|package]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#revision|revision]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#version|version]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This is the main task used to build external apps.&lt;br /&gt;
&lt;br /&gt;
It works without explicitly specifying any variables, but during&lt;br /&gt;
development, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; is usually pointed to&lt;br /&gt;
the directory of a locally installed OX App Suite UI to avoid&lt;br /&gt;
additional copying steps. For debugging, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt; is also&lt;br /&gt;
often used. Note that &amp;lt;code&amp;gt;[[#clean|clean]]&amp;lt;/code&amp;gt; must be called when&lt;br /&gt;
changing any of the variables.&lt;br /&gt;
&lt;br /&gt;
==== clean ====&lt;br /&gt;
Removes all generated files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;l10nDir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;manifestDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task should be executed before a normal build using&lt;br /&gt;
&amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; after changing any build&lt;br /&gt;
variables and after a switch between Git branches. Normal&lt;br /&gt;
incremental builds can miss changed files if a branch switch&lt;br /&gt;
replaces files by older versions.&lt;br /&gt;
&lt;br /&gt;
==== default ====&lt;br /&gt;
Builds OX App Suite.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;[[#BASEDIR|BASEDIR]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#disableStrictMode|disableStrictMode]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#l10nDir|l10nDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#manifestDir|manifestDir]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#package|package]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#revision|revision]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#version|version]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This is the main task to build OX App Suite. Since it is the default&lt;br /&gt;
Jake task, it does not need to be specified explicitly on&lt;br /&gt;
the command line when it is the only task.&lt;br /&gt;
&lt;br /&gt;
It works without explicitly specifying any variables, but during&lt;br /&gt;
development, &amp;lt;code&amp;gt;[[#builddir|builddir]]&amp;lt;/code&amp;gt; is usually pointed to&lt;br /&gt;
a directory which is accessible to a local web server. For&lt;br /&gt;
debugging, &amp;lt;code&amp;gt;[[#debug|debug]]&amp;lt;/code&amp;gt; is also often used. Note that&lt;br /&gt;
&amp;lt;code&amp;gt;[[#clean|clean]]&amp;lt;/code&amp;gt; must be called when changing any of&lt;br /&gt;
the variables.&lt;br /&gt;
&lt;br /&gt;
==== deps ====&lt;br /&gt;
Prints module dependencies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;reverse&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task visualizes dependencies of RequireJS modules. It prints&lt;br /&gt;
a tree of dependencies to &amp;lt;code&amp;gt;stdout&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; is specified, then only the dependencies of&lt;br /&gt;
that module are printed. Otherwise, the dependencies of all modules,&lt;br /&gt;
on which no other module depends are printed in sequence. &lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;reverse&amp;lt;/code&amp;gt; is specified, then this task prints&lt;br /&gt;
dependants instead of dependencies, i.e. modules which depend on&lt;br /&gt;
the specified module instead of modules on which the specified&lt;br /&gt;
module depends.&lt;br /&gt;
&lt;br /&gt;
==== dist ====&lt;br /&gt;
Creates source packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forceDeb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;l10nDir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;manifestDir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;skipDeb&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task cleans the source tree by calling &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; and&lt;br /&gt;
packs the source into an archive which can be used to create Debian&lt;br /&gt;
and RPM packages. The necessary Debian metadata is created alongside&lt;br /&gt;
the source archive. All files necessary for Debian packaging are&lt;br /&gt;
placed in the directory specified by &amp;lt;code&amp;gt;destDir&amp;lt;/code&amp;gt;.&lt;br /&gt;
The generated &amp;lt;code&amp;gt;.orig.tar.bz2&amp;lt;/code&amp;gt; archive can also be used&lt;br /&gt;
together with the &amp;lt;code&amp;gt;.spec&amp;lt;/code&amp;gt; file to generate RPM packages.&lt;br /&gt;
&lt;br /&gt;
Unless the variable &amp;lt;code&amp;gt;skipDeb&amp;lt;/code&amp;gt; is set to&lt;br /&gt;
&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, the program &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; is required&lt;br /&gt;
by this task. It is used to generate Debian-specific packaging&lt;br /&gt;
metadata.&lt;br /&gt;
&lt;br /&gt;
==== init-packaging ====&lt;br /&gt;
Initializes packaging information for a new app.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maintainer&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task is the first task called when starting with&lt;br /&gt;
the development of a new external app. The directory from which it&lt;br /&gt;
is called must already contain at least the &amp;lt;code&amp;gt;apps&amp;lt;/code&amp;gt;&lt;br /&gt;
subdirectory. This is also the only task where&lt;br /&gt;
the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; variable must be specified explicitly.&lt;br /&gt;
Afterwards, the package name is looked up automatically in the file&lt;br /&gt;
&amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;, which is created by this task.&lt;br /&gt;
&lt;br /&gt;
The variables &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maintainer&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;licenseName&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; are required to&lt;br /&gt;
fill out all necessary packaging metadata. Any of these variables&lt;br /&gt;
which are not specified explicitly will cause an interactive prompt.&lt;br /&gt;
This avoids the need to remember the list of variables before one&lt;br /&gt;
can start developing an app.&lt;br /&gt;
&lt;br /&gt;
==== jakedeps ====&lt;br /&gt;
Shows the dependency chain between two Jake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task visualized dependencies between Jake tasks. The variable&lt;br /&gt;
&amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; specifies the root of a dependency tree, with all&lt;br /&gt;
dependencies of &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; as inner and leaf nodes. If&lt;br /&gt;
&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is not specified, then that entire tree is printed.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is also specified, then only the first found&lt;br /&gt;
dependency path from &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; is&lt;br /&gt;
.printed with &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; at the top and &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; at&lt;br /&gt;
the bottom.&lt;br /&gt;
&lt;br /&gt;
==== merge ====&lt;br /&gt;
Updates all &amp;lt;code&amp;gt;.po&amp;lt;/code&amp;gt; files with the generated&lt;br /&gt;
&amp;lt;code&amp;gt;ox.pot&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;builddir&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task updates the list of extracted i18n strings in&lt;br /&gt;
&amp;lt;code&amp;gt;ox.pot&amp;lt;/code&amp;gt; and calls the GNU Gettext tool&lt;br /&gt;
&amp;lt;code&amp;gt;msgmerge&amp;lt;/code&amp;gt; for every language in &amp;lt;code&amp;gt;i18n/*.po&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;i18n/en_US.po&amp;lt;/code&amp;gt; is not updated by this task because the original strings are already in the &amp;lt;code&amp;gt;en_US&amp;lt;/code&amp;gt; locale. It would only end up with every translation mapping every string to itself. The only entries in that file should be for cases when the &amp;lt;code&amp;gt;en_US&amp;lt;/code&amp;gt; text is not a suitable fallback for missing translations. The original string in such a case would be something internationally appropriate (e.&amp;amp;nbsp;g. a date written as &amp;quot;2013-01-01&amp;quot; instead of &amp;quot;01/01/2013&amp;quot;) and &amp;lt;code&amp;gt;i18n/en_US.po&amp;lt;/code&amp;gt; would contain a translation.&lt;br /&gt;
&lt;br /&gt;
==== update-i18n ====&lt;br /&gt;
Updates CLDR data in the source tree.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task downloads data from the Unicode CLDR and updates date&lt;br /&gt;
translations for all languages in &amp;lt;code&amp;gt;i18n/*.po&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The exact version of CLDR data is specified as Suubversion tag or&lt;br /&gt;
branch by the variables &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;,&lt;br /&gt;
respectively. If neither is specified, then the Subversion trunk is&lt;br /&gt;
checked out. If both are specified, &amp;lt;code&amp;gt;tag&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
==== verify-doc ====&lt;br /&gt;
Generates a documentation skeleton for extension points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Variables:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;BASEDIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This task is still under development. Currently, it creates a list of all extension points, which have a constant name in the source code. In the future it is supposed to update an existing list instead of overwriting it, and to handle non-constant extension point names.&lt;br /&gt;
&lt;br /&gt;
The list of extension points is stored as an HTML snippet in &amp;lt;code&amp;gt;doc/extensionpoints.html&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:UI]]&lt;/div&gt;</summary>
		<author><name>Robert.lihm</name></author>
	</entry>
</feed>