doc/es/gnome/docs/porting.sgml
2003-05-11 19:50:55 +00:00

404 lines
17 KiB
Text
Executable file

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
<!ENTITY base CDATA "../..">
<!ENTITY date "$FreeBSD$">
<!ENTITY title "Proyecto FreeBSD GNOME: Como Crear Un Port">
<!ENTITY % gnomeincludes SYSTEM "../includes.sgml"> %gnomeincludes;
<!ENTITY % includes SYSTEM "../../includes.sgml"> %includes;
]>
<html>
&header;
<table border="0">
<tr>
<td>
<p>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&iacute;ficos de GNOME. Instrucciones generales
pueden localizarse en
<a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/index.html">FreeBSD Porter's Handbook</a>.
</p>
<h2>Macros del Makefile en GNOME</h2>
<p>Recientemente, la infraestructura de ports de GNOME sufri&oacute;
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 <b>GNOMENG</b>. 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.</p>
<p>La mayor parte de esta secci&oacute;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 <tt>DEPENDS</tt> de <tt>BUILD_</tt>,
<tt>RUN_</tt> y <tt>LIB_</tt>. Los ports de GNOME 2 tambi&eacute;n
pueden beneficiarse con algunas opciones de GNOMENG, tal como
<tt>gnomehack</tt>, <tt>gnomeprefix</tt>, y <tt>gnomehier</tt>.</p>
<p>En GNOMENG, la lista de componentes de GNOME que requiere su port,
son a&ntilde;adidos de la siguiente manera, en su fichero
<tt>Makefile</tt>:</p>
<pre>
USE_X_PREFIX= yes
USE_GNOMENG= yes
USE_GNOME= &lt;lista de componentes GNOME&gt;
</pre>
<p>La lista de componentes GNOME, consiste en una o m&aacute;s de
las siguientes opciones, cada una separada por un espacio:</p>
<!-- Begin GNOMENG components list -->
<ul>
<li><p><tt>gnomehack</tt> : Esta es una colecci&oacute;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
&aacute;rbol. Para una lista espec&iacute;fica, favor de
referirse a <tt>${PORTSDIR}/Mk/bsd.gnome.mk</tt>.
<b>Nota</b>: Al incluir esta opci&oacute;n, se
a&ntilde;ade un <tt>pre-patch</tt> al Makefile, por lo
tanto, si usted ya cuenta con un <tt>pre-patch</tt> en su
Makefile, deber&aacute; cambiarlo por <tt>post-patch</tt>.
</p></li>
<li><p><tt>gnomeprefix</tt> : Esta es una colecci&oacute;n de
<tt>CONFIGURE_ARGS</tt> necesarios por cada port de GNOME
que debe contar con su informaci&oacute;n bajo la
jerarqu&iacute;a de GNOME. Tambi&eacute;n incluye algunos
argumentos &uacute;tiles que permiten que los ports de
GNOME se compilen ante la presencia de gtk-doc, y mantengan
a <tt>PREFIX</tt> a salvo.</p></li>
<li><p><tt>gnomehier</tt> : Esto a&ntilde;ade una dependencia a
<tt>misc/gnomehier</tt>. <tt>gnomehier</tt> instala todos
los directorios necesarios tanto para GNOME 1 como para
GNOME 2. Solamente incluya esta opci&oacute;n si su port
ejecuta <tt>@dirrm</tt> en alguno de los directorios que
aparecen listados en plist, para <tt>gnomehier</tt>.</p></li>
<li><p><tt>gnomeaudio</tt> : Esto a&ntilde;ade una dependencia a
<tt>audio/gnomeaudio</tt>.</p></li>
<li><p><tt>esound</tt> : Esto a&ntilde;ade una dependencia a
<tt>audio/esound</tt> (reemplaza a <tt>USE_ESOUND</tt>).</p></li>
<li><p><tt>libghttp</tt> : Esto a&ntilde;ade una dependencia a
<tt>www/libghttp</tt>.</p></li>
<li><p><tt>glib12</tt> : Esto a&ntilde;ade una dependencia a
<tt>devel/glib12</tt> (reemplaza a <tt>USE_GLIB</tt>).</p></li>
<li><p><tt>gtk12</tt> : Esto a&ntilde;ade una dependencia a
<tt>x11-toolkits/gtk12</tt> (reemplaza a <tt>USE_GTK</tt>).<br>
<i>Implica el uso de</i>: <tt>glib12</tt></p></li>
<li><p><tt>libxml</tt> : Esto a&ntilde;ade una dependencia a
<tt>textproc/libxml</tt>.<br>
<i>Implica el uso de</i>: <tt>glib12</tt></p></li>
<li><p><tt>gdkpixbuf</tt> : Esto a&ntilde;ade una dependencia a
<tt>graphics/gdk-pixbuf</tt>.<br>
<i>Implica el uso de</i>: <tt>gtk12</tt></p></li>
<li><p><tt>imlib</tt> : Esto a&ntilde;ade una dependencia a
<tt>graphics/imlib</tt> (reemplaza a <tt>USE_IMLIB</tt>).<br>
<i>Implica el uso de</i>: <tt>gtk12</tt></p></li>
<li><p><tt>orbit</tt> : Esto a&ntilde;ade una dependencia a
<tt>devel/ORBit</tt>.<br>
<i>Implica el uso de</i>: <tt>glib12</tt></p></li>
<li><p><tt>gnomelibs</tt> : Esto a&ntilde;ade una dependencia a
<tt>x11/gnomelibs</tt> (reemplaza a <tt>USE_GNOMELIBS</tt>).<br>
<i>Implica el uso de</i>: <tt>esound</tt> <tt>imlib</tt> <tt>libxml</tt>
<tt>orbit</tt></p></li>
<li><p><tt>gnomecanvas</tt> : Esto a&ntilde;ade una dependencia a
<tt>graphics/gnomecanvas</tt>.<br>
<i>Implica el uso de</i>: <tt>gnomelibs</tt> <tt>gdkpixbuf</tt></p></li>
<li><p><tt>oaf</tt> : Esto a&ntilde;ade una dependencia a
<tt>devel/oaf</tt>.<br>
<i>Implica el uso de</i>: <tt>orbit</tt> <tt>libxml</tt></p></li>
<li><p><tt>gnomemimedata</tt> : Esto a&ntilde;ade una dependencia a
<tt>misc/gnomemimedata</tt>.<br>
<i>Implica el uso de</i>: <tt>gnomehier</tt></p></li>
<li><p><tt>gconf</tt> : Esto a&ntilde;ade una dependencia a
<tt>devel/gconf</tt>.<br>
<i>Implica el uso de</i>: <tt>oaf</tt></p></li>
<li><p><tt>gnomevfs</tt> : Esto a&ntilde;ade una dependencia a
<tt>devel/gnomevfs</tt>.<br>
<i>Implica el uso de</i>: <tt>gnomemimedata</tt> <tt>gconf</tt>
<tt>gnomelibs</tt></p></li>
<li><p><tt>libcapplet</tt> : Esto a&ntilde;ade una dependencia a
<tt>x11/libcapplet</tt> (reemplaza a <tt>USE_GNOMECTRL</tt>).
Si su port instala un applet de configuraci&oacute;n (o capplet),
deber&aacute; incluir esta opci&oacute;n.<br>
<i>Implica el uso de</i>: <tt>gnomelibs</tt></p></li>
<li><p><tt>gnomeprint</tt> : Esto a&ntilde;ade una dependencia a
<tt>print/gnomeprint</tt>.<br>
<i>Implica el uso de</i>: <tt>gnomelibs</tt> <tt>gnomecanvas</tt></p></li>
<li><p><tt>bonobo</tt> : Esto a&ntilde;ade una dependencia a
<tt>devel/bonobo</tt>.<br>
<i>Implica el uso de</i>: <tt>oaf</tt> <tt>gnomeprint</tt></p></li>
<li><p><tt>libgda</tt> : Esto a&ntilde;ade una dependencia a
<tt>databases/libgda</tt>.<br>
<i>Implica el uso de</i>: <tt>gconf</tt> <tt>bonobo</tt></p></li>
<li><p><tt>gnomedb</tt> : Esto a&ntilde;ade una dependencia a
<tt>databases/gnomedb</tt>.<br>
<i>Implica el uso de</i>: <tt>libgda</tt></p></li>
<li><p><tt>libglade</tt> : Esto a&ntilde;ade una dependencia a
<tt>devel/libglade</tt>.<br>
<i>Implica el uso de</i>: <tt>gnomedb</tt></p></li>
<li><p><tt>gal</tt> : Esto a&ntilde;ade una dependencia a
<tt>x11-toolkits/gal</tt>.<br>
<i>Implica el uso de</i>: <tt>libglade</tt></p></li>
<li><p><tt>glibwww</tt> : Esto a&ntilde;ade una dependencia a
<tt>www/glibwww</tt>.<br>
<i>Implica el uso de</i>: <tt>gnomelibs</tt></p></li>
<li><p><tt>gtkhtml</tt> : Esto a&ntilde;ade una dependencia a
<tt>www/gtkhtml</tt>.<br>
<i>Implica el uso de</i>: <tt>glibwww</tt> <tt>gal</tt> <tt>libghttp</tt>
<tt>libcapplet</tt></p></li>
<li><p><tt>libpanel</tt> : Esto a&ntilde;ade una dependencia a
<tt>x11/libpanel</tt>. Use esta, si su port instala un applet
que puede colocarse en el panel de GNOME 1. <b>Note:</b>
A&uacute;n cuando puede contar con applets de GNOME 1, bajo
GNOME 2, estos <b>no</b> trabajaran con el panel de GNOME 2.<br>
<i>Implica el uso de</i>: <tt>gnomelibs</tt></p></li>
</ul>
<p>Vamos haciendo un ejemplo:</p>
<pre>
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
</pre>
<p>Este port hace uso de la nueva infraestructura de GNOMENG. Ejecuta
la instalaci&oacute;n bajo el &aacute;rbol de GNOME, y hace uso de
<tt>gnomehack</tt> para eliminar algunos linuxismos comunes del
fichero Makefile. Tomando en cuenta que hace uso de <tt>gnomehack</tt>,
la configuraci&oacute;n de <tt>pre-install</tt> ha sido cambiada a
<tt>post-install</tt>. Si esto no se hace, entonces la
configuraci&oacute;n <tt>pre-install</tt> ser&aacute; sobreescrita
por <tt>gnomehack</tt>. Este port tambi&eacute;n requiere de gnomelibs,
bonobo, libglade, and gal.
</p>
<p>Si su port puede hacer uso opcional de GNOME, deber&aacute; incluir
la opci&oacute;n <tt>WANT_GNOME=yes</tt> en su fichero Makefile, y
despues verificar si <tt>HAVE_GNOME</tt> esta declarado en alguno de
los componentes listados anteriormente que usar&aacute; su port. En
virtud de que es una condicionante de evaluaci&oacute;n, la misma
deber&aacute; ser incluida entre <tt>bsd.port.pre.mk</tt> y
<tt>bsd.port.post.mk</tt>. Por ejemplo:</p>
<pre>
WANT_GNOME= yes
.include &lt;bsd.port.pre.mk&gt;
.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 &lt;bsd.port.post.mk&gt;
</pre>
<p>Aqui, <tt>WANT_GNOME</tt> 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
<tt>HAVE_GNOME</tt>. En virtud de que este port puede usar
<tt>libpanel</tt>, verificamos <tt>HAVE_GNOME</tt> para ver si
contiene <tt>libpanel</tt> (para m&aacute;s informaci&oacute;n
sobre el <tt>patr&oacute;n</tt> :M y sintaxis de make, por favor
refierase a la p&aacute;gina de ayuda
<a href="http://www.freebsd.org/cgi/man.cgi?query=make&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+4.6-stable&amp;format=html">make(1)</a>).
Si se localiza a <tt>libpanel</tt>, entonces es incluida a la
lista de dependencias en <tt>USE_GNOME</tt>, y los argumentos
<tt>CONFIGURE_ARGS</tt> espec&iacute;ficos del port
<tt>--with-gnome</tt> son pasados. En la anterior
infraestructura de GNOME, <tt>PKGNAMESUFFIX</tt> se ajustaba
automaticamente, de acuerdo al correcto uso del macro
<tt>USE_*</tt>. En GNOMENG, esto depende de cada responsable
de cada port decidirlo. En nuestro port de ejemplo, incluye
la opci&oacute;n <tt>-gnome</tt> al nombre del port, para
indicar que se ha compilado con soporte para GNOME. Lo mismo
es v&aacute;lido para <tt>DATADIR</tt> y <tt>PLIST_SUB</tt>.
En GNOMENG, el desarrollador del port debe decidir cuando
hacer la sustituci&oacute;n de <tt>DATADIR</tt>. Una buena
regla a seguir ("del pulgar"); es incluir <tt>DATADIR</tt>
<tt>PLIST_SUB</tt>, cuando se haga uso del componente
<tt>gnomeprefix</tt>.
</p>
<p><b>Nota:</b> No es posible a&ntilde;adir componentes adicionales
del tipo <tt>USE_GNOME</tt>, despu&eacute;s de
<tt>.inlcude &lt;bsd.port.pre.mk&gt;</tt>. Esto quiere decir
que, lo siguiente es un <font color="#FF0000"><b>error</b>
</font>:</p>
<pre>
.include &lt;bsd.port.pre.mk&gt;
.if ${HAVE_GNOME:Mgnomelibs}!=""
USE_GNOME+= gnomelibs
.else
USE_GNOME+= gtk12 # ERROR!
.endif
</pre>
<p>Lo anterior hara que GNOMENG piense que GNOME <em>es</em> deseado,
marcar&aacute;a el <tt>pkg-plist</tt> de acuerdo a esto, y por
tanto ocasionando un error en la compilaci&oacute;n del paquete.
Si necesita a&ntilde;adir componentes de tipo <tt>USE_GNOME</tt>,
incluyalos <b>sobre</b> la l&iacute;nea
<tt>.include &lt;bsd.port.pre.mk&gt;</tt>.</p>
<p>Para efecto de forzar el uso incondicional de dependencias
opcinales de GNOME, puede a&ntilde;adir <tt>WITH_GNOME=yes</tt>
al fichero <tt>/etc/make.conf</tt>, o bien al momento de ejecutar
<tt>make</tt> desde la l&iacute;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&ntilde;adir <tt>WITHOUT_GNOME=yes</tt> al
fichero <tt>/etc/make.conf</tt> o bien desde la l&iacute;nea
de comandos.</p>
<p>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 <tt>make package-depends</tt>, desde el
directorio del port.</p>
<p>Puede obtenere m&aacute;s informaci&oacute;n sobre GNOMENG,
mirando el fichero fuente y sus comentarios, en
<tt>${PORTSDIR}/Mk/bsd.gnomeng.mk</tt>.</p>
<p><b>Nota:</b> GNOMENG es temporal. Esto es que, fu&eacute;
dise&ntilde;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&iacute; como el macro de <tt>USE_GNOMENG</tt>,
ser&aacute;n removidos.</p>
<p>La anterior infraestructura usaba los siguientes macros de
Makefile, para compilar ports de GNOME o GTK+:</p>
<pre>
USE_ESOUND
USE_GLIB
USE_GNOMECTRL
USE_GNOMELIBS
USE_GTK
USE_IMLIB
WANT_ESOUND
WANT_GLIB
WANT_GNOMECTRL
WANT_GNOMELIBS
WANT_GTK
WANT_IMLIB
</pre>
<p>Ahora estos son obsoletos.</p>
<!-- End GNOME-related Makefile macros -->
<!-- Begin GNOME libtool -->
<h2>Cuestiones de Libtool</h2>
<p>La mayor parte de aplicaciones de GNOME, si no es que todas,
dependen de libtool de la GNU. Estas tambi&eacute;n utilizan
un sistema de configuraci&oacute;n de GNU. Si su port instala
librer&iacute;as compartidas, deber&aacute; a&ntilde;adir
<tt>USE_LIBTOOL= yes</tt> 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&oacute;n de ficheros .la . Para asegurarse de una
instalaci&oacute;n adecuada de librer&iacute;as compartidas,
tambi&eacute;n es importante considerar incluir la siguiente
l&iacute;nea al script <tt>configure</tt> justo debajo de la
l&iacute;nea <tt>LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"</tt>:</p>
<pre>
$ac_aux_dir/ltconfig $LIBTOOL_DEPS
</pre>
<p>Esto previene la instalaci&oacute; de ficheros .la y se
asegura que <tt>${PTHREAD_LIBS}</tt> se pasar&aacute;
correctamente al enlazador (linker).</p>
<!-- End GNOME libtool -->
<!-- Begin GNOME distfiles -->
<h2>Distfiles</h2>
<p>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
<tt>${MASTER_SITE_GNOME}</tt> deber&aacute;n a&ntilde;adir a su
Makefile lo siguiente:</p>
<pre>
DIST_SUBDIR= gnome
</pre>
<p>Los ports de GNOME 2 que descarguen sus distfiles desde
<tt>${MASTER_SITE_GNOME}</tt> deber&aacute;n inlcuir lo siguiente
en el fichero Makefile:</p>
<pre>
DIST_SUBDIR= gnome2
</pre>
<p>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&iacute;nea
en el Makefile de su port:</p>
<pre>
USE_BZIP2= yes
</pre>
<!-- End GNOME distfiles -->
<p>Si aun necesita ayuda con su port, vea algunos de los
<a href="/ports/gnome.html">ports existentes</a> de ejemplos.
Tambi&eacute;n puede contar con la <a
href="mailto:&email;@FreeBSD.org">lista de correo de freebsd-gnome
</a> para cualquier apoyo.</p>
</td>
</tr>
</table>
&footer;
</body>
</html>