AMU
===

Acorn Make Utility.
See Acorn C/C++ Manual for further documentation.

Contents:
  Changes from version 5.10 to 5.13
  Changes from version 5.25 to 5.27
  Changes from version 5.27 to 5.28
  Changes from version 5.28 to 5.29
  Changes from version 5.29 to 5.30
  Changes from version 5.30 to 5.31
  Changes from version 5.31 to 5.32
  Changes from version 5.32 to 5.33
  Changes from version 5.33 to 5.34
  Changes from version 5.34 to 5.36

Occasionally, this document refers the reader to the GNU make documentation.
See https://www.gnu.org/software/make/manual/ for GNU make documentation.


Changes from version 5.10 to 5.13
=================================

Macro handling has been fixed.  The first rule in the Makefile (specifically,
the first rule after any macro definition) can be defined in terms of a
macro.

Extension-less files are no longer run through the rule inference checks
(stops obscure errors for targets with no filename extensions).

Added -e switch to import environment variables, as detailed above.


Changes from version 5.25 to 5.27
=================================

The new -v switch will output each Makefile command /after/ macro
expansion and /before/ it is executed, even if the Makefile contains
.SILENT, the command starts with '@' or the -s switch was used.
This allows you to see exactly what is going on when some strange
error emerges from your build.


Changes from version 5.27 to 5.28
=================================

Fix a dependency generation bug.


Changes from version 5.28 to 5.29
=================================

Improved amu's error reporting.

* It will now canonicalise the name of the makefile for an error message so
  that you know which one it's on about (especially useful with nested
  makefiles).

* Reports of the line number for some errors were completely wrong.


Changes from version 5.29 to 5.30
=================================

Now permits continuation characters in !Depend files. AMU's parser for !Depend
files generated by tools it invokes is much stricter than that for makefiles in
general. From now on, it will at least accept '\' continuation characters at
the end of each line. For consistency with makefiles, the byte-pair consisting
of a '\' along with a following newline character is treated as whitespace.
Backslashes appearing elsewhere in a line do *not* need escaping, although they
are unlikely to occur in practice due to backslash not being a valid filename
character in RISC OS. Restrictions that remain include:
* only one target is permitted per line (though multiple dependencies
  may be listed)
* no whitespace is allowed between the target name and the following ':'


Changes from version 5.30 to 5.31
=================================

An accidental NULL pointer access when parsing lines has been fixed, which 
caused an abort when used on a version of RISC OS with zero page relocation.


Changes from version 5.31 to 5.32
=================================

Failure to read a time stamp, for example because the underlying filing system
reported an error, no longer cause an immediate error. The error will only be
reported if the dependency is required by a target. This avoids a problem where
the makefile generates the name using macros, but the macros are unset for some
targets, and are therefore invalid filenames.


Changes from version 5.32 to 5.33
=================================

The $(wildcard) function is now fully implemented, and aligned with the
function of the same name in GNU make: it expands to a space-separated list
of all files that exist which match any of the space-separated wildcarded
specs given in the function argument.
Note, the path elements in the expansion will be in native RISC OS order, so
  $(wildcard src.hello.c)
will typically expand to 'src.c.hello'.


Changes from version 5.33 to 5.34
=================================

Dynamic dependencies can now be read or updated from a separate file to the
main makefile using the '-y' switch. Optionally a named file to write the
dependencies into can also be given, otherwise a name will be derived from
the name of the makefile given to '-f' (or "Makefile" if none was given) with
the suffix "/d" appended.

File timestamps are now given 1.28 seconds of leniency before being considered
as out of date in order to account for various non-native filing systems which
round their times only to the nearest second.


Changes from version 5.34 to 5.36
=================================

Added '-C' switch to change to the specified directory before doing anything
else, including interpreting the path to the Makefile specified by
any '-f' option. Multiple '-C' options act cumulatively. The original CSD is
restored on exit, whether amu succeeded or not.

In addition to built-in knowledge of certain suffixes from a list of those
supported by the DDE itself (s, c, h, and so on), any suffixes specified by
the '.SUFFIXES' pseudo-dependency are also permitted as acceptable suffix
extensions in normal rules.

Fixed a bug relating to suffix rules, where one suffix was a substring of
another, and the longer suffix was declared first but only the shorter one
had a suffix rule, and the longer one was erroneously matched.

Previously, for normal (non-suffix) rule recipes, amu performed macro
substitution (significantly, including functions) prior to expanding
automatic variables ('$*', '$@', '$?'). Now we also expand automatic
variables first, for consistency with GNU make and with amu's handling
of automatic variables within suffix rules, where they were already
expanded first. For compatibility, they are also expanded afterwards
as well (for example to handle macros whose definition include '$@' but
which are lazily expanded when executing a rule).

Variable '$^' now expands to the set of all prerequisites for the current
rule. Note that, unlike '$?', these are listed in the same order as they
are given in the Makefile.

Variable '$<' which was previously only supported within suffix rules, is
now supported everywhere. It is equivalent to '$(firstword $^)'.
