Builds et tests Utilisation de CMake et de Dart



Documents pareils
Construction de logiciel et packaging

Installation et compilation de gnurbs sous Windows

Environnements de développement (intégrés)

Projet de développement

Serveur Subversion Debian GNU/Linux

Introduction à Eclipse

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Tutoriel code::blocks

pythonocc: une plateforme de développement agile d applications CAO.

Module d anonymisation

Retour d'expérience avec : OCS Inventory & GLP

TP1. Outils Java Eléments de correction

bbc Launch Pad Juillet 2011 Version 10.0

C.M. 1 & 2 : Prise en main de Linux

Votre premier projet Android

Gérer ses environnements de développement avec Vagrant RMLL 2012

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Guide d installation de SugarCRM Open Source version 4.5.1

Installer Enterprise Miner 5.1 en SAS environnement Windows

MS SQL Express 2005 Sauvegarde des données

Automatisation de l administration système

Service Déposant: Procédure d installation. Page 1. Service déposant. Procédure d installation Version 2.3

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

La base de données XML exist. A. Belaïd

Atelier individuel. Linux 101. Frédérick Lefebvre & Maxime Boissonneault frederick.lefebvre@calculquebec.ca U. Laval - Janv. 2014

Oracle Developer Suite 10g. Guide de l installation. Vista & Seven

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

WDpStats Procédure d installation

TechSoftware Présentations

Validation de la création des groupes ABM et ajout de l utilisateur SASDEMO

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

Configurer la supervision pour une base MS SQL Server Viadéis Services

Projet Semestre2-1SISR

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

sshgate Patrick Guiran Chef de projet support

TD/TP 1 Introduction au SDK d Android

Guide de l administrateur de mexi

Le service FTP. M.BOUABID, Page 1 sur 5

Joomla! Création et administration d'un site web - Version numérique

Petit guide pour l installation de CVW sous Linux

Créer son premier package.deb. 19 août

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Guide Installation Serveur Extensive Testing

Construire des plug-ins pour SAS Management Console SAS 9.1

Chapitre 10 : Logiciels

Introduction...3. Objectif...3. Manipulations...3. La Sauvegarde...4. Les différents types...4. Planification...4. Les outils...5

Outils pour les réseaux de neurones et contenu du CD-Rom

Projet Administration Réseaux

Procédure d installation d AMESim 4.3.0

Direction des Systèmes d'information

StreamServe Persuasion SP4

A. Architecture du serveur Tomcat 6

User Documentation. Documentation utilisateur. version 0.2b

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

PROCEDURE D'INSTALLATION OPENREPORTS

Programmation Web. Madalina Croitoru IUT Montpellier

Sophos Endpoint Security and Control Guide de configuration pour réseaux étendus. Enterprise Console, version 3.1 EM Library, version 1.

Guide d installation BiBOARD

SUGARCRM Sugar Open Source Guide d Installation de French SugarCRM Open Source Version 4.2

µrv : Realité Virtuelle

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Guide Installation Serveur Extensive Testing

La création d un paquet Debian. Aurélien Jarno. Journées du Logiciel Libre. 15 octobre 2005

Architecture de la plateforme SBC

UTILITAIRE BRM BACKING UP, RESTORING AND MOVING CONTENT

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

ECLIPSE ET PDT (Php development tools)

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

Aide-Mémoire unix. 9 février 2009

Vue d ensemble de Windows PowerShell

Guide d installation de Gael

Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins

Stéphane DERACO, DSI CNRS l Argos Devops : de l hyperviseur aux conteneurs l 11/12/2014 DOCKER

Oracle Database SQL Developer Guide D'Installation Release 4.0 E

Quelques mots à propos de Sage

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Installer et configurer Oracle Forms 11gR2 Windows 7 64 bits

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Installation de Snort sous Fedora

Fiche d utilisation du logiciel. 1 - Installation. J. Thioulouse & D. Chessel

Manuel Utilisateur MISE A JOUR DU CLIENT SOFIE VERS LA VERSION 5. v0.99

