Jack Brennen
Jack Brennen

Reputation: 413

SCons -- target that "deletes" a file?

Is there a simple way in SCons to create a target which is considered up-to-date if the named file is verified not to exist? (And of course, to have a builder which deletes the file if it does exist...)

For instance:

b_file = env.Command("files", ["file1", "file2", "file3"], "build-files -o $TARGET $SOURCES")

env.Depends(b_file,env.FileMustNotExist("file4"))

The idea would be that before building "files", SCons would make sure not only that "file1", "file2", and "file3" are present, but that "file4" does not exist.

I know that for this particular case I could approximate what I want by adding "rm -f file4; " to the beginning of the command, but that's not exactly the same. In particular, if I add the "rm" command to the builder, and then create "file4" outside of SCons, re-running SCons won't delete "file4" unless one of the other sources has changed.

I'd want something such that creating "file4" and re-running SCons would result in simply deleting "file4" and indicating that "files" is now built.

Upvotes: 3

Views: 715

Answers (1)

dirkbaechle
dirkbaechle

Reputation: 4052

To my knowledge this is not foreseen in the design, and therefore not possible. Note how SCons is a file-oriented build system, so its main task is to create files...and not deleting them.

In newer versions there is the Pseudo target, which is intended for build actions that don't create an actual output file...but it's not able to delete files, if I remember correctly.

So, it looks as if the "rm -f file" strategy is still the best way to go. You might want to use Python's os.path.isfile and os.unlink though, to stay compatible over the different platforms.

Upvotes: 1

Related Questions