# Unexpected Features and Limitations

## Known bugs

As soon as I find these bugs, I'll fix them. :-)

- Occasionally perl (5.005 and 5.6.0) dumps core when running makepp. This is a perl bug, not a makepp bug, since no pure perl script should ever dump core. At this point I don't know what's causing it. Just rerun makepp and it will pick up where it left off.
- There are a few occasional bugs that crop up when you are building makefiles that invoke make recursively. Occasionally makepp simply hangs. The best workaround for this problem is to get rid of recursive make invocations in your makefiles. The next best workaround is simply to stop makepp and rerun it, and it will pick up where it left off.

You may also want to look through the section on incompatibilities for more unexpected features. If you find a bug or an undesirable feature, please feel free to send me a note.

Makepp also has a few quirks that might be a bit surprising.

- Makepp's implementation of repositories has some limitations that might not be obvious. See the discussion about repositories for more details.
- Makepp's `**` wildcard won't see directories that begin with a period (e.g., `.libs`). This is normally what you want, but might be occasionally surprising.

- makepp's automatic dependency scanner does not know about preprocessor conditionals. Thus if you do something like this:

      #ifdef VAR
      #include "file1.h"
      #else
      #include "file2.h"
      #endif

  makepp will assume both `file1.h` and `file2.h` are dependencies. This will usually not be a problem--it will just trigger rebuilds more often than necessary--unless one of the files doesn't exist. In this case, makepp will give a warning message (but will still compile as usual). If, however, you use the system include format, i.e.,

      #include <xyz.h>

  instead of

      #include "xyz.h"

  then makepp won't complain about a missing file because it assumes it's buried in some system include directory that it doesn't know about.
- Makepp does not like it if you create new soft links to existing directories during the course of the build. It shouldn't get confused if you create new directories, just don't create new soft links to existing directories.
- Makepp is slower than make. This is mostly because it's doing a lot more work. You can speed it up somewhat by turning off logging, but because it is doing a lot more comparisons, it will always be slower.
- Makepp can use a surprisingly large amount of memory. This is (a) because it's written in perl, and perl is a memory hog; (b) because of makepp's algorithm, it simply has to store a lot more information about many more files than make does. But if someone wants to pay to have the core of it rewritten in C++, then it could be somewhat faster and a lot smaller....

Table of contents | Next (release notes) | Previous (incompatibilities)
Last modified: Thu Oct 19 09:26:11 PDT 2000