Características avanzadas

Compilación parcial de un módulo

Es posible compilar solamente fragmentos de un módulo de KDE. Por ejemplo, quizás pueda desear compilar solamente un programa de un módulo. Kdesvn-build le ofrece la posibilidad de hacerlo fácilmente. Hay varias maneras complementarias de hacer ésto.

Descargar fragmentos de un módulo

Ésta es quizá la mejor forma de hacerlo. Si sale bien, le ahorrará tiempo de descarga y espacio en disco. Kdesvn-build descargará únicamente las partes del módulo que se indiquen. Ello es posible gracias al uso de la opción checkout-only para un módulo, que contendrá una lista de carpetas a descargar.

Sugerencia

Si aún no sabe lo que descargar de un módulo, puede ser una buena idea navegar en primer lugar por el repositorio de Subversion en busca de un módulo, usando WebSVN.

Para obtener solamente KUser y KDat de kdeadmin, podría utilizar checkout-only de la siguiente manera:

module kdeadmin
  checkout-only kuser kdat
end module

Importante

Las carpetas se compilarán en el orden en el que se listen en la opción. Si una de las carpetas necesita algo de un módulo a compilar, necesitará asegurarse de que ambos se encuentran en la línea checkout-only, y que la dependencia requerida va antes que la carpeta que la necesita.

También algunas veces pasa que una aplicación necesita otras carpetas y es difícil averiguar cuáles son, lo cual puede requerir un proceso constante de ensayo y error añadiendo carpetas a esta opción.

Una nota final sobre esta opción: Si cambia el valor de esta opción, debería utilizar kdesvn-build --refresh-build módulo para asegurarse de que el módulo se vuelve a configurar de la forma adecuada. Adicionalmente, Kdesvn-build nunca eliminará los archivos existentes si ha quitado algunas carpetas de la opción checkout-only, o ha añadido la opción al módulo que ha descargado.

Eliminar carpetas de una compilación

En lugar de restringir lo que se descarga, es posible descargarlo todo y decirle al sistema de compilación que se salte unos pocas carpetas cuando haga la compilación. Ésto puede ser útil si una carpeta falla continuamente y no es necesario para el resto del módulo.

Esta posibilidad se maneja con la opción do-not-compile. Es similar a la opción checkout-only que se acaba de describir, en cuanto a que se reduce a una simple lista de carpetas que no deberían compilarse.

Importante

Al igual que checkout-only, esta opción necesita al menos que el script configure se ejecute de nuevo para el módulo una vez modificada. Ésto se hace usando la orden kdesvn-build --reconfigure módulo.

Para eliminar la carpeta dcoppython del proceso de compilación de kdebindings:

module kdebindings
  do-not-compile dcoppython
end module

Compilar algunas carpetas de un módulo completo

Puede usar la opción inst-apps para indicar que se compilen solamente unos pocas carpetas de un módulo completo (aunque se descargará el módulo entero).

Usar esta opción equivale a combinar las opciones checkout-only y do-not-compile: el script descargará el módulo completo como do-not-compile pero sólo compilará aquellos carpetas que especifique, como checkout-only. Debido a ésto, normalmente es mejor usar simplemente checkout-only en su lugar.

Se aplican las mismas advertencias que se hicieron para las dos opciones anteriores: debe volver a configurar el módulo si cambia el valor de inst-apps.

Soporte de ramas y etiquetas en Kdesvn-build

¿Qué son las ramas y etiquetas?

Subversion ofrece la posibilidad de gestionar el histórico del código fuente de KDE. KDE aprovecha este soporte para crear ramas en el desarrollo y etiquetar el repositorio con cada lanzamiento de una nueva versión.

Por ejemplo, los desarrolladores de KMail podrían estar trabajando en una nueva característica en una rama diferente, con el fin de no interferir en la versión usada por la mayoría de desarrolladores. Esta rama tendría un desarrollo activo dentro de ella, incluso mientras la rama principal (llamada /trunk) continuara con su desarrollo.

Una etiqueta, por otra parte, es una instantánea del repositorio de código fuente en un instante determinado del tiempo. Las etiquetas son utilizadas por el equipo administrativo de KDE para marcar una versión de código como apropiada para su lanzamiento, mientras que permiten a los desarrolladores seguir trabajando en el código.

En Subversion no hay diferencia entre las ramas, etiquetas o la rama principal (trunk) dentro del código. Es tan sólo una convención usada por los desarrolladores. Ésto dificulta dar un soporte adecuado a las ramas y etiquetas dentro de Kdesvn-build. No obstante, hay algunas cosas que sí pueden hacerse.

