Major changes in each version of makepp
Thanks to Anders Johnson and Daniel Pfeiffer for major contributions of code to this release.
makeppclient that lets builds start faster. (Daniel
Pfeiffer)
define statement to define multi-line variable
values.
--keep-repository-links option to prevent makepp from deleting
all the soft links it creates when making repositories.
--assume-old, --assume-new, and --dont-build options, and
support for the -n option.
perl { ...
} or makeperl { ... }. Added functions for evaluating Perl statements
$(perl ... ) or $(makeperl ... ). Added statement makesub { ... }.
(Daniel Pfeiffer)
Special thanks to Matthew Lovell and Chris van Engelen for lots of suggestions and tracking down problems in the code.
$(origin ) function from GNU make is now supported.
$(find_upwards ) and $(relative_filename )
(contributed by Matthew Lovell) and $(relative_to ).
-I dir and -L dir are now supported
and work just like -Idir and -Ldir.
$(shell ) which caused it to return a null string occasionally
(especially when the system was heavily loaded) was fixed.
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.
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:
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.
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 (exact_match) for any files other than C/C++
source files.
Because of these changes, makepp will recompile everything the first time you run it.
In addition to bug-fixes, this version has one user-visible change. The
--norc-substitution command line option was introduced to allow
compatible handling of whitespace in makefiles.
In addition to numerous bug fixes, this version has several user-visible changes:
--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.
load_makefile statement
and with recursive make.
This version has several user-visible changes:
$(if ) function.
% wildcard now matches only files within a directory;
%.c is now equivalent to *.c, not **/*.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 --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.)
load_makefile statements at all. If this
causes you problems, you can turn off implicit loading of makefiles by
adding --no-implicit-load to the command line. (I'm curious whether
people like or dislike implicit loading of makefiles.)
$(phony ) function, like this:
$(phony all): program_1 program_2
The $(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 $(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.
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 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:
-j option.
sub
statement and the makepp_extending manpage for details.
.makepp_log explaining why it
rebuilt everything. This is extremely useful for debugging.
-k option for continuing to build even when an error occurs
is now supported.
There are also (unfortunately) a few incompatibilities with previous versions:
item *
load_makefile no longer supports targets or variable settings. It now
supports loading a list of makefiles rather than just one, so the -F
switch is now unnecessary (and no longer documented).
$(INFERRED_OBJS) is no longer supported (since it was not a
well-designed interface anyway). Use the newer $(infer_objects )
function instead.
$_ is no longer supported. Use $(foreach) instead.
-s, -n, and -q are
no longer supported due to internal architecture changes. -n will
probably be supported again in future releases.
$(only_targets).