xparq / bbmake Goto Github PK
View Code? Open in Web Editor NEWThis project forked from rmyorston/pdpmake
Tinkering with rmyorston's pdpmake
Home Page: https://frippery.org/make
License: Other
This project forked from rmyorston/pdpmake
Tinkering with rmyorston's pdpmake
Home Page: https://frippery.org/make
License: Other
ENABLE_FEATURE...
macro, ::
should turn on batch-processing prerequisites (per target rule, I guess?) by default, a'la NMAKEVia very light POSIX shims (added to the repo) -- not by depending on anything like a full POSIX emu. layer!
No MAKE tools seem to even want to have it... But Why? -> x1ab/build#1
If there's, indeed, no good reason, can pdpmake just have it, and celebrate?
bbmake certainly will (try).
Start with an approximation of define
; instead of \
at line-ends escaping the newline as space, a \n
there keep the newlines instead! No need for define
for simple cases (of a few lines only).
It's a shame that only the (otherwise infamously crippled*) NMAKE has this fantastically useful feature. GNU make has its multiline macros created with define
, which is also very nice, but it still won't spare you the tedium of actually creating & (optionally) deleting intermediate work files.
* Well, it has a whole bunch of half-features, which, had their promise been followed through, could make NMAKE a very serious tool even today: it has its clever and powerful batch mode, its fantastic inline files, or small handy things like the !message
directive etc., but, e.g.:
Making inference rules work even if the target and prerequisite are not in the same dir (i.e. they differ also in their path, not just their suffixes) would enable (or vastly simplify) some important practical use cases (i.e. building outside the source tree, without tedious workarounds).
It adds support for path prefixes to implicit prerequisite names (e.g. src/
), via an extended inference rule syntax:
test: x.o
src/%.c.o:
@echo "YAY, path-aware inf. rules!!! $< -> $@"
While this is a vague & incomplete approximation of NMAKE's path-extended inference rules, it could be a "high-gain" first stage toward proper pattern rules a'la GNU make (#2)...
Accordingly, it already uses the %
pattern-matching placeholder in the rule definitions, for a (kinda-sorta) forward-compatible approach. However, limitations currently:
More rigorous look at these functions (plus their call sites)... Note: it's been "fortunately OK" so far (only ...:; cmd
one-liners weren't explicitly rejected in POSIX mode (albeit there things would likely err out earlier anyway!)), but it's a) not properly verified yet, b) not future-proof. So, do something about it...
is_suffix
: checked earlier: "perfectly compatible", if explicitly added to .SUFFIXES
...suffix
: really just about a .
, so it's not compatible, it all depends on what its callers are up to; and the only relevant call(s) turn(s) out to be in rules.c
, and it's been considered from the starttarget_type
: added a minor, trivial adjustment to not refuse the extended inf. rule format; but that new result is not even actually (effectively) used anywhere...ispname
/isfname
, check_name
, is_valid_target
: is_valid_target just calls check_name, which is the only caller of ispname/isfname, so that's the relevant one. And it only checks the names in POSIX mode, so, again: we're fine.Tidy up
Drop the requirement of listing the suffix patterns at .SUFFIXES
-> 24d3001
Create an uncluttered branch (pdp-cmp) for the "net" changes only, for easier review -> diff!...
Discuss with Ron. (In case it may get adopted, also move the manual tests into the auto-test suite, and/or remove the DP
(debug printf) macro stuff.)
../
)-Wall
-clean with CLANG & GCC (with each of -DDEBUG/NDEBUG/nothing; not relevant for a merge, just a note to self, for my WIP version)target%pattern : src%pattern
) accepted & recognized as inf. ruleA declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.