This argument and others similar to it are often repeated but I've yet to see any of those people describe what makes it awkward.
>and it is restricted to filesystem files and shell commands
It'd be pretty easy to make a makefile that depends on say a specific row on a SQL database using dummy files. Also changing the language for recipes is trivial and painfully obvious. If you can't do something as simple as `SHELL := /your/own/interpreter' then why do you think you are qualified to make a build system?