=head1 NAME

makepp_release_notes -- Major changes in each version of makepp

=head1 DESCRIPTION

=head2 Version 1.19 (July 2003)

Special thanks to Matthew Lovell and Chris van Engelen for lots of suggestions
and tracking down problems in the code.

=over 4

=item *

Documentation was reorganized so that man pages as well as HTML pages can be
produced, and a cookbook/FAQ was added (see L<makepp_cookbook>).

=item *

A "configure" script was added so installation is more like other software
products from the user point of view.

=item *

The S<C<$(origin )>> function from GNU make is now supported.

=item *

L<Target-specific variables|makepp_variables/Target-specific 
assignments> are now supported as in GNU make, except that they do not
propagate their values to dependencies.

=item *

New functions S<C<$(find_upwards )>> and S<C<$(relative_filename )>>
(contributed by Matthew Lovell) and S<C<$(relative_to )>>.

=item *

In compilation commands, S<C<-I dir>> and S<C<-L dir>> are now supported
and work just like C<-Idir> and C<-Ldir>.

=item *

Recompilation of C files will now occur if a multi-line comment was
inserted, or if the line numbering changed in any way.  Previously it
ignored newlines in computing the checksum, which meant that a change
that affected debugger info might not force a recompilation.

=item *

A bug in S<C<$(shell )>> which caused it to return a null string occasionally
(especially when the system was heavily loaded) was fixed.

=item *

Unreadable files or directories suppress importing from repositories but are
not matched by wildcards.

=item *

A few other minor bugs were fixed.

=back

=head2 Version 1.18

The most important change was support for the Cygwin build environment.
You can now run makepp with the Cygwin version of perl; I do not think
it will work properly with the native windows version of perl yet.

A few other bug fixes went into this release.

=head2 Version 1.10

The most important change in this version is that makepp can accept a
vastly larger number of makefiles without any command line options
because of some changes to the implementation of recursive make.  There
are a few minor improvements in the GNU make compatibility, and a slight
improvement in memory usage.


There are several user visible changes:

=over 4

=item *

C<c_compilation_md5> is now the default signature method.  This means
that by default, makepp won't recompile C/C++ modules if only whitespace
or comments have changed.

=item 

A new signature method C<md5> has been added, which runs an MD5 checksum
on the file's contents.  This is not enabled by default; makepp still
uses its original method (C<exact_match>) for any files other than C/C++
source files.

=back

Because of these changes, makepp will recompile everything the first
time you run it.

=head2 Version 1.05

In addition to bug-fixes, this version has one user-visible change.  The
C<--norc-substitution> command line option was introduced to allow
compatible handling of whitespace in makefiles.

=head2 Version 0.99

In addition to numerous bug fixes, this version has several user-visible
changes:

=over 4

=item *

Multiple targets for a rule are now treated in a way which is more
compatible with old makefiles.  Makepp has a heuristic algorithm for
guessing whether the rule is supposed to build all targets at once or
whether the rule needs to be invoked multiple times.  I do not think
this will break any existing makefiles, but it should allow makepp to
work with many more makefiles designed for unix make.

=item *

The C<--traditional-recursive-make> option can be used for legacy
makefiles which use recursive invocations of make in a way that didn't
work with makepp's default implementation.

=item *

Repositories now work with libtool.

=item *

Variable settings are now allowed with the C<load_makefile> statement
and with recursive make.

=back

=head2 Version 0.95

This version has several user-visible changes:

=over 4

=item *

A tutorial on writing makefiles for makepp has been added.

=item *

GNU make style conditionals (ifeq/ifneq/ifdef/ifndef) are now
supported, as is the S<C<$(if )>> function.

=item *

