# [TIPS] - Kolorowy output kompilacji dla emerge

## arsen

Wstęp

W dobie kolorowania w gentoo czego popadnie (kolorowe utilsy portage, emerge itd.) czasem miło by było zobaczyć kolorowy output ./configure czy make dla emerge. Wiadomo są gusta i guściki, są ludzie co specjalnie kolory wyłączają, jeśli jesteś jednym z nich możesz spokojnie skończyć czytać te mini-howto  :Wink: .

Kolory w tym przypadku mogą nam pomóc w lepszej czytelności wyników kompilacji (taki wizualny debug), jak na dłoni widać na czerwono warningi a przy ./configure z jakim suportem dana aplikacja będzie się kompilowała itd.

Na początek potrzebujemy dwóch programów, jeden colorgcc będzie nam kolorował wynik make drugi  grc pomoże nam przy ./configure ./autoconf.sh itd.

```

emerge app-misc/grc dev-util/colorgcc

```

następnie

```

mkdir /etc/portage/profile

touch /etc/portage/profile/profile.bashrc

```

do 

```
 

/etc/portage/profile/profile.bashrc

```

wpisujemy

```

declare -xf make configure

gcc() { /usr/lib/colorgcc/bin/gcc $@; }

./configure() { /usr/bin/grc -es ./configure "$@"; }

cc() { /usr/lib/colorgcc/bin/cc $@; }

make() { /usr/bin/grc -es make $@;}

```

Teraz już możemy się cieszyć kolorkami. 

Dla łubiących konfiguracje odsyłam do /etc/colorgcc/colorgccrc można w nim poustawiać kolory pod własne upodobania.

Przygotowałem kilka screenshotów jak to ostatecznie wygląda:

configure1

configure2

warning

make

UWAGA! Sporo osób ma problemy z kompilacja kilku pakietów, jeśli masz też taki problem wyłącz kolorowanie i sprawdz czy dana paczka nadal się nie kompiluje, ostrzeżenie to zniknie jak zlokalizuję przyczynę.Last edited by arsen on Wed Aug 30, 2006 4:57 pm; edited 2 times in total

----------

## mbar

hyhy, może to głupie pytanie, ale jak zrobić, żeby "emerge -pve system | less" zachowało kolory na wyjściu less?

----------

## arsen

 *mbar wrote:*   

> hyhy, może to głupie pytanie, ale jak zrobić, żeby "emerge -pve system | less" zachowało kolory na wyjściu less?

 

less zdaje sie takiej funkconalności nie ma, przynajmniej manuala czytając.

----------

## Yatmai

Fajne  :Smile:  Tu sie czuje jak małe dziecko, bo, strasznie mi sie podoba, że Gentoo jest takie kolorowe  :Very Happy: 

Może jeszcze mała wzmianka o tym jak zmienić kolory, np na mój gust (i warunki na desktopie) to troche bym je podjaśnił  :Smile: 

----------

## sherszen

 *arsen wrote:*   

> 
> 
> Dla łubiących konfiguracje odsyłam do /etc/colorgcc/colorgccrc można w nim poustawiać kolory pod własne upodobania.
> 
> 

 

A moge cos zapytać? Dlaczego Ty masz rezultaty make w języku polskim? Ja zamiast opuszczam katalog mam leaving directory...

Oczywiście system ma polskie iso-8859-2Last edited by sherszen on Sun Aug 27, 2006 4:35 pm; edited 1 time in total

----------

## Yatmai

O pardon, chyba przeoczyłem  :Very Happy: 

----------

## arsen

 *sherszen wrote:*   

>  *arsen wrote:*   
> 
> Dla łubiących konfiguracje odsyłam do /etc/colorgcc/colorgccrc można w nim poustawiać kolory pod własne upodobania.
> 
>  
> ...

 

masz w USE nls?

----------

## sherszen

Tak mam.

----------

## quat

fajna rzecz.

mam wrażenie że komunikaty są lekko opóźnione w stosunku do wersji niekolorowej. czy wolniejsze to trzeba by wykonać kilka testów. 

niestety nie mogłem skompilować sys-process/lsof przy włączonym kolorwaniu wyjścia. po wyłączeniu problem znikł.

w logu do emerga dostałem informacje, że make nie może rozpoznać opcji:

