Je voudrais connaître les dépendances de mon programmes (pour en faire un deb facilement). Et n'ayant rien trouver pour cela, j'ai décider de faire un petit script qui m'afficherai les librairies nécessaires.
Or, je voudrais que les libs qui sont demander par d'autres libs ne soit pas affiché. (Ex : grace au script je trouve libqt3c102-mt et libx11-6, mais comme libx11-6 est nécessaire pour libqt3c102-mt, il ne doit pas s'afficher)
Mais je fais face à de nombreux problèmes : notamment à cause de deux variables (n2 et dependsLibs) qui perdent leur valeurs en sortant d'une boucle.
Si une âme charitable pourrait m'aider, ca ne serait pas de refus (^_^)
Merci d'avance.
#!/bin/bash
libs[0]=""
dependsLibs[0]=""
n=0
n2=0
preexistant=0
# On lit les .so necessaire à l'exe un par un
ldd $1 | awk '{ print $3 }' | while read so
do
# On trouve le paquet de chaque .so et le rajoute au tableau
libs[n]=`dpkg -S $so | awk -F: '{ print $1 }'`
############Expérimentale#################
###########(ne marche pas)################
if [ $n = 0 ]
then apt-cache depends ${libs[0]} | while read lib
do
dependsLibs[n2]=`echo $lib | awk '{ print $2 }'`
let "n2 += 1"
# ici n2 augmente logiquement
done
fi
##########################################
##########################################
# ici, n2 == 0, pourquoi ????
# On cherche si la lib a déjà été trouver, si oui on ne la rajoute pas
for (( tmp = 0; tmp < n; tmp++ ))
do
if [ "${libs[n]}" = "${libs[tmp]}" ]
then let "preexistant = 1"
fi
done
if [ $preexistant = 0 ]
then echo ${libs[n]}
fi
# On remet preexistant sur "non" et change dans le tableau
let "preexistant = 0"
let "n += 1"
done
# ldd puxor
Posté par tgl . Évalué à 2.
Essaye plutôt ça :
# objdump -p ton_fichier_binaire | sed -n 's:^NEEDED::p'
Et tu peux aussi jeter un oeil sur ces bouts de code là, qui pourraient t'inspirer. Y'a des trucs spécifiques à Gentoo dedans, mais c'est adaptable je pense :
http://www.gentoo.org/cgi-bin/viewcvs.cgi/users/spider/depreverse/?(...)
http://tdegreni.free.fr/gentoo/dotfinder.py(...)
[^] # Re: ldd puxor
Posté par tgl . Évalué à 2.
> pourraient t'inspirer.
Plus précisement, le premier lien pointe sur "depreverse", un petit script du genre du tiens (qui fait aussi les dépendances des modules perl ou python, mais bon là on s'en fout). Lui doit être distro-agnostique je pense.
Le deuxième, c'est une surcouche autour pour faire des jolis dessins avec "dot", dans ce genre là :
http://tdegreni.free.fr/gentoo/freeciv-gtk2.ps(...)
Lui est spécifique à Gentoo, mais probablement adaptable si ça t'amuse (en gros, réécrire les bouts de code qui font des correspondances fichier/paquet).
[^] # Re: ldd puxor
Posté par HoloAddict (site web personnel) . Évalué à 1.
#!/bin/bash
echo ""
tour=0
# On lit les .so necessaire à l'exe un par un
objdump -p $1 | awk '/NEEDED/ { print $2 }' | while read so
do
# On trouve le paquet de chaque .so et le rajoute au tableau
dpkg -S $so | awk -F: '{ print $1 }' | while read result
do
if [ $tour = 0 ]
then echo $result
let "tour += 1"
fi
done
done
# Euh,
Posté par gnumdk (site web personnel) . Évalué à 2.
[^] # Re: Euh,
Posté par HoloAddict (site web personnel) . Évalué à 1.
Et de tte facon j'avais déjà essayer de faire un paquet "en bonne et due forme" comme dit sur le guide de developpeur debian (il me semble) mais je n'arrivai à rien... et je ne pense pas que dh_shlibdep peut s'utiliser betement et facilement sur un executable
[^] # Re: Euh,
Posté par tgl . Évalué à 2.
[^] # Re: Euh,
Posté par HoloAddict (site web personnel) . Évalué à 1.
"dpkg-shlibdeps ./mon_exe
failure: open new substvars file `debian/substvars.new': Aucun fichier ou répertoire de ce type"
et je n'ai aucune idée de ce que peut etre ce fichier et de ce qu'il peut y avoir dedans
De plus (ca m'est revenu subitement), j'avais arrété d'essayer de faire des paquets avec les outils debian puisque ceux ci était principalement fait pour les progs utilisant autotools, ce qui n'était pas mon cas. Enfin je dis peut-être une connerie, je ne m'y connais pas énorméments dans ce domaine.
[^] # Re: Euh,
Posté par gros_rouge . Évalué à 2.
Tu mets ce que tu veux dans le ./debian/rules, c'est un simple makefile.
Sinon essaie avec dh_make :
# apt-get install dh-make
Voilà à quoi ressemble le makefile généré :
http://lists.debian.org/debian-user-french/2004/11/msg02119.html(...)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.