Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help

       makepp_release_notes -- Major changes in	each version of	makepp

   Version 2.0
       The items are roughly ordered by	increasing age,	so you need to read
       only the	first parts if you've been using snapshots newer than 1.40.

       o   The signature statement no longer overrides the method found	by
	   command parsers -- now you must provide the "override" keyword if
	   you want that.  There are new signature methods "xml" and
	   "xml-space".	 The "c_compilation_md5" signature can now also	be
	   invoked as "C" (because signatures pertain to files,	not actions).
	   It (and its subclasses) can now easily be extended to other
	   suffixes as in "C.ipp,tpp" meaning that besides the built in
	   suffixes it will also apply to files	ending in .ipp or .tpp.
	   Thanks to this makeppreplay and embedded SQL/C now works more
	   reliably.  Beware: this is not understood by	older versions.	 So
	   don't call an older mpp on things built with	this version, which
	   includes from a repository you built	in.

       o   The keyword "global"	can precede the	"build_cache", "build_check"
	   and "signature" statements and the "define" statement which now
	   also	allows "export".  Therefore s_ subs now	get a 4th parameter, a
	   hash	reference with the encountered keywords	as keys.

       o   Makefiles are now parsed with the same priority as in gmake.	 Hence
	   "include :" or "include =" are now statements (no space: still rule
	   or assignment.)  This means that "perl { qualified::name }" no
	   longer mysteriously disapears (it used to be	a useless rule.)  Now
	   variable names may contain whitespace.  This	means that
	   "&preprocess	--assignment" will treat just about any	equal sign as
	   an assignment (replace them with $E from the	funny assignment

       o   If you have a federated build cache over several disks, and some of
	   them	are preferred, you must	edit their and
	   change PREFERRED to xPREFERRED.  (This reflects a general change in
	   names where we now prefix by	'x' all	xATTRIBUTES which are are true
	   iff they exist).

       o   The "VPATH" variable	and "vpath" statement are now emulated.

       o   Makefile functions ("sub f_...") may	now get	their 1st parameter as
	   a string reference.	In that	case you are responsible for expanding
	   your	arguments.  Use	the accessor functions &arg or "args"
	   described in	makepp extensions.  Until you get round	to updating
	   your	functions, you can turn	this off by setting
	   "$Mpp::Makefile::legacy_functions = 1" either in your makefile (one
	   per build system is enough, as it's a Perl variable)	or patch it
	   into	your new makepp	installation.  If you want your	updated
	   functions to	work with both your old	and this new makepp, use "ref
	   $_[0] ? &arg	: $_[0]" or "ref $_[0] ? args(...) : $_[0]" in the
	   transition phase.

	   Within "$(call)", the special variables "$0,	$1, ..., $(11),	..."
	   are now expanded like any other make	variable.  This	causes slight
	   differences to the previous work around.  The result	is closer to
	   gmake, at least if "makepp_simple_concatenation=1" is set.

       o   CMake generated makefiles no	longer lead to deep recursion.

       o   New scanner "esql_compilation" for embedded SQL C, now covers all
	   databases.  You must	supply the rules, however.

       o   New option --hybrid-recursive-make (follow each option link,	to see
	   shorter forms) as a smarter alternative to

	   New option --stop-after-loading gives makepp	a headstart while
	   you're still	editing.

	   New options --rm-stale, --sandbox and --dont-read, for sandbox
	   control when	running	multiple concurrent (possibly distributed)
	   makepp commands.

	   Makepp will now also	look for options in files called .makepprc.
	   The option --args-file is now consistently available	on all

	   The environment variable MAKEPP_CASE_SENSITIVE_FILENAMES supercedes
	   the options --case-sensitive-filenames and

	   Removed "--keep-repository-links" option, the behaviour of which is
	   now the default.

	   All utilities now also query	an environment variable	for presetting
	   options.  Each one is called	like the utility in upper case,	with

	   Short command line options may now be grouped in the	Unix way, so
	   "-k -j 4" may be given as "-kj4".  In all long options the dash
	   between words may now consistently be omitted or replaced with an
	   underscore, so that "--no-log" can be "--nolog" or "--no_log".
	   Unknown options now cause an	error.

       o   Originally "makeppclean" "-l" meant "--leave-src-info", but now the
	   options have	been extended and this one changed to

       o   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.

	   For advanced	users: The new interface consists of the
	   "register_parser" or	"register_command_parser" statements, the
	   ":parser" rule option and the "p_*" parser factory functions	which
	   get aliased to their	parser class as	"factory".  The	misnamed
	   "register_scanner" statement, ":scanner" rule option	and
	   ":scanner_*"	or ":parser_*" functions are deprecated.

       o   New variable	MAKEPP_VERSION.

       o   All internal	classes	have been moved	to the new package "Mpp::" so
	   as to abide by CPAN rules, and to avoid potential collision with
	   any module you might	load into your makefiles.  This	is transparent
	   to casual users of makepp.

	   In case you did Perl	programming for	your makefiles,	and you	made
	   use of some internals this would break your build.  Therefore there
	   is a	temporary backward compatibility feature, to be	removed	in the
	   future, which you can activate during installation.	The new
	   environment variable	$MAKEPP_INSTALL_OLD_MODULES is checked for a
	   list	of old modules you want	created	as wrappers around the new
	   ones.  Additionally if you have makefiles you can't quickly change,
	   which rely on these things being available without a	"use"
	   statement, you must prefix those modules with a "+",	to get them

	       MAKEPP_INSTALL_OLD_MODULES='+Glob Rule +MakeEvent'

       o   New makeppreplay, mppr utility to repeat some of makepp's actions
	   very	fast.  New makepplog, mppl utility to see the log data
	   readably, needed due	to a changed file format.  New makeppgraph,
	   mppg	utility	to graphically analyze dependencies, includes and
	   partially the reasons for a rebuild.	 New makeppinfo, mppi utility
	   to see somewhat cryptically what makepp knows about some file.

       o   Ported to IBM z/OS Unix System Services.  Only smart	recursive make
	   doesn't work.

       o   Makepp has become noticeably	faster.

       o   Abolish the undocumented fancy renaming of only '.' to '_dot_' in
	   variable and	function names.

       o   New variable	$/ for portable	directory separator.  Lots of Windows
	   fixes, including "-j" (parallel builds) for Cygwin and MinGW	and
	   smart recursive builds on Cygwin.

       o   Also	install	abbreviations consisting of 'mpp' plus the first
	   letter of every following word, e.g.	'mppc' for makeppclean.

       o   New `:build_check only_action' for commands that don't depend on
	   the contents	of their dependencies, like symlink creation, where it
	   is used automatically.

       o   Removed "--norc-substitution" and "--percent-subdirs" and
	   "$(rc_substitution)"	and "percent_subdirs".	They are now to	be
	   given anywhere from target specific assignment to command line or
	   environment vars "makepp_simple_concatenation" and

       o   New action syntax "&perl_function 'arg 1' arg2 ..." and
	   "&external-perl-script 'arg 1' arg2 ..."  New Perl function "run".

	   There are the following builtin commands: &chmod, &cp, &cut,	&echo,
	   &expr, &grep, &install, &ln,	&mkdir,	&mv, &perl, &preprocess,
	   &printf, &rm, &sed, &sort, &template, &touch, &uninstall, &uniq and
	   &yes, which can replace Unix	commands of the	same name, and more or
	   less	also the following: "awk", "chgrp", "chown", "head", "m4",
	   "rmdir", "tail" and "tr".  They are also available stand-alone from
	   the Shell.  They can	also be	used as	functions, e.g.	"$(&cat
	   file)", or as statements, or	standalone.

	   Note	that, unlike earlier CVS versions, "&cut -f", "&grep -v" and
	   "&sort -r" now behave as in Unix.  Note that	in earlier CVS
	   versions of &template "@@" was processed before "@",	but now	lines
	   are consistently handled front to back.

       o   Added a "global" statement for sharing variables across makefiles.
	   The assignment variant of "export" now works	like a normal
	   assignment, so you may have to change to ":=".  Added the
	   "override" modifier to assignments.	The "define var	:=" statement
	   now optionally allows specifying the	kind of	assignment.  And the
	   forms with immediate	evaluation retain the newlines in "$(shell
	   ...)" or "$(&command)".  There are new assignment operators "&="
	   for prepending, and ";=" which is a "=" when	set, but automatically
	   turns into a	":=" when first	used.

       o   A makefile is now also found	if it is called	"".

       o   There are two new possible filenames	for makefiles:
	   "RootMakeppfile" or equivalently "".  The presence
	   of either of	these gives your build tree a formal root, accessible
	   through the new variable "$(ROOT)".	The advantage is that this
	   file	is always loaded first,	if present, allowing you to more
	   easily create a build system	where makepp can be called from
	   anywhere, without telling it	which makefile to start	at.

	   The root of the file	system is then automatically marked for
	   "--dont-build", so that makepp doesn't go messing into other
	   directories you include or use libs from, just because they happen
	   to have a Makefile or sources.

	   Usually this	means that the root of your build system gets marked
	   for "--do-build".  If, however, you say "--do-build"	for something
	   under your build system root, which doesn't inherit "--dont-build",
	   then	instead	your build system root gets marked for "--dont-build".

       o   Removed command "makeppclient" since	we never managed to let	builds
	   start significantly faster.	The option "--stop-after-loading" is
	   more	beneficial.

       o   Interface definition	files for SWIG (.i files) are now scanned for
	   includes.  Makepp now understands swig invocations.	(SWIG stands
	   for Simplified Wrapper and Interface	Generator.  It automatically
	   generates all the wrapper functions to link your C or C++ code to a
	   variety of other languages such as Perl, Python, Tcl, Ruby, OCaml,
	   C#, etc.  See

       o   Gnu Emacs 22	now has	a standard makefile-makepp-mode, which is the
	   default when	visiting Makeppfile.

       o   $[VARIABLE] or $[function ...] is evaluated when reading a makefile
	   line, so the	variable may contain makepp syntax.

       o   $( ...) is now always a list	in rc-style substitution, so that
	   "-I$( $(DIRLIST))" will leave no lonely option when DIRLIST is

       o   You can now double-paren functions and multi-line lists, allowing
	   things like "$((perl	if( $a < 5 ) { ... }))".

       o   New "c_compilation_md5" signature, which also allows	adding
	   whitespace where there was none and inversely.  It also ignores
	   whitespace and comments after the last token.  This is useful for
	   preventing a	useless	rebuild	if your	VC adds	lines at a "$""Log$"
	   tag when checking in.

       o   Implement $?	exactly	as GNU make does.  New long name
	   "$(changed_inputs)" for it.

       o   Implement "$(error ...)" and	"$(warning ...)" as in GNU make.

       o   New method ": build_check ignore_action" to ignore changes to the
	   action string.

       o   New statements "ifperl", "ifmakeperl", "iftrue", "ifntrue", "ifsys"
	   and "ifnsys".

       o   Conditionals	"ifxxx"	may now	be grouped with	"and" and "or".	 When
	   written on the same line after "else", they create a	branch of the
	   same	statement, rather than requiring nesting.

       o   Added support for dependencies on environment variables, using the
	   ":env" rule option.

       o   Various signal handling fixes.

       o   New command "makeppclean" that efficiently removes generated	files
	   without loading makefiles.

       o   Ported to MinGW.

       o   New build caches, to	cache files that are identical.	 This means
	   that	if you change a	file and revert, then you can have makepp drop
	   back	to the immediately preceding .o	file without rebuilding.  Or
	   you can share builds	of identical files between separate source
	   trees.  Newly added grouping	of build caches	for big	setups,
	   possibly spanning several machines.

   Version 1.40	(December 2004)
       Thanks to Anders	Johnson	and Daniel Pfeiffer for	major contributions of
       code to this release.

       o   Too many bug	fixes to list individually.  Probably the most salient
	   fixes are to	make it	work significantly more	reliably on Cygwin,
	   but there were also fixes to	variable expansion, scanning,
	   repositories, etc.

       o   Rewritten command parser and	file scanner architecture so that it
	   is more easily extensible.  Makepp now supports Verilog (a language
	   used	for chip design) in addition to	C++ and	Fortran.  It should be
	   relatively straightforward to support additional languages.
	   (Anders Johnson)

       o   New command "makeppclient" that lets	builds start faster.  (Daniel

       o   If you have Perl 5.6.0 or higher, HTML documentation	now comes with
	   the new working camel logo and syntax highlighting in the examples.
	   (Daniel Pfeiffer)

       o   Numerous corrections	and improvements to the	documentation.
	   (Mostly Anders Johnson)

       o   Support for GNU make's "define" statement to	define multi-line
	   variable values.

       o   $(PWD) and $(CURDIR)	now work as in GNU make.

       o   New "--keep-repository-links" option	to prevent makepp from
	   deleting all	the soft links it creates when making repositories.

       o   New "--assume-old", "--assume-new", and "--dont-build" options, and
	   support for the "-n"	option.

       o   Support for double colon rules has slightly improved, so that we
	   can handle makefiles	produced by MakeMaker without much trouble.

       o   Added syntax	for performing Perl code as a statement	and in rules
	   "perl { ...	}" or "makeperl	{ ...  }".  Added functions for
	   evaluating Perl statements "$(perl ... )" or	"$(makeperl ...	)".
	   Added statement "makesub { ... }".  (Daniel Pfeiffer)

       o   Short options can now be directly followed by argument as in	-j4.
	   Documented options --jobs, --keep-going, --makefile,	--what-if,
	   --assume-new, --new-file, --assume-old & --old-file are now really
	   accepted.  (Daniel Pfeiffer)

   Version 1.19	(July 2003)
       Special thanks to Matthew Lovell	and Chris van Engelen for lots of
       suggestions and tracking	down problems in the code.

       o   Documentation was reorganized so that man pages as well as HTML
	   pages can be	produced, and a	cookbook/FAQ was added (see

       o   A "configure" script	was added so installation is more like other
	   software products from the user point of view.

       o   The "$(origin )" function from GNU make is now supported.

       o   Target-specific variables are now supported as in GNU make, except
	   that	they do	not propagate their values to dependencies.

       o   New functions "$(find_upwards )" and	"$(relative_filename )"
	   (contributed	by Matthew Lovell) and "$(relative_to )".

       o   In compilation commands, "-I	dir" and "-L dir" are now supported
	   and work just like "-Idir" and "-Ldir".

       o   Recompilation of C files will now occur if a	multi-line comment was
	   inserted, or	if the line numbering changed in any way.  Previously
	   it ignored newlines in computing the	checksum, which	meant that a
	   change that affected	debugger info might not	force a	recompilation.

       o   A bug in "$(shell )"	which caused it	to return a null string
	   occasionally	(especially when the system was	heavily	loaded)	was

       o   Unreadable files or directories suppress importing from
	   repositories	but are	not matched by wildcards.

       o   A few other minor bugs were fixed.

   Version 1.18
       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.

   Version 1.10
       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:

       o   "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.

       o   A new signature method "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.

   Version 1.05
       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.

   Version 0.99
       In addition to numerous bug fixes, this version has several user-
       visible changes:

       o   Multiple targets for	a rule are now treated in a way	which is more
	   compatible with old makefiles.  Makepp has a	heuristic algorithm
	   for guessing	whether	the rule is supposed to	build all targets at
	   once	or whether the rule needs to be	invoked	multiple times.	 I do
	   not think this will break any existing makefiles, but it should
	   allow makepp	to work	with many more makefiles designed for Unix

       o   The "--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.

       o   Repositories	now work with libtool.

       o   Variable settings are now allowed with the "load_makefile"
	   statement and with recursive	make.

   Version 0.95
       This version has	several	user-visible changes:

       o   A tutorial on writing makefiles for makepp has been added.

       o   GNU make style conditionals (ifeq/ifneq/ifdef/ifndef) are now
	   supported, as is the	"$(if )" function.

       o   By default, the "%" 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.)

       o   By default, makefiles from any directory that contains a
	   dependency, or that is searched by a	wildcard, are loaded
	   automatically.  Usually this	means you don't	need any
	   "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.)

       o   A target may	now be declared	phony on the same line that defines
	   the target by using the new "$(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.

   Version 0.90
       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:

       o   Repositories	are now	supported.

       o   It is now possible to specify different methods for calculating and
	   comparing file signatures.  For example, you	can use	an MD5
	   checksum ignoring comments and whitespace, or you can require
	   merely that the target be newer than	the dependencies (the method
	   that	the traditional	make uses).

       o   Makefiles are only rebuilt if they are older	than their
	   dependencies; a different signature method is used in this special

       o   Parallel builds are now supported, though this is still an
	   experimental	feature.  See the "-j" option.

       o   It is now possible to write your own	functions.  See	the "sub"
	   statement and makepp_extending for details.

       o   Filenames with characters like colon	or space are now supported
	   with	a new quoting syntax.

       o   Synonymous, less cryptic names for automatic	variables have been
	   introduced to encourage more	readable makefiles.

       o   Makepp now remembers	the architecture of the	machine	you built on,
	   and rebuilds	if the architecture is different.

       o   Directories can now be targets or dependencies; a previous
	   restriction that all	directories had	to exist before	the start of
	   the build has been lifted.

       o   Makepp now writes a log file	called ".makepp_log" explaining	why it
	   rebuilt everything.	This is	extremely useful for debugging.

       o   The usual "-k" option for continuing	to build even when an error
	   occurs is now supported.

       o   The documentation has been reorganized and extended.

       There are also (unfortunately) a	few incompatibilities with previous

       o   The file format for storing information about the last build	has
	   changed.  Thus makepp will insist on	rebuilding everything the
	   first time you run the new version.

       o   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).

       o   Recursive make now ignores variable settings	on the command line.
	   This	is necessary to	load makefiles in a consistent way.

       o   "$(INFERRED_OBJS)" is no longer supported (since it was not a well-
	   designed interface anyway).	Use the	newer "$(infer_objects)"
	   function instead.

       o   $_ is no longer supported.  Use "$(foreach)"	instead.

       o   A few seldom	used GNU make options such as "-s", "-n", and "-q" are
	   no longer supported due to internal architecture changes.  "-n"
	   will	probably be supported again in future releases.

       o   A man page is no longer provided since the documentation is no
	   longer written in the Perl pod format.  Use the HTML	documentation

       o   The automatic clean target is no longer supported.  A better	way to
	   do it is with "$(only_targets)".

perl v5.32.1			  2012-02-07	       MAKEPP_RELEASE_NOTES(1)


Want to link to this manual page? Use this URL:

home | help