```
....

i686-pc-linux-gnu-gcc  -pipe -O2 -march=prescott -msse3 -fomit-frame-pointer -DLINUXV=26016 -DGLIBCV=204 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -DLSOF_V

i686-pc-linux-gnu-gcc  -pipe -O2 -march=prescott -msse3 -fomit-frame-pointer -DLINUXV=26016 -DGLIBCV=204 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -DLSOF_V

^[[0m^[[31mmake:^[[0m invalid option -- O^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 2^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- a^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- c^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- =^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- c^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 3^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- D^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- D^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- G^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- D^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- H^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- A^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- D^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- _^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- F^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- D^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- O^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- F^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- _^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- V^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- T^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- =^[[0m 

^[[0m^[[31mmake:^[[0m invalid option -- "^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 2^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- .^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 6^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- .^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 1^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 6^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- u^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 2^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- 8^[[0m

^[[0m^[[31mmake:^[[0m invalid option -- "^[[0m

^[[0m^[[31mUsage:^[[0m make [options] [target] ...^[[0m

^[[0m^[[31mOptions:^[[0m

......
```

przypuszczam, że ustawienia w /etc/portage/profile/ do make są nieprawidłowe, ale jakie sa prawidłowe to już nie pokusiłem się sprawdzić.

pozdrawiam,

Kamil

----------

## arsen

dziwne, zanim napisałem na forum o tym kilka dni to testowałem u siebie, wszystko przechodziło bez problemu.

----------

## quat

wywala się na komendzie, która prawidłowo powinna zwrócić (w logu przy wyłączonych kolorach):

```
...

make[1]: Entering directory `/mnt/portage/tmp/portage/lsof-4.77/work/lsof_4.77/lsof_4.77_src/lib'

...
```

 gdzie /mnt/portage/tmp to jest PORTAGE_TMPDIR.

trudno mi jest powiedziec w jaki sposób unikąc tego. poza tym jak na razie taki problem powstał jedynie z kompilacją lsof. nie pojawia się on w przypadku innych paczek.

pozdrawiam,

Kamil

----------

## binas77

Potwierdzam... Tylko w przypadku lsof i glsof wywala błąd. Oto moje emerge:

```

...

Do you want to rename machine.h to machine.h.old and replace it with

new_machine.h (y|n) [y]?

You may now run the make command -- e.g.,

        $ make

(cd lib; make DEBUG="-O" CFGF="-march=pentium4 -Os -pipe -fomit-frame-pointer -DLINUXV=26017 -DGLIBCV=204 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -DLSOF_VSTR=\"2.6.17-gentoo-r6\"")

i686-pc-linux-gnu-gcc  -march=pentium4 -Os -pipe -fomit-frame-pointer -DLINUXV=26017 -DGLIBCV=204 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -DLSOF_VSTR=\"2.6.17-gentoo-r6\"    -O   -c -o dfile.o dfile.c

i686-pc-linux-gnu-gcc  -march=pentium4 -Os -pipe -fomit-frame-pointer -DLINUXV=26017 -DGLIBCV=204 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -DLSOF_VSTR=\"2.6.17-gentoo-r6\"    -O   -c -o dmnt.o dmnt.c

make: błędna opcja -- O

make: błędna opcja -- D

make: błędna opcja -- D

make: błędna opcja -- G

make: błędna opcja -- D

make: błędna opcja -- H

make: błędna opcja -- A

make: błędna opcja -- D

make: błędna opcja -- _

make: błędna opcja -- F

make: błędna opcja -- D

make: błędna opcja -- O

make: błędna opcja -- F

make: błędna opcja -- _

make: błędna opcja -- V

make: błędna opcja -- T

make: błędna opcja -- =

make: błędna opcja -- "

make: błędna opcja -- 2

make: błędna opcja -- .

make: błędna opcja -- 6

make: błędna opcja -- .

make: błędna opcja -- 1

make: błędna opcja -- 7

make: błędna opcja -- g

Składnia: make [opcje] [obiekt] ...

Opcje:

