%gnomeincludes; %includes; ]> &header;

El presente documento asume que usted ya conoce como fucniona el sistema de ports, y por lo tanto solamente se enfoca a tips y consejos específicos de GNOME. Instrucciones generales pueden localizarse en FreeBSD Porter's Handbook.

Macros del Makefile en GNOME

Recientemente, la infraestructura de ports de GNOME sufrió algunos cambios, de tal forma que las aplicaciones de GNOME 1 pudiesen coexistir con el escritorio GNOME 2 y viceversa. Esta nueva infraestructura es llamada GNOMENG. El equipo de GNOME esta trabajando para portar todas aquellas aplicaciones que usaban la anterior infraestructura a GNOMENG. Hasta este momento, casi todas las aplicaciones de GNOME 1 han sido portadas a GNOMENG.

La mayor parte de esta sección es aplicable a los ports de GNOME 1. Los ports de GNOME 2, aun no se han integrado por completo a GNOMENG. De momento para esos ports, simplemente elimine las definiciones de DEPENDS de BUILD_, RUN_ y LIB_. Los ports de GNOME 2 también pueden beneficiarse con algunas opciones de GNOMENG, tal como gnomehack, gnomeprefix, y gnomehier.

En GNOMENG, la lista de componentes de GNOME que requiere su port, son añadidos de la siguiente manera, en su fichero Makefile:

USE_X_PREFIX=	yes
USE_GNOMENG=	yes
USE_GNOME=	<lista de componentes GNOME>
	  

La lista de componentes GNOME, consiste en una o más de las siguientes opciones, cada una separada por un espacio:

  • gnomehack : Esta es una colección de substitutos comunes para el Makefile de GNOME que es requerido por casi todo port de GNOME, para efecto de que se ajuste de forma adecuada a la estructura del árbol. Para una lista específica, favor de referirse a ${PORTSDIR}/Mk/bsd.gnome.mk. Nota: Al incluir esta opción, se añade un pre-patch al Makefile, por lo tanto, si usted ya cuenta con un pre-patch en su Makefile, deberá cambiarlo por post-patch.

  • gnomeprefix : Esta es una colección de CONFIGURE_ARGS necesarios por cada port de GNOME que debe contar con su información bajo la jerarquía de GNOME. También incluye algunos argumentos útiles que permiten que los ports de GNOME se compilen ante la presencia de gtk-doc, y mantengan a PREFIX a salvo.

  • gnomehier : Esto añade una dependencia a misc/gnomehier. gnomehier instala todos los directorios necesarios tanto para GNOME 1 como para GNOME 2. Solamente incluya esta opción si su port ejecuta @dirrm en alguno de los directorios que aparecen listados en plist, para gnomehier.

  • gnomeaudio : Esto añade una dependencia a audio/gnomeaudio.

  • esound : Esto añade una dependencia a audio/esound (reemplaza a USE_ESOUND).

  • libghttp : Esto añade una dependencia a www/libghttp.

  • glib12 : Esto añade una dependencia a devel/glib12 (reemplaza a USE_GLIB).

  • gtk12 : Esto añade una dependencia a x11-toolkits/gtk12 (reemplaza a USE_GTK).
    Implica el uso de: glib12

  • libxml : Esto añade una dependencia a textproc/libxml.
    Implica el uso de: glib12

  • gdkpixbuf : Esto añade una dependencia a graphics/gdk-pixbuf.
    Implica el uso de: gtk12

  • imlib : Esto añade una dependencia a graphics/imlib (reemplaza a USE_IMLIB).
    Implica el uso de: gtk12

  • orbit : Esto añade una dependencia a devel/ORBit.
    Implica el uso de: glib12

  • gnomelibs : Esto añade una dependencia a x11/gnomelibs (reemplaza a USE_GNOMELIBS).
    Implica el uso de: esound imlib libxml orbit

  • gnomecanvas : Esto añade una dependencia a graphics/gnomecanvas.
    Implica el uso de: gnomelibs gdkpixbuf

  • oaf : Esto añade una dependencia a devel/oaf.
    Implica el uso de: orbit libxml

  • gnomemimedata : Esto añade una dependencia a misc/gnomemimedata.
    Implica el uso de: gnomehier

  • gconf : Esto añade una dependencia a devel/gconf.
    Implica el uso de: oaf

  • gnomevfs : Esto añade una dependencia a devel/gnomevfs.
    Implica el uso de: gnomemimedata gconf gnomelibs

  • libcapplet : Esto añade una dependencia a x11/libcapplet (reemplaza a USE_GNOMECTRL). Si su port instala un applet de configuración (o capplet), deberá incluir esta opción.
    Implica el uso de: gnomelibs

  • gnomeprint : Esto añade una dependencia a print/gnomeprint.
    Implica el uso de: gnomelibs gnomecanvas

  • bonobo : Esto añade una dependencia a devel/bonobo.
    Implica el uso de: oaf gnomeprint

  • libgda : Esto añade una dependencia a databases/libgda.
    Implica el uso de: gconf bonobo

  • gnomedb : Esto añade una dependencia a databases/gnomedb.
    Implica el uso de: libgda

  • libglade : Esto añade una dependencia a devel/libglade.
    Implica el uso de: gnomedb

  • gal : Esto añade una dependencia a x11-toolkits/gal.
    Implica el uso de: libglade

  • glibwww : Esto añade una dependencia a www/glibwww.
    Implica el uso de: gnomelibs

  • gtkhtml : Esto añade una dependencia a www/gtkhtml.
    Implica el uso de: glibwww gal libghttp libcapplet

  • libpanel : Esto añade una dependencia a x11/libpanel. Use esta, si su port instala un applet que puede colocarse en el panel de GNOME 1. Note: Aún cuando puede contar con applets de GNOME 1, bajo GNOME 2, estos no trabajaran con el panel de GNOME 2.
    Implica el uso de: gnomelibs

