# 4.7. Micro-HOWTO: Compilarea KDE 1.1.1 pe SGI Irix 6.x

Chris Berry a publicat următorul micro-HOWTO actualizat (a fost editat pentru a avea aspectul de mai jos) la `comp.windows.x.kde`.

Aceasta este modificarea (evidentă) a Micro-HOWTO-ului original publicat de Chris Sterritt. Aceste lucruri sînt valabile pentru KDE-1.1.1 rulînd pe Irix 6.5. Nu am încercat-o pe alte platforme. Există cîteva puncte de conflict: Obțin foarte multe avertizări despre faptul că definițiile Qt sînt prioritare, că definițiile libkdecore vor fi prioritare etc. (Atît de multe definiții au fost puse prioritare că aș putea să fac un dicționar cu ele), mecanismul i18n nu merge (deși în versiunea în v1.0 mergea) și `kikbd` eșuează în programul `konsole` (în celelalte programe merge bine). Orice comentarii sau întrebări pot fi trimise la berry@ieeecs.concordia.ca. Voi ține o copie a acestui HOWTO în pagina mea personală de web: http://alcor.concordia.ca/~c_berry/.

De altfel, dacă aceste lucruri nu reprezintă ceașca dumneavoastră de ceai, am încărcat binarele pentru kde-1.1.1 și egcs-1.1.2 la ftp://ftp.cmc.ec.gc.ca/pub/hbc/sgi/. KDE a fost compilat cu biblioteci partajate, astfel încît dacă nu aveți `libstdc++.so.2.9.0` vă sugerez să descărcați și binarele `egcs`. Vă rog să luați și să citiți fișierul README din director, deoarece el conține informații importante despre instalare.

În final, vreau să declar ca nici eu și nici Environment Canada nu își asumă responsabilitatea în legătură cu calitatea instrucțiunilor date. Ele au funcționat pentru mine. Dacă merg și la dumneavoastră asta-i foarte bine. Dacă nu merg nu pot să vă ajut, nici chiar cineva de la EC. Trebuie să observați că unele lucruri nu merg așa cum ar trebui. Dacă găsiți o cale să rezolvați aceste probleme, faceți în așa fel ca să afle și ceilalți. Personal nu sînt capabil să testez și să corectez nimic după data de 20 august 1999 deoarece mă voi întoarce la școală (și voi folosi SunOS).

Distracție plăcută!

1. Instalați Qt 1.42 sau mai recent.

2. Instalați KDE sub contul dumneavoastră (nu ca root!) astfel încît să aveți o variabilă de mediu `KDEDIR` care este setată la altceva decît `/usr/local/` sau orice în mod normal este implicit. Deci o voi menționa mai jos, dar dumneavoastră s-ar putea să nu o aveți. Deși SGI are biblioteci 'jpeg' și 'png', ele sînt vechi și deci improprii. Astfel, trebuie să obțineți sursele pentru `libpng` și `libz` (jpeg vine în `kdesupport`). Le-am găsit ca surse RPMs într-unul din directoarele unui mirror FTP pentru RedHat.

3. Obțineți `egcs-1.1.1` sau mai nou și compilați-l cu suport `-fsquangle` activat. Acest lucru este necesar deoarece asamblorul SGI nu poate manipula imensele nume de obiecte produse de un compilator `g++` normal și asamblorul `gas` nu lucrează bine (încă) pentru SGIs. Trebuie să generați și bibliotecile pentru `gcc` utilizînd foarte bine chiar acest binar. Asigurați-vă ca variabila de mediu `PATH` execută numai acest compilator (dacă cumva aveți instalat alt compilator `gcc` în alt director). Cînd dau comanda g++ -v obțin:

        gcc version egcs-2.91.60 19981201 (egcs-1.1.1 release)

4. Dați comanda

        setenv LDFLAGS " "

   deoarece scriptul `configure` insistă să încerce g++ -s cînd compilează programul de test și care întotdeauna eșuează pe un calculator SGI.

