The K Desktop Environment

4.7. 'Micro-Com fer': Compilar el KDE 1.1.1 en SGI Irix 6.x

Chris Berry va enviar el següent micro-Com fer actualitzat a comp.windows.x.kde.

Aquesta és una modificació del 'Micro-Com fer' original enviat per Chris Sterritt. És vàlid per a KDE-1.1.1 corrent sobre Irix 6.5. No ho he intentat sobre altres plataformes. Hi ha alguns elements de contenció: Obtinc molts, molts avisos sobre definicions Qt forçades, sobre definicions libkdecore forçades, etc. (Tantes definicions forçades, que hauria pogut escriure un diccionari), la part i18n no funciona (mentre que si que ho deia en v1.0) i kikbd estossega en la consola (funciona bé altrament). Tots els comentaris o preguntes els podeu dirigir a berry@ieeecs.concordia.ca. Mantindré també una còpia d'aquest 'Com fer' en la meva pàgina web personal: http://alcor.concordia.ca/~c_berry/.

També, si aquest tema no us interessa, he carregat els binaris de kde-1.1.1 i egcs-1.1.2 a ftp://ftp.cmc.ec.gc.ca/pub/hbc/sgi/. El KDE ha estat compilat amb biblioteques compartides, per tant si no teniu libstdc++.so.2.9.0 jo us suggeriria que descarreguéssiu els binaris egcs igualment. Si us plau descarregueu i _llegiu_ també el fitxer LLEGEIXME del directori, ja que conté important informació sobre la instal·lació.

En últim lloc ni jo ni Environment Canada acceptem cap responsabilitat personal respecte la vàlua o ús d'aquestes instruccions. Han funcionat per a mi. Si us funcionen, està bé, però si no ho fan no us puc ajudar ni tampoc ningú d'EC. Adoneu-vos que algunes coses no funcionen de la manera que haurien de fer-ho. Si trobeu alguna manera de solucionar els problemes feu-ho saber a algú altre. Personalment no podré provar res després del 20 d'Agost de 1999 ja que retornaré a la Universitat (i utilitzaré SunOS).

