UFR IMAG
Master 2 GICAO
Rapport du TP2 d’Outils
Informatiques
Quentin Pelorson
Jules Proust
Grenoble, le 25 novembre 2011
Par ces TPs ils nous aient permis d’apprendre à utiliser certains outils,
malheureusement la nature (bétise) humaine à permis à certaine personne,
sans aucune connaissances sur le hacking, d’avoir accès aux comptes rendu
et sources des autres groupes.
Vous avez, par la suite, écrit que nous n’évaluerez pas sur la maîtrise des
outils mais sur nos comportements face aux problèmes rencontrés. Le notre
est simple :
face aux voleurs, nous rendons tout gratuit
Question 1-4-8
Code fichier SWIG
% module tp3
%{
# include " tp3 . h"
%}
const double PI ;
double pi () ;
double add_pi(double v);
void set_log ( int v) ;
void sta ts () ;
typedef struct _vecteur Vecteur ;
Vecteur * Vecteur_ create ( double a , double b , double c );
Vecteur * Vecteur_add ( Vecteur *v1 , Vecteur * v2 );
double V ec te ur _e lem ( V ec te ur *v , int coord);
char * Vec teur_str ( Vecteur *v );
void Vec teu r_destroy ( Vecteur *v );
typedef Vecteur {
} Vecteur ;
% extend Vecteur {
Vecteur ( double a , double b , double c) {
return V ec te ur _c re at e ( a ,b , c) ;
}
~ V ec te ur () {
Vecteur_destroy($self);
}
}
Dans ce fichier SWIG, on peut observer trois différentes parties. La partie
2
inclue entre La partie incluant différentes fonctions est destiné à python,
cette partie lui spécifie quelle fonction il peut appeler. La dernière partie est
aussi pour python mais permet une "jolie syntaxe" et de "jolies liaisons"
lors de l’appelle du type Vecteur. Il n’y a pour l’instant qu’un destructeur
et un créateur mais il esst possible d’y ajouter toutes les fonctions que vous
souhaitez !
Question 2
Nous n’avons eu à faire "que" le CMakeLists du folder "python". Ce
CMakeLists comprend un output d’un fichier .c à partir d’un fichier .py ainsi
que l’appelle à SWIG pour construire le modue nécessaire au TP.
CMakeLists du folder python
find _pa ckag e ( SWIG )
Include ( UseSWIG )
add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/python/
tp3_wrap.c
COMMAND ${SWIG_EXECUTABLE}
ARGS
- pyt hon
${ PR OJ EC T_ SO UR CE_D IR }/ python / tp3 . i)
SWIG_ADD_MODULE( tp3 python
${ P ROJ ECT_SOUR CE_ DIR }/ python / tp3_wrap .c
${ PR OJ EC T_ SO UR CE_D IR }/ lib / tp3 . c)
Mais des erreurs parvenus nous ramenèrent à la réalité il a aussi fallut mo-
difier le CMakeLists principal qui utilisait le compilateur gcc.
CMakeLists principal
cmake_minimum_required (VERSION 2.6)
project ( TP3 )
set ( C MA KE _ C_ FL AG S " -g - Wall " )
in cl ud e_ di re ct or ie s ($ { TP 3_ SO URC E_ DI R }/ lib )
inc lud e_d ire cto rie s (${ TP3_SO URCE_DIR }/ python )
inc lud e_dir ect ories (/ usr / include / python2 .7)
3
add _s ub di re ct or y ( lib )
add_subdirectory ( examples )
add_subdirectory ( python )
Question 3
Afin d’éxécuter les mêmes commandes que les test1.c il nous faut appe-
ler le module tp3 créer par SWIG et demander l’accès aux fonctions qu’il
contient.
Pour simplifier l’appel à plusieurs fonctions, il est possible d’écrire une macro
permettant d’appeler une suite de fonctions.
test1.py
import tp3
def pa rt1 () :
pr int " PI = " , tp3 . PI
pr int " pi () = " , t p3 . pi ()
pr int " pi +5 = " , tp3 . add_pi (5)
tp3 . stats ()
part1 ()
tp3 . set _log (1)
part1 ()
tp3 . set _log (0)
tp3 . stats ()
Question 5
Le test2.py éxécute les mêmes commandes que le fichier test2.c grâce au
wrapp des autres fonctions contenues dans le fichier tp3.h.
test2.py
import tp3
def f () :
v1 = tp3 . Vecteur_ create (1 , 2 , 3)
v2 = tp3 . Vecteur_ create (4 , 5 , 6)
v = tp3 . V ec te ur _ad d ( v1 , v2 )
tp3 . stats ()
4
val_v = tp3 . Ve cte ur_ st r (v )
pr int " Ve cte ur v : " , va l_v
tp3.Vecteur_destroy(v2)
tp3.Vecteur_destroy(v1)
tp3.Vecteur_destroy(v)
return v
tp3 . stats ()
vecteu r = f ()
tp3 . stats ()
val_v = tp3 . Ve ct eur _st r ( vecteu r )
#tp3 . free ( val_v )
Nous pouvons alors observer que la construction et la destructions des vec-
teurs construit est bien éxécutée.
Sortie console
Nombre de Vecteur crees : 0
Nombre de Vecteur detruits : 0
Nombre de Vecteur crees : 3
Nombre de Vecteur detruits : 0
Vecteur v: [5 ,7 ,9]
Nombre de Vecteur cres : 3
Nombre de Vecteur detruits : 3
Question 6
OOOOooooohhhh la "jolie syntaxe"
"jolie syntaxe"
import tp3
v = Vecteur (3 ,4 ,0)
del v
Question 7
Les sections 5.5.1-7 peuvent vous aider à comprendre comment réaliser
des structures permettant de faire de "jolis" appels dans python. Les sections
5
1 / 6 100%