makers
A (mostly) POSIX-compatible make implemented in Rust. Not explicitly aiming for full support for every GNU make feature, but adding whichever features are strictly necessary to be compatible with existing GNUish makefiles.
You can get slightly more info by running with RUST_LOG=makers=warn
, much more info with RUST_LOG=makers=debug
, and an avalanche of info (probably only useful in small doses for debugging your makefile or makers itself) with RUST_LOG=makers=trace
.
For more specific configuration, see the documentation for the env_logger
Rust crate.
conformance
- internationalization (
LANG
/LC_ALL
/LC_CTYPE
/LC_MESSAGES
) not implemented - XSI conformance (SCCS integration) not implemented
- signal handling not implemented
- library handling not implemented
- some POSIX-specified features are pending (search
TODO
for a list) - builtin macro
MAKE
is defined as the path tomakers
- specifying the
.POSIX
special target doesn't opt out of extensions (but you can install with--no-default-features
to get only POSIX behavior)
status
i haven't written unit tests for most of makers
, but there are integration tests that try to build various make-based projects with makers.
specific projects tested:
list of features that are needed for version 1.0:
- actual documentation
- tested with Linux
- unit tests for most of the things
- no TODOs left
changelog
next - TBD
- propagate command line macros through
MAKEFLAGS
for recursive calls
v0.8.0 - 2024-11-15
- license is worse
- implement
-C
/--directory
flag - pass flags into recursive calls via
MAKEFLAGS
environment variable - implement GNU-style
export EGG=bug
- rebuild out-of-date makefiles (but not with as much environment preservation as GNU make provides)
- implement GNU-style rule-specific macros
target: EGG=bug
- implement GNU-style
.SECONDEXPANSION
(but not properly deferred like in GNU make)
v0.7.0 - 2021-04-13
- implement GNU-style functions
abspath
,firstword
- implement GNU-style scoped inference rules ("static patterns")
v0.6.1 - 2021-04-06
- make
export
/unexport
actually persist so they're available while executing
v0.6.0 - 2021-04-06
- implement GNU-style functions
findstring
,realpath
,dir
,lastword
,words
,subst
,error
,word
,patsubst
,addsuffix
- provide GNU-style built-in variables
MAKECMDGOALS
,CURDIR
,MAKEFILE_LIST
- fix broken handling of nested conditionals
- try to build a missing included makefile before hard-erroring
- implement GNU-style
export
/unexport
directives
v0.5.0 - 2021-04-04
- add verbose logging
- partially fix
$<
(old: all dependencies, new: first dependency, spec: first dependency added by inference rule) - set the
$(MAKE)
built-in macro to the full path tomakers
if it can be found - change
%
-matching to reject partial pattern matches but allow all characters in%
- implement GNU-style functions
and
,or
,strip
v0.4.0 - 2021-04-03
- fix newline handling so escaped newlines & conditional lines work the way they're supposed to
- implement GNU-style
%
-matching inference rules - dependencies of
.PHONY
special target are now always assumed out-of-date until rebuilt, regardless of filesystem status - give user-defined inference rules priority over built-in ones
v0.3.0 - 2021-04-03
- allow installing with
--no-default-features
for pure-POSIX compatibility - implement GNU-style functions
if
,origin
,shell
(doesn't set.SHELLSTATUS
),eval
- implement GNU-style
define
blocks - improve error reporting
v0.2.0 - 2021-04-01
- partially implement GNU-style conditionals (only parentheses around arguments are supported)
- implement some GNU-style functions:
filter
,filter-out
,sort
,notdir
,basename
,addprefix
,wildcard
,foreach
,call
- improve error reporting for parse errors
v0.1.0 - 2021-03-25
- initial release
contributors
- zseri (code)
- @Lucretiel (code)
- you, if you'd like! email melody@boringcactus.com if you've got something (not just code!) to contribute
license
Released under Big Bill Hell’s License.
Exceptions may be available on request.
minuteæ
Canonically pronounced /ˈmeɪ.kɹɪz/ (as though saying "make risotto" but giving up halfway through).