Passeu-ho bé!

  1. Instal·lar Qt 1.42 o superior.

  2. Estic instal·lant el KDE com a usuari (no com a root) per això tinc una variable d'entorn KDEDIR que té un valor diferent de /usr/local/ o quin sigui el per defecte. Així ho esmentaré més endavant, però no cal que ho feu. A més SGI té una biblioteca 'jpeg' i una 'png' però estan obsoletes i no acaben d'anar bé del tot. Per tant haureu d'aconseguir el codi font de libpng i libz (la de jpeg ve en el 'kdesupport'); Jo els he trobat com a RPM font en servidors rèplica d'ftp de RedHat.

  3. Obteniu l'egcs 1.1.1 o superior, i compileu amb el paràmetre '-fsquangle' activat. Això és així perquè l'assemblador SGI no pot tractar amb noms d'objectes molt grans produïts perl g++ normal i el 'gas' no funciona encara per als SGI. Haureu de crear les biblioteques gcc utilitzant aquest binari també. Assegureu-vos que el vostre PATH obté únicament aquest compilador (si en teniu instal·lat algun altre en una altra banda). Quan faig un 'g++ -v' obtinc:
     gcc version egcs-2.91.60 19981201 (egcs-1.1.1 release)

  4. Feu un
     setenv LDFLAGS " "
    per què els fitxers script de configuració 'configure' insisteixen en provar de fer 'g++ -s' quan compilen un programa de prova, cosa que sempre falla en els SGI.

  5. Desempaqueteu el 'kdesupport' i entreu en el seu directori. Executeu el fitxer de configuració amb "--prefix" si us cal:
     ./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
    Modifiqueu això d'acord amb les vostres necessitats. En el meu cas jo he posat el 'Qt' en el mateix directori que el KDE, per això he hagut d'explicitar els directoris d'include i de les biblioteques. Algunes vegades el 'configure' pot no veure el directori de 'include'. Comproveu el codi del fitxer '.login' per a corregir-ho (Heu configurat el vostre fitxer '.login' com us demanava la instal·lació del 'Qt'?).

  6. Executeu el fitxer (que s'inclou més endavant) de la següent manera:
     find . -name Makefile -exec ../FixMakesSq {} \;
    Això arregla totes les línies de compilació de manera que les biblioteques repetides (jpeg i png) són substituïdes per camins d'accés totals, per a que no s'enllacin amb les del SGI. Nota: En el 'Com es fa' original s'afegia '-fsquangle' a cada 'makefile'. Això provocava errors en la compilació. He descobert que només era necessari realment en un makefile. Aquest s'esmentarà més endavant.

    Aquí hi ha el fitxer de configuració 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";
         }
     }
             
     #NOTA: Descomenteu aquesta secció si voleu afegir 
     #-D_LANGUAGE_C_PLUS_PLUS per a tots els makefiles
     #Jo personalment no ho he provat, però no hauria d'espatllar 
     #res.
     # Alternativament, afegiu aquest senyal als llocs especificats més avall.
     
     #elsif (/cxxflags\s*=(.*)$/i)
     #{
     #    print "CXXFLAGS =  -D_LANGUAGE_C_PLUS_PLUS $1\n";
     #}
     else
     {
         print;
     }

    Feu:
     gmake
     gmake install

  7. Aneu al directori font de 'libz', feu:
     ./configure --prefix=$KDEDIR
     gmake
     gmake install

  8. Aneu al directori font de 'libpng', feu:
     ./configure --prefix=$KDEDIR
     gmake
     gmake install

  9. Desempaqueteu 'kdelibs' i entreu en el seu directori. Adoneu-vos del paràmetre '--enable-new-stuff' per al fitxer './configure' (podria no ser necessari, però res no es queixarà si l'utilitzeu):
     ./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. Trobeu el 'kprocctrl.cpp', i arregleu el Makefile d'aquest directori. Només si no heu descomentat la secció que té aquesta funció en el fitxer FixMakesSq, afegiu '-D_LANGUAGE_C_PLUS_PLUS' a la línia CXXFLAGS. Això fa que prengui la definició correcta per a les funcions de senyals (té un paràmetre 'int').

  11. Trobeu el 'addressbook.cc', i arregleu el Makefile en aquest directori. Afegiu '-fsquangle' a la línia de CXXFLAGS. Això fa possible gestionar el nom gran que apareixerà.
     gmake
     gmake install

  12. Desempaqueteu el 'kdebase' i entreu al seu directori. Feu:
     ./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. Arregleu el 'memory_sgi.cpp' (feu un 'find' des del directori 'kdebase'). Jo he posat el contingut de tota la funció en un comentari #ifdef ... no compila en la meva màquina, i de tota manera mai no utilitzo aquesta part del KPanell :-).

  14. Arregleu el 'TEShell.C' (en el directori kdebase-1.1.1/konsole/src/). És l'operació per a obtenir un 'pty' per a la nova consola K. Lamentablement no es va escriure pensant en l'Irix i necessita que s'apliqui un pegat amb el 'diff' inclòs més avall:
     *** 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: Problemes en altres sistemes ?
     
     gmake
     gmake install

  15. Desempaqueteu el 'kdeutils'.
     ./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. Trobeu el 'kcalc_core.cpp' i arregleu el seu Makefile com heu fet per al 'kprocctrl.cpp' més amunt.
     gmake
     gmake install

  17. Desempaqueteu els 'kdegames', 'kdegraphics', i 'kdetoys' i per a cadascun d'ells entreu en el seu directori i feu :
     ./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. Aquest pas és opcional per al KDE-1.1. No crec que sigui necessari per al KDE-1.1.1. El Knotes mai m'ha petat en la meva màquina. Ho he deixat aquí per a la completesa. Trobeu el directori a on hi ha el 'knotes'. Aneu-hi, feu un 'make clean', aleshores canvieu els CXXFLAGS del seu Makefile. La línia dels CXXFLAGS té '-O2'; canvieu-ho a '-g'. Aleshores feu-ho 'make' i 'make install'. La raó d'això és que vaig trobar que el 'knotes' petava minuts més tard d'engegar-se; en canvi quan vaig recompilar amb l'opció '-g' (que vol dir suport per a la depuració activat) en comptes de '-O2' (optimització) funcionava bé. Imagineu-vos-ho :-).

I això és tot. Ara hauríeu de poder executar el KDE.