i686-pc-linux-gnu-gcc  -march=pentium4 -Os -pipe -fomit-frame-pointer -DLINUXV=26017 -DGLIBCV=204 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -DLSOF_VSTR=\"2.6.17-gentoo-r6\"    -O   -c -o dnode.o dnode.c

  -b, -m                      Ignorowane dla kompatybilności.

  -B, --always-make           Bezwarunkowe utworzenie wszystkich obiektów.

  -C KATALOG, --directory=KATALOG

                              Przejście do KATALOGu przed robieniem

                              czegokolwiek.

  -d                          Wyświetla dużo informacji diagnostycznych.

  --debug[=FLAGI]             Wyświetla różne rodzaje informacji

                              diagnostycznych.

  -e, --environment-overrides

                              Zmienne środowiska przykrywają makefile.

  -f PLIK, --file=PLIK, --makefile=PLIK

                              Czyta PLIK jako makefile.

  -h, --help                  Wyświetla ten komunikat i kończy działanie.

  -i, --ignore-errors         Ignoruje błędy poleceń.

  -I KATALOG, --include-dir=KATALOG

                              Szuka dołączanych makefile w KATALOGu.

  -j [N], --jobs[=N]          Dopuszcza N zadań naraz; brak N oznacza brak

                              ograniczeń.

  -k, --keep-going            Kontynuuj jeśli nie da się zrobić jakichś

                              obiektów.

  -l [N], --load-average[=N], --max-load[=N]

                              Nie uruchamiaj wielu zadań jeśli load nie jest

                              poniżej N.

  -L, --check-symlink-times   Używanie ostatniego mtime między dowiązaniem a celem.

  -n, --just-print, --dry-run, --recon

                              Nie wykonuje poleceń; jedynie je wyświetla.

  -o PLIK, --old-file=PLIK, --assume-old=PLIK

                              Uznanie PLIKu za bardzo stary i nie tworzenie go

                              ponownie.

  -p, --print-data-base       Wyświetla wewnętrzną bazę danych make.

  -q, --question              Nie uruchamia żadnych poleceń; status powrotu

                              wskazuje aktualność.

  -r, --no-builtin-rules      Wyłącza wbudowane reguły standardowe.

  -R, --no-builtin-variables  Wyłącza ustawianie wbudowanych zmiennych.

  -s, --silent, --quiet       Nie wypisuje poleceń.

  -S, --no-keep-going, --stop

                              Wyłącza -k.

  -t, --touch                 Uaktualnia obiekty zamiast je robić.

  -v, --version               Wyświetla wersję make i kończy działanie.

  -w, --print-directory       Wyświetla aktualny katalog.

  --no-print-directory        Wyłącza -w, nawet jeśli było ono włączone

                              domyślnie.

  -W PLIK, --what-if=PLIK, --new-file=PLIK, --assume-new=PLIK

                              Uznaje PLIK za nieskończenie nowy.

  --warn-undefined-variables  Ostrzega przy odwołaniach do niezdefiniowanych

                              zmiennych.

Ten program został zbudowany dla i686-pc-linux-gnu

Błędy proszę zgłaszać na adres <bug-make@gnu.org>

...

# Wartości zmiennych dla wzorca

# Brak wartości zmiennych dla wzorca.

# Katalogi

# Nie pliki, nie niemożliwości w 0 katalogach.

# Reguły stadardowe

# Brak standardowych reguł.

# Pliki

# statystyki tablic haszujących plików:

# Wypełnienie=0/1024=0%, Przehaszowania=0, Kolizje=0/0=0%

# Ścieżki przeszukiwania VPATH

# Brak ścieżek przeszukiwania `vpath'

# Brak ogólnej (zmienna `VPATH') ścieżki przeszukiwania.

# # of strings in strcache: 0

# # of strcache buffers: 0

# strcache size: total = 0 / max = 0 / min = 4096 / avg = 0

# strcache free: total = 0 / max = 0 / min = 4096 / avg = 0

# Zakończono tworzenie bazy danych Make na Sun Aug 27 20:44:16 2006

i686-pc-linux-gnu-gcc  -march=pentium4 -Os -pipe -fomit-frame-pointer -DLINUXV=26017 -DGLIBCV=204 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -DLSOF_VSTR=\"2.6.17-gentoo-r6\"    -O   -c -o dsock.o dsock.c

make: *** [lib/liblsof.a] Błąd 2

make: *** Oczekiwanie na niezakończone zadania....

!!! ERROR: sys-process/lsof-4.77 failed.

Call stack:

  ebuild.sh, line 1543:   Called dyn_compile

  ebuild.sh, line 938:   Called src_compile

  lsof-4.77.ebuild, line 47:   Called die

!!! emake failed

!!! If you need support, post the topmost build error, and the call stack if relevant.

