2011-11-21 6 views
5

In scons, sto cercando di realizzare un sistema di unittest (vedi codice qui sotto), sulla base della grande esempio da qui: http://spacepants.org/blog/scons-unit-testScons AddPostAction provoca dipendenza check errore work-around

Tuttavia a causa di un problema negli ultimi scons 2.0.1 e più recenti, questo caso un ciclo di dipendenze, come documentato qui: http://old.nabble.com/AddPostAction-executes-on-first-build-but-not-subsequent-td18360675.html (e altrove).

Qualcuno sa di una buona soluzione per risolvere questo problema?

Codice:

def UnitTest(env, target, source, **kwargs): 
    curTest = env.Program(target, source, **kwargs) 
    env.AddPostAction(curTest, curTest[0].abspath) 
    env.Alias('unit_tests', curTest) 
    env.AlwaysBuild(curTest) 
    return curTest 

SConsEnvironment.UnitTest = UnitTest 

mandolineTest = env.UnitTest(target='./codeTest', 
    source = mix(['test.cc', 'base.cc'), 
    LIBS = default_libs + ['bgl',], 
    LIBPATH = default_libs_path, 
    CPPPATH = default_includes) 

risposta

5

ho trovato una soluzione per questo problema. Utilizzando:

env.AddPostAction(curTest, curTest[0].abspath) 

sembra che SCons cerca di essere intelligente e aggiungere una dipendenza di generazione per curTest[0].abspath a se stessa, causando questo problema dipendenza circolare. La soluzione è quella di "nascondere" l'esecuzione del comando da SCons in modo che non riesce a capire cosa si sta facendo:

env.AddPostAction(curTest, lambda *_, **__: os.system(curTest[0].abspath)) 

Per il mio sistema di test di unità (che è un po 'diverso dal vostro, ma ha avuto lo stesso problema), questo ha l'effetto desiderato di eseguire il test dell'unità ogni volta che cambia una delle sue dipendenze e non la esegue se non è cambiato nulla di rilevante.

Problemi correlati