Vamos haciendo un ejemplo:

USE_X_PREFIX=	yes
USE_GNOMENG=	yes
USE_GNOME=	gnomeprefix gnomehack gnomelibs bonobo libglade gal

post-patch:
	@${REINPLACE_CMD} -e 's|-lpthread|${PTHREAD_LIBS}|g ; \
		s|DATADIRNAME=lib|DATADIRNAME=share|g' ${WRKSRC}/configure
	  

Este port hace uso de la nueva infraestructura de GNOMENG. Ejecuta la instalación bajo el árbol de GNOME, y hace uso de gnomehack para eliminar algunos linuxismos comunes del fichero Makefile. Tomando en cuenta que hace uso de gnomehack, la configuración de pre-install ha sido cambiada a post-install. Si esto no se hace, entonces la configuración pre-install será sobreescrita por gnomehack. Este port también requiere de gnomelibs, bonobo, libglade, and gal.

Si su port puede hacer uso opcional de GNOME, deberá incluir la opción WANT_GNOME=yes en su fichero Makefile, y despues verificar si HAVE_GNOME esta declarado en alguno de los componentes listados anteriormente que usará su port. En virtud de que es una condicionante de evaluación, la misma deberá ser incluida entre bsd.port.pre.mk y bsd.port.post.mk. Por ejemplo:

WANT_GNOME=	yes

.include <bsd.port.pre.mk>

.if ${HAVE_GNOME:Mlibpanel}!=""
USE_GNOME+=	gnomeprefix libpanel
CONFIGURE_ARGS+=	--with-gnome
PKGNAMESUFFIX=	-gnome
PLIST_SUB=	DATADIR="share/gnome"
.else
CONFIGURE_ARGS+=	--without-gnome
PLIST_SUB=	DATADIR="share"
.endif

.include <bsd.port.post.mk>
          

Aqui, WANT_GNOME le indica al sistema de ports, que verifique la existencia de los componentes de GNOME listados. Para cada componente encontrado, su nombre es incluido a HAVE_GNOME. En virtud de que este port puede usar libpanel, verificamos HAVE_GNOME para ver si contiene libpanel (para más información sobre el patrón :M y sintaxis de make, por favor refierase a la página de ayuda make(1)). Si se localiza a libpanel, entonces es incluida a la lista de dependencias en USE_GNOME, y los argumentos CONFIGURE_ARGS específicos del port --with-gnome son pasados. En la anterior infraestructura de GNOME, PKGNAMESUFFIX se ajustaba automaticamente, de acuerdo al correcto uso del macro USE_*. En GNOMENG, esto depende de cada responsable de cada port decidirlo. En nuestro port de ejemplo, incluye la opción -gnome al nombre del port, para indicar que se ha compilado con soporte para GNOME. Lo mismo es válido para DATADIR y PLIST_SUB. En GNOMENG, el desarrollador del port debe decidir cuando hacer la sustitución de DATADIR. Una buena regla a seguir ("del pulgar"); es incluir DATADIR PLIST_SUB, cuando se haga uso del componente gnomeprefix.

