Makepp
FAQDocumentationGalleryDownloadSourceForgeCPAN

Makepp Home PageEsperantoEnglish

Compatible but reliable and improved replacement for make

Makepp, a build program which has a number of features that allow for reliable builds and simpler build files, is a drop-in replacement for GNU make. It supports almost all of the syntax that GNU make supports, and can be used with makefiles produced by utilities such as automake. It is called makepp (or make++) because it was designed with special support for C++, which has since been extended to other languages like Swig or embedded SQL. Also its relationship to make is analogous to C++'s relationship to C: it is almost 100% backward compatible but adds a number of new features and much better ways to write makefiles.

Some features that makepp adds to make are: greatly improved handling of builds that involve multiple makefiles (recursive make is no longer necessary — read Miller's Recursive Make Considered Harmful for why that's cool); automatic scanning for include files; rebuild triggered if build command changes; checksum-based signature methods for reliable builds, smart enough to ignore whitespace or comment changes; extensibility through Perl programming (within your makefile); repositories (automatically importing files from another tree); build caches (not recompiling identically what a user of the same cache already did). For a more complete feature list, see the manual.

Makepp 2.0 currently runs on probably all Linux/Unix-variants and Windows, as well as Ebcdic platforms BS2000 and z/OS. In principle it should run anywhere you have Perl 5.6.0, or higher. Perl 5.6.0 is known to have bugs on the x86 platform that cause failures in large builds. Perl 5.6.1 has some bugs on some platforms that cause weird failures, but on other platforms it works fine. I generally work with Perl 5.8.0 or newer.

You can post to the sourceforge makepp forums for help or open discussion in English, Esperanto, German or French.

News

: CVS snapshot 2.0.98.5 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. Builtin automake-inspired &template mini-language documentation rewritten. It now has an @include(filename)@ macro. The C Scanner now takes into account compiler specific path variables like C_INCLUDE_PATH or LIB. Parens now nest as in GNU make or Shell: $(name ...()...)

: CVS snapshot 2.0.98.4 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. Noteworthy is only the new option variable $MAKEPP_DEBUG. Besides there are various bug fixes.

: CVS snapshot 2.0.98.3 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. Installation against /usr/bin/env possible with PERL=perl (no path). New option --loop to perform the same build as often as you want without reading makefiles. Optionally ignore line numbers in smart C signature. Loop until missing rule to build include was found. Gzip manfiles if local system does that, Debian policy. Remove all features warned about as deprecated.

: CVS snapshot 2.0.98.2 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. After an unusually short delay we're back with bug fixes for a few old bugs, that have only recently hurt. So this is a recommended upgrade, if you experience something wrong.

: CVS snapshot 2.0.98.1 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. After the excursion into Esperanto translation, we're back to coding. There is one new option to makeppreplay, which lets you modify the remembered command and a few bug fixes and optimizations. This snapshot eliminates the support for Perl 5.6 and all the workarounds it required.

: Home Page translated to Esperanto Esperanto

lernu.netOn this European Day of Languages, with Esperanto gradually gaining broader acceptance in the internet, the language's recent 125th anniversary was a good motivation to translate this page. This was done semiautomatically based on the results of Google Translate, the three engines in Traduku and Esperantilo. None of these is perfect, but by merging their results we get close. The Dictionary of Computing filled in the technical terminology.

: Version 2.0 released

After over seven years and innumerous changes here it is: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. For those who have not been following the snapshots and release candidates, this is almost a complete rewrite of version 1.40.1 with many new features.

One core feature has always been smart signatures for C/C++ like languages, i.e. not recompiling if only comments or whitespace changed. This is now easily extensible to any suffix or filename. The same is now also available for xml files, with a choice of two parsers.

Please help by trying this on your project! Unless it wildly works around the shortcomings of Gnu make, no or few modifications should be necessary. Also, if you have access to an unusual system or architecture, help to fill the testing gaps by running t/run_all.t -T and reporting any error messages along with the contents of the created t/V5.* directory!

Makepp 2.0 is dedicated to the visionary late Dennis Ritchie, father of C and cocreator of Unix, the foundations not only of make, but of all modern computers and smartphones. Great thanks go out to major contributors Amadeus Germany and NVIDIA, as well as to all who submitted patches, ideas or bug reports or even remote debugging access!

