gittup / tup

Tup is a file-based build system.
http://gittup.org/tup/
GNU General Public License v2.0
1.16k stars 144 forks source link

Unclear tup error: run-script line 2 is not a :-rule - ' #501

Closed AndydeCleyre closed 3 months ago

AndydeCleyre commented 3 months ago

Hello, and thanks!

I'm having trouble in one case using run to generate rules, with tup v0.8-4-g748b7c7d.

This is a working, but repetitive Tupfile:

Tupfile ```sh : foreach vars/*.nt |> ^t^ nt2json %f >%o |> tmp/vars/%B.json : foreach vars/*.nt | tmp/vars/%B.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%B.json >%o |> schemes/kde/%B.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%B.json >%o |> schemes/telegram/%B.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%B.json >%o |> schemes/sublime/ayu-dark-%B.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%B.json >%o |> schemes/sublime/ayu-dark-%B.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%B.json >%o |> tmp/firefox/%B/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%B/manifest.json |> zip -j %o tmp/firefox/%B/manifest.json |> schemes/firefox/%B.xpi : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ PYTHONPATH=./templates wheezy.template templates/trit.json.wz tmp/vars/%B.json >%o |> tmp/vars/%BTrit.json ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%BTrit.json >%o |> schemes/kde/%BTrit.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%BTrit.json >%o |> schemes/telegram/%BTrit.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%BTrit.json >%o |> schemes/sublime/ayu-dark-%BTrit.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%BTrit.json >%o |> schemes/sublime/ayu-dark-%BTrit.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%BTrit.json >%o |> tmp/firefox/%BTrit/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%BTrit/manifest.json |> zip -j %o tmp/firefox/%BTrit/manifest.json |> schemes/firefox/%BTrit.xpi : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ PYTHONPATH=./templates wheezy.template templates/prot.json.wz tmp/vars/%B.json >%o |> tmp/vars/%BProt.json ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%BProt.json >%o |> schemes/kde/%BProt.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%BProt.json >%o |> schemes/telegram/%BProt.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%BProt.json >%o |> schemes/sublime/ayu-dark-%BProt.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%BProt.json >%o |> schemes/sublime/ayu-dark-%BProt.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%BProt.json >%o |> tmp/firefox/%BProt/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%BProt/manifest.json |> zip -j %o tmp/firefox/%BProt/manifest.json |> schemes/firefox/%BProt.xpi : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ PYTHONPATH=./templates wheezy.template templates/deuter.json.wz tmp/vars/%B.json >%o |> tmp/vars/%BDeuter.json ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%BDeuter.json >%o |> schemes/kde/%BDeuter.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%BDeuter.json >%o |> schemes/telegram/%BDeuter.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%BDeuter.json >%o |> schemes/sublime/ayu-dark-%BDeuter.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%BDeuter.json >%o |> schemes/sublime/ayu-dark-%BDeuter.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%BDeuter.json >%o |> tmp/firefox/%BDeuter/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%BDeuter/manifest.json |> zip -j %o tmp/firefox/%BDeuter/manifest.json |> schemes/firefox/%BDeuter.xpi ```

I want to use tup's run to generate most of these, using wheezy.template (from PyPI). So I replace the Tupfile content with:

run wheezy.template templates/tup.rules.wz

And create templates/tup.rules.wz:

wheezy template ```sh : foreach vars/*.nt |> ^t^ nt2json %f >%o |> tmp/vars/%B.json : foreach vars/*.nt | tmp/vars/%B.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%B.json >%o |> schemes/kde/%B.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%B.json >%o |> schemes/telegram/%B.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%B.json >%o |> schemes/sublime/ayu-dark-%B.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%B.json >%o |> schemes/sublime/ayu-dark-%B.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%B.json >%o |> tmp/firefox/%B/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%B/manifest.json |> zip -j %o tmp/firefox/%B/manifest.json |> schemes/firefox/%B.xpi @for variant, suffix in (('trit', 'Trit'), ('prot', 'Prot'), ('deuter', 'Deuter')): : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ PYTHONPATH=./templates wheezy.template templates/@{variant}.json.wz tmp/vars/%B.json >%o |> tmp/vars/%B@{suffix}.json ^__pycache__ : foreach vars/*.nt | tmp/vars/%B@{suffix}.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%B@{suffix}.json >%o |> schemes/kde/%B@{suffix}.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%B@{suffix}.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%B@{suffix}.json >%o |> schemes/telegram/%B@{suffix}.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B@{suffix}.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%B@{suffix}.json >%o |> schemes/sublime/ayu-dark-%B@{suffix}.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B@{suffix}.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%B@{suffix}.json >%o |> schemes/sublime/ayu-dark-%B@{suffix}.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B@{suffix}.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%B@{suffix}.json >%o |> tmp/firefox/%B@{suffix}/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%B@{suffix}/manifest.json |> zip -j %o tmp/firefox/%B@{suffix}/manifest.json |> schemes/firefox/%B@{suffix}.xpi @end ```