Configuration du serveur FTP sécurisé (Microsoft)

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

Maintenance Maintenance. Version Outils d accompagnement à la migration des bases relationnelles. Sage 3

Sécurisation de Windows NT 4.0. et Windows 2000

Le Client/Serveur avec Enterprise Miner version 4

Service Informatique et Télématique (SITEL), Emile-Argand 11, 2009 Neuchâtel, Tél ,

COSWIN 7I INSTALLATION VERSION HTML

[DEVELOPPEMENT SUR LA CIBLE 2440] 19 avril 2010

WORKSHOP OBIEE 11g (version ) PRE-REQUIS:

0.1 Mail & News : Thunderbird

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Introduction au Système d Exploitation Unix/Linux

WinReporter Guide de démarrage rapide. Version 4

Projet De Stijl Plate-forme pour robots mobiles

Transcription:

Builds et tests Utilisation de CMake et de Dart Séminaire Code & Travaux ASCII Fabien Spindler Projet Lagadic IRISA / INRIA Rennes http://www.irisa.fr/lagadic 16 novembre 2006

Plan 1. CMake Installation, principe de fonctionnement Structure des sources Exemple In-source et out-of-source build Utilisation, le cache, démonstration 2. CTest Exemple, utilisation 3. Dart Exemple, utilisation, daily builds, démonstration 4. CPack Exemple, utilisation, démonstration 2

CMake http://www.cmake.org Outil d aide au processus de compilation (build), multi plates-formes et open source Développé depuis 2001 par Kitware (VTK) Adopté par les développeurs de KDE Capable de générer des makefile unix, des projets MSVC, Borland qui seront utilisés par les outils natifs lors de la compilation Nombreuses commandes permettant de localiser include, lib, exe Propose de nombreuses extensions pour localiser X, Qt, OpenGL Propose des interfaces de test (CTest) et de packaging (CPack) 1. CMake 3

Installation Dernière version: 2.4.3 Téléchargement: http://www.cmake.org/html/download.html Version en cours de développement: cvs -d :pserver:anonymous@www.cmake.org:/cvsroot/cmake login (respond with password cmake) cd /tmp cvs -d :pserver:anonymous@www.cmake.org:/cvsroot/cmake co CMake cd /tmp/cmake./bootstrap prefix=/usr make make install 1. CMake 4

Principe de fonctionnement Capable de gérer le processus de compilation indépendamment de l OS et du compilateur Connaissance de très nombreuses plates-formes et outils L utilisateur configure son build avec CMake [Makefiles, dsp, sln] CMakeLists.txt CMake Native Build System Files 1. CMake Executables Libraries Native Build Tools [g++, MSVC, Borland] 5

Structure des sources Certains répertoires contiennent un fichier de description CMakeLists.txt Sous-répertoires spécifiées par la commande SUBDIRS Les répertoires dépendent uniquement des parents Certaines commandes sont transmises aux descendants CMakeLists.txt SUBDIRS(foo bar) foo/cmakelists.txt bar/cmakelists.txt 1. CMake 6

Eléments de syntaxe CMakeLists.txt Langage de type script Commentaire Commande Liste Variable Sructure de contrôle Configuration dynamique config.h.in Détection de librairie # Comment ends at a newline COMMAND(arg1 arg2...) A;B;C # semicolon separated ${VAR} IF(CONDITION) FOREACH(v A B C) CONFIGURE_FILE(config.h.in config.h) #cmakedefine FOO_VERSION ${FOO_VERSION} #cmakedefine BUILD_SHARED_LIBS FIND_LIBRARY(MY_LIB NAMES my1 my2 PATHS /foo c:/bar) Evalué lors des phases de configuration de CMake 7

Exemple : Le projet FOO 1/4 FOO-code foo foo1.{cpp,h} foo2.{cpp,h} libfoo + bar bar1.{cpp,h} bar2.{cpp,h} libbar + example example2.{cpp,h} *.o 1. CMake example1.cpp main() = example 8

