Hi,

The topic of header dependency tracking is already addressed since the inception of redo by DJB.

The Appenwarr documentation offers a fairly simple answer in the form of an "implicit" .do file for object files.

---

cat > default.o.do <<EOF

redo-ifchange $2.c

gcc -MD -MF $2.d -c -o $3 $2.c

read DEPS <$2.d

redo-ifchange ${DEPS#*:}

---

1. check the dependency on the source file $2.c.

2. build the  object file and generate a make-style one-line include dependency on all header files with the compiler itself.

3. read the rule into the variable DEPS.

4. check the dependency on all header files.

The second line and the fourth line are one of the special things about redo: *after* building the target you can check *again* if it needs to be rebuilt.

Best Regards,

  Georg

On 9/7/21 19:50, Thomas Oltmann wrote:
Hi everybody!

redo is a pretty well-designed family of build-systems
that enjoys a certain popularity among people on this mailing list.

Its recursive nature makes it well-suited to projects comprising a
large amount of files.
However, unlike comparable build-systems like make or tup, it lacks provisions
to automatically track C #include dependencies, which is sorely needed
for projects
with many source files.

To overcome this, I wrote a simple companion tool that integrates
fairly seamlessly with redo.
This tool is able to parse the dependency-only Makefiles that modern C
compilers can
produce during compilation, and feed these dependencies into redo (via
'redo-ifchange').
It should work with pretty much any redo implementation
(other than maybe apenwarr's *minimal do*, because that one doesn't implement
'redo-ifchange' as a separate executable).

You can find it here: https://github.com/tomolt/redo-depfile
Any feedback is appreciated.

Cheers,
           Thomas Oltmann

P.S.: My sincere apologies if this post if considered off-topic, as
redo is not under the suckless banner.
I considered posting on the redo mailing-list instead, but that one
seems very obscure and inactive,
plus I recognize some of the posters there as being regulars on the
suckless mailing lists as well.


Reply via email to