pdpmake 1.4.1 was released on 2023-02-01. It is the current release.
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_name
target_name
command_comment
empty_suffix
$(VAR:=.c)
.posix_202x
macro_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
.