Exemple : Configuration minimale 2/4 FOO-code CMakeLists.txt PROJECT(FOO) SUBDIRS(foo bar example) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/foo ${CMAKE_SOURCE_DIR}/bar) SET(LIBRARY_OUTPUT_PATH ${FOO_BINARY_DIR}/lib) foo - CMakeLists.txt PROJECT(projectname [CXX] [C] [JAVA]) 1. CMake ADD_LIBRARY(foo foo1.cpp foo2.cpp) bar - CMakeLists.txt ADD_LIBRARY(bar bar1.cpp bar2.cpp) TARGET_LINK_LIBRARIES(bar foo) example - CMakeLists.txt ADD_EXECUTABLE(example example1.cpp example2.cpp) TARGET_LINK_LIBRARIES(example bar) 9

Exemple : Lib statique / dynamique 3/4 FOO-code 1. CMake CMakeLists.txt PROJECT(FOO)... SET(FOO_VERSION_MAJOR 1 ) SET(FOO_VERSION 1.2.3 ) OPTION(BUILD_SHARED_LIBS "Build shared libraries." OFF) foo - CMakeLists.txt ADD_LIBRARY(foo foo1.cpp foo2.cpp) SET_TARGET_PROPERTIES(foo PROPERTIES VERSION ${FOO_VERSION} SOVERSION ${FOO_VERSION_MAJOR}) bar - CMakeLists.txt ADD_LIBRARY(bar bar1.cpp bar2.cpp) SET_TARGET_PROPERTIES(bar PROPERTIES VERSION ${FOO_VERSION} SOVERSION ${FOO_VERSION_MAJOR}) 10

Exemple : Installation 4/4 FOO-code 1. CMake foo - CMakeLists.txt ADD_LIBRARY(foo foo1.cpp foo2.cpp)... INSTALL(TARGETS foo DESTINATION lib PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) INSTALL(FILES foo1.h foo2.h DESTINATION include PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) bar - CMakeLists.txt... INSTALL(TARGETS bar DESTINATION lib PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) INSTALL(FILES bar1.h bar2.h DESTINATION include PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) 11

Utilisation via interface graphique Editer les variables du cache pour configurer le build Configuration après un changement: touche c ou bouton Configure Génération des fichiers utiles à la compilation: touche g ou bouton OK ccmake (unix) CMake (windows) 1. CMake 12

Utilisation en ligne de commande Peut être utilisé par des scripts (crontab, tâches planifiées) Premier argument: localisation des sources Option -G pour sélectionner le générateur utilisé lors du build cmake G KDevelop3 ou G Unix Makefiles ou G Xcode Option -D pour positionner des variables du cache cmake DCMAKE_VERBOSE_MAKEFILE=ON cd FOO-build-debug cmake../foo-code -DCMAKE_BUILD_TYPE=Debug make cd FOO-build-release cmake../foo-code -DCMAKE_BUILD_TYPE=Release make 1. CMake 13

In-source et out-of-source build 1/2 Les sources contiennent Le code source C, C++ (myclass.cpp, myclass.h), Java Fichiers de description (CMakeLists.txt) utiles à CMake Les builds contiennent Les fichiers produits par CMake (.dsp,.sln, Makefile) Les résultats de la compilation: librairies (.a,.so) et binaires In-source build Code source et produits de la compilation cohabitent dans la même arborescence Out-of-source build Code source et produits de la compilation dans des répertoires distincts 1. CMake 14

In-source et out-of-source build 2/2 In-source build Cohabitation des sources et build cd FOO-code ccmake. make FOO-code [sources, binaires] Out-of-source build Séparation des sources et build Permet de gérer plusieurs versions 1. CMake mkdir FOO-build cd FOO-build ccmake../foo-code make FOO-code [sources] FOO-build [binaires] FOO-build build-g++4.x [binaires] FOO-build build-g++3.x [binaires] 15