Outlook: Makepp 2.1 will further improve the promise of Gnu make compatibility in some little ways it differs unnecessarily. It will eliminate all the legacy parts which emit deprecated warnings, as well as support for the quite obsolete Perl 5.6 and maybe up to about 5.8.5. New features under consideration include loop syntax akin to conditionals, also at runtime in rule actions, regular expression rules, parsers for TeX/LaTeX and Lazy C++, furthermore a new tool makepp­declude using our in-depth understanding of a built program to eliminate useless #include statements.

: Release candidate 2.0rc3 (technically 1.50-120304) published

Few small fixes: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. Only few minor bugs were reported and fixed since rc2. Many files were touched due to spell checking of documentation and comments.

: Release candidate 2.0rc2 (technically 1.50-120111) published

Few small fixes: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM. Only few minor bugs were reported and all fixed since rc1. The major change is installation of html doc in a new format, the same one that is also used for the newly designed website.

: New Website Design launched

Thanks a lot to 조연희 (Jo Younhee) for the redesign of the camel at work logo with a hand crafted font! And thanks to html-templates for the base artwork, which I modernized with the help of {less}.

: Release candidate 2.0rc1 (technically 1.50-111120) published

Text that was here is now part of final 2.0 release above: Gzip tarball, Xz tarball, Debian/Ubuntu, RPM.

: CVS snapshot 1.50-110915 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball. This was the last snapshot of never released version 1.50.

Changes are subtle: makefile parsing now has the same precedence as gmake, allowing global to be a keyword before build_cache or define statements. perl {} oneliners with a colon in the code are not mistaken for rules anymore and perverse variable names with spaces are understood.

: CVS snapshot 1.50-110621 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball. This one, besides vpath, only fixes bugs including one introduced by the previous big change. This release is back to our customary confidence level for usability.

: CVS snapshot 1.50-110417 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball. This fixes makepp's longest standing bug, namely it got confused if function arguments returned commas. The fix should be transparent for many of you, but it required a major rework in the function area, so test carefully before deploying. If you have your own functions which take arguments, you must read the release notes and documentation, sorry for that!

: CVS snapshot 1.50-110116 published

Here's again a new well tested beta snapshot: Gzip tarball, Xz tarball. A few bugs have been fixed (especially users of recent Cygwin should update) and it has again been brought closer to Gnu make. So more packages are now buildable though there is still a problem with the Linux kernel.

