Création des librairies dynamiques et des fichiers d'entêtes


Maintenant que vous avez compiler les sources du projet JTS, vous devez créer des librairies dynamiques C. En effet vous savez sans doute que le code source de PostGIS est en C et non en java, un convertion est donc nécessaire. Heureusement GNU met à disposition, avec son compilateur gcc, un compilateur java permettant une telle convertion. Vous verrez de plus qu'il est aussi possible de générer des fichiers d'entête avec la commande gcjh.

Pour créer ces librairies dynamique ainsi que les fichiers d'entêtes requis lors de la compilation de PostGIS que nous verrons dans la section suivante, je vous invite à suivre les quelques instructions ci-dessous :

  1. Rendez vous dans le répertoire des sources du projet JTS et créez le répertoire où seront stoquées les classes java compilées :
    machine ~ # cd jts-1.7.2
    machine jts-1.7.2 # mkdir classes
    
  2. Compilation de l'ensemble des classes java avec gcj :
    machine jts-1.7.2 # gcj -C -d classes -classpath jts.jar $(find src/com/vividsolutions/jts -name '*.java')
    
  3. Définition de la variable d'environnement JTSCLASSES qui liste l'ensemble des classes requisent lors de la compimlation de PostGIS :
    machine jts-1.7.2 # export JTSCLASSES="com.vividsolutions.jts.geom.Geometry \
                com.vividsolutions.jts.geom.Point \
                com.vividsolutions.jts.geom.MultiPoint \
                com.vividsolutions.jts.geom.LineString \
                com.vividsolutions.jts.geom.LinearRing \
                com.vividsolutions.jts.geom.MultiLineString \
                com.vividsolutions.jts.geom.Polygon \
                com.vividsolutions.jts.geom.MultiPolygon \
                com.vividsolutions.jts.geom.GeometryCollection \
                com.vividsolutions.jts.geom.GeometryFactory \
                com.vividsolutions.jts.geom.PrecisionModel \
                com.vividsolutions.jts.geom.Coordinate \
                com.vividsolutions.jts.geom.CoordinateSequenceFactory \
                com.vividsolutions.jts.geom.CoordinateSequence \
                com.vividsolutions.jts.geom.IntersectionMatrix \
                com.vividsolutions.jts.io.WKTReader \
                com.vividsolutions.jts.io.WKTWriter \
                com.vividsolutions.jts.JTSVersion"
    
  4. Création du répertoire et de ses sous-répertoires destinés à contenir les fichiers d'entêtes générés avec gcjh :
    machine jts-1.7.2 # mkdir -p include
    machine jts-1.7.2 # jts_include_path="com/vividsolutions/jts/" \
    for i in geom io ;do
     mkdir -p include/${jts_include_path}/${i} ;
    done
    
  5. Rendez vous dans le répertoire nouvellemenet créé puis créez les fichiers d'entêtes correspondants :
    machine jts-1.7.2 # cd include
    machine jts-1.7.2/include # gcjh -classpath ../jts.jar ${JTSCLASSES}
    machine jts-1.7.2/include # cd ..
    machine jts-1.7.2 #
    
  6. Génération du fichier d'entête principal jts.h :
    machine jts-1.7.2 # gcjh -I jts.jar -stub -o ./include/jts.h ${JTSCLASSES}
    
  7. Génération de la librairie dynamique libjts.soà partir de l'archive binaire jts.jar :
    machine jts-1.7.2 # gcj -fPIC -O2 -shared -o libjts.so ./jts.jar
    
  8. Compilation de la classe Geometry.java :
    machine jts-1.7.2 # gcj -C -classpath jts.jar src/com/vividsolutions/jts/geom/Geometry.java
    machine jts-1.7.2 # mv src/com/vividsolutions/jts/geom/Geometry*class ./
    
  9. Génération de librairie libstatis_geom.so
    machine jts-1.7.2 # gcj -fPIC -classpath jts.jar -shared -o libstatic_geom.so "Geometry\$1.class"
    
Si tout c'est déroulé correctement vous devriez avoir des fichiers d'entêtes dans le répertoire include (find ./include pour s'en assurer) et les libraries dynamiques dans le répertoire où vous avez décompmressé les sources du projet JTS (jts-1.7.2 dans notre exemple).