Le cache Résume l ensemble de la configuration du build Fichier CMakeCache.txt situé à la racine du projet Créé / mis à jour lors des phases de configuration réalisées par CMake Les variables sont typées Les variables incontournables CMAKE_BUILD_TYPE=[Debug, Release] CMAKE_INSTALL_PREFIX=[/usr/local, C:\Program Files\ViSP] CMAKE_VERBOSE_MAKEFILE=[OFF, ON] 1. CMake 16

Démonstration Sous Windows Configuration du projet FOO avec CMake Compilation avec MSVC71 http://www.irisa.fr/lagadic/prive/fspindle/cmake/example/foo.tar.gz 1. CMake 17

CTest Fait partie de la distribution CMake Peut-être utilisé avec ou sans CMake Permet de réaliser plusieurs opérations sur le code source Checkout CVS ou Subversion depuis un référentiel, configuration, build, Exécution de tests prédéfinis (binaires, scripts), Exécution de tests avancés: Couverture de code: uniquement avec g++ -fprofile-arcs -ftest-coverage Etat de la mémoire: utilisation de purify, valgrind Les résultats peuvent être soumis à un serveur DART 2. CTest 18

Exemple FOO-code CMakeLists.txt PROJECT(FOO) SUBDIRS(foo bar example) ENABLE_TESTING() example/cmakelists.txt ADD_EXECUTABLE(example example1.cpp example2.cpp) TARGET_LINK_LIBRARIES(example bar) ADD_TEST(test1 example) ADD_TEST(test2 example foo) 2. CTest 19

Utilisation Lancement des tests Liste des tests ctest -N Tests automatiques make test ctest Running tests... Start processing tests Test project /udd/fspindle/foo-build 1/ 2 Testing test1 Passed 2/ 2 Testing test2 Passed 100% tests passed, 0 tests failed out of 2 MSVC projet RUN_TESTS Tests individuels ctest I 2,2 Fichiers de log dans Testing/Temporary LastTest.log LastTestsFailed.log 2. CTest 20

Démonstration Sous Windows Exécution des tests du projet FOO avec MSVC71 1. CMake 21

Dart http://public.kitware.com/dart Serveur permettant de gérer les rapports de tests de logiciels Synthèse de tous les tests sous forme d un tableau de bord HTML Notification automatique par email en cas d erreur Facilite le déploiement de tests sur plusieurs plates-formes / configurations Client CMake ou CTest Envoie les rapports de build et de tests (XML) au serveur Catégories de builds et de tests Continuous builds : lancés si modification du référentiel CVS ou SVN Nightly builds : lancés la nuit (utilisés pour suivre l évolution du logiciel) Experimental builds: lancés à la demande pour valider une fonctionnalité Serveur Dart à l Irisa: http://dart.irisa.fr Création de votre projet sur simple demande via helpdesk 3. Dart 22

Exemple FOO-code CMakeLists.txt PROJECT(FOO) SUBDIRS(foo bar example) ENABLE_TESTING() INCLUDE(DartConfig.cmake) INCLUDE(Dart) IF(CMAKE_COMPILER_IS_GNUCXX AND NOT BUILD_SHARED_LIBS) SET(CMAKE_CXX_FLAGS "-fprofile-arcs -ftest-coverage") ENDIF(CMAKE_COMPILER_IS_GNUCXX AND NOT BUILD_SHARED_LIBS) DartConfig.cmake SET (DROP_METHOD "xmlrpc") SET (DROP_SITE "http://dart.irisa.fr") SET (DROP_LOCATION "FOO") SET (COMPRESS_SUBMISSION ON) SET (NIGHTLY_START_TIME "9:00PM") 3. Dart 23

Utilisation Lancement des tests ctest D Experimental ctest D Nightly ctest D [Experimental Nightly]Build ctest D [Experimental Nightly]Test ctest D [Experimental Nightly]Coverage ctest D [Experimental Nightly]MemCheck Les tableaux de bord mettent 10 min pour se mettre à jour 3. Dart 24

Exécution de test automatiques Daily builds Utilisation d un script python: FOO-build.py Crontab Unix Tâches planifiées Windows checkout, build, test Panneau configuration / Édition: crontab -e Consultation: crontab -l Tâches planifiées 3. Dart 25

