# Unexpected Features and Limitations

## Known bugs

- Makepp occasionally trips a bug in perl that causes a core dump. I don't know why this happens, or what causes it, but you can always run makepp again with the same arguments, and it will get past the point where it crashed before.

You may want to look through the section on incompatibilities for 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: Mon Feb 19 20:36:29 PST 2001