2016-11-17 5 views
1

En supposant que j'ai un projet autotools pour construire un programme P et P nécessite un fichier de configuration F. P = vim et F = ~/.vimrc par exemple. Ou P = bash et F = ~/.bashrc. (Dans mon cas, P est en fait une lib)autotools: comment tester un programme qui nécessite un fichier de configuration?

Le harnais de test fourni par autotools ne permet pas le passage de paramètres aux programmes testés (à moins que les emballages laids sont utilisés ...), donc un tel fichier de configuration peut être considéré comme un travail autour: si test1 nécessiterait fichier de configuration F1, test2 nécessiterait F2 ...

Ainsi, le Makefile.am pour un test pourrait se présenter comme suit:

#test ttt is linked with program P and will test P 

check_PROGRAMS= ttt 
ttt_SOURCES = ttt.c 
ttt_LDAD = libP.a 

TESTS = ttt 

EXTRA_DIST = configs/f1.cfg 

maintenant: comment puis-je obtenir P charger les configs de fichier/F1, configs/F2 ... pendant les tests et encore charger ~/.p_rc après l'installation?

Les programmes qui ont de tels fichiers de configuration sont très communs .... Comment cela est-il correctement réparti dans les autotools?

Répondre

1

Automake traite les fichiers de configuration via la variable sysconf_DATA. L'utilisateur d'installer votre package peut configurer la destination de la configuration des fichiers via:

sh ./configure --sysconfdir [newpath] 

Sinon, si vous ne le spécifiez pas, vos fichiers de configuration seront installés dans la valeur par défaut prefix/etc

En ce qui concerne l'utilisation de la configuration fichiers sur les tests, vous pouvez utiliser la variable check_DATA pour charger le fichier de configuration dans le même répertoire que vos binaires de test.

0

Je voudrais configurer une variable globale dans le code de la bibliothèque qui contient le chemin du fichier de configuration. De cette façon, pour chaque cas de test, je peux définir un fichier de configuration différent en définissant simplement la variable globale sur le chemin du fichier concerné.