Nota: No es posible añadir componentes adicionales del tipo USE_GNOME, después de .inlcude <bsd.port.pre.mk>. Esto quiere decir que, lo siguiente es un error :

.include <bsd.port.pre.mk>

.if ${HAVE_GNOME:Mgnomelibs}!=""
USE_GNOME+=	gnomelibs
.else
USE_GNOME+=	gtk12  # ERROR!
.endif
	  

Lo anterior hara que GNOMENG piense que GNOME es deseado, marcaráa el pkg-plist de acuerdo a esto, y por tanto ocasionando un error en la compilación del paquete. Si necesita añadir componentes de tipo USE_GNOME, incluyalos sobre la línea .include <bsd.port.pre.mk>.

Para efecto de forzar el uso incondicional de dependencias opcinales de GNOME, puede añadir WITH_GNOME=yes al fichero /etc/make.conf, o bien al momento de ejecutar make desde la línea de comandos. Esto hara que GNOMENG siempre regrese un valor verdadero, cuando se verifique para dependencias opcionales de GNOME. Si desea que GNOMENG siempre de un valor falso cuando se validen dependencias opcionales de GNOME, puede añadir WITHOUT_GNOME=yes al fichero /etc/make.conf o bien desde la línea de comandos.

Una vez que ha terminado su port, es buena idea verificar que la lista de componentes dependientes de su port, sean los correctos. Para ver una lista de los paquetes que su port va a requerir, use el comando make package-depends, desde el directorio del port.

Puede obtenere más información sobre GNOMENG, mirando el fichero fuente y sus comentarios, en ${PORTSDIR}/Mk/bsd.gnomeng.mk.

Nota: GNOMENG es temporal. Esto es que, fué diseñado para poder migrar gradualmente los ports de GNOME de la vieja estructura, a la nueva. Una vez que todos los ports hayan sido migrados, la anterior infraestructura de ports, así como el macro de USE_GNOMENG, serán removidos.

La anterior infraestructura usaba los siguientes macros de Makefile, para compilar ports de GNOME o GTK+:

USE_ESOUND
USE_GLIB
USE_GNOMECTRL
USE_GNOMELIBS
USE_GTK
USE_IMLIB

WANT_ESOUND
WANT_GLIB
WANT_GNOMECTRL
WANT_GNOMELIBS
WANT_GTK
WANT_IMLIB
	  

Ahora estos son obsoletos.

Cuestiones de Libtool

La mayor parte de aplicaciones de GNOME, si no es que todas, dependen de libtool de la GNU. Estas también utilizan un sistema de configuración de GNU. Si su port instala librerías compartidas, deberá añadir USE_LIBTOOL= yes al fichero Makefile del port. Con esto es suficiente para cumplir con los requerimientos de libtool, pero no se encarga de cosas como la instalación de ficheros .la . Para asegurarse de una instalación adecuada de librerías compartidas, también es importante considerar incluir la siguiente línea al script configure justo debajo de la línea LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh":

$ac_aux_dir/ltconfig $LIBTOOL_DEPS
	    

Esto previene la instalació de ficheros .la y se asegura que ${PTHREAD_LIBS} se pasará correctamente al enlazador (linker).

Distfiles

Para efecto de separar los distfiles de GNOME 2, de los distfiles de GNOME 1, y mantener limpio el directorio de distfiles, los ports de GNOME 1 que descarguen sus distfiles desde ${MASTER_SITE_GNOME} deberán añadir a su Makefile lo siguiente:

DIST_SUBDIR=    gnome
          

Los ports de GNOME 2 que descarguen sus distfiles desde ${MASTER_SITE_GNOME} deberán inlcuir lo siguiente en el fichero Makefile:

DIST_SUBDIR=    gnome2
	  

Algunos ficheros distfiles de GNOME pueden estar tanto en formato tar gzip o como tar bzip2. Para efecto de minimizar el tiempo de descarga, es recomendable usar los ficheros distfiles bzip2 cuando sea posible. Para hacer esto, incluya la siguiente línea en el Makefile de su port:

USE_BZIP2=  yes
	  

Si aun necesita ayuda con su port, vea algunos de los ports existentes de ejemplos. También puede contar con la lista de correo de freebsd-gnome para cualquier apoyo.

&footer;