Mediul grafic K

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.

    Notă

    Î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.