Zatím jsem to obešel tím, že při startu make prostě projdu všechny RST, vytahám z nich všechny tagy a autory a pokud nemají příslušné soubory, tak je aspoň udělám, i když nenaplňuju.
Takže make pak už má všechna jména souborů a může s nima machrovat (i když jsou třeba zatím prázdné) - a díky závislostem se ty soubory i naplní.
A při dalším spuštění make už ty soubory mají správné hodnoty a pohoda.
Akorát to počáteční projití mi teď sežere něco jako 0.1sec a to na té pokusné sitě mám jen nějakých 32 souborů s mizernými 1.200 řádky textu ... no zatím to jde, můžu aspoň dopsat další chybějící věci a k tomuhle se vrátit později, až mě to začne tlačit víc ...
Je to v podstatě oneliner, teda dva stejné, jeden pro tagy a druhý pro autory. A i když se to nezdá, tak ten sort -u uprostřed to urychluje asi 5x
mkdir -p build/.tags
mkdir -p input/.tags
mkdir -p build/.authors
mkdir -p input/.authors
find input -type f -name "*.rst" -exec grep -h "^:tags:" {} \; | sed "s/^:tags:\s*//; s/\s*,\s*/,/g" | tr "," "\n" | sort -u | sed "s@^.*@( [ ! -e 'build/.tags/\0.tag' ] \&\& touch 'build/.tags/\0.tag' ; [ ! -e 'input/.tags/\0.rst' ] \&\& sed < .theme/defaults/tag.rst >'input/.tags/\0.rst' 's/%TAG_NAME%/\0/g')@" |sh
find input -type f -name "*.rst" -exec grep -h "^:authors:" {} \; | sed "s/^:authors:\s*//; s/\s*,\s*/,/g" | tr "," "\n" | sort -u | sed "s@^.*@( [ ! -e 'build/.authors/\0.author' ] \&\& touch 'build/.authors/\0.author' ; [ ! -e 'input/.authors/\0.rst' ] \&\& sed < .theme/defaults/author.rst >'input/.authors/\0.rst' 's/%TAG_NAME%/\0/g')@" |sh