If I manually run wheezy.template templates/tup.rules.wz, the stdout is identical to the original Tupfile.

But when I run tup --debug-run, I get:

tup --debug-run output ```sh [ tup ] [0.000s] Scanning filesystem... [ tup ] [0.002s] Reading in new environment variables... [ tup ] [0.002s] Parsing Tupfiles... * 100% 0) [0.031s] . --- run script output from 'wheezy.template templates/tup.rules.wz' : foreach vars/*.nt |> ^t^ nt2json %f >%o |> tmp/vars/%B.json tup error: run-script line 2 is not a :-rule - ' : foreach vars/*.nt | tmp/vars/%B.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%B.json >%o |> schemes/kde/%B.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%B.json >%o |> schemes/telegram/%B.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%B.json >%o |> schemes/sublime/ayu-dark-%B.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%B.json >%o |> schemes/sublime/ayu-dark-%B.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%B.json >%o |> tmp/firefox/%B/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%B/manifest.json |> zip -j %o tmp/firefox/%B/manifest.json |> schemes/firefox/%B.xpi : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ PYTHONPATH=./templates wheezy.template templates/trit.json.wz tmp/vars/%B.json >%o |> tmp/vars/%BTrit.json ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%BTrit.json >%o |> schemes/kde/%BTrit.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%BTrit.json >%o |> schemes/telegram/%BTrit.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%BTrit.json >%o |> schemes/sublime/ayu-dark-%BTrit.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%BTrit.json >%o |> schemes/sublime/ayu-dark-%BTrit.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BTrit.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%BTrit.json >%o |> tmp/firefox/%BTrit/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%BTrit/manifest.json |> zip -j %o tmp/firefox/%BTrit/manifest.json |> schemes/firefox/%BTrit.xpi : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ PYTHONPATH=./templates wheezy.template templates/prot.json.wz tmp/vars/%B.json >%o |> tmp/vars/%BProt.json ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%BProt.json >%o |> schemes/kde/%BProt.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%BProt.json >%o |> schemes/telegram/%BProt.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%BProt.json >%o |> schemes/sublime/ayu-dark-%BProt.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%BProt.json >%o |> schemes/sublime/ayu-dark-%BProt.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BProt.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%BProt.json >%o |> tmp/firefox/%BProt/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%BProt/manifest.json |> zip -j %o tmp/firefox/%BProt/manifest.json |> schemes/firefox/%BProt.xpi : foreach vars/*.nt | tmp/vars/%B.json |> ^t^ PYTHONPATH=./templates wheezy.template templates/deuter.json.wz tmp/vars/%B.json >%o |> tmp/vars/%BDeuter.json ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> PYTHONPATH=./templates wheezy.template templates/kde.colors.wz tmp/vars/%BDeuter.json >%o |> schemes/kde/%BDeuter.colors ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> wheezy.template templates/colors.tdesktop-theme.wz tmp/vars/%BDeuter.json >%o |> schemes/telegram/%BDeuter.tdesktop-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> wheezy.template templates/ayu-dark.sublime-theme.wz tmp/vars/%BDeuter.json >%o |> schemes/sublime/ayu-dark-%BDeuter.sublime-theme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> wheezy.template templates/ayu-dark.sublime-color-scheme.wz tmp/vars/%BDeuter.json >%o |> schemes/sublime/ayu-dark-%BDeuter.sublime-color-scheme ^__pycache__ : foreach vars/*.nt | tmp/vars/%BDeuter.json |> ^t^ wheezy.template templates/firefox.manifest.json.wz tmp/vars/%BDeuter.json >%o |> tmp/firefox/%BDeuter/manifest.json ^__pycache__ : foreach vars/*.nt | tmp/firefox/%BDeuter/manifest.json |> zip -j %o tmp/firefox/%BDeuter/manifest.json |> schemes/firefox/%BDeuter.xpi ' tup error: Error parsing Tupfile line 1 Line was: 'run wheezy.template templates/tup.rules.wz' *** tup: 1 job failed. ```
earthlyreason commented 3 months ago

IIRC run scripts expect every line to be an : rule and does not accept blank lines or comments, unlike the syntax recognized in Tupfiles. I remember having to take measures to get around a similar error, anyway, by skipping blank lines.

AndydeCleyre commented 3 months ago

@earthlyreason Thanks so much! That's it, all good now.

I would prefer to be able to include blank lines, and to a lesser extent comments, but I can put comments in the template file so that's not too bad.

gittup commented 3 months ago

I pushed 4247a523587df54bd4a65ec42c4247a8488c050e to skip blank lines (completely blank, as in just a newline), as well as lines starting with #

Have you tried the built-in lua support for rules at all? I'm curious how that compares to this template style in your experience.

AndydeCleyre commented 3 months ago

Thanks!

Sorry, I haven't tried using lua for rules, as I don't enjoy writing lua and am quite bad at it. I use wheezy.template a lot for various small projects and am happy with it.