2012-07-04 8 views
6

Hace poco convertí mi sistema de compilación a automake/autoconf. En mi proyecto, tengo algunas pruebas unitarias que necesitan algunos archivos de datos de entrada en el directorio desde donde se ejecutan. Cuando ejecuto make distcheck y prueba la compilación de VPATH, estas pruebas fallan porque aparentemente no se ejecutan desde el directorio donde están los archivos de entrada. Me preguntaba si hay alguna solución rápida para esto. Por ejemplo, ¿de alguna manera puedo decirle al sistema que no ejecute estas pruebas en make distcheck (pero aún las ejecute en make check)? O para cd al directorio donde están los archivos antes de ejecutar las pruebas?make distcheck y pruebas que necesitan archivos de entrada

Respuesta

4

La solución típica es escribir las pruebas para que busquen en el directorio fuente los archivos de datos. Por ejemplo, puede hacer referencia al $srcdir en la prueba o convertir test en test.in y consultar @[email protected].

Si las pruebas están en el directorio de origen, puede ejecutar todas las pruebas de ese directorio mediante el establecimiento de TESTS_ENVIRONMENT en Makefile.am:

TESTS_ENVIRONMENT = cd $(srcdir) && 

Este fallará si algunos de sus pruebas son creados por configure y por lo tanto vivir sólo en el directorio de construcción, en cuyo caso se puede evitar selectivamente cd con algo como:

TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } && 

intentando utilizar TESTS_ENVIRONMENT como esto es frágil en el mejor, y lo mejor sería escribir las pruebas para que se mira en la fuente calamitosa ctory para los archivos de datos.

+0

Mis pruebas están en src/some/path y los archivos de datos están en el mismo directorio. He intentado el TESTS_ENVIRONMENT = cd $ (srcdir) && truco pero no funcionó porque ahora no encuentra el ejecutable de la prueba más. Copiar los archivos de datos necesarios en el directorio actual tampoco funciona porque, en una compilación de VPATH, aparentemente no tiene permisos de escritura en el directorio donde se ejecutan las pruebas. –

+0

@Martin, no tiene acceso de escritura al directorio de origen, pero sí tiene acceso de escritura al directorio de compilación. ¿Cómo está copiando el archivo? Simplemente agregue 'EXTRA_DIST = datafile' a Makefile.am y' cp $ {srcdir}/datafile .' en test.in debería funcionar. Sin embargo, si la prueba se está ejecutando desde el directorio de origen, entonces el intento de copia fallará debido a los permisos de escritura. Sospecho que tiene algunas pruebas que se ejecutan desde el directorio de compilación y algunas que se ejecutan desde el directorio de origen. (Las pruebas denominadas '* .in' se ejecutan (probablemente) desde el directorio de compilación, mientras que otras pruebas se ejecutan desde el directorio de origen). –

+0

Esto se veía exactamente como lo que estaba buscando, pero esto no parece funcionar con Automake 1.15, desafortunadamente: con esto, crea archivos '* .log' y' * .trs' en el directorio fuente (que ya está dañado), pero aún los busca en el directorio de compilación y, por supuesto, no encuentra ellos allí (que es fatal). –

7

Tuve el mismo problema y utilicé una solución similar a la de William. Mi Makefile.am es como la siguiente:

EXTRA_DIST = testdata/test1.dat 

AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\" 

Entonces, en mi unittest, utilizo el DATADIR definir:

string path = DATADIR "/testdata/test1.dat" 

Esto funciona con make check y make distcheck.

Cuestiones relacionadas