Exemple de script python: ViSP-build.py import os, shutil, sys if os.path.isdir("visp"): shutil.rmtree("visp") os.system("cvs d :pserver:anonymous@scm.gforge.inria.fr:/cvsroot/visp checkout ViSP") if os.path.isdir("visp-build"): shutil.rmtree("visp-build") os.mkdir("visp-build") os.chdir("visp-build") if sys.platform == 'win32': os.system("cmake../visp -G\"Visual Studio 7.NET 2003\"") os.system("devenv.exe /build debug /project ALL_BUILD VISP.sln") else: os.system("cmake../visp") os.system("make") os.system("ctest -D Experimental") 4. CPack 26

Démonstration Visite du serveur Dart utilisé pour ViSP http://dart.irisa.fr/visp2/dashboard/ 3. Dart 27

CPack Fait partie de la distribution CMake, intégré à CMake depuis CMake 2.4 Outil de packaging et de distribution de binaires ou de sources Peut-être utilisé avec ou sans CMake http://www.cmake.org/wiki/cmake Package type Packaging tool Linux OSX Win STGZ Self extracting Tar GZip X X TBZ2 Tar BZip2 X X TGZ Tar GZip X X TZ Tar Compress X X ZIP ZIP file format X X X PackageMaker OSX Package Maker X NSIS Nullsoft Scriptable Install System X 4. CPack 28

Exemple FOO-code CMakeLists.txt PROJECT(FOO)... INCLUDE(InstallRequiredSystemLibraries) SET(CPACK_PACKAGE_VERSION ${FOO_VERSION}) SET(CPACK_PACKAGE_VERSION_MAJOR ${FOO_VERSION_MAJOR}) SET(CPACK_PACKAGE_VERSION_MINOR ${FOO_VERSION_MINOR}) SET(CPACK_PACKAGE_VERSION_PATCH ${FOO_VERSION_PATCH}) IF(WIN32 AND NOT UNIX) SET(CPACK_NSIS_MODIFY_PATH ON) ENDIF(WIN32 AND NOT UNIX) INCLUDE(CPack) 4. CPack 29

Utilisation Liste des générateurs en lançant : Fichiers de configuration créés par : CPackConfig.cmake CPackSourceConfig.cmake Configurables via CMakeLists.txt cpack --help ccmake <source dir> Utilisation make package cpack G ZIP MSVC projet PACKAGE FOO-1.2.3-Linux.sh FOO-1.2.3-Darwin.zip FOO-1.2.3-win32.exe cpack G TGZ config CPackSourceConfig.cmake make package_source FOO-1.2.3-Source.tar.gz 4. CPack 30

Démonstration Sous Windows Création d un package NSIS du projet FOO Préalable: installation de NSIS http://nsis.sourceforge.net/main_page 4. CPack 31

Conclusion Avantages CMake: outil de build multi plates-formes (Linux, OSX, Windows, ) Supporte les builds en dehors des sources (out-of-source build) Intègre des outils de test (CTest) de synthèse des rapports de tests (Dart) de packaging et d installation (CPack) Syntaxe du langage assez simple Inconvénients Chemins absolus dans les fichiers générés Exécuter cmake si déplacement du répertoire sources ou build Lors d un build indispensable d avoir CMake d installé 32

Pour aller plus loin Documentation des commandes cmake --help pour un résumé cmake --help COMMAND pour une aide détaillée cmake --help IF [cmake ctest cpack] --help Documentation, FAQ, wiki: http://www.cmake.org Ouvrages édités par Kitware, Inc. Mastering CMake User s Developers Guide, Août 2003 Matering CMake 2.2, Fév. 2006 Exemples Le projet FOO: http://www.irisa.fr/lagadic/prive/fspindle/cmake/example/foo.tar.gz A l Irisa: projets ViSP (Lagadic), Vistal (Visages) http://gforge.inria.fr VTK, ITK, BIAS 33