# [gelöst] wie portage hooks verwenden?

## Christian99

Hallo, kann mir jemand sagen wo ich eine Anleitung/Dokumentation für portage-hooks finde? Ich hab bisher nichts vernünftiges finden können,

Schönen Dank

ChristianLast edited by Christian99 on Mon Sep 06, 2010 8:50 am; edited 2 times in total

----------

## Genone

Hooks wofür? Gibt diverse Stellen wo eigener Code eingebaut werden kann, allerdings auf sehr unterschiedliche Weise und mit unterschiedlichen Auswirkungen.

----------

## Christian99

ich möchte wine ohne "-fomit-frame-pointer" bauen, da das bei manchen CD-Erkennungen Probleme gibt.

Ich bin mir aber sowieo nicht ganz sicher ob hooks dafür richtig sind, weil ich noch keine richtige Dokumentation dazu gefunden habe.

Was ich bisher so gemerkt  habe, ist das man {pre,post}-{src_compile,prepare...} Funktionen definieren kann. ich hätte dann in eine pre_src_compile funktion sowas wie "filter-flags -fomit-frame-pointer" geschrieben. Was ich blos nicht weiß ist, wo (in welche Datei) diese pre_src_compile Funktion rein kommt, und ob ich das Paket-spezifisch machen kann und ob ich da zusätlich "inherit flag-o-matic" rein machen kann, damit ich filter-flags verwenden kann.

Ich weiß dass ich in /etc/portage/env/... auch einfach CXX_FLAGS="" neu definieren kann für wine, aber dass möchte ich eigentlich nicht, denn dann müsste ich ja theoretisch beim ändern der Compiler-Flags das zweimal machen (zugegeben, ich hab das bisher blos ein oder zweimal gemacht, aber mir gehts ums Prinzip  :Smile:  ). Das würde ich dann halt machen, wenn hooks nicht so funktionieren wie ich mir es vorstelle.

Schöne Grüße

Christian

----------

## mv

In /etc/portage/env/... kannst Du auch Deine Funktion definieren. Allerdings hast Du Probleme, falls das ebuild nicht "inherit flag-o-matic" enthält, denn "inherit" darfst Du dort nicht mehr ausführen. Du kannst dort natürlich ein eigenes filter-flags stricken oder einfach so etwas wie CXXFLAGS="${CXXFLAGS} -fno-omit-frame-pointer" einfügen.

Alternativ kannst Du auch die /etc/portage/bashrc aus portage-bashrc.tar.gz benutzen und in die dann unterstützte Datei/Directory /etc/portage/package.cflags einen Eintrag vom Typ 

```
app-emulation/wine +fomit-frame-pointer
```

 machen.

----------

## Genone

Ok, Phase Hooks werden in /etc/portage/bashrc definiert. Die Funktionen werden dann für jedes Paket benutzt, aber in der Funktion kann man natürlich eine passende Bedingung definieren, e.g.

```
if [ "${PN}" == "wine" ]; then
```

Eclasses sollte man definitiv nich via bashrc laden (Elibs würden gehen, aber die existieren noch nicht), aber da das wine Ebuild flag-o-matic selber lädt brauchst du das hier auch nicht.

Das man mit Dingen /etc/portage/bashrc aufpassen muss ist hoffentlich selbstverständlich.

----------

## Christian99

hm, also wohin jetzt? in /etc/portage/bashrc oder nach /etc/portage/env... weil im env verzeichnis kann ich doch per Paket einstellungen machen. da ist nämlich schon was drin: /etc/portage/env/dev-db/mysql enthält: 

```
CFLAGS="-O2 -pipe -fomit-frame-pointer -march=core2 -DPIC -fPIC"

CXXFLAGS="-O2 -pipe -fomit-frame-pointer -march=core2 -DPIC -fPIC"

```

wobei ich allerdings nicht weiß, wo das herkommt. ich bin mir ziemlich sicher, dass ich das nicht selber gemacht hab, zu einem Paket gehört sie aber auch nicht (laut equery b) Habt ihr da zufällig ne Ahnung wo die herkommen könnte, und ob ich die noch brauche?

zu "-fno-omit-frame-pointer": Geht das so? Gibts diese Option überhaupt? In der gcc doku steht das so nicht drin, oder kann man alles mit vorhergehenden "no" negieren? Das wäre eigentlich am einfachsten.

Und wenn ich eine Funktion schreibe, wie muss die aussehen? ganz einfache bash-function? oder brauch ich da noch was extra?

Ich würde es so machen: 

```

/etc/portage/env/app-emulation/wine:

function pre_src_compile( )

{

filter-flags -fomit-frame-pointer

}

```

Reicht das so?

----------

## Max Steel

Statt -fno-omit-frame-pointer einzubauen, kannst du auch -fomit-frame-pointer "ausbauen"

/etc/portage/env/app-emulation/wine ---> /etc/portage/env/no-frame-pointer

```
CFLAGS="${CFLAGS/-fomit-frame-pointer /}"

CXXFLAGS="${CXXFLAGS/-fomit-frame-pointer /}"
```

Vll gehts mit ebuild-functions auch. Aber so dürfte es (meiner Meinung nach) am einfachsten klappen.

----------

## Necoro

 *Christian99 wrote:*   

> zu "-fno-omit-frame-pointer": Geht das so? Gibts diese Option überhaupt? In der gcc doku steht das so nicht drin, oder kann man alles mit vorhergehenden "no" negieren?

 

 *man gcc wrote:*   

> Many options have long names starting with -f or with -W---for example,
> 
>        -fmove-loop-invariants, -Wformat and so on.  Most of these have both
> 
>        positive and negative forms; the negative form of -ffoo would be
> ...

 

----------

## Christian99

ok, vielen dank für eure Hilfe. Ich hab jetzt in der /etc/portage/env/app-emulation/wine folgendes stehen:

```
CFLAGS="${CFLAGS} -fno-omit-frame-pointer"

CXXFLAGS="${CXXFLAGS} -fno-omit-frame-pointer"
```

und das scheint zu funktionieren.

Auch das mit dem "ausbauen" ist interessant. das hab ich noch nicht gekannt.

----------

## Max Steel

 *Christian99 wrote:*   

> ok, vielen dank für eure Hilfe. Ich hab jetzt in der /etc/portage/env/app-emulation/wine folgendes stehen:
> 
> ```
> CFLAGS="${CFLAGS} -fno-omit-frame-pointer"
> 
> ...

 

Geht sogar noch weiter.

Da python-2 mit -O3 besser lauft(/en soll) hab ich z.B.:

/etc/portage/env/dev-lang/python ---> /etc/portage/env/optimize-3

```
CFLAGS="{CFLAGS/-O? /-O3 }"

CXXFLAGS="{CXXFLAGS/-O? /-O3 }"
```

Das heißt -O<irgendwas> mit -O3 austauschen.

Edith: Quatsch Portage. Python natürlich.

----------