localhost ~ #                 
```

Przepraszam, za dość długie code, ale mam nadzieje, że w czymś pomogę

POZDRAWIAM

Zmienione na prośbę forumowicza  :Smile: 

----------

## arsen

hmmm, nie mam pojęcia jak to mogę naprawić w sumie.

----------

## sebas86

@Binas77, możesz lekko przyciąć kod, który wstawiłeś, paskudnie się czyta posty w tym wątku. Proszę.  :Smile: 

----------

## backfire

Zrobilem wedlug opisu i jak robie make czy ./configure nie widze kolorow  :Sad: 

----------

## manwe_

Bo to jest do emerge'a, a nie ręcznej kompilacji. Przy robieniu z palca, to spróbuj make | colorgcc

----------

## backfire

A faktycznie dzieki za wyjasnienie, moj blad  :Wink: 

----------

## Yatmai

Chyba warto by tu wspomnieć o małym problemie z owym kolorowaniem   :Rolling Eyes: 

----------

## piotruspan

u mnie tez nie wszystko daje sie skompilowac po wlaczeniu tego "bajeru"

----------

## c2p

Ja wywaliłem:

```
declare -xf make configure 
```

i wszystko się kompiluje.

----------

## backfire

No ja wywalilem ta linijke i nadal mi sie nie kompiluje linux-headers, wywalilem calosc i wszystko ladnie sie kompiluje  :Wink: 

----------

## Gabrys

 *arsen wrote:*   

> Wstęp

 

A jest coś poza wstępem  :Wink: 

```

declare -xf make configure

gcc() { /usr/lib/colorgcc/bin/gcc $@; }

./configure() { /usr/bin/grc -es ./configure "$@"; }

cc() { /usr/lib/colorgcc/bin/cc $@; }

make() { /usr/bin/grc -es make $@;}

```

Teraz proszę mi powiedzieć dlaczemu przy gcc jest $@ zamiast "$@", to samo przy cc i make. Tylko configure jest zrobiony pożądnie.

Pewien scenariusz. Załóżmy, że jakiś pakiet w etapie configure sprawdza możliwości make'a, ale zamiast dostać czyste wyjście make'a dostaje zabrudzone kolorkami, co może powodować błędy w kompilacji programów, które coś takiego będą robić.

I jeszcze jedno. Jeśli make wywołuje gcc, to wyjście jest kolorowane przez grc a nie colorgcc, czyż nie?

----------

## arsen

 *Gabrys wrote:*   

>  *arsen wrote:*   Wstęp 
> 
> A jest coś poza wstępem 
> 
> ```
> ...

 

Więc jak jestem w stanie to popraw to tak by działałało dobrze, całość tego pliku wyszukałem gdzieś na bugzilli, nie zagłębiałem sie bliżej w to.

----------

## Gabrys

Nie wiem jak to wygląda z tymi programami, ale u mnie w /etc/portage/profile/profile.bashrc wylądowało coś takiego:

```
gcc() { /usr/lib/colorgcc/bin/gcc "$@"; }

./configure() { /usr/bin/grc -es ./configure "$@"; }

cc() { /usr/lib/colorgcc/bin/cc "$@"; }

make() { /usr/bin/grc -es make "$@";}
```

Myślę, że w 90% to i tak niczego nie zmienia. Te 10%, to wtedy gdy w argumencie pojawiłaby się np. spacja. Wówczas, gdy argumentami są np. "a" "bc d" i "e" $@ przerobi to na "a" "bc" "d" "e", natomiast "$@" zostawi jak ma być, czyli "a" "bc d" "e". Nie wiem, czy ma to jakieś _PRAKTYCZNE_ zastosowanie, bo jeszcze nie widziałem (ale fakt, nie przyglądam się), aby make przekazywał jakieś argumenty ze spacją. Fakt, faktem, lepiej dać "$@", bo wtedy mamy 100%-otwą pewność, że wszystkie argumenty skryptu (w tym przypadku funkcji) zostaną przekazane do polecenia.

----------

## quosek

niestety, ale przy wlaczonym kolorowaniu konsoli nie chce sie emergowac gcc...... problemy z vpath i troche innego smiecia (nawet trudno powiedziec co jest bledem - bo wyswietla ich pare (wg mnie w formie warningow - wiec nie wiadomo co w koncu wywala))

----------

## Belliash

colorgcc ssie...

polowa rzeczy sie z tym nie kompiluje...

nie wspomne o innych bledach

----------

## c2p

 *Morpheouss wrote:*   

> colorgcc ssie...
> 
> polowa rzeczy sie z tym nie kompiluje...
> 
> nie wspomne o innych bledach

 

To dlaczego błędy występują tylko przy linijkach:

