A-A-P logo     



Aap Version Log

This is a list of remarks about each version of Aap, most recent one first. You might want to watch this if you are waiting for a problem to be fixed.

There is a separate version log for Agide here.

Note that the most recent version may not be available yet.

Dec 14
Fixed a problem with having "@" in the user name.
May 17
Before converting a time string to long, first convert it to float. (Pavol Juhas) contained variable "as", which is a keyword in Python 2.5 and later.
Avoid a deprecation warning for the md5 library by Python 2.6. (Leandro Lucarella)
Use $CC instead of "ld" as the default link command. (Leandro Lucarella)
August 7
Remove "Error" as an exception, it's undefined. (Anotonio Colombo)
When "cvs commit" fails with an error "Up-to-date check failed" don't try adding it.
When using an automatic dependency, the attributes of the file were not properly used to detect the check type. Happens for ":program hello : hello.c" and there is a hello.h file with a specified check attribute.
January 13
Adjust exception argument types for Python 2.5. (Darren Bane)
March 1
Added $GROUPCOUNT: number of files handled at a time for upload/download.
The ":del" command expanded variables with attributes. That causes problems if for $(target).tmp. Now leave out the attributes.
Added the "follow" option to ":tree" to follow symlinks.
February 9
Using a weird file name causes glob() to fail can cause an internal error. Now report the error to the user.
A ":tree" command without following command block would generate an internal error.
The ":tree" command didn't escape special characters in $name. A file name with spaces could not be used.
February 5
Building a shared library from C++ code didn't work. Avoid an endless loop in the cxx_builddll action.
Added the "installname" attribute. (Adriaan de Groot)
January 17
Fixed simple but letal mistake in the qt module. (Adriaan de Groot)
Another mistake in the qt module: Setting the environment variable $QTDIR didn't work. (Adriaan de Groot)
January 4
When joining a file name to a path for a remote upload use the same path separator that's already in the path instead of the one for the current system. Avoids resulting in a mix of path separators.
Not all ftp servers can create directories recursively. Added code to check for failing to create a directory and create the directory above it. Untested...
Internal error: "objname" could be used without being set. (Adriaan de Groot)
Uploading over ftp for a file that cannot be opened resulted in an internal error.
December 14
Updated the qt module to use the new bdir() function and make it look in more sensible places to find Qt. (Adriaan de Groot)
Using ":attr" with an argument without a node name resulted in an internal error.
Starting a root shell didn't always work. Was reading from output instead of input.
December 4
A dependency on a URL didn't work, the URL was expanded like a normal file.
Obtaining a timestamp for a URL doesn't always work. In that case use a very old time (time == 1) to make difference from the file not existing (time == 0).
November 29
The default.aap recipe contained two names not in double quotes.
":conf write header DIR/config.h" now creates DIR when needed.
Added bdir() function. (Adriaan de Groot)
":usetool" and ":toolsearch" only used the first directory where a package could be found. (Pavol Juhas)
August 16
BUILDDLL_ACTION was not used since version 1.074. This broke the MSVC tool.
August 12
"aap -k" crashed after a build error.
$HOME was set to ".aap" instead of the directory where ".aap" resides.
":quit" and ":exit" now accept an argument, which is used as the exit value of the program.
June 1
"aap install" didn't work for MS-Windows.
Executing command in double quotes didn't work on MS-Windows.
May 30
When ":progsearch" cannot find a command would get a TypeError. Don't check for space in the command name when there is no command name.
Fixed various warnings for PyChecker.
Use $AAPYTHON in aap.bat to avoid setting $PYTHON. (Walter Briscoe)
March ?
Avoid that when using aap.bat the exit code %errorlevel% is set or cleared. (Nick Sabalausky)
Feb 3
When automatically creating a node for CVS it may fail when there are special characters in the node name. Put the name in double quotes.
Remove "assertpkg ddepcheck" from D module. Fix ddepcheck compiling on Linux. (Lars Ivar Igesund)
Dec 28
When using ":usetool gcc" C++ object files were not linked with g++.
Python 2.4 parses URLs with rsync, but not in the way Aap expects it.
Oct 23
When there is a space in the path to "gcc" then testing for MingW will cause an error. Put the path to gcc in double quotes.
Make the aap.bat script work from any directory. (Cory Dodt)
Add support for building DLLs and static libaries for MSVC. (Thore Karlsen)
Fix problems in the D module. Improve the D depencency checker. Better support for dlls in the dmd tool. (Lars Ivar Igesund)
Oct 2
Expanding wildcards without a match resulted in the item with wildcards to be used. Now the result is empty.
When recursively deleting a symlink that points to a directory, delete the symlink, not the directory and its contents.
Sep 10
The "builddllaction" and "buildlibaction" attributes were not used in the D module. (Lars Ivar Igesund)
Work around a problem with the module scope not being available when get_build_recdict() creates a new scope. (Tim Hemel)
The :execute command did not pass on the --nobuild argument. This caused building to be done in executed recipes when it was not wanted. Pass on a selection of the command line options to executed recipes.
Aug 26
When using an unrecognized source file name after ":program" there was an error message for $LTOBJSUF not defined. Define $LTOBJSUF in default.aap to avoid that.
Add "dll" to the types that the build action supports. Makes it possible to directly link with a shared library in a ":program" command.
The "builddllaction" and "buildlibaction" attributes were not recognized like "buildaction".
July 7
When a C++ source file is compiled, this changes the building of a static library to use the action specified with "buildaction", which uses the build action instead of the buildlib action. Use a "buildlibaction" attribute instead.
June 21
When a file has the "binary" attribute, adding it with CVS will use the "-kb" argument, so that CVS treats it as a binary file.
When using a ":cd dir" command the "changedir" message in the log was wrong, it included "dir" twice.
Fixed: ":tree {option} ." crashed Aap instead of giving an error message.
Fixed: the ":tree" command crashed Aap when encountering a directory that can't be read. Now a warning message is given.
When looking for an action and a deferred action is found, do take the input filetype into account when obtaining the output filetype, and the other way around.
Updated the dmd tool and the d module to use define_action(). (Lars Ivar Igesund)
June 12
When building fails, give a message where the logfile can be found.
Allow defining an action with the Python function define_action(). This allows specifying more things, such as functions that return the currently supported input and output filetypes. Useful when the action defers work to another action that supports a different set of filetypes.
Allow marking an action as "primary", which means that it is the preferred action to turn its input filetypes to its output filetypes.
When searching for a route, also use primary actions when no route defined with ":route" was found. Use this in default.aap for lex and yacc.
Fixed: lex and yacc actions did not use $target.
May 10
When the first command in a recipe has indent give a clear error message.
Scanning a C file for dependencies does not look in the directory of the source file for includes that use double quotes. Do not look in the current directory by default, require using "-I.".
Allow setting $HASGCC to avoid the check whether gcc can be used to do the dependency check. Updated tools to set $HASGCC.
Apr 27
Don't recognize .lib as Cobol, it's a library on Win32 systems.
RC-style expansion fails to result in nothing when the variable does not exist at all.
When using an "add_CPPFLAGS" attribute on a file, it may be added several times when actions are involved. Only use an "add_VAR" attribute when it does not create duplicates.
Apr 19
Update to the dependency checker for D. (Lars Ivar Igesund)
For the ":tree" command use the current scope instead of creating a new scope, so that "Files += $name" works.
Apr 15
Small correction for the D module. (Lars Ivar Igesund)
Added the {continue} option to ":copy", ":move", ":del" and ":chmod".
Apr 13
Include enhanced version of MingW tool. (Richard Boulton)
Using "$_recipe.var" would search for "var" in parent recipe.
Support "$/var": replace all slashes with backslashes. Useful for MS-Windows shell commands.
Could not use module name in Python commands: `m_rectest.testfunc()`.
Line markers preceded by a space were not recognized, resulting in error messages reporting a line number that is too high.
"buildaction" was not set for objects from C++ sources when compilation was skipped, resulting in linking to fail. Added ">always", ">build" and ">nobuild" sections in build commands. Also added optional attribute arguments to ":route".
Mar 18
Get an error in samefile() when a file doesn't exist.
Remove the support for using $var and $?var in Python code again. John Williams is working on a better solution.
Mar 8
Get an error when there is no .netrc file and attempting to open an ftp connection. Ignore the error.
Support using $var and $?var in Python code. (John Williams)
Support $PARENTDIR and $BASEDIR. (John Williams) Also add the parentdir() and basedir() functions.
Mar 4
A few more improvements for the dmd tool. (Lars Ivar Igesund)
Expanding -L$*LIBS resulted in "-L" when $LIBS is empty. That is not what people expect. Make rc-style expansion result in an empty string if the expanded variable is empty.
Installing with Python 1.5 gives an error message for compiling Do not compile that file unless running Python 2.3.
Use the ftplib instead of urlretrieve() for downloading through ftp. Makes it work with Python 1.5.
Cache an already opened ftp connection to speed up downloading and uploading a sequence of files to the same server.
Feb 18
Add the $DIMPLIB variable to the dmd tool. (Lars Ivar Igesund)
Update the d module to reflect the changes in the dmd tool. (Lars Ivar Igesund)
When checking out a module with CVS and the directory of the module already exists but doesn't have a "CVS" directory, Aap tries to check out a module with an empty name.
The "cvs" command could not be executed when the path includes a space.
Feb 17
When building a shared library from C++ sources the wrong link command is invoked. Added the cxx_builddll action.
Minor correction to the dmd tool. (Lars Ivar Igesund)
When downloading and a cached file would not be used, don't store the file in the cache. Avoids that the cache is filled with files that will never be used.
Fix: When executing a recipe is interrupted, don't dump the stack.
Feb 1
When using "aap -f url://recipe" and answering "n" to the question whether an existing recipe should be overwritten, Aap continued with the old recipe. Now exit with an error message.
Updated the dmd tool, mainly to fix building with static libs. (Lars Ivar Igesund)
Jan 18
Added documentation for install_files() and uninstall_files(). Allow attributes on destination directory.
When installing Aap and the destination directory $PREFIX doesn't exist, offer creating it.
Setting $DESTDIR had no effect for installing.
Jan 7
":assign" did not handle a scope name.
Dec 18
The gcc tool did not handle libobject and dllobject files. Added rectest 17 for this. (Richard Boulton)
Nov 14
Adjust the "d" module to automatically compile the ddepcheck program when necessary. (Lars Ivar Igesund)
Nov 11
Change the import of the "re" module to automatically fix the problem with the "pre" module of Python 2.2.1. Added the file for this, so that all the tricks are in one place.
Nov 10
Include ddepcheck.d version 0.9.0. (Lars Ivar Igesund)
Detecting a Debian system didn't work. Check for the /etc/debian_version file instead of directory.
Added the get_html_images() function: Get list of images used in a HTML file.
Nov 5
Include ddepcheck.d in the distribution, so that it can be build when there is no internet connection. (Lars Ivar Igesund)
Expand variables in the command line targets, so that you can do "aap '$BDIR/foo.o'" to build an object file.
Nov 3
When turning a string into a dictlist and it starts with an attribute, make an item with an empty name. Makes it possible to give better error messages, e.g. for ":assertpkg {optional} name".
Added $OSNAME, the part of $BDIR after "build-". (Adriaan de Groot)
Oct 30
Added a dependency checker for the D language. It's installed as a package. (Lars Ivar Igesund)
Changed rectest 16 to import a special module "rectest" instead of the "d" module to avoid problems.
Support putting attributes just after the ":" in ":program" and similar commands. They appy to all sources that follow. (Adriaan de Groot)
Speed up execution by optimizing a few string handling functions and using the old pre module with Python 2.3. Included to avoid a depreciation warning.
Oct 29
The error message from the check for gcc can be annoying when there is no "cc" command. Only write it to the log file.
Add $LIBS to the build command of the msvc tool.
Added the sufadd() function: add a suffix to items that do not have a suffix yet or to all items..
Changed sufreplace() to add a suffix to an item that doesn't have a suffix if the first argument is None.
Oct 28
Fixed: The libtool module wasn't handling {installdir} and {keepdir} correctly. (Adriaan de Groot)
Fixed: The libtool module was using "ltexe" instead of "ltprogram". (Adriaan de Groot)
Allow an empty $PKGNAME for when data files have to go into various directories below "share".
Oct 23
Added the kde module. (Adriaan de Groot)
Fixed: "aap install" didn't work. Was using $INNSTALL_EXEC instead of $INSTALL_EXEC.
Oct 14
Added the ":log" command: write a message to the log file.
Added the {onestep} attribute: Build a program directly from sources. Implemented for the d module and the dmd tool. (Lars Ivar Igesund)
When a shell command fails don't repeat the command. It can be long, obscuring the relevant error message.
Oct 13
Add {global} to the rules in languages modules, otherwise they are not used.
Oct 9
Fixed: ":sysdepend" concatenated all include directories into one. (Adriaan de Groot)
Use $LIBTOOL instead of $libtool to specify the libtool command to be used.
Oct 8
Fixed: A ":copy {recursive}" command failed on an empty directory.
Support $DEBUG in the dmd tool and the d module. (Lars Ivar Igesund)
Added a chapter to the reference manual for tools. Explain the dmd tool. (Lars Ivar Igesund)
Oct 3
Implemented the "-I" or "--include" argument, which was already documented.
Oct 2
A few improvements in the libtool module. (Adriaan de Groot)
Added the qt module. (Adriaan de Groot)
A few modifications in the D language module.
Oct 1
When src2obj() is given an invalid "sufname" argument give an error message instead of crashing.
Moved the support for libtool from default.aap to the libtool module. (Adriaan de Groot)
A few modifications to the D module. (mostly by Lars Ivar Igesund)
For ":asroot" read one character at a time, so that prompts are echoed.
Sep 30
Added $AAPSYSDIR, so that the system directory to look for startup recipes, tools and modules can be changed.
Expanded and corrected documentation for language modules. Moved docs for standard modules to a new chapter in the reference manual.
Sep 29
Renamed the "dlang" language module to "d". Use the scope name "m_d" instead of "dlang". Thus "m_" is prepended to the name of the module to get the scope name.
Instead of letting an imported module check if the module was already found elsewhere, let the ":import" command do this.
Fixed: do_Debian_pkg() used int() instead of ord().
When assigning to a variable name that is in use as a scope: give a warning. When appending to a scope give an error.
When searching for tools, use directories in the user home directory, /usr/local and the Aap directory only. Do not use the normal Python search path.
Fixed: Using ":program" and ":lib" with the same target name was not possible, even though the library would get a different file name.
Sep 25
In the commands of an action, the "_up" scope now also searches in the recipe where the action was defined, its parent, etc.
Added the ":import" command. (Adriaan de Groot) Added the "modules" directory and searching various directories for modules.
Added the ":toolsearch" command. Replaces code in the startup recipe and makes it avaiable to modules.
Added the "dlang" language module and the dmd tool. (Lars Ivar Igesund)
Added support for different build actions for ":lib" and ":dll" by setting $BUILDDLL_ACTION and $BUILDLIB_ACTION.
Sep 22
Refactored some of the code to update targets. It had grown into long and complicated code.
Added the ":sysdepend" command. Used to figure out dependencies and handle error messages for missing files. This was previously done in default.aap. It also handles searching in various directories, either explicitly specified or the directories from $INCLUDE.
Added the "searchpath" option to ":update": search for the target in a list of directories.
Fixed: When updating dependencies failed in such a way that an (invalid) output file was generated, the updating could be skipped with a next invocation of Aap, because old signatures could still be valid.
For the package recipes, allow specifying a version number. For example: "aap --install aap Version=1.021".
Fixed: When an "objectprefix" was specified the "objectsuffix" was prepended.
src2obj() uses $FT_OBJSUF, where "FT" is the filetype of a source file. Also works for $DLLOBJSUF, $LIBOBJSUF and $LTOBJSUF. Allows a language to specify different object file suffixes.
Sep 16
suffix() did not ignore attributes. This made the test for adding "-E" to do a dependency check fail, causing gcc to fail for ".h" files.
The gcc tool only defined a compile action. Now also define a build action, otherwise linking doesn't work. Also use "g++" or "gxx" for C++.
Sep 12
Added test for automatic dependencies being generated and requiring to be scanned again.
Added test for building a source file twice with a different $CPPFLAGS attribute. Also test the clean target.
Sep 11
Improved ":asroot" again to really make it work with Linux. Well, you still don't get stderr.
Sep 10
For the :tree command use os.listdir() instead of glob.glob(), it is supposed to be faster. Allow using "foo|bar" for patterns by adding parenthesis, prefiously "^foo" and "bar$" were matched. :tree did not give an error for a wrong attribute.
":asroot" doesn't work for Linux, because "su" doesn't allow stdin to be redirected. Use a clone of the popen2 module that doesn't redirect stdin but stderr and swap that in and
Sep 9
Fixed: Attempting to install an optional package causes a crash.
On Win32, when Python is not in $PATH, add the path to the Python executable in aap.bat.
Added a package for Aap. This makes it possible to upgrade with "aap --install aap".
Fixed: ":program tt : ss.c {var_CPPFLAGS = -Dxx}" did not add the attribute to the generated dependency, using the same attribute again would overrule it.
Fixed: the buildcheck attributes in the default.aap recipe were using $VAR instead of $($)VAR. The wrong values were used. Changes in variables did not cause building when needed.
Fixed: "aap clean" did not clean an auto-depend recipe when $BDIR was changed after using a source file with a ":program" command.
When executing a command as root, remove newlines from message lines to avoid empty lines in the output.
Sep 8
Using ":child" in a startup recipe causes a Python exception. Give a clear error message instead.
When a depend action cannot find an included file, do not handle this as an error. Gives the recipe a chance to produce it.
Fixed: signatures of a target were not properly cleared when the target was build. Other files depending on this target may not always be updated until running Aap again.
Fixed: When an automatically detected dependency is used as a target in a dependency and it didn't exist the dependency check didn't work properly. When the file did exist but was build, the automatic dependencies were not updated afterwards.
Sep 5
Changed the tools used to produce the documentation. No longer use "jade". This should make it easier to work with the documentation on various systems. The input is now in XML instead of SGML (although the files are still called .sgml). (Adriaan de Groot)
The default build action was looking for the "cppsource" attribute to decide using $CXX for building. Changed this into a generic solution with the "buildaction" attribute.
Added $C_BUILD_ACTION and $CXX_BUILD_ACTION, so that the code in the generic build action does not need to be duplicated in the build action of a tool.
Sep 3
Made the recipe generated by ":mkdownload" shorter. Assign the fetch attribute to a variable, mostly the same value is used very time.
Use "htmldoc" to generate the PDF file from HTML. That is a lot faster and the resulting PDF file is of better quality. (suggested by Adriaan de Groot)
Use $C_COMPILE_ACTION and $CXX_COMPILE_ACTION, so that a different compile action can be specified for each language. $COMPILE_ACTION also still works, for backwards compatibility.
Fixed: ":syseval echo | :eval stdin" complained about "stdin" not defined. Set stdin also when the piped string is empty.
Fixed: unittest for sufreplace() was not testing for failure properly.
Added do_Debian_pkg() and added support for Debian packages in a few Aap packages. Not tested yet!
Sep 1
Fixed: ":execute {pass} foo.aap myvar=abc" didn't set the value of "myvar". It was put in the wrong recdict.
Added ":installpkg": install a package unconditionally.
Newer versions of "links" don't support the "-dump" argument (used to convert the HTML documentation to plain text). Fall back to using Lynx then.
When using pkg_install() recursively could run into an internal error for a key of "recipe_acive". Save and restore "recipe_acive" in doread().
"aap --install agide" now works on MS-Windows. It installs wxPython only when needed.
Fixed: Using ":produce myprog" and adding an action for "myprog" produced a warning. Declare the filetype used by ":produce".
Fixed: Rectest/test013 didn't delete the resulting .exe file.
Aug 29
When installing on MS-Windows also compile the Python files.
Added {optional} argument to ":assertpkg".
Aug 28
Fixed: Tests rectest/ and rectest/ failed on MS-Windows, because there was a newline inside a string.
Made "aap install" and "aap uninstall" work on MS-Windows.
Added the "-f NONE" argument: don't read a recipe. Useful to execute a command only: "aap -f NONE -c ':print $AAP'"
Aug 25
Give a warning when an ":action" or ":route" command uses an unknown filetype. Add the "declare" argument to ":filetype". (Adriaan de Groot)
Various improvements to the documentation. (Adriaan de Groot)
Aug 22
Added the "installltlib" action to install libtool libraries. (Adriaan de Groot)
Fixed: When uninstalling don't delete the manual page when there still is an "aap" program on the system.
When downloading through http:// detect a 404 error by looking in the downloaded file. Otherwise a non-existing file isn't noticed. Currently works for downloading from SourceForge.
Aug 21
Added the {keepdir} argument to the ":copy" command.
Added the "_arg" scope. Holds the variables set on the command line.
Aug 19
Fixed: The filetype given with an ":attr" command to a target of ":program" was overruled by the automatically added "program" filetype. This made building Vim fail. Added the "filetypehint" attribute to avoid this problem.
Fixed: license.sgml was not included in the distribution.
Added the {fallback} attribute to ":conf type".
Fixed sufreplace() to handle a list of file names and attributes better. (mostly by Adriaan de Groot)
Aug 18
Make error message for unrecognized line clearer. (Adriaan de Groot)
Added "installdir" attribute for an item to be installed.
Changed the configure check functions to accept a language name instead of a file suffix.
Fixed: A cyclic dependency for a depencency with two targets was not detected and lead to a crash.
Fixed: the line number kept for a dependency was wrong, it was the line of the next command.
Aug 15
Fixed: Internal error when using a variable that isn't set in ":syseval".
More documentation updates.
Aug 14
Fixed: __nonzero__() methods for the scope classes added in 1.013 didn't work.
Updated some parts of the documentation.
Aug 13
When appending to $LIBS for the ":conf lib" test this is always done in the scope where it was defined. Now also assign the same value to $_conf.LIBS. That makes dumping the results with ":conf write recipe" simpler.
Fixed: With Python 2.3 fetching caused an internal error. Improve checking for a custom fetch method. Add a __nonzero__ method to the scope classes.
Aug 12
Implemented first version of the ":conf" command. Added and Partly by Joerg Beyer and party from the SCons project.
When processing a recipe or build commands failed inside a try/except statement, Global.globals was not restored, causing trouble later.
Aug 7
Fixed: for ":totype" the "suffix" and "prefix" attributes on the target filetype were not used. Also, the target filetype was added as a target node, that doesn't make sense.
Updated the Aap manpage for recent changes.
Fixed: Change in var_LDFLAGS attribute on the target of ":program" didn't result in rebuilding the target. Use the attributes of the target when expanding variables in the build commands.
Fixed: The right default action was not found when no message is given about using a default action, the indent was wrong for the return statement.
Documented the use of $LTLIBS.
Made the user of $COMPILE_ACTION consistant, use it for C++ and other kinds of object files. Added $COMPILE_ACTION and $BUILD_ACTION to the reference docs.
Updated the copyright notices to include "2003".
When linking a program, use $CXX when one of the object files was compiled with $CXX, use $CC otherwise. Previously $CXX was used when any C++ file was compiled before linking.
When figuring out dependencies use $CC for C files and $CXX for C++ files.
Add a "buildcheck" attribute to actions, so that there is better control over when it is considered changed and needs to be executed again.
Aug 6
Added a unittest for sufreplace(). (Joerg Beyer)
Made sufreplace() more robust. Don't accept arguments that don't start with a dot. Don't replace the suffix in a directory name.
When the unittest module is missing offer the user a choice to download it.
In the installed manual page use the path `$PREFIX/share/doc/aap' path instead of `$PREFIX/lib/aap/Exec-1.009/doc'. (Rui Lopes)
Aug 5
Changed the unit tests to use the standard Python unittest module. (Joerg Beyer)
Aug 4
Made "aap install" work a bit better. Use the actually used path in the manual page. (Rui Lopes)
Added rectest 12: Check that adding a different filetype to a program uses a specific build action.
Fixed: ":produce" didn't use the type of the building for the target, the build action could not be found.
When the "installvar" option of ":progam" is empty don't add the target to any $INSTALL_XXX variable.
Aug 1
Added compile_msvc action for C++.
Added ":ltlib" command: build a libtool library. (Adriaan de Groot)
Recognize a .moc file as a moc file instead of cpp, it needs different processing. Also detect ".ui" files as the "ui" type.
Fixed: A line break was not allowed before the ":" for ":program" and similar commands.
The attributes after the ":" for ":program" and similar commands are now expanded before executing the build commands, just like with other commands. This was inconsistent.
Jul 31
Added {filetype} option to ":do" command. Documented the {remove} option.
Mention the output filetype in the message given for an executed action.
Set $TOPDIR in the toplevel recipe to an empty string. Useful when a recipe can be used both as a child and by itself.
When shortening a directory name and it is equal to the current directory, return an empty string. Avoids that $TOPDIR becomes "../dir" when reading a child recipe in the same directory as the parent.
Fixed: When using ":program" in a child recipe the name of the program was added as-is to $INSTALL_EXEC. The parent recipe could not find the program when the child recipe is in another directory.
Jul 29
When generating dependencies for C++ files $CFLAGS was used instead of $CXXFLAGS. Linking with $CXX had the same problem.
Avoid putting quotes around an attribute value, because they are not removed when using the value. Escaping special characters should not be needed, since that was already done when giving the value.
When a source file for a rule does not exist and it has a "fetch" attribute, try downloading it.
Added a lot of cross references for commands to the documentation.
Jul 28
Finished converting the documentation to docbook format. Made corrections to the user manual.
The documented method to specify a function to fetch a file for any scheme was not implemented. Implemented it now and updated the documentation for how it really works.
Documented the undocumented method to add support for another version control system. Added the "recdict" argument to the functions being called, it is needed for error messages.
Jul 25
When using a port recipe, writing the pkg-descr and pkg-comment files failed with a KeyError.
New feature: When using "aap -f ftp://machine/path/main.aap" the recipe is downloaded to the current directory before it's executed.
Jul 24
Support a port number for an ftp connection: ftp://machine:port/path
Made "aap install" compile after copying the Python files, so that the .pyc files are really used. (Rui Lopes)
Made "aap uninstall" work.
When skipping commands mention the line number. Expand variables when possible, so that it's clear which files are used.
Added the skipbuild() function: Returns True when build commands are to be skipped. Use this to avoid compiling the Python files for "aap install --nobuild".
Included BCC 5.5 tool. (Dan Sharp)
Only used $CXX as the default building program after compiling a C++ source file, not when it was already compiled.
Converted two more chapters of the Aap manual to docbook format.
Made "aap report" work in the source directory: Send an e-mail with a problem report.
Jul 5
"aap uninstall" didn't work properly.
Jul 4
When compiling a pattern for ":tree" causes an error, give a nice error message.
Fixed: $BR was not working as documented.
Updated the documentation. The reference manual is now completely in docbook format.
Jul 3
Added the $DEFAULTCHECK variable: default check to be used. Value is "md5" by default, can be set to "time" or "newer".
Jul 2
Made the "--continue" argument work better: When building a target fails continue with further building.
When connecting to an ftp server and the user has to type the password, cache the password when the connection succeeded, so that it doesn't have to be typed again.
When uploading to an ftp server and the directory doesn't exist the upload failed. Now try creating the directory, like it is done for other protocols.
Changed all indents to use spaces instead of a mix of Tabs and spaces.
Jul 2
"aap install" didn't work. (Malte Neumann) Use instead of and don't try installing filetype.txt.
Jul 1
Moved the documentation for filetype detection into the Aap manual.
Finished cleaning up the layout of the reference manual.
Jun 30
Filetype detection did not close files. On Win32 this causes trouble when opening the file again. (Sergey Khorev)
Jun 27
Renamed aap_expand() to var2string(), it didn't expand wildcards. The old name will still work for a while.
Renamed expandvar() to expand2string() for consistency. The old name will still work for a while.
Renamed aap_sufreplace() to sufreplace(). The old name will still work for a while.
Renamed aap_abspath() to var_abspath(). The old name will still work for a while.
For functions in use var2string() on arguments where appropriate. Handles delayed evaluation of variables.
Jun 26
Added Util.get_shell_name(). This code is now shared with Agide.
The ":child" command was allowed in a build block. That doesn't make sense, disallow it.
When using ":include" in a build block it would accept toplevel recipe commands. Disallow this.
Jun 19
Fixed: A "suffix" attribute used for ":totype" was not actually used.
Jun 18
Fixed: Avoid giving a warning for an index out of range when computing the build commands signature.
In the build commands signature changing $(source[0]) to $(source[1]) was not noticed. (Arnout Vandecappelle)
Make has_build_target() return zero when only the "fetch" target is used. This means configure is skipped when fetching files only.
Jun 4
Fixed: When using a variable with postponed expansion is used in Python it could not be added to another string. (Arnout Vandecappelle)
Also expand the variable when it is used in a Python expression, e.g., in a ":print" command.
Fixed: When adding a buildrule a filetype specified for a node was not used. (Arnout Vandecappelle)
Fixed: When adding a Python filetype detection rule without suffixes would get an error for trying to split None. (Arnout Vandecappelle)
Python code in filetype detection cannot handle comments (also the ones used to set the line number).
Jun 4
First BETA version!
Avoid getting a warning message for using the "pre" module in Python 2.3.
Jun 3
Work around a bug in rsync: Parenthesis in the destination need to be escaped with a backslash, but this must not be done in the source.
":mkdownload" did not expand wildcards.
Jun 2
Add "--copy-links" to rsync, so that the file a symbolic links points to is copied.
Added the "{once}" option to the ":include" command.
":child {nopass} file" did not set the work object in the new recdict.
When $(target[1]) is used in build commands a warning message was given. Happens when the build signature is computed, $target is made empty then.
Renamed the $autodepend variable to $AUTODEPEND.
May 26
Installing a package .exe in the Aap directory makes it unclear what files belong to Aap and what are installed packages. Use a "bin" subdirectory for the packages.
May 21
Fixed: When installing with a previous version of Aap the install directory would use the version number of that older version instead of the version that is being installed.
When storing signatures for published files, ignore differences in the scheme used, so that switching between "scp://" and "rsync://" does not cause all files to be published again. NOTE: signatures of previous Aap versions will be invalid thus cause publishing everything again, use "aap --touch publish" to avoid that.
Made the MSVC tool work good enough that it passes the tests. Still needs much more work!
Fixed: Installing a package didn't work when the path to Aap includes a space. Added quotes around Global.aap_rootdir.
May 20
Added the LOGENTRY variable: default message for CVS commands. Especially useful when removing a file, since a file that is no longer used can't have a logentry attribute.
Made variable names a bit more consistent. Use only upper case names for variables used by Aap itself. Removed "CMD" from $CVSCMD, $RCPCMD, $SCPCMD and $RSYNCCMD. Renamed $aapversion to $AAPVERSION. Renamed $CACHE to $CACHEPATH. Renamed $targetarg to $TARGETARG. Renamed $cache_update to $CACHEUPDATE.
May 19
Changed "abort" choice to "quit". Makes it possible to add an "all" choice later.
Expand wildcards in places where a file name is expected. This avoids the need to use the Python glob() function in most cases. It does require escaping wildcards in rare situations.
Added the wildescape() function to avoid wildcards to be expanded.
Added the expand2list() and expand2dictlist() functions to expand wildcards in a string (usually a variable).
Special characters can now be escaped with $(x). This works for all characters, that makes it very simple to use. No need to lookup in the manual that, for example, $bar has to be used for "|".
Added initial support for up- and downloading with "rcp" and "rsync".
May 16
When publishing to a local directory, create that directory when needed. Makes it consistent with publishing to scp://. Also add the {mkdir} attribute to the ":copy" and ":move" commands.
Removed the default checkin message "Done by A-A-P" for CVS. If a file was modified you need to enter the message.
May 15
When using CVS, create a ~/.cvspass file when it doesn't exist. Otherwise the first time CVS is used it will fail.
Put back "-E" in the gcc command to figure out dependencies. Otherwise it won't work for header files.
Added the has_targetarg() function: check if a target has been specified as an argument.
May 13
When generating dependencies with gcc don't use "-E -MM" but "-MM" only. Works around a bug in gcc 3.1 on Mac OS X.
Improved the output of "aap comment". Add targets from ":program", ":dll" and "lib". Sort the list and insert spaces to align the comments.
When "{constant}" is used with ":fetch" this now implies "{usecache}". If the file never changes we might as well use a cached copy.
Removed the support for renaming for the old "AAP" directory to "AAPDIR".
Added the $AAP variable: Command to start Aap. Useful for a command like ":asroot $AAP install".
Made the ctags package available. Uses Exuberant Ctags 5.5. Should work on MS-Windows and Unix systems.
Fixed: When doing ":execute x.aap all" and then ":execute x.aap install" the targets would be build twice. Use updated signatures when possible, the old signatures have been deleted when building a target.
Added the "cleanmore" target: also cleanup generated files that are distributed. Replaces the confusing "distclean" target.
Added the "{nodist}" attribute for ":program", ":dll" and ":lib": don't add the file to $DISTFILES. Useful for a generated file.
Added the has_build_target() function: returns zero when running configure is pointless.
Shortened the output of ":delete" a bit: don't use absolute paths when not needed.
May 12
The buildcheck signature depended on $source, $target and $fname from surrounding scopes. Could cause rebuilding when not needed.
Added the ":symlink" command.
When uninstalling also check $UNINSTALL_* variables, so that installed files from other variants can be uninstalled as well.
Add the "add_VAR" attributes: like "var_VAR" but append instead of overrule the value.
May 8
The attributes 'signfile' and 'depdir' are expanded to absolute file names where they are defined, so that a ":cd" command doesn't confuse them. Fixes that the signature for "doc/index.html" wasn't included in "doc/mysign".
Renamed the "configure" virtual target to "config" to avoid confusion with the configure script that autoconf generates.
For the default install targets, use ":update" on the installed files so that "aap install" will build the files when needed.
Fixed using one of the new tools, there were several problems with it.
No longer consider it an error when using ":update" for a file that exists but does not have build commands. Useful for install actions.
Made ":cd foo bar" change directory to "foo/bar". Makes it easy to concatenate $DESTDIR and $PREFIX in a recipe.
May 5
Added {usecache} attribute to ":fetch": use cached file if available.
Added a mechanism to automatically search for tools and use their actions. The actual tools still need to be filled in.
Added the ":usetool" command to manually select a tool to be used.
Added the "Customizing Tools" chapter to the documentation.
May 1
Added a chapter to the documentation about automatic package install.
Apr 29
Made automatic installation of "scp" work.
When using "scp" on MS-Windows the prompt for the password was not displayed, because the output of the command was redirected. That happens now, but catching the output to check for missing directories doesn't work...
Apr 28
When an internal error is detected append the stack trace to the log file.
Implemented the "--install" argument: Install a package by downloading a recipe from the A-A-P web site.
Added ":assertpkg" command.
Made the "templ" package to try out installing a package.
Added ":asroot" command.
Fixed: value for "cache_update" wasn't found in a child recipe.
Use the fixed for Python 2.3 as (with a change to make it work with Python 1.5).
Fixed: When Aap was started with "../Exec/aap" an ":execute" command didn't find the default recipe, causing $EXESUF to be undefined.
Apr 20
Moved the Python functions that can be used in a recipe to a separate module:
Apr 17
Fixed: On MS-Windows rules were not found. Make fname_fold() always use forward slashes.
Fixed: Didn't work with Python 1.5.
Apr 17
When passing a user scope to a dependency, rule and action don't let multiple scopes overrule another, but add all specified user scopes. Thus a user scope on a dependency is used after a user scope specified for a source file.
Fixed: Recipes generated for automatic dependency checking were not added to $CLEANFILES.
Added ":cd", ":chdir", ":pushdir" and ":popdir" commands (mostly by Steve Howe).
Apr 16
Handle running Aap through a symbolic link for Python 2.1 and earlier.
Implemented passing a user scope to a dependency, rule and action.
Apr 15
Support $DEBUG, $OPTIMIZE, $INCLUDE and $LIBS for a portable way to specify arguments to the C compiler.
Added ":totype" command: use routes to turn source files into a specified filetype.
Apr 14
Added the aap_has() function: check if a command is supported.
Add the "contents" argument for ":tree": find files in which a pattern matches.
When checking if a file is inside $BDIR just check for "/build/" and "/build-*/". This also finds $BDIR from recipes in other directories.
Apr 10
Added the "cleanALL" target: drastic cleanup, deletes "AAPDIR" and "build-*" directories.
Added the ":tree" command: select files and directories in a tree and execute commands for them.
Made ":lib" and ":dll" work for Unix (with gcc).
Use os.path.normcase() for folding file names.
Apr 9
Fixed: The tests failed with Python 1.5.
Made ":syseval" remove leading and trailing white space.
Added $TOPDIR, $CHILDDIR, topdir() and childdir(). Makes it easy to pass file names from a child to a parent or toplevel recipe.
Added default "install" and "uninstall" targets.
Added the ":pass" command: do nothing.
Fixed: ":progsearch" did not assign to a variable in the specified scope.
Fixed: Filetype detection for a file "foo.1" caused an error if the file was shorter than 5 lines.
Add the "-p" argument to "scp", so that file modes are preserved when installing an executable.
Apr 4
Added the ":program", ":lib" and ":dll" commands. These form a high level method to define what source files are used to produce a program, static library or dynamic (shared) library. Replaces the special meaning of $SOURCE and $TARGET (they still work, this will be removed later). ":lib" and ":dll" are not completely implemented yet.
Automatically add a "clean" rule in each recipe where it is not defined. Uses $CLEANFILES and $CLEANDIRS, which are set by ":program".
Added the ":route" command: Define the steps how to produce a filetype from another file type.
Added simplistic support for handling lex and yacc files.
Changed the ":rule" command to delete an existing rule for the same sources and targets. Added the {default} option to mark rules that can be redefined without a warning. Added the {sourceexists} option to avoid the rule being used when a source file doesn't exist. Moved the default rules from Python code to "default.aap", so that they can easily be extended.
Added the ":delrule" command: Delete an existing rule.
Added the ":clearrules" command: Delete all rules.
Apr 4
When executing an action the scope of where the action was defined was used. That doesn't work for variables like $CFLAGS, which should be obtained from the invoking scope. This is also a problem for generating automatic dependencies. Only use the _recipe scope from where the action is defined and the scope of where the action is invoked from otherwise.
Mar 28
Get a warning for a non-existing file when computing the md5 checksum, that is annoying. Only give a note in this situation.
Mar 28
Speedup of long scripts by using the cStringIO library for concatenating lots of lines into a single string.
Implemented design decision 26: Use a rule only in the scope where it is valid. Added the {global} and {local} options to the ":scope" command.
Changed quite a few notes into warnings, so that the messages appear in the terminal. This is for messages that probably indicate that something is wrong, but the rest of the recipe can still be executed.
Mar 27
Added the ":changed" command and the "--changed" option. Marks a file outdated even when it was not changed.
Added user scopes.
Fixed: A Python bug causes an "if" command to be restricted in length. The Vim runtime recipe goes over this limit, causing a "com_backpatch" SystemError. Work around this by not prepending "if 1:" to a block of build commands but removing some of the indent.
Mar 26
Implemented scopes. Removed the ":export", ":global" and ":local" commands. Using $VAR.txt no longer works, use $(VAR).txt instead. In Python commands "var" only uses the local scope. Use "_no.var" to search in surrounding scopes.
Better implementation for delayed expansion of variables for "$=". Use a class ExpandVar for the variable value. get_var_val() understands this. In Python code use aap_expand() to handle the delayed expansion.
Added the message type "note". The warnings are now displayed by default, notes are used for things that are probably OK.
When $HOME doesn't exist, AAPDIR/cache is used for the cache directory. But this doesn't work when it doesn't exist. Create it when needed.
Renamed to to avoid it's found when searching for the cvs program on MS-Windows.
Generating dependencies with gcc never actually worked on MS-Windows. It wasn't noticed, because the signatures were not handled correctly either. Fixed both these problems.
Mar 11
Executing CVS commands with single quotes doesn't work on MS-Windows. Use double quotes.
A home directory with spaces in it caused $CACHE to get a wrong value (both double and single quotes used).
Mar 10
Use the "--" argument to stop recognizing options instead of "-".
file2string() didn't strip CR and VT from the lines. (Stuart Rackham)
Fixed: When using Main.execute() to build a target, the signatures were cached, thus a change in a source file was ignored.
Fixed: When a CVS remove command succeeded but the following commit failed, Aap would add the file again.
Mar 4
On MS-Windows a backslash may appear in a path, which doesn't work for ftp. (Stuart Rackham)
On MS-Windows uploading a file over ftp may give a wrong result for binary files. Read the file in binary mode. (Stuart Rackham)
Moved some functionality that is also used by Agide to a separate function.
Feb 16
When detecting file type for a directory return "directory" without checking the name.
"fetch" was in the list of virtual targets twice.
Jan 29
When committing a tree into CVS, a new directory was not created automatically. Was reacting to a non-zero exit code from cvs. Also create more levels of directories, required for directories that only contain directories.
Call i18n_init() in, so that it can be used standalone (from Agide).
Jan 23
When updating a toplevel target which was already updated, give a message about it. Makes it clear why ":update foo foo" only builds it once.
The locale module generates an error on the Mac. Catch this error and ignore it (for now).
"aap install" did not create the right link for the A-A-P documentation directory.
Jan 13
Fixed: Comparing file names on MS-Windows didn't always work, because only slashes were recognized. Now also recognize backslashes as path separators.
On Cygwin the separator for $PATH is ':' but $PATHEXT still uses ';' to separate items. Now use the ';' as a separator if it is present.
Jan 9
Fixed: Didn't work with Python 1.5, could not import the "pre" module.
Fixed: When updating a module already checked out from CVS could do this in the wrong directory. Avoid using the whole path in CVS/Repository.
Jan 8
Fixed: Virtual nodes would not always be found on MS-Windows, resulting in "Do not know how to build" errors.
Added 'expandtab' to the Vim modeline in the Python sources. Over time tabs will be expanded to spaces. Just to follow the Python style guide.
Jan 7
Made has_target() work backwards compatible, it was used in the Vim build recipe. Did the same for src2obj() and redir_system().
Added: When using {f} or {force} with ":system" the exit value is available in $sysresult.
Fixed: Warning for shadowing use of "str2dictlist" in
Fixed: The result of updating "gcccheck" was not remembered when invoked from a child recipe. Build commands for an autodependency did not use the global variables of the recipe the depend action was defined in.
Fixed: When using the "--nobuild" argument building automatic dependencies may fail if a file was not generated (happens with "aap -n install" for vim). Ignore this error and continue.
Jan 6
Added {force} attribute to the ":system" command: Ignore a non-zero exit value.
For non-Unix systems ignore case of file names and backslash vs slash when searching for a matching rule.
Jan 3
Fixed: When invoking an action the "var_" attributes of source nodes were not used to set variables for the executed action.
Added: Also use "var_" attributes of $target in an invoked action to set variables. Can be used to set $LDFLAGS of a target and use it in the build commands.
Fixed: ":export" only did set the value in the recipe where an action or dependency was defined at the end of the block of build commands. Now do it right away, so that following invoked actions and dependencies use the new value.
The ":do" command accepted attribures for variable names, while in other places "var_" needs to be prepended to the attribute name. Now also allow prepending "var_" for ":do" for consistency.
Jan 2
Added the "--contents" or "-C" option: Only build or publish when the file contents was changed, not when only the build commands or the publish attribute changed.
Added a check for the bogus version of the library. Aap now exits with an error message if it is present.
0.110 CHANGED: Renamed the "AAP" directory to "AAPDIR" to avoid confusion with the "aap" program on systems that ignore case in file names. Added code to automatically rename the old directory to the new name for backwards compatibility.
Added limited support for the "-k" argument: continue building after an error.
Fixed: when uploading one file to "ftp://mach/foobar" it used the file name "/foobar" instead of "foobar".
Added: for MS-Windows look for startup scripts in $HOME/aap/ or $HOMEDRIVE/$HOMEPATH/aap/.
Fixed: use of "endline" in port_makesum() was wrong.
Fixed: aap.bat did not handle arguments on Win 9x.
When "cc" is used for $CC but it can't be found try using "gcc" instead.
0.109 Fixed: Get error for missing _exports dictionary key in aap_child_exe().
Added the ":proxy" command: define a proxy server.
Added the {update = no} and {recursive} attributes to support circular dependencies.
Added the get_attr() function: obtain a dictionary for the attributes of a node. Can be used in the build commands of an action.
Removed the globals() argument of src2obj(), has_target() and redir_system(). The dictionary for global variables is now passed to build commands implicitly through Global.globals.
Fixed: When generating automatic dependencies with gcc, a file name with a space caused problems, because gcc uses a backslash before the space.
Changed: in build commands $source no longer includes virtual items. Thus $source only contains real files. $depend has been added and takes over the previous meaning of $source.
0.108 Added {quiet} argument to ":include" for optionally included recipes.
":execute" only passes variables from the current recipe to the executed recipe when the {pass} option is used. Makes it possible to execute a recipe like it would be done when running aap separately. Added "nopass" option to ":child".
Remove trailing white space from an attribute value, so that "{filetype = foo }" results in "foo" instead of "foo ".
Use $CXX instead of $CC and $CXXFLAGS instead of $CFLAGS for C++ files.
0.107 Fixed: Tests did not work on MS-Windows.
Fixed: Executing shell commands did not work on MS-Windows.
Fixed: Reading a dependency file did not work on MS-Windows.
0.106 Fixed: When uploading with scp fails because of a read-only file system this was not noted as an error.
Fixed: When uploading multiple files with scp and one or more failed, the signatures were updated anyway.
0.105 Improved performance by not computing the buildcheck signature for virtual targets. Especially helps for the recipe that ":mkdownload" generates.
When evaluating a Python expression, replace ">" with "$gt", "<" with "$lt" and "|" with $bar, so that ":print" isn't confused.
Fixed: did not find Python modules in the directory of the top recipe.
0.104 Start of the version log.

  The A-A-P pages:
Zimbu award
     Recipe examples
     Aap manual
     Agide tutorial
     Aap version log
     Agide version log
     ported apps
maillists and chat
plan and tasks
     SourceForge pages
     Aap todo list
     Agide todo list
     use cases
     design decisions
tools overview
     script languages
     build tools
     Install tools
     issue tracking
     version control
     browse tools
     various tools

Zimbu! - browse the Keyword Map of
funded by:


Send comments on this page to Webmaster AT            Hosted by SourceForge Logo            Also known as