All known embedded SQL/C preprocessors are now understood. This is important so dependency on include files automatically triggers rebuilds, instead of having an error prone manually written list in your makefile. Or the includes can even be automatically generated when needed, if that is the case in your build system. (OCI or OTL use no special syntax, so they have always been handled by makepp's C/C++ scanner.)

CMake generates a highly recursive set of makefiles. Makepp, thorough as it is, went into deep recursion on a cycle classic make misses. Instead, we now parse those makefiles smartly, completely getting rid of recursion. Alas we must load all build.make files, because they neither have a standard name, nor do they generate files in their own directory only, so they can't be autoloaded as needed. Also the undocumented progress display does not count the actual work, but only the now eliminated recursion, so it stopped displaying. It has not been tried to hook into kdecmake, an exercise left to those who know it well — feedback welcome! Of course the long term goal would be to generate a real makepp build system, as we provide what CMake promises.

The now abbreviated option --traditional(-recursive-make) has a new sibling --hybrid(-recursive-make) which tries to handle as much recursion as possible in the main process, resorting to real recursion only in directories with multiple makefiles.

: CVS snapshot 1.50-101117 published

Here's again a new well tested beta snapshot: Gzip tarball. A few bugs have been fixed and it has been brought closer to Gnu make. So more packages are now buildable.

Scanning terminology has been cleaned up (and the page rewritten) to finally match a redesign that happened a few years ago. There are now 3 separate terms, the lexer (which users don't need to worry about), the (command) parsers and the (file) scanners. The skip-word parser now works better.

: CVS snapshot 1.50-100422 published

Here's again a new well tested beta snapshot: Gzip tarball. By request there is a new rule modifier :include allowing to profit from gcc -MD, IBM xlc -M (and with a trick even MS cl) on-the-fly dependency writing, which normally collides with makepp's discovery of dependencies before building. Besides there are some bug fixes, most notably a workaround for a Perl 5.12.0 crash in makepplog.

: Makepp at German Perl Workshop

Today there was a presentation (OOo) in German of makepp, and especially of its Perl aspects, at the Deutscher Perl-Workshop. A slightly more ample article (PDF) appeared in the proceedings.

: CVS snapshot published

Here's again a new well tested beta snapshot. The highlight is being good citizens: our classes no longer clutter many top level namespaces and have instead moved to package Mpp (which is the shortcut prefix of the makepp family of commands, e.g. mppc is an alias to makeppclean.) Besides there are some bug fixes, most notably symlinks (which are problematic dependencies, because they stand for two different files) are finally handled consistently.

: CVS snapshot published

Here's again a new well tested beta snapshot. Besides some bug fixes, the highlight is the new experimental command makeppreplay (short: mppr). It performs only the actions, just like makepp last performed them. Doing nothing else means it is very fast! It is still a bit uncomfortable to use, because it doesn't make any build decisions, leaving the user to specify all files to be built — but in normal editing these are often very few targets to think about.

: CVS snapshot published

Here's again a new well tested beta snapshot. Besides more speedup and bug fixes (especially for repositories), this version has been ported to z/OS. The previously missing call function has been provided. A file .makepprc with options in it is searched for, so you can store them in the build tree they pertain to.

There still are a few bug fixes on the way for even better GNU make compatibility (comma in variable is not to be a parameter separator and variables with whitespace in name). After that this should already be close to what the next official version will look like.

: CVS snapshot published

Here's again a new well tested beta snapshot. Besides numerous general improvements and bug fixes, a highlight of this version is the much enhanced support for all Windows environments, including support for parallel builds.

: CVS snapshot published

Here's again a new well tested beta snapshot. It is getting ever faster, again 10% to 15% faster than the last one. And it fixes various bugs, a must for users of the option combination -kjn. The build cache now offers statistics and can be replicated, giving greater time savings for multiple disks or machines. On Linux and Solaris this also saves much space. All builtin filters (except &sort) can now generate C/C++-style line synchronization. All commands now have abbreviations like mpp for makepp, mppc for makeppclean and mppl for makepplog.

logo: Enhancement project "Just MakePP it!"

Amadeus Germany GmbH held a kickoff meeting with students of the Johannes Gutenberg Unversität, Mainz, and their lecturer. During the next month they will formalize measurable requirements based on the ideas (german) they were given, the vision (german) they formulated, and the detailed interviews they led. The ideas include rewriting the parser, so that it can be extended with syntactic foreach and while loops. Two ideas concern the internal scheduler and the way command parsers and scanners use it, so as to increase scalability. The fourth idea is to create an autoconf-like framework based on makepp and to fill it with portability tests from existing sources. That way build systems can configure themselves for any platform.

Their requirements document has since been published on the university report site.

: CVS snapshot published

By popular request, and since we are so slow about new stable releases, there will now be a well tested beta snapshot from time to time.

: Gallery added

To help you use the new makeppgraph utility, there is a gallery with explanations of how the graphs were created.

: Website revamped

The new look and feel of the upcoming version's documentation has been applied to this page and the latest 1.40.1 documentation. GNU Emacs 22.0.50 from their CVS now also comes with a makefile-makepp-mode.

: NVIDIA build system presentation

Two of the major makepp developers presented makepp and its role in NVIDIA's giant build system at the Perforce user conference. Read both the white paper and the slides on their presentation site.

: Version 1.40.1 released

This release is identical to 1.40 except that somehow the tar file for 1.40 was corrupted. This is the last version that supported Perl 5.005.

: Version 1.40 released

This version fixes a lot of bugs in 1.19 (Cygwin fixes plus lots of minor problems on Unix), has a redesigned scanner interface to support additional languages more easily (e.g., Verilog is supported now), has a client-server interface for faster builds, and a few minor new functions. See the release notes for details.

Only very minor changes occurred between 1.40beta1 and the full 1.40 release. The makepp developers are mostly concentrating on the next release, which should have a number of new features.


Daniel Pfeiffer & Gary Holt
Last modified: