cameleon-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cameleon-dev] TopMakefile.in et Makefile


From: Sylvain LE GALL
Subject: [cameleon-dev] TopMakefile.in et Makefile
Date: Sat, 12 Apr 2003 00:14:13 +0200
User-agent: Mutt/1.5.4i

Je l'avais envoyer me je peux me tromper...

J'attends vos réactions.
Sylvain LE GALL

----- Forwarded message from  -----

Date: Fri, 4 Apr 2003 19:39:06 +0200
To: address@hidden
Cc: address@hidden, address@hidden,
        address@hidden
Subject: Re: Cameleon sur savannah
Message-ID: <address@hidden>
References: <address@hidden> <address@hidden> <address@hidden>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="UugvWAfsgieZRqgk"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <address@hidden>
User-Agent: Mutt/1.5.4i
Status: RO

On Fri, Apr 04, 2003 at 02:36:44PM +0200, Maxence Guesdon wrote:
> Salut à tous,
> 
> j'ai créé une liste address@hidden, pour les discussions entre
>  développeurs (et packageurs bien sur;-) .
> Je vous invite à vous y inscrire. Le sujet comporte [cameleon-dev].
> 
> > Je viens de faire un commit de cameleon ( et j'ai change deux trois petits 
> > trucs, rien de bien grave ). 
> 
> Ca serait bien que tu mettes dans le fichier ChangeLog deux trois mots sur
> les modifs en quesion, ça aide à se tenir au courant.
> 

Pas de probleme, mais le changement était tellement mineur que j'ai pas
osé.

> Le fichier Changes.txt est pour les nouveautés/corrections visibles par
> l'utilisateur (ce qui est dans l'annonce d'une nouvelle release).
>  
> > En fait j'aimerais discuter de deux trois petits trucs :
> >  - qu'est ce quon fait ?
> 
> Ben on ajoute ce qui nous manque. J'ai aussi qq idées:
> - un "wizard" pour créer de nouveaux projets, avec demande
>   des libs à utiliser pour créer les fichiers de base, le makefile,
>   le configure, ...
> 

Tout a fait d'accord

> - un outil de localisation (plus de détails dans le mail suivant)
> 
> - une lib + des scripts ocaml pour faire l'équivalent de configure ?
> 

Ca c'est ambitieux par contre. Possible mais ambitieux. 

> - + le contenu du fichier TODO
> 
> >  - comment on le fait ?
> >  - qui fait quoi ?
> > ;-> 
> 
> chacun fait ce qu'il veut mais je propose le fonctionnement suivant:
> quand on veut faire une modif, on la fait chez soit et on la propose
> aux autres avant de commettre. Si on n'est pas sur que ce soit bien,
> ou de la façon de le faire, on demande leur avis aux autres dès le début.
> Bien sur, je me réserve le droit de jouer les Georges Bush en dernier 
> recours :-)
> 

Ouaiche...

Eventuellement on commit en taggant proposed-patch-by-gildor-0.1. Comme
ca on garde la branche principale et on merge la branche si c'est bon.

> > Plus serieusement :
> >  - j'aimerais travailler sur le ocamlcvs. J'aimerais faire deux trois trucs
> > copier du cvs que j'utilise habituellement ( cervisia ). C'est pas enorme
> > a faire mais c'est bien pratique...
> 
> Ok. Attention, il est important de tester, surtout dans l'optique de ne pas
> faire perdre de fichiers à l'utilisateur.

Non, non c'est juste des trucs du genre cvs -R ( recursif quoi ) + une
liste des récents + menu contextuel... Je touche pas à la base.

> 
> >  - pour zoggy on va ou ? J'ai fait quelques recherche sur les composants
> > delphi et je pense que c'est un bonne base pour zoggy ( notion d'empaquetage
> > des composants qu'on crees puis d'installation ). Ca serait tres pratique
> > de faire les choses a la ocamlfind ( genre zoggy [install|remove|compile] )
> 
> J'y réléchis encore. J'aime bien l'idée d'etre indépendant de glage.
> Le chargement dynamique de plug-ins me plait aussi. J'essaye de proposer
> une archi pour la fin de semaine prochaine (j'ai pris deux jours de congés 
> :-).
> 

J'attends avec impatience.

