Gontran a écrit :
>l'ordre dans lequel apparaissent les éléments importe peu dans
>le fichier XML, seule l'imbrication des balises doit être respectée.
Ce n'est pas vrai, tu dois respecter l'ordre que tu as défini dans le DTD
Exemple de fichier XML et DTD qu'utilise les paquets d'Octoz
http://octoz.org/dtd/entry.dtd
http://octoz.org/dtd/examples/infos.xml
Documentation :
http://www.w3schools.com/xml/
http://www.w3schools.com/dtd/
D'ailleurs je rajouterai la balise <license> dans le fichier infos.xml
prochainement.
Le système GAR de LNX-BBC a un système pour copier les licences dans les
paquets d'après la variable LICENSE, je l'implémenterai dans Hedgar.
Merci Gontran pour http://xmlstar.sourceforge.net/ !
Je ne savais pas que l'on pouvez manipuler du XML avec bash.
Je n'ai pas chercher d'ailleurs...
C'est cool ça, parce que là j'utilisai des sed pour récupéré par exemple
la description du fichier XML, c'était pas top top. :)
Pour les fonctions do_make, do_configure par défaut, c'est une très
bonne idée, le nbuild pourra être alors très petit. Mais comme l'a
souligné Leif-, il faut prévoir que certains paquets n'ont pas d'étape
configure (par exemple).
Dans Hedgar, voilà comment ca marche:
En général on a un Makefile standard avec
CONFIGURE_SCRIPTS = $(WORKSRC)/configure
BUILD_SCRIPTS = $(WORKSRC)/Makefile
INSTALL_SCRIPTS = $(WORKSRC)/Makefile
CONFIGURE_ARGS = --prefix=$(prefix) --shared
Ce qui veut dire que ca fait simplement
./configure --prefix=/usr --shared && make && make install
Si un paquet ne possède pas de ./configure, alors on supprime la
variable CONFIGURE_SCRIPTS.
Lorsque les actions génériques ne conviennent plus, un simple custom
fait l'affaire,
on met "INSTALL_SCRIPTS = custom" et on écrit l'action "install-custom".
Exemple avec le Makefile de zlib :
--------------------
GARNAME = zlib
GARVERSION = 1.2.2
CATEGORIES = base
MASTER_SITES = http://www.zlib.net/
DISTFILES = $(GARNAME)-$(GARVERSION).tar.gz
DESCRIPTION = A compression/decompression Library
MAINTAINER = Vincent Fretin <[EMAIL PROTECTED]>
define BLURB
#FIXME: blurb goes here
endef
CONFIGURE_SCRIPTS = $(WORKSRC)/configure
BUILD_SCRIPTS = $(WORKSRC)/Makefile
INSTALL_SCRIPTS = custom
CONFIGURE_ARGS = --prefix=$(prefix) --shared
# --libdir=/lib
include ../category.mk
install-custom:
@cd $(WORKSRC) && \
$(MAKE) prefix=$(DESTDIR)/$(prefix) install && \
cd -
@$(MAKECOOKIE)
post-install:
@mkdir -p $(DESTDIR)/lib
#this line is in LFS 6.0
@mv $(DESTDIR)/usr/lib/libz.so.* $(DESTDIR)/lib
# @rm $(DESTDIR)/lib/libz.so
@ln -sf ../../lib/libz.so.1.2.2 $(DESTDIR)/usr/lib/libz.so
@cd $(WORKSRC) && $(MAKE) clean && \
./configure --prefix=$(prefix) && $(MAKE) && \
make prefix=$(DESTDIR)/$(prefix) install
@chmod 644 $(DESTDIR)/usr/lib/libz.a
@$(MAKECOOKIE)
--------------------
Vous remarquez le post-install qui est exécuter après l'action
install-custom
L'ordre n'a pas d'importance dans le Makefile, post-install aurait bien
pu être avant install-custom, ca aurait été pareil.
On peut écrire n'importe quel action pre- et post-
pre-fetch
post-fetch
pre-patch
post-patch
Les actions seront exécuté au bon moment.
Il y a les actions suivantes
fetch-list fetch checksum makesum extract checkpatch patch
fixup build install reinstall
seulement les actions
fetch extract patch build install
peuvent avoir des pre- et post- actions
Il y a d'autres variables qui peuvent être utilisé
BUILD_ARGS
INSTALL_ARGS
pour les arguments
et CONFIGURE_ENV, BUILD_ENV, INSTALL_ENV pour les mettre des variables
d'environnements
par exemple si on a :
BUILD_ENV = VAR=qqch
BUILD_ARGS = -j1
à l'action build, ca exécutera :
VAR=qqch make -j1
En gros :)
Ncooker devrait avoir cette logique là je pense.
Pour les noms des paquets
Pour Octoz j'ai choisi comme séparateur de champ le underscore _ pour
que ce soit très facile de séparé tous le champs en une commande (@tab =
split("_",$pkgname) en perl)
Les paquet debian utilise aussi le underscore.
L'inconvéniant de mettre un tiret a plusieurs inconvéniant pour le
programmeur
un paquet se nommant
linux-libc-headers-2.6.11.2-2-i686.oz.tgz
est difficile à séparé pour en tirer les infos.
En fait j'ai regardé le script installpkg de slackware et il y a une
bonne méthode pour ce problème. Ca parcourt caratère par caractère le
nom du paquet...
La distribution gobolinux utilise carrémment le doublet tiret -- comme
séparateur.
Moi j'ai adopté le underscore, parce que je trouve ca plus joli, on voit
bien la séparation des champs, et une facilité pour le programmeur.
exemple de nom de paquet pour Octoz :
zlib_1.2.2-2_i686.oz.tgz
Avant les paquets octoz était écrit comme ceci zlib-1.2.2-oz2.tgz
Pareil, j'ai choisi le format 1.2.2-2, pour que l'on est tout de suite
la version du programme et la version du paquet.
J'ai rajouté l'architechture car plus tard Octoz sera peut-être porté
sur ppc, il faut être prévoyant. :)
Après je ne sais pas si vous en aviez déjà discuté ou non...