5. Dezarhivați `kdesupport` și intrați în directorul lui. Executați scriptul `configure` cu opțiunea `--prefix` dacă este nevoie:

        ./configure --prefix=$KDEDIR --x-includes=/usr/include/X11 \
        --x-libraries=/usr/lib32 --with-qt-includes=/opt/kde-1.1.1 \
        --with-qt-libs=/opt/kde-1.1.1 --enable-shared

   Modificați comanda de mai sus ca să reflecte realitatea dumneavoastră. În cazul meu, am pus fișierele Qt în același director cu KDE, astfel că a trebuit să numesc în mod explicit directorul fișierelor `include` și al bibliotecilor. Uneori scriptul `configure` nu va vedea directorul `include` pentru Qt. Modificați fișierul dumneavoastră `.login` pentru a corecta acest lucru (Ați setat fișierul dumneavoastră `.login` așa cum cer instrucțiunile de instalare ale Qt?).

6. Rulați scriptul (pe care l-am inclus mai jos) după cum urmează:

        find . -name Makefile -exec ../FixMakesSq {} \;

   Aceste acțiuni corectează liniile de compilare și deci toate bibliotecile "replicate" (jpeg și png) sînt înlocuite cu calea completă astfel încît compilarea nu va folosi la editarea de legături bibliotecile SGI.

   | În HOWTO-ul original, opțiunea `-fsquangle` a fost adăugată la fiecare fișier `makefile`. Acest lucru a cauzat erori la compilare. Am observat că acest lucru era necesar numai într-un singur `makefile`. Mai jos va fi subliniat acest lucru.

   Iată mai jos scriptul `FixMakesSq`:

        #!/bin/perl -ni.bak

        if ((/-lpng/) || (/-ljpeg/))
        {
            if (/^(.*)-lpng(.*)$/)
            {
                $b4 = $1;
                $af = $2;
                print "$b4 /path/to/KDE/libs/libpng.a $af\n";
            }
            if (/^(.*)-ljpeg(.*)$/)
            {
                $b4 = $1;
                $af = $2;
                print "$b4 /path/to/KDE/libs/libjpeg.a $af\n";
            }
        }

        #NOTE!! Uncomment this section if you want to add
        #-D_LANGUAGE_C_PLUS_PLUS to all
        #makefiles.  I personally have not tried this, but it should not break
        #anything.
        # Alternately, add the flag in the places noted below.

        #elsif (/cxxflags\s*=(.*)$/i)
        #{
        #    print "CXXFLAGS =  -D_LANGUAGE_C_PLUS_PLUS $1\n";
        #}
        else
        {
            print;
        }

   Executați:

        gmake
        gmake install

7. Duceți-vă în directorul surselor `libz` și executați:

        ./configure --prefix=$KDEDIR
        gmake
        gmake install

8. Duceți-vă în directorul surselor `libpng` și executați:

        ./configure --prefix=$KDEDIR
        gmake
        gmake install

9. Dezarhivați pachetul `kdelibs` și intrați în directorul lui. Observați că există și argumentul `--enable-new-stuff` pentru `./configure` (acesta ar putea să nu fie necesar, dar nici nu apar probleme dacă îl utilizați):

        ./configure --prefix=$KDEDIR --x-includes=/usr/include/X11 \
        --x-libraries=/usr/lib32 --with-qt-includes=/opt/kde-1.1.1 \
        --with-qt-libs=/opt/kde-1.1.1 --enable-shared --enable-new-stuff
        find . -name Makefile -exec ../FixMakesSq {} \;

10. Găsiți `kprocctrl.cpp` și corectați fișierul `Makefile` din acel director. Numai dacă nu ați de-comentat secțiunea care face acest lucru, din scriptul `FixMakesSq`, adăugați `-D_LANGUAGE_C_PLUS_PLUS` la linia cu `CXXFLAGS`. Aceasta face ca definiția pentru funcțiile semnal să fie corectă (are un argument `int`).

11. Găsiți `addressbook.cc` și corectați fișierul `Makefile` din acel director. Adăugați `-fsquangle` la linia `CXXFLAGS`. Aceasta face compilatorul capabil să manipuleze un nume imens pe care îl generează ca rezultat.

         gmake
         gmake install

