K Desktop Environment

4.7. Micro-COMO: Compilando KDE 1.1.1 en SGI Irix 6.x

Chris Berry publicó lo siguiente en comp.windows.x.kde.

Esta es una descarada modificación del Micro-HOWTO original publicado por Chris Sterritt. Lo siguiente es válido para el KDE-1.1.1 ejecutándose en Irix 6.5. No lo he intentado en otras plataformas. Hay algunos elementos preocupantes: obtengo muchos, pero que muchos avisos sobre redefiniciones de Qt, libkdecore, etc. (Son tantas que casi podría haber escrito un diccionario con todas aquellas redefiniciones que me aparecen), no funciona el i18n (sí que lo hacía con la versión 1.0) y kikbd se queda tieso en konsole (funciona bien de otro modo). Cualquier comentario o pregunta puede dirigirse a berry@ieeecs.concordia.ca. I también mantengo una copia de éste COMO en mi página web personal: http://alcor.concordia.ca/~c_berry/.

Además, si no se encuentra capaz de llevarlo a cabo, he colocado binarios de kde-1.1.1 y egcs-1.1.2 en ftp://ftp.cmc.ec.gc.ca/pub/hbc/sgi/. KDE ha sido compilado con librerías compartidas, de modo que sin no tiene libstdc++.so.2.9.0 yo sugeriría descargar a su vez el binario de egcs. Por favor, descarge también y _léase_ el README de este directorio, ya que contiene información relevante para la instalación.

Por último, ni yo ni Environment Canada aceptamos ninguna responsabilidad sobre la adecuación para un caso concreto de estas instrucciones. A mí me funcionan. Si le sirven a usted, pues qué bien. En caso contrario, no le puedo ayudar, ni tampoco nadie en EC. Tome nota de que varias cosas no funcionan del modo que esperaría de ellas. Si encuentra una vía alternativa para evitar estos problemas, haga que la solución sea disponible para los demás. Yo no podré comprobar dichos parches una vez pasada la fecha del 20 de Agosto de 1999, ya que tendré que volver a los estudios (usando SunOS).

