MAIN ACTIVITIES
The paper on ports for the European BSD conference has been written. It
is nearly finished. To be able to write the paper a lot of existing
ports systems have been investigated. Not only the three BSD systems
but also possible alternatives, such as OpenPackages and OpenPKG.
A first implementation for an A-A-P port recipe was made. This involved
a lot of design and making choices for the port recipe syntax. The
result looks very much like the FreeBSD ports Makefile, with a few
subtle but important improvements. The documentation for the port
recipe is only roughly done.
Some of the Python code for the port recipe was written. The intention
was not to implement everything, but just enough for an example port
recipe for Vim to work. Additionally, some of the more difficult items
were implemented to check if they would actually work as intented:
- The specification of dependencies with the "DEPENDS" variable
was implemented. What is still missing is the actual install of a
dependend package that is required.
- Installing the package resulting from the port itself was implemented,
using a separate shell to only have to type the root password once.
- Implemented "aap makesum": Add computed checksums for distributed
files to the recipe. Implemented ":checksum": compare the checksum
of a file with the md5 attribute.
The documentation was a plain text file "docs.txt". It has been
converted into DocBook format (SGML). This allows producing the
documentation in several formats, including PDF and HTML. Recipes have
been written to automatically update the PDF and HTML files and upload
them to www.a-a-p.org. Much of the layout still needs to be done.
PROOF OF CONCEPT
Before the port recipe was designed, a port for Vim was made, using
A-A-P recipes to do all the building. Part of this work was already
done last month. This was a good test to check if the recipe format
allows for downloading, building and installing a reasonable complex
application. The experience obtained was used to improve the recipe
syntax (see below) and fix bugs.
The port can be called successful. Most things went straightforward.
Invoking autoconf and configure was a bit of work. It mostly works now,
but they are sometimes executed when it is not needed. This is a
problem for someone who doesn't have autoconf. Finding a better
solution is desired.
The recipe has been published and a page was written about how to use
it. Subscribers on the vim-dev maillist were invided to try it out. A
few people have done this and provided feedback. The number of
reactions was disappointing, only two gave useful feedback. One of the
bugs encountered was that the cache directory wasn't created
automatically. Typically one of those things a developer doesn't notice
and a user does.
RECIPE SYNTAX
Now that much of the desired functionality is present it is possible to
get a good overview of the recipe syntax. Quite a few items have been
noticed that are not intuitive and would require an explanation in the
documentation. A few changes were made to make the recipe simpler to
use.
Made the ":system" command include following lines with larger indent.
This avoids the need for a trailing backslash. The same was already
done for most other commands, thus this is more consistent as well.
No longer build the first encountered dependency, it is rather
unpredictable. Especially when using ":include" and ":child". Only use
$TARGET or the "all" target for the default.
There was a complicated rule about when a virtual target would always be
build and when a signature would be used. This has been simplified by
always building a virtual target and adding the {remember} attribute to
explicitly use a signature.
Worked out design decision 24: Scope of variables
(
http://www.a-a-p.org/decisions.html#24). Variables given a value in an
included recipe can be used in build commands and actions. It's not
always clear which value is used: from the recipe or from the invoking
command. The choice is a solution to make it work like most people
would expect (also export the variable to the recipe where the commands
were defined) and add the ":global" and ":local" commands to handle
exceptions.
Assigning a sequence of lines to a variable was only possible with
Python. Since this is quite often used to write a file (e.g., the
description file that ends up in a package) a special command has been
added. This is similar to the "here doc" mechanism in a shell: "var <<
EOF". Many people will recognize this mechanism, therefore it's easier
to use than Python commands or a sequence of ":print" commands.
PROGRESS AND PLAN
Much of the work this month was not in the original plan and the
deadline for version 0.1 has passed. Therefore I will only give a
summary of the work that differs from the plan.
- The recipe syntax is mostly done, but not properly written down.
When writing it down some problems may pop up. This goes a few days
over the planned three weeks.
- The recipe executive is continuously being improved. It has taken a
bit more time, but it also includes more functionality than originally
planned. About two weeks more than the planned six weeks.
- The cross referencer module has hardly been worked on. Nothing useful
will be included in version 0.1.
- The GUI IDE has not been worked on.
Except for the cross referencer and GUI IDE most of the planned work for
version 0.1 was done in time. The contribution from others in the A-A-P
development is disappointing. The plan for the next phase will have to
be adjusted for this.
COMING MONTH
After finishing the paper for euroBSDcon the plan for the third phase
needs to be written. The main choice to be made is what the goals for
A-A-P version 1.0 will be. This involves evaluating the work so far and
requires discussion with people that provide input.
Version 0.1 still isn't released, although most of the functionality is
present. To make it more attactive to try out A-A-P the documentation
will be updated, especially the tutorial. Good examples should make
clear how recipes are used.
Feedback from a few people who tried out the port of Vim showed that
there are various problems making it difficult to start using A-A-P.
These will be worked on, so that less people will run into these
problems. Adding more features doesn't appear to be important at this
moment.
A bit more work on the port recipe should be done, in preparation for
the presentation at euroBSDcon. However, a large part of the
implementation is postponed until after the response from the audience
is clear.
MINOR ISSUES
Minor issues handled in September:
- Several fixes for bugs, not very interesting to mention.
- When ":export" is used where it doesn't work only give a warning, not
an error. A recipe could be used both directly and as a child.
- Added the "{quiet}" and "{log}" options to the ":system" command:
execute a shell command quietly and/or send all output to the log.
- Fixed a few things to make Aap work with Python 1.5 again. Removed
the re.py module, import "pre" only for Python 2.
- Added log messages that mark the ":update" command, so that the
dependency messages are meaningful.
- For a rule also use $BDIR from the recipe where the rule was defined
for updating dependencies.
- Added filetype detection for ".tar", ".tar.gz", ".tgz", ".tar.bz2" and
".zip". Added "extract" actions for these filetypes.
- Added "%basename%" in "refresh" attribute as an alternative for
"%file%".
--
hundred-and-one symptoms of being an internet addict:
110. You actually volunteer to become your employer's webmaster.
/// Bram Moolenaar --
Bram@... --
http://www.moolenaar.net \\\
/// Creator of Vim - Vi IMproved --
http://www.vim.org \\\
\\\ Project leader for A-A-P --
http://www.a-a-p.org ///
\\\ Lord Of The Rings helps Uganda -
http://iccf-holland.org/lotr.html ///