I often find myself making experimental changes to the LFC (Laszlo Foundation Classes) which are included with each application. Fred Feng reminded me to write a quick FAQ that describes how the LFC and other includes are built.

First, set up your OpenLaszlo build environment. See http://wiki.openlaszlo.org/SubversionBuildInstructions for details.


=LFC overview=
All LFC source files are found in 'WEB-INF/lps/lfc/'. Once compiled for the various runtimes, the LFC binary files are found in 'lps/includes/lfc/', e.g. 'lps/includes/lfc/LFCdhtml.js'.

All the default base classes for OpenLaszlo can be found here. There are several file types:

.lzs - Javascript with OpenLaszlo compiler extensions, e.g. to include files see '#include "compiler/Library.lzs"' in LaszloLibrary.lzs. Used for portions of the LFC that aren't runtime specific, e.g. everything not in kernel/*.

.js - JavaScript.  Used for HTML5-specific code, e.g. kernel/dhtml/*

.as - Actionscript. Used for Flash-specific code, e.g. kernel/swf9/*

The compiler treats all files the same way. We use .as and .js to designate code that uses runtime-specific features. If you find a bug that only happens in a specific runtime, see the appropriate kernel directory. If the bug happens across runtimes, check outside the kernel directory.

=Rebuilding the LFC=
Once the LFC is rebuilt, you can refresh your application and see the changes immediately. There's no need to restart the OpenLaszlo server but be sure to clear your browser cache.

Before rebuilding the LFC, 'cd' to 'WEB-INF/lps/lfc/'. Use 'ant build' to rebuild all versions of the LFC and 'ant clean' to force a clean build.

To rebuild the LFC for a specific runtime, you use one of the 'buildlfc' commands found in 'WEB-INF/lps/lfc/', either 'buildlfc', 'buildlfcdebug', 'buildlfcprofile' or 'buildlfcbacktrace'.


==Example LFC Build==
For example, to rebuild the non-debug HTML5 LFC, type:
$ cd WEB-INF/lps/lfc/
$ ./buildlfc --runtime=dhtml
Buildfile: /Users/maxcarlson/openlaszlo/trunk-clean/WEB-INF/lps/lfc/build.xml
     [echo] build.url is ${build.url}
     [echo] dont-need-svn-info is ${dont-need-svn-info}

get-env:

get-svn-info:

read-svn-info:

build-version-info:
[echo] version.id computed from /Users/maxcarlson/openlaszlo/trunk-clean/versions.xml as 5.0.x [echo] release computed from /Users/maxcarlson/openlaszlo/trunk-clean/versions.xml as Latest

build-opt:

init:

lfc:
     [echo] build.url is http://svn.openlaszlo.org/openlaszlo/trunk
     [echo] dont-need-svn-info is true

get-env:

get-svn-info:

read-svn-info:

build-version-info:

build-opt:

init:

lzl:
[echo] Compiling /Users/maxcarlson/openlaszlo/trunk-clean/lps/includes/lfc/LFCdhtml.js

BUILD SUCCESSFUL
Total time: 6 seconds


==Shortcuts to rebuild the LFC==
Here's a list of aliases I use to rebuild common LFC variants, straight from my ~/.profile:

alias bd='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfc --runtime=dhtml; popd;' alias bdd='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfcdebug --runtime=dhtml; popd;' alias bdp='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfcprofile --runtime=dhtml; popd;' alias bdb='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfcbacktrace --runtime=dhtml; popd;' alias bs='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfc --runtime=swf10; popd;' alias bsd='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfcdebug --runtime=swf10; popd;' alias bsb='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfcbacktrace --runtime=swf10; popd;' alias bsp='pushd $LPS_HOME/WEB-INF/lps/lfc/; ./buildlfcprofile --runtime=swf10; popd;'

These are nice because you can run them from any directory without losing your place.


=HTML Javascript Includes=
Besides the LFC, there are Javascript includes that are used to embed applications in HTML, e.g. 'lps/includes/embednew.js'. The source for these files can be found in 'lps/includes/source/'. Use 'ant build' to rebuild any changes and 'ant clean' to force a clean build.

Like the LFC, once the includes are rebuilt, you can refresh your application and see the changes immediately. There's no need to restart the OpenLaszlo server but be sure to clear your browser cache.


==Example Javascript include build==
$ cd lps/includes/source/
$ ant build
Buildfile: /Users/maxcarlson/openlaszlo/trunk-clean/lps/includes/source/build.xml
     [echo] build.url is ${build.url}
     [echo] dont-need-svn-info is ${dont-need-svn-info}

get-env:

get-svn-info:

read-svn-info:

build-version-info:
[echo] version.id computed from /Users/maxcarlson/openlaszlo/trunk-clean/versions.xml as 5.0.x [echo] release computed from /Users/maxcarlson/openlaszlo/trunk-clean/versions.xml as Latest

build-opt:

init:

embed:
     [echo] build.url is http://svn.openlaszlo.org/openlaszlo/trunk
     [echo] dont-need-svn-info is true

get-env:

get-svn-info:

read-svn-info:

build-version-info:

build-opt:

init:

compress:
     [echo] Compiling ../embed-compressed.js

...

BUILD SUCCESSFUL
Total time: 14 seconds


==Shortcuts to rebuild the LFC==
Here's the alias I use to rebuild my Javascript includes:

alias ci='pushd $LPS_HOME/lps/includes/source;ant; popd;'




Let me know if you have questions or I missed anything. We can move this up to the wiki after a brief discussion. Thanks!

Reply via email to