[Scons-users] Builder

Neven Klacar nklacar at gmail.com
Wed Nov 27 00:54:27 EST 2013


Hi ,

I forgot to mention, I tried DIrk's recommendation and it still had the
same problem.
The recommendation was to pass a string object back to the builder.

emitter
altered_targets=[]
for t in target:
fpath,fext=os.path.splitext(str(t))
altered_targets.append(fpath+'_altered.c')
return (altered_targets,source)


I did some more investigation and narrowed it down to problem when I invoke
another builder from my builder. In my example I didn't have exactly what I
was trying to do. I was invoking another builder from my builder.

If I declare my builder like this lets say:
my_bld = env.Builder(action = SCons.Action.Action('cp $SOURCE $TARGET')
,
source_scanner = SCons.Scanner.C.CScanner(),
emitter = my_emitter,
suffix = '.c2', src_suffix = '.c')

I don't have any problems. I can see it executes the cp and the target file
is created.

If I however do this:
def my_builder(target, source, env)
env.Command(target,source, 'cp $SOURCE $TARGET')

my_bld = env.Builder(action = SCons.Action.Action(my_builder)
,
source_scanner = SCons.Scanner.C.CScanner(),
emitter = my_emitter,
suffix = '.c2', src_suffix = '.c')


This is when I see the error message.

I looked at BaseBuilder and I see it prints this in node_errors when it
detects the sources for a target node are different from the sources that
were passed to builder.
elif t.sources != slist: 314
msg<http://www.scons.org/doc/HTML/scons-api/SCons.Builder-pysrc.html#>
= "Multiple ways to build the same target were specified for: %s (from %s
and from %s)" % (t, list(map(str, t.sources)), list(map(str, slist))) 315
raise UserError<http://www.scons.org/doc/HTML/scons-api/SCons.Builder-pysrc.html#>
(msg <http://www.scons.org/doc/HTML/scons-api/SCons.Builder-pysrc.html#>)

In the print out of the error message the sources are the same. This is the
string representation, so I am guessing they are two different file nodes
and this is where the comparison is failing? It is not clear to me why they
would be two different nodes for the source file? Is there a custom
comparison method for the nodes or is it just doing a regular object
comparison?

Thanks,
Neven

On Tue, Nov 26, 2013 at 8:13 PM, Bill Deegan <bill at baddogconsulting.com>wrote:


> Neven,

>

> As Dirk mentioned in the email on the dev list the .name parameter should

> not be used for this (or in general for anything.. I've never used it and

> I've been using SCons a long time).

>

> What happens if your run : scons --tree=prune ?

>

> -Bill

>

>

> On Tue, Nov 26, 2013 at 6:56 PM, Neven Klacar <nklacar at gmail.com> wrote:

>

>> Hi, trying to make a builder that takes source file

>> a.c and creates a new C file, a_altered.c using a python script or

>> program that in this example will be preprocess lets say.

>>

>> Then I want to pass the altered file to be built in normal workflow

>>

>> newfile=MyBuilder("a.c")

>> object=env.Object(newFile)

>> env.Library(object)

>> ....

>>

>> In the builder I created a an emitter which modifies the target files to

>> have a different name.

>> *Builder*

>> def generate(env):

>> my_bld = env.Builder(action = 'preprocess< $SOURCE > $TARGET'

>> ,

>> source_scanner =

>> SCons.Scanner.C.CScanner(),

>> emitter = my_emitter,

>> suffix = '.c2', src_suffix = '.c')

>>

>> env.Append(BUILDERS = {'MyBuilder' : my_bld})

>>

>>

>>

>> def my_emitter(target, source, env):

>>

>> for t in target:

>>

>> t.name=t.name[:t.name.rfind('.')]+'_altered.c'

>>

>> return (target,source)

>>

>>

>>

>> The basic error I get is that there seems to be two ways to build the

>> same file

>>

>> .../project/build/objects/a_altered.c failed: Multiple ways to build the

>> same target were specified for: ...project/build/objects/a_altered.c

>> (from ['.../project/src/a.c'] and from ['.../project/src/a.c'])

>>

>>

>>

>> Am I going about this the right way?

>>

>>

>> I appreciate any help or suggestions!

>>

>>

>> Thanks,

>>

>> Neven

>>

>> _______________________________________________

>> Scons-users mailing list

>> Scons-users at scons.org

>> http://four.pairlist.net/mailman/listinfo/scons-users

>>

>>

>

> _______________________________________________

> Scons-users mailing list

> Scons-users at scons.org

> http://four.pairlist.net/mailman/listinfo/scons-users

>

>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://four.pairlist.net/pipermail/scons-users/attachments/20131126/4f74ab03/attachment.html


More information about the Scons-users mailing list