By default, the C<%> wildcard now matches only files within a directory;
C<%.c> is now equivalent to C<*.c>, not C<**/*.c>.  The reason for this
change was that rules almost never need to use the more complicated
wildcard, and it often caused unnecessary directories to be searched.
You can get the old behavior by specifying C<--percent-subdirs> on the
command line.  (I'm curious how people feel about this change.  Please
let me know if you have good reasons for it being one way or the other.)

=item *

By default, makefiles from any directory that contains a dependency, or
that is searched by a wildcard, are loaded automatically.  Usually this
means you don't need any C<load_makefile> statements at all.  If this
causes you problems, you can turn off implicit loading of makefiles by
adding C<--no-implicit-load> to the command line.  (I'm curious whether
people like or dislike implicit loading of makefiles.)

=item *

A target may now be declared phony on the same line that defines the
target by using the new S<C<$(phony )>> function, like this:

    $(phony all): program_1 program_2

The S<C<$(phony )>> function simply returns its
arguments, but marks them as phony targets.  You can still use
the older syntax that looks like this:

    all: program_1 program_2
    
    .PHONY: all


The S<C<$(phony )>> function is an attempt to improve the readability of
makefiles.  I'd welcome other suggestions, as I'm still not entirely
happy with the syntax.

=back

=head2 Version 0.90

In order to support features like parallel make, most of the internals
had to be reorganized or rewritten.  The result is much cleaner and
hopefully more reliable.

Bugs too numerous to mention have been fixed.  In order to help ensure
reliability, a test suite has been developed.  It doesn't test
absolutely everything yet, but it does test most things, and I hope to
make it more extensive in the future.  You can run it by typing C<makepp
test> in the makepp distribution directory.  If an unmodified makepp
fails the test suite, please let me know so I can fix it.


There are many new features:

=over 4

=item *

Repositories</a> are now supported.

=item *

It is now possible to specify different methods for calculating and
comparing file signatures.  For example, you can use an MD5 checksum
ignoring comments and whitespace, or you can require merely that the
target be newer than the dependencies (the method that the traditional
make uses).

=item *

Makefiles are only rebuilt if they are older than their dependencies; a
different signature method is used in this special case.

=item *

Parallel builds are now supported, though this is still an experimental
feature.  See the C<-j> option.

=item *

It is now possible to write your own functions.  See the C<sub>
statement and L<makepp_extending> for details.

=item *

Filenames with characters like colon or space are now
supported with a new quoting syntax.

=item *

Synonymous, less cryptic names for automatic variables have been
introduced to encourage more readable makefiles.

=item *

Makepp now remembers the architecture of the machine
you built on, and rebuilds if the architecture is different.

=item *

Directories can now be targets or dependencies; a previous restriction
that all directories had to exist before the start of the built has been
lifted.

=item *

Makepp now writes a log file called C<.makepp_log> explaining why it
rebuilt everything.  This is extremely useful for debugging.

=item *

The usual C<-k> option for continuing to build even when an error occurs
is now supported.

=item *

The documentation has been reorganized and extended.

=back

There are also (unfortunately) a few incompatibilities with
previous versions:

=over 4

=item *

The file format for storing information about the last build has
changed.  Thus makepp will insist on rebuilding everything the first
time you run the new version.

item *

load_makefile no longer supports targets or variable settings.  It now
supports loading a list of makefiles rather than just one, so the C<-F>
switch is now unnecessary (and no longer documented).

=item *

Recursive make now ignores variable settings on the command
line.  This is necessary to load makefiles in a consistent way.

=item *

C<$(INFERRED_OBJS)> is no longer supported (since it was not a
well-designed interface anyway).  Use the newer S<C<$(infer_objects )>>
function instead.

=item *

C<$_> is no longer supported.  Use C<$(foreach)> instead.

=item *

A few seldom used GNU make options such as C<-s>, C<-n>, and C<-q> are
no longer supported due to internal architecture changes.  C<-n> will
probably be supported again in future releases.

=item *

A man page is no longer provided since the documentation is no longer
written in the perl pod format.  Use the HTML documentation instead.

=item *

The automatic clean target is no longer supported.  A better
way to do it is with the C<$(only_targets)>.

=back
