# [ebuild] sed dans un ebuild (résolu)

## GentooUser@Clubic

Salut,

J’essaie de créer un ebuild pour le pilote de ma clé wifi afin d'en faciliter la MàJ à même temps que le noyau grâce à la commande emerge @module-rebuild

Mon ebuild fonctionne, mais il se compile pour la version courante du noyau au lieu de celle dans /usr/src/linux (ce qui limite l’intérêt), pire il se compile pour la version courante et s'installe dans le /lib/modules de la nouvelle version...

Pour corriger ça, je doit modifier deux valeurs dans le fichier Makefile et j'utilise sed pour ça, mais :

- Si j’exécute sed manuellement dans le dossier source du module, cela fonctionne parfaitement

- Si je met la même commande dans la fonction src_prepare de mon ebuild elle ne fonctionne plus (le Makefile reste tel-quel)

J'ai essayé d'enlever le -i pour que sed retourne la Makefile après traitement dans le terminal et je constate qu'il arrive bien à le lire mais ne le modifie pas (le fichier n'est pas restauré plus tard par emerge donc)

J'ai aussi modifié mon ebuild pour qu'il affiche la version de sed utilisée, et c'est bien la même que j'utilise manuellement.

l'ebuild : https://raw.githubusercontent.com/g-maxime/rtl8723bu-ebuild/master/net-wireless/rtl8723bu/rtl8723bu-9999.ebuildLast edited by GentooUser@Clubic on Tue Jun 28, 2016 2:47 pm; edited 1 time in total

----------

## guitou

Salut.

A mon avis, c'est un tout bete souci de repertoire courant. un "cd /la/ou/il/faut" avant le sed devrait suffire a le regler  :Wink: 

++

Gi)

----------

## El_Goretto

Effectivement, il doit y avoir une cagade toute bête, car par exemple l'ebuild de gradm modifie aussi son Makefile:

```
src_prepare() {

    epatch "${FILESDIR}"/respect-gentoo-env-r3.patch

    sed -i -e "s:/lib/udev:$(get_udevdir):" Makefile || die

    eapply_user

}
```

Plutôt que de faire un cd avec un path absolu qui risque de péter dans un futur indéterminé, il vaut mieux utiliser sed directement avec le path relatif qui va bien.

----------

## netfab

Salut,

Note que tu tu peux effectuer les deux substitutions en une seule commande :

```

--- /tmp/rtl8723bu-9999.ebuild  2016-06-28 15:45:04.774022633 +0200

+++ rtl8723bu-9999.ebuild       2016-06-28 16:03:34.732072160 +0200

@@ -23,10 +23,11 @@

 

 src_prepare() {

        set_arch_to_kernel

-       sed -i -e "s/^SUBARCH\s\+:=.*$/SUBARCH := ${ARCH}/" Makefile || die

+       sed -i.bak \

+               -e "s/^SUBARCH\s\+:=.*$/SUBARCH := ${ARCH}/" \

+               -e "s/^KVER\s\+:=.*$/KVER := ${KV_FULL}/" \

+               Makefile || die "sed failed !"

        set_arch_to_portage

-

-       sed -i -e "s/^KVER\s\+:=.*$/KVER := ${KV_FULL}/" Makefile  || die

 }

 

 pkg_setup() {

```

Le -i.bak de sed permet de créer automatiquement une copie de backup du fichier modifié.

Après, un :

```

$ ebuild rtl8723bu-9999.ebuild prepare

```

Je compare les deux makefiles :

```

--- Makefile.bak        2016-06-28 16:00:51.737064887 +0200

+++ Makefile    2016-06-28 16:00:51.948064896 +0200

@@ -250,10 +250,10 @@

 EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211

 EXTRA_CFLAGS += -DRTW_USE_CFG80211_STA_EVENT # only enable when kernel >= 3.2

 EXTRA_CFLAGS += -DCONFIG_P2P_IPS

-SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ | sed -e s/ppc/powerpc/ | sed -e s/armv.l/arm/)

+SUBARCH := x86

 ARCH ?= $(SUBARCH)

 CROSS_COMPILE ?=

-KVER  := $(shell uname -r)

+KVER := 4.4.6

 KSRC := /lib/modules/$(KVER)/build

 MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/

 INSTALL_PREFIX :=

```

Çà fonctionne, non ?

----------

## GentooUser@Clubic

 *guitou wrote:*   

> Salut.
> 
> A mon avis, c'est un tout bete souci de repertoire courant. un "cd /la/ou/il/faut" avant le sed devrait suffire a le regler 
> 
> ++
> ...

 

En fait dans un précédente version j'ai ${D}/Makefile mais en fait pas besoin, la fonction src_prepare s’exécute  dans le bon dossier. Comme je le dit dans mon message, sed arrive bien à lire le fichier pas de problème de ce coté.

 *netfab wrote:*   

> Salut,
> 
> Note que tu tu peux effectuer les deux substitutions en une seule commande :
> 
> ```
> ...

 

En effet, non seulement ça à l'air de fonctionner mais je n'arrive plus à le casser  :Laughing:  J'ai l'impression que j'ai un petit problème avec mon environnement de build. Merci !

----------