Cómo usar las ramas y etiquetas

El soporte para las ramas y etiquetas es manejado por un conjunto de opciones, que van desde una petición genérica para una versión, hasta especificar el URL de descarga para los usuarios avanzados.

El modo más sencillo es usar las opciones branch y tag. Usted simplemente indica la opción junto con el nombre de la rama o etiqueta deseada para un cierto módulo, y Kdesvn-build tratará de determinar la ubicación apropiada dentro del repositorio de KDE desde la que realizar la descarga. Para la mayoría de módulos de KDE esta opción funciona bastante bien.

Para descargar kdelibs de KDE 3.5 (que se conoce simplemente como la rama 3.5):

module kdelibs
  branch 3.5
  # otras opciones...
end module

O, para descargar kdemultimedia tal como salió con KDE 3.4.3:

module kdemultimedia
  tag 3.4.3
  # otras opciones...
end module

Sugerencia

También puede especificar un nombre de rama de manera global. Pero si se elige esta opción, ¡no olvide especificar una rama distinta para los módulos que no deben usar la rama global!

Opciones avanzadas de soporte de ramas

Kdesvn-build admite dos opciones para situaciones en las que branch y tag suponen una ruta incorrecta: module-base-path y override-url.

  • module-base-path se usa para ayudar a Kdesvn-build a rellenar la parte restante de la ruta de un módulo. En el repositorio de KDE, todas las rutas son de la forma svnRoot/module-base-path/nombre-módulo. Normalmente, Kdesvn-build puede averiguar la parte de en medio por sí mismo. Cuando no pueda, use module-base-path como sigue:

    module qt-copy
      # branch no funciona aquí todavía
      module-base-path branches/qt/3.3
    end module
    

    Ésto hará que Kdesvn-build descargue qt-copy de (en este ejemplo), svn://anonsvn.kde.org/home/kde/branches/qt/3.3/qt-copy.

  • La opción override-url, por otro lado, precisa que especifique la ruta exacta desde dónde descargarla. Sin embargo, ésto le permite establecer rutas de las que no esperaría que Kdesvn-build realizase descargas.

    module qt-copy
      # Especifica la ruta exacta de donde obtener el código fuente.
      override-url svn://anonsvn.kde.org/home/kde/branches/qt/3.3/qt-copy
    end module
    

    Importante

    Kdesvn-build no tocará ni corregirá el valor que usted especifique para la opción override-url, por lo que si modifica la opción svn-server, puede necesitar actualizar ésta también.

Cómo Kdesvn-build trata de garantizar una compilación satisfactoria.

Reintentos automáticos

Debido a varias cuestiones del sistema de compilación KDE, Kdesvn-build realizará automáticamenteuna serie de pasos para intentar que un módulo compile cuando este falle.

  1. Al primer fallo, Kdesvn-build simplemente volverá a ejecutar la orden make. Lo crea o no, ésto a veces funciona realmente, y además si vuelve a fallar lo hará rápidamente.

  2. Al segundo fallo, Kdesvn-build intentará reconfigurar el módulo y recompilarlo. Esto suele resolver las situaciones en las que un archivo del sistema de compilación cambia la reconfiguración requerida, pero el sistema de compilación no realizó este paso automáticamente.

    La carpeta de compilación del módulo se deja intacta en este paso, así que salvo por el paso de reconfigurar, esta opción también fallará rápidamente si no se puede realizar la compilación.

  3. Si el módulo sigue fallando, Kdesvn-build desistirá y continuará con el siguiente módulo. Hay todavía algunas cosas que puede hacer para intentar manualmente que un módulo compile, no obstante.

Nota

Kdesvn-build detectará la mayoría de casos en los que el sistema de compilación necesita ser reconfigurado y lo volverá a configura automáticamente en esos casos.

Además, si Kdesvn-build compiló el módulo la primera vez, todos estos pasos se saltarán desde el momento en que la recompilación limpia normalmente no falla, excepto para un error real.

Recompilar manualmente un módulo

Si realiza un cambio en alguna opción de un módulo, o si el código fuente del módulo cambia de manera que Kdesvn-build no pueda reconocerlo, quizás necesite recompilar manualmente el módulo.

Puede hacer ésto ejecutando simplemente kdesvn-build --refresh-build módulo.

