makepp_release_notes -- Major changes in each version of makepp
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.
$(relative_filename )(contributed by Matthew Lovell) and
-L dirare now supported and work just like
$(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_md5is now the default signature method. This means that by default, makepp won't recompile C/C++ modules if only whitespace or comments have changed.
md5has 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.
--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-makeoption 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_makefilestatement and with recursive make.
This version has several user-visible changes:
%wildcard now matches only files within a directory;
%.cis now equivalent to
**/*.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-subdirson 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_makefilestatements at all. If this causes you problems, you can turn off implicit loading of makefiles by adding
--no-implicit-loadto 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
$(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
$(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:
substatement and makepp_extending for details.
.makepp_logexplaining why it rebuilt everything. This is extremely useful for debugging.
-koption for continuing to build even when an error occurs is now supported.
There are also (unfortunately) a few incompatibilities with previous versions:
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
-qare no longer supported due to internal architecture changes.
-nwill probably be supported again in future releases.