On Wed, Jan 4, 2012 at 10:24 AM, Warlich, Christof <christof.warl...@siemens.com> wrote: > Hi, > > using rsync, it is rather simple to synchronize two directories: > > $ rsync -r -t --del sourcedir/ destdir > > In this example, if a file is deleted fron sourcedir, it also gets deleted > from destdir. > Any other files are updated as needed. > > I want to accomplish almost the same with Make, but instead of just copying, > I need > to process any source file (each in the same way) to become the corresponding > destination file (which is why rsync cannot be used). > > The difficulty arises when a file is deleted from sourcedir: An ordinary > Makefile > would just leave the corresponding (now obsolete) file being there from a > previous > run of Make in destdir. > > As this problem does not seem too special to me, I wonder if anyone knows a > good generic solution? > > Thanks for any help, > > Chris
Hi Chris, You could try tup here (http://gittup.org/tup/) - it is a different build system, but it automatically removes stale files so you can almost get it to work like rsync. An example to run 'translate.sh' on each file in an input/ directory and store it in an output/ directory would use this Tupfile: # output/Tupfile : foreach ../input/* |> ./translate.sh %f > %o; touch -r %f %o |> %b.translated Then input/foo.txt becomes output/foo.txt.translated after being processed by translate.sh. If you remove input/foo.txt, then the next update will remove the corresponding output/foo.txt.translated file. The 'touch' command is just used to mimic the rsync -t flag. Where it falters is with the recursive flag. In tup, it would need a Tupfile in each directory, and you would have to manually duplicate the directory structure under the output directory. I don't know how annoying that would be in practice. -Mike _______________________________________________ Help-make mailing list Help-make@gnu.org https://lists.gnu.org/mailman/listinfo/help-make