> >  - en parlant de ocamlfind : c'est totalement cosmetique mais pourrait
> > on utiliser une structure a la C++ : on compile repertoire par repertoire
> > et on installe dans $(top)/.libs avec ocamlfind install ( j'utilise ca et
> > c'est pas mal parceque ca separe bien les differents composant de
> > l'application, prouvant de ce fait qu'il marche bien ensemble ( pas de
> > dependance cache pourrie ) 
> 
> Je pige pas. Tu peux expliquer un peu +, peut-etre avec un exemple ?
> 

Je vous joint TopMakefile.in et deux Makefile.

TopMakefile.in se met dans le root du projet. quand on fait ./configure
ca génére TopMakefile avec tout ce qui va bien ( en particulier
modification de OCAMLPATH et TEMPBUILDLIB ).

Ensuite chaque Makefile se met dans un rep et peut générer un executable
ou une librairie. 

Si c'est un executable on link avec les require : soit des choses
installé sur le systeme, soit des choses que l'on vient de construire
dans un autre répértoire et qui se sont installés eux memes dans
root/.libs.

Comme ca tout est assez claire : les dépendance entre les paquets sont
satisfait si les objets qu'il faut sont dans la variable INSTALLIB. On
ne gére plus du tout les liens interéptoire qui sont assez complexe. Ca
permet de faire des frontière nettes entre paquets ( et ca facilite la
vie des packageur qui n'ont qu'a changer destdir pour installer les
différentes libs ). 

Je sais que c'est plus simple de tout inclure et d'y aller à la barbare
en incluant tout, mais je trouve que c'est générateur d'erreur : on
finit par avoir des liens entre 15 rep et on ne sait plus qui utilise
quoi. Avec mon système : un rep = une lib independante ( ou plusieurs si
on met différents makefile par rep faut voir ).

Ca a le gros avantage de rendre le système vraiment modulaire...

( Tout ca se discute, je ne suis pas G W Bush, moi ;-> ).


> Du point de vue de la doc utilisateur, on a deux choix:
> - soit faire les modifs en meme temps que le code (j'y crois moyen)

Moi je crois beaucoup à ocamldoc ;->. C'est bien fait et ca permet de
joindre le code avec la doc.

Si tu parles de facons plus générale des HOWTO, c'est plus complexes. Je
pense qu'une semaine avant une release on dit qui s'occupe de quelles
sections ( en fait les gens s'occupent de la section qu'ils ont modifé
depuis la dernière release ). 

> - soit faire la doc avant les releases.
> 
> Je vous propose de mettre à jour la doc quand quelque chose qui y est
> déjà change (suppression/changement de menu, ...).
> Les nouvelles features peuvent etre ajoutées avant release, comme
> ça on les a testées. Pas la peine d'écrire de la doc sur une nouvelle
> feature qui va peut-etre changée et etre améliorée après quelques tests.
> 
> > ps : j'ai juste editer zoggy/Makefile pour clean rm zoggy_parser.ml[i]... et
> > enlever les fichiers correspondants 
> Ok.
> 
> à+
> 
> Maxence
> 

J'attends vos réactions sur les Makefile. Si vous étes d'accord je m'en
occupe la semaine prochaine ( j'ai un mariage ce WE ).

Sylvain LE GALL

///////////////////
TopMakefile.in
//////////////////

#
# sample Makefile for Objective Caml
# Copyright (C) 2001 Jean-Christophe FILLIATRE
# 
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License version 2, as published by the Free Software Foundation.
# 
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# 
# See the GNU Library General Public License version 2 for more details
# (enclosed in the file LGPL).

# where to install the binaries
address@hidden@
address@hidden@
address@hidden@
address@hidden@

# where to install the man page
address@hidden@

# other variables set by ./configure
OCAMLFIND_COMMANDS = "address@hidden@ \
        address@hidden@ \
        address@hidden@"
OCAMLC   = @OCAMLFIND@ ocamlc 
OCAMLOPT = @OCAMLFIND@ ocamlopt
OCAMLDEP = @OCAMLFIND@ ocamldep
OCAMLBEST = @OCAMLBEST@
OCAMLVERSION = @OCAMLVERSION@
OCAMLWIN32 = @OCAMLWIN32@
OCAMLFIND = @OCAMLFIND@
OCAMLP4 = @OCAMLP4@
EXE = @EXE@
address@hidden@
OCAMLPATH=$$OCAMLPATH:$(TEMPBUILDLIB)/
export OCAMLPATH

all: $(if $(LIBRARY), install-buildlib, $(OCAMLBEST))

CMX = $(CMO:.cmo=.cmx)

GENERATED = version.ml

byte: $(if $(LIBRARY), $(NAME).cma, $(NAME).byte)
opt: $(if $(LIBRARY), $(NAME).cmxa, $(NAME).opt)

# Build the lib

$(NAME).cma: $(CMO) 
        $(OCAMLC) -a -o $(NAME).cma $(INCLUDES) -package "$(REQUIRES)" -linkpkg 
\
        -predicates "$(PREDICATES)" $(CMO)

$(NAME).cmxa: $(CMX)
        $(OCAMLOPT) -a -o $(NAME).cmxa $(INCLUDES) -package "$(REQUIRES)" \
        -predicates "$(PREDICATES)" $(CMX)

$(TEMPBUILDLIB):
        mkdir $(TEMPBUILDLIB)

install-buildlib: $(TEMPBUILDLIB) byte opt META
        echo $(OCAMLPATH)
        $(OCAMLFIND) remove -destdir $(TEMPBUILDLIB) $(NAME) 
        $(OCAMLFIND) install -destdir $(TEMPBUILDLIB) $(NAME) $(INSTALLIB)

install-lib: byte opt META
        $(OCAMLFIND) install -destdir $(LIBDIR) $(NAME) $(INSTALLIB)

uninstall-lib:
        $(OCAMLFIND) remove -destdir $(LIBDIR) $(NAME)
        
# Build the executable

BLIBS = $(addsuffix .cma,$(LIBS))

$(NAME).byte: $(CMO)
        $(OCAMLC) -o $(NAME).byte $(INCLUDES) -package "$(REQUIRES)" -linkpkg \
        -predicates "$(PREDICATES)" $(BLIBS) $(CMO)

OLIBS = $(addsuffix .cmxa,$(LIBS))

$(NAME).opt: $(CMX)
        $(OCAMLOPT) -o $(NAME).opt $(INCLUDES) -package "$(REQUIRES)" -linkpkg \
        -predicates "$(PREDICATES)" $(OLIBS) $(CMX)


# Extra files

VERSION=0.1

version.ml: 
        echo "let version = \""$(VERSION)"\"" > version.ml
        echo "let date = \""`date`"\"" >> version.ml

META:
        echo "requires = \""$(REQUIRES)"\"" > META
        echo "version = \""$(VERSION)"\"" >> META
        echo "predicates = \""$(PREDICATES)"\"" >> META
        echo "archive(byte) = \""$(NAME).cma"\"" >> META
        echo "archive(native) = \""$(NAME).cmxa"\"" >> META
        

.SUFFIXES: .mli .ml .cmi .cmo .cmx .mll .mly .zog

.mli.cmi:
        $(OCAMLC) $(INCLUDES) -package "$(REQUIRES)" -predicates 
"$(PREDICATES)" -c $<

.ml.cmo:
        $(OCAMLC) $(INCLUDES) -package "$(REQUIRES)" -predicates 
"$(PREDICATES)" -c $<

.ml.o:
        $(OCAMLOPT) $(INCLUDES) -package "$(REQUIRES)" -predicates 
"$(PREDICATES)" -c $<
        
.ml.cmx:
        $(OCAMLOPT) $(INCLUDES) -package "$(REQUIRES)" -predicates 
"$(PREDICATES)" -c $<
        
.mll.ml:
        $(OCAMLLEX) $<

.mly.ml:
        $(OCAMLYACC) -v $<

.mly.mli:
        $(OCAMLYACC) -v $<
        
.zog.ml:
        $(OCAMLP4) pa_o.cmo pa_zog.cma  pr_o.cmo -impl $< > $@
        
clean::
        rm -f *.cm[iox] *.o *~
        rm -f $(GENERATED) parser.output
        rm -f $(NAME).byte $(NAME).opt
        rm -f $(NAME).cma $(NAME).cmxa
        rm -f $(NAME).a META

dist-clean distclean:: clean
        rm -f TopMakefile Makefile config.cache config.log config.status

.depend depend:: $(GENERATED)
        rm -f .depend
        $(OCAMLDEP) $(INCLUDES) *.ml *.mli > .depend

include .depend

////////////////////
Un Makefile
///////////////////


NAME = gallery
LIBRARY = true
CMO = version.cmo gallery.cmo
REQUIRES = pxp
PREDICATES = 
INSTALLIB = gallery.a gallery.cmxa gallery.cma gallery.cmi META 

include ../TopMakefile

////////////////////
Un autre makefile
///////////////////


NAME = gallery_gui
CMO = translation.cmo gallery_gui.cmo \
        gControl.cmo \
        applicationState.cmo \
        gGalleryViewer.cmo \
        gFolderList.cmo \
        gImageBrowser.cmo \
        gTreeGallery.cmo \
        gallery_main.cmo
REQUIRES = gallery camlimages lablgtk fileutils 
PREDICATES = 

include ../TopMakefile


----- End forwarded message -----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]