19 avril 2005

Makefile pour générer du HTML avec un texte au format reStructuredText (rst)

Voici un fichier Makefile permettant de générer facilement un ou plusieurs fichiers HTML à partir d'un ou plusieurs fichiers RST.

Fichier Makefile

Dans cet exemple, les fichiers RST se nomment respectivement «truc.rst» et «bidule.rst».


# le ou les fichiers à générer 
TARGETS = truc.html bidule.html

# les options
RSTFLAGS = --stylesheet=uneFeuilleDeSyle.css \
           --language=fr \
           --output-encoding=ISO-8859-1 \
           --input-encoding=ISO-8859-1 \
           --source-link --generator

# les executables utilisés
RSTHTML = rst2html.py
RSTTEX = rst2latex.py
RM = rm

# Il n'y a rien à modifier sous cette ligne
# -------------------------------------------------
all: $(TARGETS) 

.SUFFIXES: .rst .html .tex

.rst.html:
    @($(RSTHTML) $(RSTFLAGS) $< $@ && echo "$@ is generated.")

.rst.tex:
    @($(RSTTEX) $(RSTFLAGS) $< $@ && echo "$@ is generated.")

clean:
    @($(RM) $(TARGETS))
    @echo "All HTML files are deleted !"

Utilisation

Pour générer, il suffit de taper make ou make truc.html

Pour supprimer les fichiers générés, il suffit de taper make clean

07 avril 2005

QT / KDE Class Documentation Search Plugin for Firefox

This is little script for Search Plugins for Mozilla-based browser. With it, you can search for class reference in :

  • Qt Reference Documentation (Open Source Edition)
  • The KDE API Reference

Install

To install this search plugin in Firefox, make sure that you are using Firefox as your browser, and then follow this link: QT / KDE Class Documentation Search Plugin. That's it - you're done! Click on the search box at the top right to select the search engine you wish to use.

Example

For exemple, if you type « qstring », automatically, you will go on this page QString Class Reference. If you type « kmessagebox », automatically, you go on this this page KMessageBox Class Reference

Reference

For more information, visit the Mycroft project website.

06 avril 2005

Création de tests unitaires avec KDevelop et CppUnit

1. Prérequis

Pour pouvoir utiliser CppUnit, celui-ci doit être présent sur votre machine. Sur un système Linux Mandrake la commande suivante permet de l'installer :

% urpmi cppunit-devel

2. Création d'un sous-projet

D'abord, il faut un projet KDevelop, pour en créer un, je vous invite à consulter cet article http://blog.touv.fr/2005/03/creer-un-simple-programme-qt-avec.html. Ensuite, il faut créer un sous-projet. Personnellement, je l'ai appelé : «tests»

3. Configurer Automake et Autoconf

Au moment où j'écris cet article, je ne connais pas le moyen (si il existe) de paramétrer complétement Automake depuis KDevelop.

On va donc faire à la main une partie de la configuration.

Quittez KDevelop et rendez-vous dans le répertoire «tests». Editez le fichier «Makefile.am».

Théoriquement, il devrait ressembler à ça :


INCLUDES = 
METASOURCES = AUTO

Ajoutez les lignes suivantes :


KDE_CXXFLAGS=$(USE_EXCEPTIONS)

check_PROGRAMS = tester

Maintenant rendez-vous dans le répertoire racine de votre projet. Editez le fichier «configure.in.in»
Théoriquement, il devrait ressembler à ça :


#MIN_CONFIG(3.0.0)

AM_INIT_AUTOMAKE(exemple, 0.1)
AC_C_BIGENDIAN
AC_CHECK_KDEMAXPATHLEN

Ajoutez la ligne suivante :


AM_PATH_CPPUNIT(1.9.6)

Voilà maintenant vous pouvez retourner dans KDevelop, et ajouter la librairie $(CPPUNIT_LIBS) dans les options de la cible «tester»

http://www.touv.fr/IMG/png/kd-exemple18.png

Après ces petites modifications, il faut "purger" le projet (Menu Construire / Purger) puis le reconstruire (Menu Construire / Constuire le Projet)

4. Lanceur de tests

Ajoutez un fichier main.cpp à la cible «tester».

Chez moi, KDEvelop refuse de créer se fichier. Je suis d'abord obligé de le créer puis ensuite je l'ajoute en tant que fichier existant.

Son contenu est extrait de la documentation de cppunit :


#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>
#include "test.h"

int main(int argc, char* argv[])
{
 
  CppUnit::Test *suite =   
       CppUnit::TestFactoryRegistry::getRegistry().makeTest();

  CppUnit::TextUi::TestRunner runner;
  runner.addTest( suite );

  runner.setOutputter( 
       new CppUnit::CompilerOutputter( 
            &runner.result(),
            std::cerr 
       ) 
  );
 
  bool wasSucessful = runner.run();

  return wasSucessful ? 0 : 1;
}

5. Créer des tests

Pour cela, on va créer une classe nommée Test. Donc dans KDevelop, on ajoutera à la cible «tester», 2 fichiers : test.h et test.cpp

test.h

#ifndef TEST_H
#define TEST_H

#include <cppunit/extensions/HelperMacros.h>

class Test : public CppUnit::TestFixture
{
  CPPUNIT_TEST_SUITE( Test );
  CPPUNIT_TEST( monPremierTestUnitaire );
  CPPUNIT_TEST_SUITE_END();

public:
  void setUp();
  void tearDown();
  void monPremierTestUnitaire();
 
private:
  int m_val;

};

#endif

test.cpp

#include "test.h"

CPPUNIT_TEST_SUITE_REGISTRATION( Test );

void Test::setUp()
{
    m_val = 1;    
}

void Test::tearDown() {}

void Test::monPremierTestUnitaire()
{
    int lav = 2;
    CPPUNIT_ASSERT_MESSAGE("forcement ça marche pas", m_val == lav);
}

6. Exécution

http://www.touv.fr/IMG/png/kd-exemple19.png