
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.$(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 makepp_extending 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).