pdpmake 2.0.3 was released on 2025-01-21. It is the current release.
It fixes a regression in the handling of single-suffix inference rules which was introduced in 2.0.2. Basically they didn't work at all in the default build. Sorry for the inconvenience.
pdpmake 2.0.2 was released on 2025-01-19.
The following are non-POSIX extensions (disabled in POSIX mode):
pdpmake now looks for a file named PDPmakefile
in the current directory. If that isn't found it then checks for
makefile and Makefile, as before.
make place no restriction on the number of periods
in suffixes used to form inference rules: they can contain no periods or
any number of them. Allow this as an extension.
make in allowing a double colon rule
with a phony target but no commands to run successfully. Such a construct
is present in makefiles used to build perl.
In the following cases compliance with the standard has been made more strict.
.DEFAULT rules. Enforce the latter behaviour in POSIX
mode but allow it as an extension.
.DEFAULT rules shouldn't have
prerequisites. Enforce this but allow superfluous commands or prerequisites
as an extension.
rule: ;. This has been fixed.
pdpmake 2.0.1 was released on 2024-09-18.
The handling of leading whitespace in makefiles has been adjusted to better match the standard and (selected) other implementations:
bmake)
include lines must have no leading whitespace. Allow leading tabs
and spaces as a non-POSIX extension.
make allows a tab as the first
character of a macro definition, but POSIX 2024 seems to permit it too.
Allow this in POSIX 2024 mode and as an extension.
The following are non-POSIX extensions (disabled in POSIX mode):
CC macro defaults to cc.
The standard requires c17 but my systems, at least, don't
have such an alias.
pdpmake is run are exported to
the environment variable PDPMAKE_PRAGMAS as a space-separated
list of pragma names. This environment variable is read when
pdpmake starts and any pragmas it contains are applied.
Recursive invocations of pdpmake thus inherit the settings
of their parent.
make doesn't allow inference rules or
the .DEFAULT target to be used for phony targets.
bmake disallows the former but not the latter.
The standard doesn't seem to require either prohibition.
Allow the GNU make behaviour as an extension.
In the following cases compliance with the standard has been made more strict.
CC macro has
been altered from c99 to c17.
pdpmake 2.0.0 was released on 2024-06-14.
POSIX.1-2024 (IEEE Std 1003.1-2024) was published on 14th June 2024.
It adds many useful new features to the
make utility.
pdpmake has been tracking development of the standard,
so these features were already available under the
ENABLE_FEATURE_MAKE_POSIX_202X configuration option.
Now that the standard has been published all references to 202X have
been changed to 2024. Mention of "202X" or the "future/draft standard"
in earlier release notes can be taken to mean the 2024 standard.
ENABLE_FEATURE_MAKE_POSIX_2024 and that to
specify it as the POSIX level to be enforced is STD_POSIX_2024.
posix_2024 has been added.
posix_202x remains for backward compatibility and is an
alias for posix_2024.
pdpmake 1.4.3 was released on 2024-06-10.
The following are non-POSIX extensions (disabled in POSIX mode):
-h option has been added. It provides
a standard way to request usage information. As before, the presence
of any unrecognised option will display the same message.
C:/path. Such support can be enabled
in POSIX mode by specifying the windows and
target_name pragmas.
:= form of macro assignment can be used
on the command line. Previously := was only allowed in
makefiles.
The following extension from a future POSIX standard has been added:
:::= form of macro assignment can be used
on the command line. Previously only = and ::=
assignments were permitted.
In the following cases compliance with the standard has been made more strict.
-q option causes build commands with
the '+' prefix to be executed.
-t option doesn't touch targets for
which a build command with the '+' prefix has been executed.
posix_2017 has been added. It
requests that the 2017 standard is enforced when POSIX mode is selected.
It is a counterpart to the existing posix_202x pragma.
.PRAGMA special target with no prerequisites
no longer resets pragmas. The posix_2017 and
posix_202x can only be used to change the default enforcement
level.
DEFAULT_POSIX_LEVEL
has been added to provide a more direct way to set the POSIX level to
be enforced by default at runtime. Set it to 0 for POSIX
2017 or 1 for POSIX 202X.
pdpmake 1.4.2 was released on 2024-05-23.
The following are non-POSIX extensions (disabled in POSIX mode):
make nor bmake respect this requirement,
so pdpmake doesn't either.
$< and $* internal
macros are given values in target rules.
ifeq and ifneq conditional
directives have been added. They perform string comparisons.
The following extension from a future POSIX standard has been added:
CURDIR is set to the current
directory when the pdpmake process starts.
In the following cases compliance with the standard has been made more strict.
lib(member.o) was rejected in POSIX
mode because it was being treated as a target name, where brackets aren't
allowed. In fact, the standard refers to this construct as an 'expression';
only lib and member.o should be treated as names.
lib(member.o) is thus allowed in POSIX mode.
.DEFAULT rule wasn't
used to build a prerequisite.
$< and $*
internal macros are given empty values in target rules. Previously
they could have contained stale values.
pdpmake 1.4.1 was released on 2023-02-01.
In the following cases compliance with the standard has been made more strict.
$(string1 [: subst1 =[ subst2 ]])
Since subst1 isn't bracketed a value must be supplied.
Thus a macro substitution of the form $(VAR:=.c) is
invalid.
!=)
POSIX requires that leading whitespace is removed from the shell output.
-x flag or in makefiles with the
.PRAGMA special target.
Available pragmas are:
macro_nametarget_namecommand_commentempty_suffix$(VAR:=.c).posix_202xmacro_name and
target_name pragmas aren't required as the future
standard will allow the additional characters.
pdpmake 1.4.0 was released on 2022-11-08.
The following are non-POSIX extensions:
$? is expanded.
include line with no files specified is
silently ignored. At least one blank must follow the include
for the line to be valid.
The following extensions from a future POSIX standard have been added:
$^ and $+ internal macros
evaluate to all prerequisites of the current target. The former
removes any duplicated prerequisites while the latter doesn't.
.NOTPARALLEL and .WAIT
special targets are permitted. They control aspects of running make
jobs in parallel. Since this isn't implemented in pdpmake
these targets have no effect.
include line is permitted to specify more
than one file.
!=)
and nested macro expansion have been reclassified as future POSIX
extensions. Previously they were considered non-POSIX.
pdpmake 1.3.0 was released on 2022-07-30.
The following extensions to POSIX have been added:
-C directory command line option changes
the current working directory. It can be specified more than once. The
changes are applied in order before any makefiles are read.
--posix command line option and
PDPMAKE_POSIXLY_CORRECT environment variable enforce POSIX
mode, much as the .POSIX special target already did.
The --posix option must be the first given on the command
line.
The PDPMAKE_POSIXLY_CORRECT environment variable only needs
to be set to take effect: its value is irrelevant. It is set when the
--posix command line option or the .POSIX
special target is used. This means that recursive invocations of
pdpmake will also enforce POSIX mode.
$? and $^ internal macros.
The following extensions from a future POSIX standard have been added:
SRC = src/util.c src/main.c OBJ = $(SRC:src/%.c=obj/%.o)
MAKE macro have been
clarified. If no MAKE environment variable is provided it
is initialised from argv[0], with a relative
path converted to absolute.
$^ internal macro evaluates to all prerequisites
of the current target. Contrast this with $? which only includes
out-of-date prerequisites.
.PHONY special target
are always treated as being out-of-date.
::= macro assignment operator is provided
as an alias for the non-standard :=.
:::= macro assignment operator expands the
right-hand side of the assignment immediately (like the ::=
operator) but appending to the value with += doesn't result
in immediate expansion.
include line can be created or
updated if they're out-of-date. This is implemented using the "immediate
remaking" method from SunPro make rather than the "delayed
remaking" used by GNU make.
-j maxjobs command line option is
accepted but doesn't cause jobs to be run in parallel, as is permitted
by the proposed standard.
ENABLE_FEATURE_MAKE_EXTENSIONS
and ENABLE_FEATURE_MAKE_POSIX_202X build flags.
getopt(3)
has been added for a number of platforms.
include line can only have exactly one file name.
pdpmake and GNU make
return exactly the same results.
pdpmake 1.2.0 was released on 2022-04-22.
The following extensions to POSIX have been added:
!= operator.
For example:
HELLO != echo hellosets the macro
HELLO to hello.
The right hand side of the assignment is fully expanded and passed to the shell for execution. Newlines in command output are replaced with spaces.
*,
? and [] wildcards can be used in the targets
and prerequisites of target rules. Wildcards can be escaped by preceding
them with a backslash.
These wildcards have been supported since at least UNIX Version 7.
GNU make also supports the use of ~ whereas
bmake permits the use of {}. Neither is
allowed here.
+= has been made
more compatible with GNU make. If a macro was first set
using := appending to it also causes the right hand side of
the assignment to be expanded immediately. bmake doesn't do
this.
time_t which only allows for a resolution of 1 second.
Timestamps are now read and set using struct timespec
which has nanosecond resolution. Of course, systems might not be
that accurate.
pdpmake 1.1.0 was released on 2022-03-06.
The following extensions to POSIX have been added:
A = a B = b AB = $($(A)_$(B))will set the macro
AB to the value of the macro a_b.
.SUFFIXES: .p .q .r
.p.q:
cp $< $@
.q.r:
cp $< $@
If the file thing.p exists make thing.r will
perform these operations:
cp thing.p thing.q cp thing.q thing.r
sleep) runs approximately
ten times faster. This is half the speed of GNU make but only 20% slower
than bmake. Note, however, that performance is not a primary aim of
pdpmake.