Si desea que Kdesvn-build recompile el módulo automáticamente durante la siguiente actualización de compilación normal, puede crear un archivo especial. Cada módulo tiene una carpeta de compilación. Si crea un archivo llamado .refresh-me en la carpeta de compilación para un módulo, Kdesvn-build recompilará el módulo la siguiente vez que se realice el proceso de compilación, incluso si se realiza la más rápida compilación incremental.

Sugerencia

De forma predeterminada la carpeta de compilación es ~/kdesvn/build/módulo/. Si modifica la opción build-dir, utilice el valor de dicha opción en lugar de ~/kdesvn/build.

Volver a compilar usando .refresh-me para el módulo arts:

% touch ~/kdesvn/build/arts.refresh-me
% kdesvn-build

Controlar el comportamiento de recompilación

Puede que no quiera que Kdesvn-build intente siempre recompilar un módulo. Puede deshabilitar permanentemente este comportamiento modificando la opción no-rebuild-on-fail para que tenga el valor true (verdadero).

Para deshabilitar este comportamiento temporalmente (para una orden), use la opción --no-rebuild-on-fail en la línea de órdenes.

% kdesvn-build --no-rebuild-on-fail

Cambiar la configuración de las variables de entorno

Kdesvn-build no obtiene el entorno de su invocador de la manera en que lo hacen la amplia mayoría de programas. En su lugar, utiliza las preferencias del archivo de configuración para construir su entorno. Ésto es así principalmente para garantizar que el proceso de compilación sea repetible. En otras palabras, Kdesvn-build puede compilar un módulo incluso si usted olvidó lo que puso en las variables de entorno del intérprete de órdenes desde donde ejecutó Kdesvn-build.

Sin embargo, usted puede querer establecer algunas variables de entorno para las que Kdesvn-build no ofrece ninguna opción directamente. Ésto es posible con la opción set-env.

A diferencia de la mayoría de opciones, puede establecerse más de una vez, y acepta dos argumentos separados por un espacio. El primero es el nombre de la variable de entorno a establecer, y el resto de la línea es el valor de dicha variable.

Asigne DISTRO=BSD a todos los módulos:

global
  set-env DISTRO BSD
end global

Reanudar la compilación

Reanudar una compilación fallida o cancelada

Puede decirle a Kdesvn-build que comience compilando un módulo diferente al que normalmente iría en primer lugar. Ésto puede ser útil cuando una serie de módulos falla o si canceló una compilación a mitad. Para ello, use la opción --resume-from.

Nota

Usar --resume-from hará que no se actualice el código fuente.

Reanudar la compilación comenzando por kdebase:

% kdesvn-build --resume-from=kdebase

Ignorar módulos en la compilación

De igual manera que puede reanudar la compilación comenzando por un módulo específico, también puede, por el contrario, actualizar y compilar todo normalmente, pero ignorando un conjunto de módulos.

Puede hacer ésto usando la opción --ignore-modules. Esta opción le dice a Kdesvn-build que ignore el resto de módulos en la línea de órdenes cuando lleva a cabo la actualización y posterior compilación.

Ignorar extragear/multimedia y kdenonbeta durante una ejecución completa:

% kdesvn-build --ignore-modules extragear/multimedia kdereview

Cambiar las opciones desde la línea de órdenes

Cambiar las opciones globales

Puede modificar las preferencias de las opciones del archivo de configuración directamente desde la línea de órdenes. Este cambio sobrescribirá las preferencias del archivo de configuración, pero sólo temporalmente, es decir, sólo tendrá efecto mientras permanezca en la línea de órdenes.

Kdesvn-build le permite cambiar las opciones con nombre del tipo nombre-opción pasando un argumento en la línea de órdenes de la forma --nombre-opción=valor. Kdesvn-build sabrá cuándo no conoce una opción y la buscará en su lista de nombres de opciones. Si no reconoce el nombre, le avisará. En otro caso le recordará el valor que puso y sobrescribirá cualquier preferencia del archivo de configuración.

Establecer la opción source-dir a /dev/null para hacer pruebas:

% kdesvn-build --pretend --source-dir=/dev/null

Cambiar las opciones de los módulos

Es posible también cambiar las opciones para un módulo específico. La sintaxis es similar: --módulo,nombre-de-opción=valor.

Este cambio sobreescribe cualquier preferencia similar para el módulo en el archivo de configuración y se aplica únicamente cuando la opción se pasa desde la línea de órdenes.

Usar una carpeta de compilación diferente para el módulo kdeedu:

% kdesvn-build --kdeedu,build-dir=temp-build