tup in general isn't really designed to separate source from build. This
isn't really necessary with tup since you never have to do a clean build.
If you're okay with putting build files in source, then you could look into
Tupdefault. It allows you to specify a default tupfile for every directory
without an existing tupfule. Thus, you could just have:

cat Tupdefault
: foreach *.input |> dothing %f %o |> %B.output

If you really need to put the outputs in dest, then maybe you could do
something with Tupdefault.lua, but I'm not really sure how to get the
relative path to RUNNING rather than the relative path from running.

On Wed, Mar 14, 2018, 20:27 'Ben Golightly' via tup-users <
[email protected]> wrote:

> One problem with this approach is if I add a new file to a subfolder, tup
> doesn't see it and know to automatically re-run the shell script :-( Any
> ideas how I could fix that?
>
>
> On Wednesday, March 14, 2018 at 10:20:06 PM UTC, Ben Golightly wrote:
>>
>>
>> Hi, apologies if this has been asked before. I searched but didn't find
>> anything.
>>
>> I have a rule that I want to apply to everything in a directory, and
>> again in all subdirectories (possibly again, recursively, in all
>> subdirectories of that), with the output destination mirroring this.
>>
>> For example, my first attempt might look like this:
>>
>> : foreach src/*.input         |> dothing %f %o |> dest/%B.output
>> : foreach src/foo/*.input     |> dothing %f %o |> dest/foo/%B.output
>> : foreach src/foo/bar/*.input |> dothing %f %o |> dest/foo/bar/%B.output
>> : foreach src/bar/*.input     |> dothing %f %o |> dest/bar/%B.output
>>
>> The commands "run ./script args" and "preload directory" described in the
>> manual let me do this with a separate shell script.
>>
>> Here's what I came up with:
>>
>> *Tupfile:*
>> preload src/pages
>> run ./mkpage.inc.sh
>>
>> *mkpage.inc.sh <http://mkpage.inc.sh>*
>> #! /bin/sh -e
>>
>> cmd ()
>> {
>>     echo ": foreach src/$1*.input |> dothing %f %o |> dest/$1%B.output"
>> }
>>
>> cd "src"
>> dirs="."/*
>>
>> cmd
>>
>> for entry in $dirs
>> do
>>     if [ -d "$entry" ];then
>>         cmd $entry
>>     fi
>> done
>> cd "../"
>>
>>
>> This works for me (with a bit of work I could make it recursive).
>>
>> I hope someone else might find it useful.
>>
>> But I was also wondering if there was a better way to do this natively
>> with tup?
>>
>> Thanks
>>
>> Ben
>>
>>
>> --
> --
> tup-users mailing list
> email: [email protected]
> unsubscribe: [email protected]
> options: http://groups.google.com/group/tup-users?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "tup-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
tup-users mailing list
email: [email protected]
unsubscribe: [email protected]
options: http://groups.google.com/group/tup-users?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"tup-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to