[Scons-users] help with deleting or cleaning files
Bill Deegan
bill at baddogconsulting.com
Sun Sep 27 18:55:28 EDT 2020
Clean() doesn't return a Node.
>From Manpage:
This specifies a list of files or directories which should be removed
whenever the targets are specified with the -c command line option. The
specified targets may be a list or an individual target. Multiple calls to
*Clean* are legal, and create new targets or add files and directories to
the clean list for the specified targets.
So debugclean and debuginstall1 will both be None.
Clean just marks the file to be removed when you run `scons -c`
This should do what you're looking for (minus dummy file creation...
See gist:
https://gist.github.com/bdbaddog/949eaa3c566cdb5a4d8c0fcb5e96b5e5
On Sun, Sep 27, 2020 at 12:44 PM Mats Wichmann <mats at wichmann.us> wrote:
> On 9/27/20 12:15 PM, Damien wrote:
> > All,
> >
> > As part of our installers, we put a set of dlls (or so's) into a
> > directory, to go into one of our products. Because of the way this
> > product is shipped, the dlls go into a directory that's not debug or
> > release, it just has the binaries. When we're doing debug builds and
> > testing, the debug dlls go into that directory and when we're doing
> > release testing, the release versions go in there. I'd like to automate
> > removing the debug dlls if we do a release build and vice versa, right
> > now we do that by hand, which is silly.
> >
> > I thought we could do this with env.Clean(...) but that appears not to
> > be the case. Here's a cut down example in an SConscript:
> >
> > dbgfilelist [
> > 'concrt140d.dll',
> > 'msvcp140d.dll',
> > 'vccorlib140d.dll',
> > 'vcomp140.dll',
> > 'vcruntime140d.dll'
> > ]
> >
> > relfilelist = [
> > 'concrt140.dll',
> > 'msvcp140.dll',
> > 'vccorlib140.dll',
> > 'vcomp140.dll',
> > 'vcruntime140.dll'
> > ]
> >
> > if thisenv['BUILDTYPE'] == 'DEBUG':
> > thisenv['INSTALLDIR'] = thisenv['BINDIR'] +
> > '/../../interfaces/binaries/x64'
> > releaseclean = thisenv.Clean(thisenv['INSTALLDIR'], [x for x in
> > relfilelist])
> > releaseinstall1 = thisenv.Install(thisenv['INSTALLDIR'],
> > [os.path.join(thisenv['BINDIR'], x) for x in dbgfilelist])
> > Default(releaseclean + releaseinstall1)
> > else:
> > thisenv['INSTALLDIR'] = thisenv['BINDIR'] +
> > '/../../interfaces/binaries/x64'
> > debugclean = thisenv.Clean(thisenv['INSTALLDIR'], [x for x in
> > dbgfilelist])
> > debuginstall1 = thisenv.Install(thisenv['INSTALLDIR'],
> > [os.path.join(thisenv['BINDIR'], x) for x in relfilelist])
> > Default(debugclean + debuginstall1)
> >
> > When I try this, SCons says: TypeError: unsupported operand type(s) for
> > +: 'NoneType' and 'list': for the Default setup. I always thought you
> > could just add Actions but obviously I'm doing something wrong.
>
> I'd take the message seriously: something is None when you're not
> expecting it. Tracing that down (some print statements, maybe) should
> help you figure out if you're accessing things that aren't defined for
> the buildtype you're doing and that's why they're None, or whether some
> step got missed somewhere.
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20200927/f48314a8/attachment.html>
More information about the Scons-users
mailing list