¡Disfrútelo!

  1. Instale Qt 1.42 o superior.

  2. Yo estoy instalando KDE con mi propio usuario (no root), así que tengo una variable de entorno KDEDIR que está fijada a algo distinto a /usr/local/ o a lo que constituya la omisión. Este puede ser su caso. Asimismo, SGI tiene una librería 'jpeg' y 'png', pero se encuentran desfasadas. Así que tendrá que buscar los fuentes de las librerías libpng y libz (jpeg viene con kdesupport); yo las encontré como RPMs de fuentes en una de las réplicas de FTP RedHat.

  3. Consiga egcs 1.1.1 o posterior y compile con la opción '-fsquangle'. Esto es debido a que el ensamblador de SGI no puede manejar los enormes nombres dados a los objetos por el g++ normal y gas no funciona bien todavía en los SGIs. Usted tendrá que construirse las librerías del gcc usando asimismo ese binario. Asegúrese de que en su variable PATH no se encuentre mas que este compilador (por si tiene otro compilador gcc instalado por ahí). Cuando ejecuto un 'g++ -v' obtengo lo siguiente:
     gcc version egcs-2.91.60 19981201 (egcs-1.1.1 release) 

  4. Ejecute
     setenv LDFLAGS " "
    pues el script 'configure' insiste en usar 'g++ -s' a la hora de compilar un programa de prueba, el cual siempre falla en los SGIs.

  5. Desembale 'kdesupport' y cambie a su directorio. Ejecute su configure con el "--prefix" que necesita:
     ./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 
    Modifique lo anterior para reflejar su caso concreto. En mi caso, tengo Qt instalado en el mismo directorio que KDE, de modo que tuve que nombrar explícitamente los directorios de los archivos de inclusión y liberías. Algunas veces configure insistirá en no ver el directorio de archivos de inclusión de Qt. Retoque su archivo .login para corregir esto. (¿Configuró su archivo .login tal y como demandaban las instrucciones de instalación de Qt?).

  6. Ejecute el (el cual incluyo más abajo) del siguiente modo:
     find . -name Makefile -exec ../FixMakesSq {} \; 
    Esto parchea todas las líneas de compilación de modo que todas las librerías replicadas (jpeg y png) son sustituidas con sus paths completos, de modo que no se enlace con las librerías correspondientes de SGI. Nota: En el HOWTO original, -fsquangle era añadido a cada makefile. Esto ocasionaba errores de compilación. Yo encontré que únicamente era preciso en un makefile. Esto se destacará más adelante.

    Aquí está el script 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!! Descomente esta sección si desea añadir
     #-D_LANGUAGE_C_PLUS_PLUS a todos los 
     #makefiles. Yo no lo he probado personalmente, pero no debería romper nada
     #Alternativamente, añada la opción en los lugares indicados
     
     #elsif (/cxxflags\s*=(.*)$/i)
     #{
     #    print "CXXFLAGS =  -D_LANGUAGE_C_PLUS_PLUS $1\n";
     #}
     else
     {
         print;
     }

    Ejecute:
     gmake
     gmake install

  7. En el directorio con los fuentes de 'libz', ejecute:
     ./configure --prefix=$KDEDIR
     gmake
     gmake install

  8. En el directorio con los fuentes de 'libpng', ejecute:
     ./configure --prefix=$KDEDIR
     gmake
     gmake install

  9. Desembale 'kdelibs' y entre en su directorio. Fíjese en el argumento '--enable-new-stuff' dado a ./configure (puede que no sea necesario, pero no se queja si lo usamos):
     ./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. Busque 'kprocctrl.cpp', y parchee el Makefile en el directorio donde se encuentre. Sólo si no descomentó la sección que la sección que ejecuta esto en el script FixMakesSq, añada '-D_LANGUAGE_C_PLUS_PLUS' a la línea CXXFLAGS. Esto hace que tenga la definición correcta para las funciones que emplean señales (tiene un argumento de tipo 'int').

  11. Busque 'addressbook.cc', y parchee el Makefile en el directorio donde se encuentre. Añada '-fsquangle' a la línea CXXFLAGS. Esto hace que pueda manejar el nombre larguísimo que se genera.
     gmake
     gmake install 

  12. Desembale 'kdebase' y entre en su directorio. Ejecute:
     ./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. Parchee 'memory_sgi.cpp' (ejecute un find desde el directorio 'kdebase'). Simplemente eliminé los #ifdef'd en toda la función... no compila en mi máquina y de todos modos nunca abro esa parte del KPanel :-).

  14. Parchee 'TEShell.C' (en el directorio kdebase-1.1.1/konsole/src/). Es la operación para obtener una pty para el nuevo Konsole. Desgraciadamente, no se escribió teniendo en mente a Irix, y por lo tanto necesita ser parcheado con el diff incluido a continuación:
     *** 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?
     
     gmake
     gmake install

  15. Desembale '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. Busque 'kcalc_core.cpp' y arregle su Makefile de modo similar a como lo hizo para 'kprocctrl.cpp'.
     gmake
     gmake install

  17. Desembale 'kdegames', 'kdegraphics', y 'kdetoys' y para cada uno de ellos métase en su directorio y ejecute:
     ./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. Este paso es opcional para KDE-1.1. No creo que sea preciso para KDE-1.1.1. Knotes nunca se ha estrellado conmigo. Lo consigno aquí por si acaso. Busque donde se encuentra el directorio knotes. Vaya allí, haga un 'make clean', y entonces cambie las CXXFLAGS en su Makefile. La línea de CXXFLAGS tiene un '-O2', cámbielo por un '-g'. Entonces haga un 'make' y un 'make install'. La razón de esto es porque encontraba que knots se estrellaba a los pocos minutos de ejecutarse; sin embargo, cuando lo recompilaba con la opción '-g' para depurarlo en lugar del '-O2' (optimización) no ocurría nada. ¡Véte tú a saber! :-).

Y esto es todo. Ahora debería de ser capaz de ejecutar el KDE.