```
make() { /usr/bin/grc -es make $@;} 
```

i czasami przy:

```
./configure() { /usr/bin/grc -es ./configure "$@"; }
```

Jak je wywalisz to wszystko działa, czyli grc ssie  :Razz: .

----------

## Gabrys

Jakby ktoś miał zapędy do kolorowania i szuka kolorowego topa, to polecam htopa

emerge htop

htop

----------

## doman

Nice  :Very Happy: 

Jednak z podaną przez arsena regułką nie kompilowało mi się trochę paczek; przed chwilą zmieniłem wpis na ten podany przez Gabrysia parę postów wyżej i sprawdziłem 2 paczuszki, które pamiętałem, że się wywalały: baselayout i fortune-mod -> teraz poszły bez problemów  :Smile: 

----------

## Gabrys

Wyczaiłem, że wszystko co korzysta z /usr/portage/eclass/linux-info się wypiernicza z tym kolorowaniem.

Np. nvidia-drivers wywala błędy, że niby MTRR nie jest włączone w kernelu, a jak się ręcznie na chama w ebuildzie pogrzebie, żeby nie sprawdzał, to na koniec nie instaluje do dobrego miejsca modułów. Zamiast do /lib/modules/wersja-kernela ładuje do /lib/modules/[stutututu-wersja, a to [srutututu to oczywiście kod odpowiedzialny za jakiś tam kolorek.

----------

## psotnik

Nie rozumie co sie dzieje, ale jak kompiluje bmpx to po paru minutach, wszystko umiera, cos znane z Windows, tylko twardy reset pomaga. Ciekawy przypadek, może ktoś kompilował bmpx??

----------

## Gabrys

Pewnie nie właczyłeś swapa, a masz mało pamięci  :Very Happy: . Też to miałem ostatnio.

----------

## sebas86

 *psotnik wrote:*   

> Nie rozumie co sie dzieje, ale jak kompiluje bmpx to po paru minutach, wszystko umiera, cos znane z Windows, tylko twardy reset pomaga. Ciekawy przypadek, może ktoś kompilował bmpx??

 

Kompilowałem bmpx strasznie pożera RAM. I tak poza, póki widzę, że jeszcze jesteś przed - to po prostu strata czasu, moim zdaniem, nawet Audacious i zwykły Beep-media-player jest dużo bardziej funkcjonalny.

----------

## psotnik

Używam Audacious, ale też sledze zmiany w bmpx, tez ciekawie sie rozwija ten player. Z kompilacja tego programu często są problemy,ale jeszcze nigdy nie zabijało to to całego systemu, o zgrozo. A pamięci hmmm nie mam swapa ale mam 1GB. Nawet przy kompilacji OOo nie włączałem swapa na tym kompie   :Laughing: 

----------

## sebas86

 *psotnik wrote:*   

> A pamięci hmmm nie mam swapa ale mam 1GB. Nawet przy kompilacji OOo nie włączałem swapa na tym kompie  

 

Miałem 256MB RAM + 512MB Swap, wyłączyłem praktycznie całe oprogramowanie pod X bo nie dało się normalnie przejść komiplacji.  :Wink:  Przy czym zaznaczam, że mam ustawioną ilość równoległych wykonań make na 2 (MAKEOPTS="-j2") - może tutaj zaistniał Twój problem, nawet 1GB RAMu da się przejeść.  :Wink: 

----------

## psotnik

Ja mam MAKEOPTS="-j3", czyli sadzicie ze bmpx to taka mała wredna paczka   :Laughing:  Jak juz wspomniałem OOo kompiluje pracując na KDE. Ostatnio Eclipse, skype,kadu Opera i thunderbird były włączone, acha i muza z Audacious, w takim wypadku bmpx jest ze złota   :Laughing:  Ale sprobuje niedługo skompilować również z wyłączonym kolorowaniem i moze z 512MB swap file. 

Tak na marginesie fajny TIPS arsen, tylko wczoraj się uśpiłem patrząc na wypluwane komunikaty  :Laughing:   :Laughing: 

----------

## Gabrys

Mi system się zamrażał przy 512 MB RAM-u i (jak się okazało) 0 MB swapa przy kompilacji przy make -j1

----------

## vermaden

no to teraz pozostaje nam czekac az np -O3 bedzie inna czcionka i -O2 inna, -fomit-frame-pointer bedzie mrugac, a -funroll-loops bedzie napisane tylem  :Wink: 

----------

