1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# makers
A (mostly) [POSIX-compatible](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html) make implemented in Rust.
Not explicitly aiming for full support for [every GNU make feature](https://www.gnu.org/software/make/manual/html_node/index.html), 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](https://docs.rs/env_logger/0.8.3/env_logger/).
## 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 to `makers`
- 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](https://gitlab.com/boringcactus/makers/-/pipelines) that try to build various make-based projects with makers.
specific projects tested:
- [tcl](https://tcl.tk/)
- [uutils coreutils](https://github.com/uutils/coreutils)
- [CPython](https://github.com/python/cpython)
- [SPDX license list](https://github.com/spdx/license-list-XML)
list of features that are needed for version 1.0:
- tested with Linux
- unit tests for most of the things
- no TODOs left
## changelog
### 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 to `makers` 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](https://ytrizja.de/) (code)
- [@Lucretiel](https://github.com/Lucretiel) (code)
- you, if you'd like!
email melody@boringcactus.com if you've got something ([not just code!](https://allcontributors.org/docs/en/emoji-key)) to contribute
## license
Released under the [Indie Code Catalog Standard Deal](https://indiecc.com/deal/3.0.0), version 3.0.0 or later.
Commercial licenses are available for purchase [through Indie Code Catalog](https://indiecc.com/~boringcactus/makers).
## minuteæ
Canonically pronounced /ˈmeɪ.kɹɪz/ (as though saying "make risotto" but giving up halfway through).
|