Send in your ideas. Deadline June 1, 2024

Last update: 2003-07-07

End: 2003-01

Progress report May 2003

tools for developing, distributing, and installing software

By Bram Moolenaar, June 2 2003


Two larger examples have been made to show how Aap is useful for normal work:

As a side effect a few small items have been fixed in the Recipe Executive. Thus writing the recipes also functioned as a test.

Variable naming

To make the use of variables more consistent, some variables have been renamed. This causes incompatibilities with previous versions. That is why it had to be done now, before the 1.0 release.

All variables that Aap uses internally all now all-caps. This makes them stand out in the recipe. The user can also still use this style, if he prepends "MY" before the name. If he doesn't do that, he takes the risc that in a future version of Aap the variable conflicts with the meaning Aap gives to it.

To make the use of special characters simpler, they can now be given as $(x). This replaces the diverse methods that existed, such as $$ for "$" and $bar for "|". The user no longer has to lookup in the manual what needs to be done to avoid the special meaning of a character.

Wildcard expansion

Previously the Python glob() function had to be used for wildcard expansion. Although this is nice to keep the meaning of variables consistent, most users prefer wildcards to be expanded directly.

Wildcards are now expanded in every place where a file name is expected. To avoid expansion, the wildcard characters should be enclosed in square brackets. The wildescape() function has been added for this. This appears to be an acceptable complication, since file names with wildcard characters hardly ever appear.

The result is that several recipe examples have become simpler. It is especially nice that the first few examples no longer have to use a Python expression in backticks.

Tool support

Different tools exist on various systems. Especially the C compiler works differently on various platforms. The tool mechanism was added to make it easy to add support for various tools and toolchains. This works with a plugin mechanism and Python files.

The startup recipe contains code to figure out what tool to use by default. The user can overrule this and select his own tools with the ":usetool" command. It is also possible to select a tool for a specific file, if needed. This is both easy to use and flexible.

Some of the ideas have been taken over from SCons. This was combined with the Aap action mechanism, which makes it simpler to use.

The actual tools to be used are still mostly to be filled in. Currently gcc and msvc are supported, so that it works on most Unix and MS-Windows systems.


Support for rsync was added. This works like scp, but for files with small changes the transfer is much faster. rcp is also supported. Made it possible for the user to specify a different command to be used.

Aap now also works on Mac OS X. Only a few small problems had to be solved. This is nice, because OS X comes with Python included, thus Aap works there right away.

An "add_VAR" attribute can be used to append to a variable. A useful mechanism to define a macro or add an include path, instead of overruling the value with a "var_VAR" attribute.

Details about the changes


The work mostly progressed as planned in May. A bit more time was spend on fixing bugs and improving existing items than expected. Adding the tool mechanism was not planned, but took only one day to add. This means we lag behind the original schedule a bit more than two weeks. This will probably be compensated by dropping the cross referencer work package.

Two weeks were spend on making the examples. The Ctags example could be extended a bit further, especially the functionality for the maintainer is still limited. But that would take more time and doesn't provide the reader with extra insight in how Aap works.

The presentation for the O'Reilly conference was created. This is only a first version, updates are possible until the presentation is given. It will be published when it is ready.

Work on the documentation has started. Until now most parts were written in plain text and dumped somewhere in the manuals. Now the ordering of items needs to be taken care of and everything written as SGML.

Coming weeks

All the important functionality for Aap version 1.0 is now included. The details are also taken care of now. It is about time to make a beta release.

The work on the documentation will continue.

Joerg Beyer made an initial version of the configuration mechanism. This may be added to the released version of Aap. This depends on whether it will get in the way of the 1.0 release.

If there is time available before the 1.0 release some work will be done on supporting more version control systems. Probably for checkout only. There probably will not be enough time left to work on the cross referencer. Version 1.0 should then be ready by the end of June, just before the O'Reilly conference. The schedule is getting very tight!

Project A-A-P

Navigate projects