12. Dezarhivați pachetul `kdebase` și intrați în directorul lui. Executați:

         ./configure --prefix=$KDEDIR  --x-includes=/usr/include/X11 \
         --x-libraries=/usr/lib32 --with-qt-includes=/opt/kde-1.1.1 \
         --with-qt-libs=/opt/kde-1.1.1 --enable-shared
         find . -name Makefile -exec ../FixMakesSq {} \;

13. Corectați `memory_sgi.cpp` (dați un find din directorul `kdebase`. Am dezactivat cu un `#ifdef` întreaga funcție, deoarece nu se compilează pe calculatorul meu și, oricum, niciodată nu deschid acea parte a programului KPanel.

14. Corectați `TEShell.C` (în directorul `kdebase-1.1.1/konsole/src/`). Este operația de a obține un PTY pentru noul program `konsole`. De altfel nu a fost scris ținînd cont și de Irix și are nevoie să fie peticit cu un fișier diff dat mai jos:

         *** TEShell.C   Mon Apr 12 00:12:37 1999
         --- /users/dor/aspg/ber/data/kdedown/kdebase-1.1.1/konsole/src/TEShell.C
         Wed Jul 14 15:15:35 1999
         ***************
         *** 169,174 ****
         --- 169,177 ----
             pid_t pid = waitpid(-1,&status,WNOHANG);
             Shell* sh = shells.find(pid);
             if (sh) { shells.remove(pid); sh->doneShell(status); }
         + #if defined(sgi)
         +   signal(SIGCHLD,catchChild);
         + #endif
           }

           void Shell::doneShell(int status)
         ***************
         *** 234,239 ****
         --- 237,252 ----
                 }
               }
             }
         + #endif
         +
         + #if defined(sgi) /* Irix */
         +
         +   needGrantPty = FALSE;
         +   char* line;
         +   line = _getpty(&ptyfd, O_RDWR|O_NDELAY, 0600, 0);
         +   strcpy(ptynam,"/dev/ptc");
         +   strcpy(ttynam,line);
         +
           #endif

             if (ptyfd < 0) // Linux, FIXME: Trouble on other systems?

    Executați:

         gmake
         gmake install

15. Dezarhivați pachetul `kdeutils` și executați:

         ./configure --prefix=$KDEDIR  --x-includes=/usr/include/X11 \
         --x-libraries=/usr/lib32 --with-qt-includes=/opt/kde-1.1.1 \
         --with-qt-libs=/opt/kde-1.1.1 --enable-shared
         find . -name Makefile -exec ../FixMakesSq {} \;

16. Găsiți `kcalc_core.cpp` și corectați-i fișierul `Makefile` la fel cum ați făcut-o mai sus pentru `kprocctrl.cpp`. După aceasta executați:

         gmake
         gmake install

17. Dezarhivați pachetele `kdegames`, `kdegraphics` și `kdetoys` și pentru fiecare în parte, intrați în directorul lui și executați:

         ./configure --prefix=$KDEDIR  --x-includes=/usr/include/X11 \
         --x-libraries=/usr/lib32 --with-qt-includes=/opt/kde-1.1.1 \
         --with-qt-libs=/opt/kde-1.1.1 --enable-shared \
         find . -name Makefile -exec ../FixMakesSq {} \;
         gmake
         gmake install

18. Acest pas este opțional pentru KDE-1.1. Nu cred că este necesar și pentru KDE-1.1.1. La mine `knotes` nu s-a prăbușit niciodată. Am lăsat aceste lucruri aici pentru a fi complet. Găsiți unde este directorul `knotes`. Intrați acolo și dați comanda make clean, apoi schimbați `CXXFLAGS` din fișierul `Makefile`. Linia `CXXFLAGS` are valoarea `-O2`. Schimbați-o la `-g`. Apoi dați make și make install. Motivul pentru acest lucru este că am descoperit că programul `knotes` se prăbușește la cîteva minute de la pornire. Oricum, cînd l-am recompilat cu `-g` (adică suport pentru depanare) în loc de `-O2` (optimizare), rulează bine.

Și asta-i tot. Acum ar trebui să puteți rula KDE.