aboutsummaryrefslogtreecommitdiff
path: root/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'es_ES.ISO8859-1/books/handbook/ports/chapter.sgml')
-rwxr-xr-xes_ES.ISO8859-1/books/handbook/ports/chapter.sgml2091
1 files changed, 0 insertions, 2091 deletions
diff --git a/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml b/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml
deleted file mode 100755
index 814a82ac73..0000000000
--- a/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml
+++ /dev/null
@@ -1,2091 +0,0 @@
-<!--
- The FreeBSD Documentation Project
-
- $FreeBSD$
--->
-
-
-<chapter id="ports">
- <title>Instalando Aplicaciones: La colecci&oacute;n de Ports</title>
-
- <para><emphasis>Contribuido por &a.jraynard;.</emphasis></para>
-
- <para>La colecci&oacute;n de Ports de FreeBSD te permite compilar e instalar
- una gran cantidad de programas con el m&iacute;nimo esfuerzo.</para>
-
- <para>Debido a las diferencias entre los est&aacute;ndars abiertos, conseguir
- que un programa funcione en una versi&oacute;n diferente de Unix puede ser
- tedioso y complicado, como debe saber todo aquel que lo haya intentado.
- Tendr&aacute;s suerte si el programa que quieres compila limpiamente,
- instala todos los componentes donde debe instalarlos y funciona todo
- correctamente al primer intento.</para>
-
- <para>Algunas distribuciones de software han intentado solucionar este
- problema incluyendo unos scripts de configuraci&oacute;n. Algunos de estos
- scripts son muy inteligentes, pero tienen tendencia a anunciar que tu
- sistema es algo que nunca has oido y hacen preguntas que suenan a un
- ex&aacute;men final de programaci&oacute;n en Unix.</para>
-
- <para>Afortunadamente, con la colecci&oacute;n de Ports, todo el trabajo
- duro ya est&aacute; hecho, y solo tienes que teclear el comando
- <command>make install</command> para tener un programa perfectamente
- instalado y en funcionamiento.</para>
-
- <sect1>
- <title>&iquest;Porqu&eacute; tener una Colecci&oacute;n de Ports?</title>
-
- <para>El sistema base de FreeBSD incluye una gran variedad de
- herramientas y utilidades de sistema, pero muchos de los programas
- populares no est&aacute;n en la distribuci&oacute;n base del sistema,
- por buenas razones:</para>
-
- <orderedlist>
- <listitem>
- <para>Programas con los que algunos usuarios no puede vivir sin ellos y
- otros usuarios ni los conocen, como cierto editor basado en Lisp.</para>
- </listitem>
-
- <listitem>
- <para>Programas demasiado especializados para ser incluidos en la
- distribuci&oacute;n base del sistema (CAD, bases de datos, etc).</para>
- </listitem>
-
- <listitem>
- <para>Programas que se pueden incluir en la categor&iacute;a
- &ldquo;Tengo que mirarlo cuando tenga un rato libre&rdquo;
- (algunos lenguajes, por ejemplo).</para>
- </listitem>
-
- <listitem>
- <para>Programas que son demasiado divertidos para ser incluidos en
- un sistema operativo serio como FreeBSD ;-)</para>
- </listitem>
-
- <listitem>
- <para>Por muchos programas que se incluyesen en el sistema base, la
- gente siempre quiere m&aacute;s, y se debe crear una l&iacute;nea
- de separaci&oacute;n en alg&uacute;n momento (de otra manera, las
- distribuciones de FreeBSD ser&iacute;n enormes).</para>
- </listitem>
- </orderedlist>
-
- <para>Obviamente no ser&iacute;a razonable que cada usuario se portase
- manualmente sus programas favoritos (sin mencionar la enorme cantidad de
- trabajo duplicado), as&iacute; que el proyecto FreeBSD ha usado un
- ingenioso sistema que mediante herramientas est&aacute;ndar permite
- automatizar todo el proceso.</para>
-
- <para>Esta es una excelente ilustraci&oacute;n de como el
- &ldquo;Unix way&rdquo; trabaja en la pr&aacute;tica combinando una serie
- de simples pero muy flexibles herramientas y consiguiendo algo muy
- potente.</para>
- </sect1>
-
- <sect1>
- <title>&iquest;C&oacute;mo funciona la Colecci&oacute;n de Ports?</title>
-
- <para>Los programas en Internet se suelen distribuir como un <link
- linkend="ports-tarball">tarball</link> consistente en un Makefile y el
- c&oacute;digo fuente del programa, incluyendo algunas instrucciones (las
- cuales no siempre son tan instructivas como debieras), y un script de
- configuraci&oacute;n.</para>
-
- <para>El escenario habitual es que bajas el tarball v&iacute;a FTP, lo
- extraes en alg&uacute;n directorio, lees las instrucciones, haces los
- cambios que parezcan necesarios, ejecutas el script de configuraci&oacute;n
- y usas el programa <command>make</command> para compilar e instalar el
- programa desde el c&oacute;digo fuente.</para>
-
- <para>Los ports de FreeBSD siguen usando el mecanismo del tarball, pero
- usan un <link linkend="ports-skeleton">esqueleto</link> en el que guardan
- la informaci&oacute;n necesaria para que el programa funcione correctamente
- en FreeBSD. Los ports tambi&eacute;n tienen su propio y personalizado
- <link linkend="ports-makefile">Makefile</link> para practicamente todos
- los ports puedan ser compilados de la misma manera.</para>
-
- <para>Si miras el esqueleto de un port (ya sea <ulink
- URL="file://localhost/usr/ports/devel/ElectricFence">en tu sistema
- FreeBSD</ulink> o <ulink
- URL="ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports/devel/ElectricFence">en
- el servidor FTP</ulink>) y esperas encontrar todo tipo de combinaciones
- de ciencia avanzada, puede que te decepciones, ya que s&oacute;lo
- encontrar&aacute;s uno o dos ficheros y directorios de lo m&aacute;s
- habitual. (En un momento veremos como <link
- linkend="ports-getting">obtener un port</link>).</para>
-
- <para>&ldquo;&iquest;C&oacute;mo es posible que esto pueda hacer algo?
- &rdquo; Oigo como lloras. &ldquo;No hay c&oacute;digo fuente!&rdquo;</para>
-
- <para>Lo creas o no, gentil lector, todo quedar&aacute; entendido (o eso
- espero). Veamos que pasa si intentamos instalar un port. He elegido el
- programa <application>ElectricFence</application>, una &uacute;til
- herramienta para desarrolladores, ya que el esqueleto es m&aacute;s
- claro que muchos otros.</para>
-
- <note>
- <para>Si intentas ejecutar esto, necesitas estar como root.</para>
- </note>
-
- <screen>&prompt.root; <userinput>cd /usr/ports/devel/ElectricFence</userinput>
-&prompt.root; <userinput>make install</userinput>
-&gt;&gt; Checksum OK for ElectricFence-2.0.5.tar.gz.
-===&gt; Extracting for ElectricFence-2.0.5
-===&gt; Patching for ElectricFence-2.0.5
-===&gt; Applying FreeBSD patches for ElectricFence-2.0.5
-===&gt; Configuring for ElectricFence-2.0.5
-===&gt; Building for ElectricFence-2.0.5
-[lots of compiler output...]
-===&gt; Installing for ElectricFence-2.0.5
-===&gt; Warning: your umask is "0002". If this is not desired, set it to
- an appropriate value and install this port again by ``make reinstall''.
-install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
-install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
-===&gt; Compressing manual pages for ElectricFence-2.0.5
-===&gt; Registering installation for ElectricFence-2.0.5</screen>
-
- <para>Para evitar confusiones, he borrado todas las l&iacute;neas
- correspondientes a la compilaci&oacute;n del programa.</para>
-
- <para>Si has realizado la instalaci&oacute;n de este port, habr&aacute;s
- obtenido algo as&iacute; en pantalla:</para>
-
- <screen id="ports-fetch">&prompt.root; <userinput>make install</userinput>
-&gt;&gt; ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
-&gt;&gt; Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.</screen>
-
- <para>El programa <command>make</command> notifica que no tienes una copia
- en local del c&oacute;digo fuente e intenta bajarlo por FTP. En el
- ejemplo, ya ten&iacute;a el c&oacute;digo en el ordenador, por lo que no
- ha sido necesario obtenerlo de Internet.</para>
-
- <para>Vayamos revisando que ha hecho el programa <command>make</command>
- </para>
-
- <procedure>
- <step>
- <para>Localizar el <link
- linkend="ports-tarball">tarball</link> con el c&oacute;digo fuente.
- Si no est&aacute; disponible localmente, intenta obtenerlo desde
- un servidor FTP.</para>
- </step>
-
- <step>
- <para>Ejecutar un test de <link linkend="ports-checksum">checksum</link>
- para asegurar que el tarball del c&oacute;digo fuente es correcto.</para>
- </step>
-
- <step>
- <para>Extraer el tarball en un directorio temporal.</para>
- </step>
-
- <step>
- <para>Aplicar todos los <link linkend="ports-patch">parches</link>
- necesarios para que el c&oacute;digo fuente compile y funcione bajo
- FreeBSD.</para>
- </step>
-
- <step>
- <para>Ejecutar cualquier script de configuraci&oacute;n requerido por
- el proceso de compillaci&oacute;n, adem&aacute;s de responder
- correctamente a cualquiera de las preguntas realizadas por &eacute;ste.
- </para>
- </step>
-
- <step>
- <para>(Finalmente!) Compilar el c&oacute;digo.</para>
- </step>
-
- <step>
- <para>Instalar los ejecutables del programa y otros archivos de
- soporte, p&aacute;ginas man, etc, bajo la jerarqu&iacute;a
- <filename>/usr/local</filename>, donde no se mezclar&aacute;n con los
- programas de sistema. Esto tambi&eacute;n asegura que todos los ports
- que instales estar&aacute;n en el mismo lugar, evitando que queden
- repartidos por diferentes lugares del disco.</para>
- </step>
-
- <step>
- <para>Registrar la instalaci&oacute;n en una base de datos. Esto
- significa que, si no te gusta el programa, puedes <link
- linkend="ports-remove">borrar</link> todos sus programas y archivos
- de tu sistema.</para>
- </step>
- </procedure>
-
- <para>Vuelve a mirar la salida del programa <command>make</command> antes
- mostrada e intenta localizar los pasos descritos. Y si no estabas impresionado
- antes, deber&iacute;as estarlo ahora.</para>
-</sect1>
-
- <sect1 id="ports-getting">
- <title>Obteniendo un Port de FreeBSD</title>
-
- <para>Hay dos maneras de obtener un port de FreeBSD para un programa. Uno
- requiere el <link linkend="ports-cd">CDROM de FreeBSD</link>, y el otro
- requiere una <link linkend="ports-inet">conexi&oacute;n a Internet</link>.
- </para>
-
- <sect2 id="ports-cd">
- <title>Compilar los PORTS desde CDROM</title>
-
- <para>Asumiendo que tu CDROM de FreeBSD est&aacute; en el lector y montado
- en <filename>/cdrom</filename> (y <emphasis>must</emphasis> estar
- montado en <filename>/cdrom</filename>), deber&iacute;s poder compilar
- toda la colecci&oacute;n de ports sin problemas, ya que &eacute;sta
- encontrar&iacute;a los tarballs en
- <filename>/cdrom/ports/distfiles/</filename> (si existen all&iacute;)
- en lugar de obtenerlos de Internet.</para>
-
- <para>Otra manera de hacer esto, si s&oacute;lo quieres usar los
- esqueletos del CDROM, es poner la variables del fichero
- <filename>/etc/make.conf</filename> de la siguiente manera:</para>
-
- <programlisting>
-PORTSDIR= /cdrom/ports
-DISTDIR= /tmp/distfiles
-WRKDIRPREFIX= /tmp</programlisting>
-
- <para>Substituye <literal>/tmp</literal> por cualquier directorio en
- el que tengas suficiente espacio. Entonces, entra en el subdirectorio
- apropiado bajo <filename>/cdrom/ports</filename> y teclea
- <command>make install</command> como hasta ahora.
- <makevar>WRKDIRPREFIX</makevar> har&aacute; que el port sea compilado
- bajo <filename>/tmp/cdrom/ports</filename>; por ejemplo,
- <filename>games/oneko</filename> ser&aacute; compilado bajo
- <filename>/tmp/cdrom/ports/games/oneko</filename>.</para>
-
- <note>
- <para>Hay algunos ports para los que no podemos dar el c&oacute;digo
- fuente original en el CDROM debido a limitaciones de licencia. Es estos
- casos, tendr&aacute;s que mirar en la secci&oacute;n <link
- linkend="ports-inet">Compilando los ports usando una conexi&oacute;n a
- Internet.</link></para>
- </note>
- </sect2>
-
- <sect2 id="ports-inet">
- <title>Compilando los Ports desde Internet</title>
-
- <para>Si no tienes CDROM o quieres estar seguro de instalar la
- &uacute;ltima versi&oacute;n del port que te interesa, necesitar&aacute;s
- bajarte el <link linkend="ports-skeleton">esqueleto</link> de ese port.
- </para>
-
- <para>Primero, si est&aacute;s usando una versi&oacute;n release de
- FreeBSD, aseg&uacute;rate de tener instalado el kit de actualizaci&oacute;n
- apropiado para tu release. Para conocer el kit apropiado, mira en
- <ulink url="http://www.freebsd.org/ports/">la p&aacute;gina web de
- ports</ulink>. Estos packages incluyen ficheros que han sido actualizados
- desde la release y que ser&aacute;n necesarios para compilar los nuevos
- ports.</para>
-
- <para>La clave para los esqueletos es que el servidor FTP de FreeBSD puede
- crear <link linkend="ports-tarball">tarballs</link> al momento.
- Aqu&iacute; tienes c&oacute;mo trabaja, usando como ejemplo el programa
- gnats en el directorio de bases de datos (el texto entre corchetes son
- comentarios. No los teclees si intentas ejecutar el ejemplo):</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports</userinput>
-&prompt.root; <userinput>mkdir databases</userinput>
-&prompt.root; <userinput>cd databases</userinput>
-&prompt.root; <userinput>ftp ftp.freebsd.org</userinput>
-[log in as `ftp' and give your email address when asked for a
-password. Remember to use binary (also known as image) mode!]
-<prompt>&gt;</prompt> <userinput>cd /pub/FreeBSD/ports/ports/databases</userinput>
-<prompt>&gt;</prompt> <userinput>get gnats.tar</userinput>
-[tars up the gnats skeleton for us]
-<prompt>&gt;</prompt> <userinput>quit</userinput>
-&prompt.root; <userinput>tar xf gnats.tar</userinput>
-[extract the gnats skeleton]
-&prompt.root; <userinput>cd gnats</userinput>
-&prompt.root; <userinput>make install</userinput>
-[build and install gnats]</screen>
-
- <para>&iquest;Qu&eacute; ha ocurrido aqu&iacute;?. Hemos conectado con
- el servidor FTP de la manera habitual y entrado en el subdirectorio
- <filename>databases</filename>. Al enviar el comando
- <command>get gnats.tar</command>, el servidor FTP ha empaquetado en
- formato <link linkend="ports-tarball">tarred</link> el directorio
- gnats.</para>
-
- <para>A continuaci&oacute;n hemos extraido el esqueleto de gnats y
- entrado en el directorio para compilar el port. Como hemos explicado
- <link linkend="ports-fetch">anteriormente</link>, el programa
- <command>make</command> ha detectado que el c&oacute;digo fuente no
- estaba disponible localmente y lo ha bajado de Internet antes de
- extraerlo, aplicar los parches necesarios, compilarlo e instalarlo.</para>
-
- <para>Intentemos ahora algo m&aacute;s ambicioso. En lugar de obtener el
- esqueleto de un simple port, obtengamos todos los de un directorio, por
- ejemplo los esqueletos de todas las bases de datos de la colecci&oacute;n
- de ports. El proceso es muy parecido:</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports</userinput>
-&prompt.root; <userinput>ftp ftp.freebsd.org</userinput>
-[log in as `ftp' and give your email address when asked for a
-password. Remember to use binary (also known as image) mode!]
-<prompt>&gt;</prompt> <userinput>cd /pub/FreeBSD/ports/ports</userinput>
-<prompt>&gt;</prompt> <userinput>get databases.tar</userinput>
-[tars up the databases directory for us]
-<prompt>&gt;</prompt> <userinput>quit</userinput>
-&prompt.root; <userinput>tar xf databases.tar</userinput>
-[extract all the database skeletons]
-&prompt.root; <userinput>cd databases</userinput>
-&prompt.root; <userinput>make install</userinput>
-[build and install all the database ports]</screen>
-
- <para>Con media docena de sencillos comandos, tenenemos instalada toda
- una serie de programas de bases de datos en nuestra m&aacute;quina
- FreeBSD. Todo lo que hemos hecho diferente de la instalaci&oacute;n de
- un s&oacute;lo port ha sido bajarnos todo un directorio y compilarlo
- todo de una sola vez. Impresionante, &iquest;no?.</para>
-
- <para>Si tienes pensado instalar muchos ports, es buena idea bajarse
- la colecci&oacute;n de ports completa.</para>
- </sect2>
- </sect1>
-
- <sect1 id="ports-skeleton">
- <title>Esqueletos</title>
-
- <para>Un grupo de hackers compulsivos que ha olvidado comer en un intento
- de llegar a un punto prefijado?. No, un esqueleto aqu&iacute; es la
- expresi&oacute;n m&iacute;nima que incluye todo lo necesario para que los
- ports realicen su m&aacute;gico trabajo.</para>
-
- <sect2 id="ports-makefile">
- <title><filename>Makefile</filename></title>
-
- <para>El componente m&aacute;s importante del esqueleto es el Makefile.
- Este contiene diferentes declaraciones que especifican c&oacute;mo
- debe ser compilado e instalado un port. Aqu&iacute; est&aacute; el
- Makefile para el port ElectricFence:</para>
-
- <programlisting>
-# New ports collection makefile for: Electric Fence
-# Version required: 2.0.5
-# Date created: 13 November 1997
-# Whom: jraynard
-#
-# &#36;Id&#36;
-#
-
-DISTNAME= ElectricFence-2.0.5
-CATEGORIES= devel
-MASTER_SITES= ${MASTER_SITE_SUNSITE}
-MASTER_SITE_SUBDIR= devel/lang/c
-
-MAINTAINER= jraynard@freebsd.org
-
-MAN3= libefence.3
-
-do-install:
- ${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
- ${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
-
-.include &lt;bsd.port.mk&gt;</programlisting>
-
- <para>Las l&iacute;neas que empiezan con el s&iacute;mbolo &quot;#&quot;
- son comentarios para facilitar las cosas a los lectores humanos (como
- en la mayor&iacute;a de los scripts en Unix).</para>
-
- <para><literal>DISTNAME</literal> especifica el nombre del <link
- linkend="ports-tarball">tarball</link>, pero sin la extensi&oacute;n.
- </para>
-
- <para><literal>CATEGORIES</literal> indica que tipo de programa es. En
- este caso, una utilidad para desarrolladores. Mira en la secci&oacute;n
- <link linkend="porting-categories">categor&iacute;as</link> de este
- handbook para ver una lista completa.</para>
-
- <para><literal>MASTER_SITES</literal> es la URL(s) del servidor FTP
- principal, usado para obtener el <link
- linkend="ports-tarball">tarball</link> si no est&aacute; disponible
- en el sistema local. Este servidor se considera fiable, y normalmente es
- desde el que se distribuye de manera oficial el programa.</para>
-
- <para><literal>MAINTAINER</literal> es la direcci&oacute;n de email de
- la persona responsable de actualizar el esqueleto, si, por ejemplo,
- aparece una nueva versi&oacute;n del programa.</para>
-
- <para>Pasando por alto las siguientes l&iacute;neas, la l&iacute;nea
- <literal>.include &lt;bsd.port.mk&gt;</literal> indica que las otras
- declaraciones o comandos necesarios para compilar el port est&aacute;n
- en un fichero est&aacute;ndar llamado <filename>bsd.port.mk</filename>.
- Como &eacute;stas son las mismas para todos los ports, no hay necesidad
- de duplicarlos en todos los ports, as&iacute; que se mantienen en un
- solo fichero.</para>
-
- <para>Este no es el lugar para entrar en detalle sobre el funcionamiento
- del Makefile; es suficiente con decir que la l&iacute;nea que comienza
- con <literal>MAN3</literal> asegura que la p&aacute;gina man de
- ElectricFence sea compilada despu&eacute;s de la instalaci&oacute;n, para
- ayudar a conservar tu preciado espacio en disco. El port original no
- conten&iacute;a el objeto <maketarget>install</maketarget>, as&iacute; que
- las tres l&iacute;neas a partir de <maketarget>do-install</maketarget>
- aseguran que los ficheros producidos por este port sean instalados
- en el lugar correcto.</para>
- </sect2>
-
- <sect2>
- <title>El directorio <filename>files</filename></title>
-
- <para>El fichero que contiene el <link
- linkend="ports-checksum">checksum</link> del port se llama
- <filename>md5</filename>, ya que se usa el algoritmo MD5 para comprobar
- el checksum de los ports. Est&aacute; en el directorio llamado
- <filename>files</filename>.</para>
-
- <para>Este directorio puede contener otros ficheros necesarios para
- compilar el port y que no pueden situarse en ningun otro lugar.</para>
- </sect2>
-
- <sect2>
- <title>El directorio <filename>patches</filename></title>
-
- <para>Este directorio contiene los <link
- linkend="ports-patch">patches</link> necesarios para hacer
- que todo funcione correctamente bajo FreeBSD.</para>
- </sect2>
-
- <sect2>
- <title>El directorio <filename>pkg</filename></title>
-
- <para>Este programa contiene tres archivos muy comunes:</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>COMMENT</filename> &mdash; una descripci&oacute;n
- muy corta del programa.</para>
- </listitem>
-
- <listitem>
- <para><filename>DESCR</filename> &mdash; una descripci&oacute;n
- m&aacute;s detallada.</para>
- </listitem>
-
- <listitem>
- <para><filename>PLIST</filename> &mdash; una lista de todos los
- archivos que ser&aacute;n creados cuando el programa est&eacute;
- instalado.</para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
-
- <sect1 id="ports-troubleshooting">
- <title>&iquest;Qu&eacute; hacer cuando un port no funciona?</title>
-
- <para>Oh, puedes hacer una de estas cuatro (4) cosas:</para>
-
- <orderedlist>
- <listitem>
- <para>Solucionarlo t&uacute; mismo. Los detalles t&eacute;cnicos de como
- trabajan los ports se pueden encontrar en <link
- linkend="porting">Portando aplicaciones.</link></para>
- </listitem>
-
- <listitem>
- <para>Quejarte. <emphasis>S&oacute;lo</emphasis> hacerlo por email.
- Env&iacute; el mail a la direcci&oacute;n &a.ports; y por favor,
- indica el nombre/versi&oacute;n del port, d&oacute;nde obtuviste el
- c&oacute;digo fuente y cual ha sido el texto de error.</para>
- </listitem>
-
- <listitem>
- <para>Olvidarlo. Este el sistema m&aacute;s f&aacute;cil para alguno
- de los pocos ports que puedan clasificarse como esenciales.</para>
- </listitem>
-
- <listitem>
- <para>Obtener el package compilado desde un servidor FTP. La
- colecci&oacute;n principal de packages est&aacute; en el servidor
- principal de FreeBSD en el directorio <ulink
- URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/">
- packages</ulink>, pero por favor, mira primero en tu mirror local.
- Estos programas suelen dar menos problemas que intentar compilar el
- c&oacute;digo fuente y es, sobre todo, mucho m&aacute;s r&aacute;pido.
- Usa el programa &man.pkg.add.1; para instalar un package en tu
- sistema.</para>
- </listitem>
- </orderedlist>
- </sect1>
-
- <sect1>
- <title>Algunas Preguntas y Respuestas</title>
-
- <itemizedlist>
- <listitem>
- <para>P. Pensaba que esto iba a ser una discusi&oacute;n sobre modems
- </para>
-
- <para>R. Ah. Debes estar pensando en los puertos serie que hay en la
- parte trasera de tu ordenador. Aqu&iacute; usamos la palabra
- &ldquo;port&rdquo; para definir el resultado de &ldquo;portar&rdquo;
- un programa de una versi&oacute;n de Unix a otra. (Desafortunadamente
- es un mal h&aacute;bito de los inform&aacute;ticos el usar la misma
- palabra para referirse a cosas completamente diferentes).</para>
- </listitem>
-
- <listitem>
- <para>P. Pensaba que usabais los packages para instalar los programas
- extras</para>
-
- <para>R. S&iacute;, esa es la manera m&aacute;s r&aacute;pida y
- f&aacute;cil de instalarlos.</para>
- </listitem>
-
- <listitem>
- <para>P. Entonces, &iquest;Porqu&eacute; usar los ports?</para>
-
- <para>R. Por diferentes razones:</para>
-
- <orderedlist>
- <listitem>
- <para>Las condiciones de la licencia de algunos programas requieren
- que sean distribuidos como c&oacute;digo fuente y no en formato
- binario.</para>
- </listitem>
-
- <listitem>
- <para>Algunas personas no conf&iacute;an en las distribuciones
- binarias. Al menos, con el c&oacute;digo fuente puedes (en
- teor&iacute;a) repasarlo y detectar problemas potenciales
- t&uacute; mismo.</para>
- </listitem>
-
- <listitem>
- <para>Si tienes algunos parches locales, necesitas el c&oacute;digo
- fuente para poder a&ntilde;adirlos t&uacute; mismo.</para>
- </listitem>
-
- <listitem>
- <para>Posiblemente tengas opiniones diferentes a las de otros
- usuarios en lo que respecta a las opciones de optimizaci&oacute;n
- en la compilaci&oacute;n, creaci&oacute;n de versiones de debug,
- etc.</para>
- </listitem>
-
- <listitem>
- <para>A algunos usuarios les gusta tener el c&oacute;digo fuente
- para poder leerlo, retocarlo, destrozarlo (dentro de los
- t&eacute;rminos de la licencia, claro), y cosas as&iacute;.</para>
- </listitem>
- </orderedlist>
- </listitem>
-
- <listitem>
- <para><anchor id="ports-patch"> P. &iquest;Qu&eacute; es un patch
- (parche)?</para>
-
- <para>R. Un parche es un peque&ntilde;o fichero (normalmente) que
- especifica como pasar de una versi&oacute;n de un archivo a otra.
- Contiene texto que especifica cosas como &ldquo;borrar l&iacute;nea
- 23&rdquo;, &ldquo;a&ntilde;adir estas dos l&iacute;neas despu&eacute;s
- de la l&iacute;nea 468&rdquo; o &ldquo;cambia la l&iacute;nea 197
- por esta&rdquo;. Tambi&eacute;n se conoce como &ldquo;diff&rdquo; ya
- que se genera por un programa llamado as&iacute;.</para>
- </listitem>
-
- <listitem>
- <para><anchor id="ports-tarball"> P. Qu&eacute; es un tarball?</para>
-
- <para>R. Es un archivo terminado en <filename>.tar</filename> o
- <filename>.tar.gz</filename> (con variaciones como
- <filename>.tar.Z</filename>, o tambi&eacute;n <filename>.tgz</filename>
- si intentas adecuar el nombre del archivo a un sistema de archivos
- DOS).</para>
-
- <para>B&aacute;sicamente, es un &aacute;rbol de directorios que ha
- sido archivado en un solo fichero (<filename>.tar</filename>) y
- opcionalmente comprimido (<filename>.gz</filename>). Esta
- t&eacute;cnica se us&oacute; originalmente para
- <emphasis>T</emphasis>ape <emphasis>AR</emphasis>chives (archivos de
- cinta) y de aqu&iacute; el nombre <command>tar</command>, pero ahora
- es de uso general en la distribuci&oacute;n deil c&oacute;digo
- fuente de programas a trav&eacute;s de Internet.</para>
-
- <para>Puedes ver que archivos hay en ellos, o bi&eacute;n extraerlos
- t&uacute; mismo, usando el programa est&aacute;ndar de Unix tar,
- incluido en el sistema base de FreeBSD, as&iacute;:</para>
-
- <screen>&prompt.user; <userinput>tar tvzf foobar.tar.gz</userinput>
-
-&prompt.user; <userinput>tar xzvf foobar.tar.gz</userinput>
-&prompt.user; <userinput>tar tvf foobar.tar</userinput>
-&prompt.user; <userinput>tar xvf foobar.tar</userinput></screen>
- </listitem>
-
- <listitem>
- <para><anchor id="ports-checksum">P. &iquest;Y el checksum?</para>
-
- <para>R. Es un n&uacute;mero que se genera a partir de todo el
- contenido del archivo que quieres chequear. Si cambia alguno de
- los car&aacute;cteres, el checksum no ser&aacute; el mismo, as&iacute;
- que una simple comparaci&oacute;n te permitir&aacute; conocer la
- diferencia.</para>
- </listitem>
-
- <listitem>
- <para>P. He hecho lo que indicais para <link linkend="ports-cd">
- compilar los ports desde el CDROM</link> y todo ha funcionado
- bi&eacute;n hasta que he intentado instalar el port kermit:</para>
-
- <screen>&prompt.root; <userinput>make install</userinput>
-&gt;&gt; cku190.tar.gz doesn't seem to exist on this system.
-&gt;&gt; Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.</screen>
-
- <para>&iquest;Porqu&eacute; no puedo encontrarlo?</para>
-
- <para>R. Los t&eacute;rminos de la licencia del programa kermit no nos
- permiten incluir el tarball en el CDROM, as&iacute; que tendr&aacute;s
- que bajarlo a mano. La raz&oacute;n por la que han salido esos errores
- es que no estabas conectado a Internet en el momento de la
- instalaci&oacute;n. Una vez lo hayas bajado de cualquiera de los
- servidores arriba mencionados, puedes empezar de nuevo el proceso
- (intenta escoger el servidor m&aacute;s cercano a t&iacute; para
- ganar tiempo y ahorrar ancho de banda de Internet).</para>
- </listitem>
-
- <listitem>
- <para>P. He hecho lo que explicais, pero cuando intento poner el
- archivo en <filename>/usr/ports/distfiles</filename> aparece un error
- que indica que no tengo permisos.</para>
-
- <para>R. El mecanismo de ports busca el tarball en
- <filename>/usr/ports/distfiles</filename>, pero no podr&aacute;s copiar
- nada ah&iacute; por que es un link al CDROM, el cual es de s&oacute;lo
- lectura. Puedes indicar que busque el port en cualquier otro
- directorio haciendo</para>
-
- <screen>&prompt.root; <userinput>make DISTDIR=<replaceable>/where/you/put/it</replaceable> install</userinput></screen>
- </listitem>
-
- <listitem>
- <para>P. &iquest;S&oacute;lo funciona el esquema de ports si
- est&aacute;n en <filename>/usr/ports</filename>? Mi administrador de
- sistema dice que tengo que poner los archivos en
- <filename>/u/people/guests/wurzburger</filename>, pero parece que
- as&iacute; no funciona.</para>
-
- <para>R. Puedes usar las variables <makevar>PORTSDIR</makevar> y
- <makevar>PREFIX</makevar> para indicarle al mecanismo de ports que
- use directorios diferentes. Por ejemplo,</para>
-
- <screen>&prompt.root; <userinput>make PORTSDIR=/u/people/guests/wurzburger/ports install</userinput></screen>
-
- <para>compilar&aacute; el port en
- <filename>/u/people/guests/wurzburger/ports</filename> e
- instalar&aacute; todos los archivos bajo
- <filename>/usr/local</filename>.</para>
-
- <screen>&prompt.root; <userinput>make PREFIX=/u/people/guests/wurzburger/local install</userinput></screen>
-
- <para>compilar&aacute; el port en <filename>/usr/ports</filename> y
- lo instalar&aacute; en
- <filename>/u/people/guests/wurzburger/local</filename>.</para>
-
- <para>Y por supuesto</para>
-
- <screen>&prompt.root; <userinput>make PORTSDIR=.../ports PREFIX=.../local install</userinput></screen>
-
- <para>combinar&aacute; los dos (es demasiado extenso para escribirlo
- en la p&aacute;gina, pero seguro que te haces una idea).</para>
-
- <para>Si no quieres tener que teclear todo esto cada vez que instalas
- un ports, es una buena idea poner estas variables como variables de
- entorno.</para>
- </listitem>
-
- <listitem>
- <para>P. No tengo el CDROM de FreeBSD pero me gustar&iacute;a disponer
- de todos los tarball en mi sistema para no tener que esperar a que
- se bajen de Internet cada vez que instalo un port. Hay alguna manera
- sencilla de hacerlo?</para>
-
- <para>R. Para obtener todos los tarball de la colecci&oacute;n completa
- de ports haz</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports</userinput>
-&prompt.root; <userinput>make fetch</userinput></screen>
-
- <para>Para todos los tarball de un directorio de ports, haz</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput>
-&prompt.root; <userinput>make fetch</userinput></screen>
-
- <para>y para un solo port, bueno, creo que ya lo has adivinado.</para>
- </listitem>
-
- <listitem>
- <para>P. S&eacute; que probablemente es m&aacute;s r&aacute;pido
- obtener los tarballs desde un mirror de FreeBSD cercano. &iquest;Hay
- alguna manera de obtener los ports de otros servidores diferentes a los
- establecidos en MASTER_SITES?</para>
-
- <para>R. S&iacute;. Si sabes, por ejemplo que <hostid
- role="fqdn">ftp.FreeBSD.ORG</hostid> te es m&aacute;s cercano que los
- servidores listados en <makevar>MASTER_SITES</makevar>, haz como en el
- siguiente ejemplo.</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput>
-&prompt.root; <userinput>make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen>
- </listitem>
-
- <listitem>
- <para>P. Quiero saber que ficheros va a necesitar el programa
- <command>make</command> antes de que intente bajarlos.</para>
-
- <para>R. <command>make fetch-list</command> mostrar&aacute; una lista
- de los ficheros necesarios para el port.</para>
- </listitem>
-
- <listitem>
- <para>P. &iquest;Hay alguna manera de parar la compilaci&oacute;n del
- port?. Quiero hacer algunos retoques en el c&oacute;digo fuente antes
- de instalarlo, pero es un poco pesado tener que estar atento y pulsar
- control-C cada vez.</para>
-
- <para>R. Ejecutando <command>make extract</command>, el port
- parar&aacute; despu&eacute;s de haber obtenido y extraido el
- c&oacute;digo fuente.</para>
- </listitem>
-
- <listitem>
- <para>P. Estoy intentando crear mi propio port y quiero poder parar
- la compilaci&oacute;n hasta poder asegurarme de que mis parches
- funcionan correctamente. &iquest;Hay alguna comando como
- <command>make extract</command>, pero para parches?</para>
-
- <para>R. S&iacute;, <command>make patch</command> es lo que quieres.
- Probablemente tambi&eacute;n encontrar&aacute;s muy &uacute;til la
- opci&oacute;n <makevar>PATCH_DEBUG</makevar>. Y ya de paso, gracias
- por el esfuerzo!.</para>
- </listitem>
-
- <listitem>
- <para>P. He oido que algunas opciones de compilaci&oacute;n pueden
- causar errores. &iquest;Es cierto?. &iquest;C&oacute;mo puedo
- asegurarme de que compilo los ports con las opciones correctas?.</para>
-
- <para>R. S&iacute;, con la versi&oacute;n 2.6.3 de
- <command>gcc</command> (la versi&oacute;n incluida en FreeBSD 2.1.0 y
- 2.1.5), la opci&oacute;n <option>-O2</option> puede crear problemas
- a no ser que uses tambi&eacute;n la opci&oacute;n
- <option>-fno-strength-reduce</option>. (Muchos de los ports no usan
- <option>-O2</option>). <emphasis>Deber&iacute;s</emphasis> poder
- especificar las opciones de compilaci&oacute;n con algo como</para>
-
- <screen>&prompt.root; <userinput>make CFLAGS='-O2 -fno-strength-reduce'install</userinput></screen>
-
- <para>o editando el fichero <filename>/etc/make.conf</filename>, pero
- desafortunadamente no todos los ports respetan esto. La forma m&aacute;s
- segura es hacer <command>make configure</command>, entrar en el
- directorio de los fuentes e inspeccionar a mano los Makefiles, pero
- puede ser muy tedioso si los fuentes tienen muchos subdirectorios, cada
- uno con su propio Makefile.</para>
- </listitem>
-
- <listitem>
- <para>P. Hay tantos ports que resulta complicado encontrar el que
- quiero. &iquest;Hay alguna lista de los ports disponibles?</para>
-
- <para>R. Mira el archivo <filename>INDEX</filename> en
- <filename>/usr/ports</filename>. Tambi&eacute;n puedes hacer
- b&uacute;squedas de palabras en la colecci&oacute;n de ports. Por
- ejemplo puedes encontrar ports referentes al lenguaje de
- programaci&oacute;n LISP usando:</para>
-
- <screen>&prompt.user; <userinput>cd /usr/ports</userinput>
-&prompt.user; <userinput>make search key=lisp</userinput></screen>
- </listitem>
-
- <listitem>
- <para>P. Iba a instalar el port <literal>foo</literal> pero de pronto
- el sistema par&oacute; la compilaci&oacute;n y comenz&oacute; a
- compilar el port <literal>bar</literal>. &iquest;Qu&eacute;
- est&aacute; pasando?</para>
-
- <para>R. El port <literal>foo</literal> necesita algo que ofrece el
- port <literal>bar</literal>, por ejemplo, si <literal>foo</literal>
- usa gr&aacute;ficos, <literal>bar</literal> puede tener
- librer&iacute;as con rutinas de procesamiento gr&aacute;fico
- &uacute;tiles. O puede ser que <literal>bar</literal> sea una
- herramienta necesaria para compilar el port <literal>foo</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para><anchor id="ports-remove">P. Instal&eacute; el programa
- <literal>grizzle</literal> desde los ports, y, francamente, me parece
- una p&eacute;rdida de espacio en disco, Quiero borrarlo pero no
- s&eacute; d&oacute;nde est&aacute;n todos los ficheros.
- &iquest;alguna idea?</para>
-
- <para>R. No hay problema, s&oacute;lo haz</para>
-
- <screen>&prompt.root; <userinput>pkg_delete grizzle-6.5</userinput></screen>
- </listitem>
-
- <listitem>
- <para>P. Espera un momento; necesitas saber el n&uacute;mero de
- versi&oacute;n para usar ese comando. No creer&aacute;s que voy a ser
- capaz de recordarlo, &iquest;no?</para>
-
- <para>R. No, desde luego. Puedes encontrar el n&uacute;mero de
- versi&oacute;n haciendo</para>
-
- <screen>&prompt.root; <userinput>pkg_info -a | grep grizzle</userinput>
-Information for grizzle-6.5:
-grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.</screen>
- </listitem>
-
- <listitem>
- <para>P. Hablando de espacio en disco, el directorio de ports parece
- que cada vez ocupa m&aacute;s espacio. &iquest;Es recomendable
- borrar cosas?</para>
-
- <para>R. S&iacute;, si ya tienes instalado el programa y crees que no
- vas a necesitarlo de nuevo. La mejor manera de hacerlo es</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports</userinput>
-&prompt.root; <userinput>make clean</userinput></screen>
-
- <para>lo que entrar&aacute; en todos los subdirectorios de ports y
- borrar&aacute; todo excepto el esqueleto de cada port.</para>
-
- </listitem>
-
- <listitem>
- <para>P. He hecho lo que comentais y todav&iacute;a tengo todos esos
- tarballs o como le llameis en el directorio
- <filename>distfiles</filename>. &iquest;Puedo borrar esos archivos?
- </para>
-
- <para>R. S&iacute;, si est&aacute;s seguro de haber terminado con
- ellos.</para>
- </listitem>
-
- <listitem>
- <para>P. Me gusta tener muchos programas para poder jugar con ellos.
- &iquest;Hay alguna manera de instalar todos los ports de una vez?
- </para>
-
- <para>R. S&oacute;lo haz</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports</userinput>
-&prompt.root; <userinput>make install</userinput></screen>
- </listitem>
-
- <listitem>
- <para>P. Bi&eacute;n, lo he intentado, pero pensando que tardar&iacute;a
- mucho me fu&iacute; a dormir y cuando he vuelto esta ma&ntilde;na he
- visto que s&oacute;lo hab&iacute;a instalado tres ports y medio.
- &iquest;Ha ido algo mal?</para>
-
- <para>R. No, el problema es que algunos ports necesitan hacer preguntas
- que no podemos responder por t&iacute; y necesitan tener a alguien
- "a mano" para poder responderlas.</para>
- </listitem>
-
- <listitem>
- <para>P. Realmente, no quiero perder todo un d&iacute;a delante del
- monitor. &iquest;Alguna idea mejor?</para>
-
- <para>R. Bueno, haz esto antes de irte a dormir</para>
-
- <screen>&prompt.root <userinput>cd /usr/ports</userinput>
-&prompt.root; <userinput>make -DBATCH install</userinput></screen>
-
- <para>Esto instalar&aacute; todos los ports que <emphasis>no</emphasis>
- requieran participaci&oacute;n por parte del usuario. Entonces,
- cuando vuelvas haz</para>
-
- <screen>&prompt.root; <userinput>cd /usr/ports</userinput>
-&prompt.root; <userinput>make -DIS_INTERACTIVE install</userinput></screen>
-
- <para>para terminar el trabajo.</para>
- </listitem>
-
- <listitem>
- <para>P. En el trabajo, estamos usando el programa
- <literal>frobble</literal>, que est&aacute; en la colecci&oacute;n de
- ports, pero lo hemos alterado un poco para cubrir nuestras necesidades.
- &iquest;Hay alguna manera sencilla de hacer nuestros propios packages
- de manera que podamos distribuirlos m&aacute;s f&aacute;cilmente en
- nuestros servidores?</para>
-
- <para>R. No hay problema, asumiendo que sabes como hacer los parches
- para tus cambios:</para>
-
- <screen>&prompt.root; <userinput>cd <replaceable>/usr/ports/somewhere/frobble</replaceable></userinput>
-&prompt.root; <userinput>make extract</userinput>
-&prompt.root; <userinput>cd work/frobble-2.8</userinput>
-[Apply your patches]
-&prompt.root; <userinput>cd ../..</userinput>
-&prompt.root; <userinput>make package</userinput></screen>
- </listitem>
-
- <listitem>
- <para>P. Este sistema de ports es realmente fant&aacute;stici. Estoy
- desesperado por saber como lo habeis hecho. &iquest;Cu&aacute;l es el
- secreto?</para
-
- <para>R. No hay nada secreto, lo tienes todo en los ficheros
- <filename>bsd.ports.mk</filename> y
- <filename>bsd.ports.subdir.mk</filename> en tu directorio de <ulink
- URL="file://localhost/usr/share/mk/">makefiles.</ulink></para>
-
- <note>
- <para>Los lectores con aversi&oacute;n a intrincados shell-scripts
- est&aacute;n avisados de no seguir este link...)</para>
- </note>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="porting">
- <title>Haciendo t&uacute; mismo un port</title>
-
- <para><emphasis>Contribuido por &a.jkh;, &a.gpalmer;, &a.asami; &a.obrien;
- y &a.hoek;. 28 de Agosto de 1996.</emphasis></para>
-
- <para>As&iacute; que, &iquest;ahora est&aacute;s interesado en hacer un
- port?. Bi&eacute;n!</para>
-
- <para>Lo que viene a continuaci&oacute;n son algunas gu&iacute;s para crear
- un nuevo port para FreeBSD. La mayor&iacute;a del trabajo es hecha por el
- fichero <filename>/usr/ports/Mk/bsd.port.mk</filename> que incluyen todos
- los Makefile de los ports. Por favor, mira en este fichero para m&aacute;s
- informaci&oacute;n sobre la manera de trabajar de la colecci&oacute;n de
- ports. Aunque no uses los Makefiles de manera habitualm, est&aacute;
- bi&eacute;n comentado, y podr&aacute;s conocer una gran cantidad de cosas
- a trav&eacute;s de &eacute;l.</para>
-
- <note>
- <para>S&oacute;lo una peque&ntilde;a parte de las variables
- sobreescribibles (<makevar><replaceable>VAR</replaceable></makevar>)
- se mencionan en este documento. Muchas (si no todas) est&aacute;n
- documentadas al inicio del fichero <filename>bsd.port.mk</filename>.
- Este fichero usa una tabulaci&oacute;n no est&aacute;ndar.
- <application>Emacs</application> y <application>Vim</application>
- deber&iacute;n reconocer la configuraci&oacute;n al cargar el fichero.
- <command>vi</command> or <command>ex</command> se pueden configurar
- para que usen los valores correctos tecleando
- <command>:set tabstop=4</command> una vez que el fichero ha sido
- cargado.</para>
- </note>
-
- <sect2>
- <title>Haciendo Ports r&aacute;pidamente</title>
-
- <para>Esta secci&oacute;n te explica c&oacute;mo hacer un port
- r&aacute;pidamente. En muchos casos no es suficiente, pero ya lo iremos
- viendo.</para>
-
- <para>Primero, obt&eacute;n el tarball original y ponlo en
- <makevar>DISTDIR</makevar>, que por defecto apunta a
- <filename>/usr/ports/distfiles</filename>.</para>
-
- <note>
- <para>Los siguientes comentarios asumen que el software compila
- sin problema alguno en FreeBSD, y no se requiere absolutamente
- ning&uacute;n cambio para que el port funcione en tu sistema
- FreeBSD. Si has necesitado modificar alguna cosa, tendr&aacute;s que
- referirte tambi&eacute;n por la siguiente secci&oacute;n.</para>
- </note>
-
- <sect3>
- <title>Escribiendo el <filename>Makefile</filename></title>
-
- <para>El <filename>Makefile</filename> deber&iacute;a ser algo como
- esto:</para>
-
- <programlisting>
-# New ports collection makefile for: oneko
-# Version required: 1.1b
-# Date created: 5 December 1994
-# Whom: asami
-#
-# &#36;Id&#36;
-#
-
-DISTNAME= oneko-1.1b
-CATEGORIES= games
-MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-
-MAINTAINER= asami@FreeBSD.ORG
-
-MAN1= oneko.1
-MANCOMPRESSED= yes
-USE_IMAKE= yes
-
-.include &lt;bsd.port.mk&gt;</programlisting>
-
- <para>Prueba de entenderlo t&uacute; mismo. No te preocupes por los
- contenidos de la l&iacute;nea <literal>&#36;Id&#36;</literal>, ya
- que ser&aacute;n completadas automaticamente por el CVS cuando el port
- sea importado a la colecci&oacute;n de ports principal. Puedes
- encontrar informaci&oacute;n m&aacute;s detallada en la secci&oacute;n
- <link linkend="porting-samplem">Makefile de ejemplo</link>.</para>
- </sect3>
-
- <sect3>
- <title>Escribiendo los ficheros de descripci&oacute;n</title>
-
- <para>Hay tres ficheros de descripci&oacute;n que son requeridos por
- cualquier port. Los ficheros son <filename>COMMENT</filename>,
- <filename>DESCR</filename> y <filename>PLIST</filename>. Estos ficheros
- deben estar en el subdirectorio <filename>pkg</filename>.</para>
-
- <sect4>
- <title><filename>COMMENT</filename></title>
-
- <para>Descripci&oacute;n corta del port.
- <emphasis>Por favor</emphasis> no incluir el nombre del package
- (o n&uacute;mero de versi&oacute;n del software) en el comentario.
- Aqu&iacute; tienes un ejemplo:</para>
-
- <programlisting>
-A cat chasing a mouse all over the screen.</programlisting>
- </sect4>
-
- <sect4>
- <title><filename>DESCR</filename></title>
-
- <para>Esta es una descripci&oacute;n m&aacute;s detallada del
- port. Uno o varios p&aacute;rrafos explicando claramente que
- hace el port es suficiente.</para>
-
- <note>
- <para>Este <emphasis>no</emphasis> es un manual o una
- descripci&oacute;n en profundidad de c&oacute;mo usar o compilar
- el port! <emphasis>Por favorm, ten cuidado si lo est&aacute;s
- copiando del <filename>README</filename> o del man</emphasis>. Si
- el software portado tiene una p&aacute;gina web oficial,
- deber&iacute;as listarlo aqu&iacute;.</para>
- </note>
-
- <para>Te recomendamos que pongas tu nombre o firma al final de
- este fichero de la manerae siguiente:</para>
-
- <programlisting>
-This is a port of oneko, in which a cat chases a poor mouse all over
-the screen.
- :
-(etc.)
-
-http://www.oneko.org/
-
-- Satoshi
-asami@cs.berkeley.edu</programlisting>
- </sect4>
-
- <sect4>
- <title><filename>PLIST</filename></title>
-
- <para>Este fichero lista todos los ficheros instalados por el port.
- Tambi&eacute;n se llama &ldquo;packing list&rdquo; por que el
- package es generado con los ficheros listados aqu&iacute;. Los
- paths son relativos al prefijo de instalaci&oacute;n (normalmente
- <filename>/usr/local</filename> o <filename>/usr/X11R6</filename>).
- Si est&aacute;s usando las variables
- <makevar>MAN<replaceable>n</replaceable></makevar> (como
- deber&iacute;s hacer), no listes ninguna p&aacute;gina man
- aqu&iacute;.</para>
-
- <para>Aqu&iacute; tienes un peque&ntilde;o ejemplo:</para>
-
- <programlisting>
-bin/oneko
-lib/X11/app-defaults/Oneko
-lib/X11/oneko/cat1.xpm
-lib/X11/oneko/cat2.xpm
-lib/X11/oneko/mouse.xpm
-@dirrm lib/X11/oneko</programlisting>
-
- <para>Mira en el man de &man.pkg.create.1; para m&aacute;s detalles
- sobre la "lista de empaquetado".</para>
-
- <note>
- <para>Deber&iacute;s listar todos los ficheros, pero no los nombres
- de los directorios. De la misma manera, si el port crea directorios
- por s&iacute; mismo durante la instalaci&oacute;n, aseg&uacute;rate
- de a&ntilde;adir las l&iacute;neas <literal>@dirrm</literal>
- cuando sea necesario para eliminarlos cuando el port sea
- desinstalado.</para>
-
- <para>Es recomendable que mantengas todos los nobres de fichero en
- este archivo ordenados alfab&eacute;ticamente. Har&aacute; que la
- verificaci&oacute;n de cambios cuando actualices el port sea mucho
- m&aacute;s sencilla.</para>
- </note>
- </sect4>
- </sect3>
-
- <sect3>
- <title>Creando el fichero de checksum</title>
-
- <para>Solo teclea <command>make checksum</command>. Las reglas del
- programa make para los ports generar&aacute;n autom&aacute;ticamente
- el fichero <filename>files/md5</filename>.</para>
- </sect3>
-
- <sect3 id="porting-testing">
- <title>Testeando los ports</title>
-
- <para>Debes asegurarte de que las reglas de los ports hagan
- exactamente lo que quieres que hagan, incluyendo el empaquetado
- del port. Estos son los puntos importantes que necesitas verificar:
- </para>
-
- <itemizedlist>
- <listitem>
- <para><filename>PLIST</filename> no contiene nada que no sea
- instalado por tu port</para>
- </listitem>
-
- <listitem>
- <para><filename>PLIST</filename> contiene absolutamente todos
- los ficheros instalados por tu port</para>
- </listitem>
-
- <listitem>
- <para>Tu port puede ser instalado m&uacute;ltiples veces
- usando el par&aacute;metro <maketarget>reinstall</maketarget></para>
- </listitem>
-
- <listitem>
- <para>Tu port se <link linkend="porting-cleaning">elimina</link>
- a s&iacute; mismo al usar el par&aacute;metro deinstall</para>
- </listitem>
- </itemizedlist>
-
- <procedure>
- <title>Orden de test recomendado</title>
-
- <step>
- <para><command>make install</command></para>
- </step>
-
- <step>
- <para><command>make package</command></para>
- </step>
-
- <step>
- <para><command>make deinstall</command></para>
- </step>
-
- <step>
- <para><command>pkg_add `make package-name`</command></para>
- </step>
-
- <step>
- <para><command>make deinstall</command></para>
- </step>
-
- <step>
- <para><command>make reinstall</command></para>
- </step>
-
- <step>
- <para><command>make package</command></para>
- </step>
- </procedure>
-
- <para>Aseg&uacute;rate de que no existe ning&uacute;n warning en
- los comandos <maketarget>package</maketarget> y
- <maketarget>deinstall</maketarget>. Despu&eacute;s del paso 3, mira
- si todos los nuevos directorios han sido eliminados correctamente.
- tambi&eacute;n, intenta usar el software despu&eacute;s del paso 4,
- para asegurarte de que funciona correctamente cuando es instalado desde
- un package.</para>
- </sect3>
-
- <sect3 id="porting-portlint">
- <title>Probando tu port con <command>portlint</command></title>
-
- <para>Por favor, usa el comando <command>portlint</command> para
- ver si tu port cumple nuestras normas. El programa
- <command>portlint</command> forma parte de la colecci&oacute;n de
- ports. En particular, debes probar que el
- <link linkend="porting-samplem">Makefile</link> es correcto y que el
- <link linkend="porting-pkgname">package</link> es nombrado
- apropiadamente.</para>
- </sect3>
-
- <sect3 id="porting-submitting">
- <title>Enviando un port</title>
-
- <para>Primero, aseg&uacute;rate de haber leido la secci&oacute;n
- <link linkend="porting-dads">Do's and Dont's</link>.</para>
-
- <para>Ahora que ya tienes tu port, solo queda incluirlo en la
- colecci&oacute;n de ports principal de FreeBSD y que todo el mundo
- lo tenga a su alcance. No necesitamos tu directorio
- <filename>work</filename> o el archivo de package
- <filename>pkgname.tgz</filename>, as&iacute; que b&oacute;rralos
- ahora. A continuaci&oacute;n, simplemente incluye la salida de
- <command>shar `find port_dir`</command> en un "bug report" y
- envialo con el programa &man.send-pr.1; (mira en
- <link linkend="contrib-general">Bug Reports y comentarios generales</link> para m&aacute;s informaci&oacute;n sobre &man.send-pr.1;. Si el port
- descomprimido es mayor de 20Kb deber&iacute;as comprimirlo en un
- fichero tar y usar el comando &man.uuencode.1; antes de incluirlo en
- el bug report. Clasifica el bug report en la categor&iacute;a
- <literal>ports</literal> y clase <literal>change-request</literal>.
- No marques el port como <literal>confidencial</literal>!)</para>
-
- <para>Una vez m&aacute;s, <emphasis>no incluyas el c&oacute;digo
- fuente original, el directorio <filename>work</filename>, o el
- package creado con <command>make package</command></emphasis>.</para>
-
- <note>
- <para>En el pasado, te recomendabamos enviar el nuevo port a nuestro
- servidor ftp (<hostid role="fqdn">ftp.freebsd.org</hostid>). Esto
- ya no es recomendando ya que el permiso de lectura se ha desactivado
- en el directorio <filename>incoming</filename> por la cantidad de
- software pirata que se enviaba.</para>
- </note>
-
- <para>Miraremos tu port, nos pondremos en contacto contigo si es
- necesario y lo a&ntilde;adiremos en la colecci&oacute;n principal.
- Tu nombre aparecer&aacute; en la lista
- &ldquo;Additional FreeBSD contributors&rdquo; en el Handbook de
- FreeBSD y otros ficheros. &iquest;No es genial?!? <!-- smiley
- -->:)</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Ports paso a paso</title>
-
- <para>Bi&eacute;n, as&iacute; que no ha sido tan simple, y el port
- ha necesitado algunas modificaciones para funcionar. En esta
- secci&oacute;n, explicaremos, paso a paso, como modificarlo para
- que pueda funcionar en el entorno de los ports.</para>
-
- <sect3>
- <title>C&oacute;como funcionan las cosas</title>
-
- <para>Primero, esta es la secuencia de eventos que ocurren cuando
- un usuario teclea <command>make</command> en el directorio de ports.
- Si tienes otra ventana con el fichero <filename>bsd.port.mk</filename>
- te resultar&aacute; m&aacute;s sencillo entender todo el proceso.</para>
-
- <para>Pero no te preocupes si realmente no entiendes todo lo que
- hace el fichero <filename>bsd.port.mk</filename>... no hay mucha gente
- que realmente lo entienda...
- <!-- smiley --><emphasis>:&gt;</emphasis></para>
-
- <procedure>
- <step>
-
- <para>El objeto <maketarget>fetch</maketarget> es ejecutado. El
- objeto <maketarget>fetch</maketarget> es el responsable de asegurar
- que el tarball necesario existe localmente en el directorio
- <makevar>DISTDIR</makevar>. Si <maketarget>fetch</maketarget>
- no puede encontrar los ficheros requeridos en
- <makevar>DISTDIR</makevar> localizar&aacute; el URL de
- <makevar>MASTER_SITES</makevar>, la cual existe en el Makefile,
- al igual que en nuestro servidor principal ftp <ulink
- URL="ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/">ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/</ulink>,
- que usamos como servidor de backup. A continuaci&oacute;n
- intentar&aacute; obtener el archivo de la distribuci&oacute;n
- con <makevar>FETCH</makevar>, asumiendo que el servidor de
- origen tiene conexi&oacute;n directa a Internet. Si este paso
- termina correctamente, grabar&aacute; el archivo en
- <makevar>DISTDIR</makevar> para su uso futuro.</para>
- </step>
-
- <step>
- <para>El objeto <maketarget>extract</maketarget> es ejecutado.
- Busca el archivo de distribuci&oacute;n del port
- (normalmente un tarball comprimido con gzip) en
- <makevar>DISTDIR</makevar> y lo descomprime en un sibdirectorio
- temporal especificado por la variable <makevar>WRKDIR</makevar>
- (normalmente <filename>work</filename>).</para>
- </step>
-
- <step>
- <para>Se ejecuta el objeto <maketarget>patch</maketarget>. Primero
- se aplican todos los parches definidos en
- <makevar>PATCHFILES</makevar>. A continuaci&oacute;n, si no se
- han encontrado parches en <makevar>PATCHDIR</makevar> (que por
- defecto est&aacute; definido como el subdirectorio
- <filename>patches</filename>), son aplicados en orden
- alfab&eacute;tico.</para>
- </step>
-
- <step>
- <para>Se ejecuta el objeto <maketarget>configure</maketarget>.
- Este puede hacer cualquiera de las siguientes funciones.</para>
-
- <orderedlist>
- <listitem>
- <para>Si existe, se ejecuta
- <filename>scripts/configure</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Si <makevar>USE_IMAKE</makevar> est&aacute;
- definido, se ejecuta <makevar>XMKMF</makevar> (por
- defecto: <command>xmkmf -a</command>).</para>
- </listitem>
- </orderedlist>
- </step>
-
- <step>
- <para>Se ejecuta el objeto <maketarget>build</maketarget>. Este es
- responsable de descender por los directorios de trabajo privados
- del port (<makevar>WRKSRC</makevar>) y compilarlos. Si se ha
- definido <makevar>USE_GMAKE</makevar> se usa el comando
- <command>make</command>, en caso contrario, se usar&aacute; el
- comando de sistema <command>make</command>.</para>
- </step>
- </procedure>
-
- <para>Las anteriores, son las acciones por defecto. Adem&aacute;s,
- puedes definir los objetos
- <maketarget>pre-<replaceable>algo</replaceable></maketarget> o
- <maketarget>post-<replaceable>something</replaceable></maketarget>,
- o poner scripts con esos nombres. En el subdirectorio
- <filename>scripts</filename>, y ser&aacute;n ejecutados antes o
- despu&eacute;s de las acciones por defecto.</para>
-
- <para>Por ejemplo, si tienes definido un objeto
- <maketarget>post-extract</maketarget> en tu Makefile, y un fichero
- <filename>pre-build</filename> en el subdirectorio
- <filename>scripts</filename>, el objeto
- <maketarget>post-extract</maketarget> ser&aacute; llamado despu&eacute;s
- de las acciones de extracci&oacute;n regulares, y el script
- <filename>pre-build</filename> ser&aacute; ejecutado antes que las
- reglas por defecto de compilaci&oacute;n. Es recomendable que uses
- objetos de <filename>Makefile</filename> en caso de que las acciones
- a realizar sean suficientemente simples, ya que as&iacute;
- resultar&aacute; mucho m&aacute;s sencillo saber que tipo de acciones
- no regulares requiere el port.</para>
-
- <para>Las acciones por defecto son ejecutadas por los objetos
- <maketarget>do-<replaceable>something</replaceable></maketarget> del
- fichero <filename>bsd.port.mk</filename>. Por ejemplo, los mandatos
- para extraer un port est&aacute;n en el objeto
- <maketarget>do-extract</maketarget>. Si necesitas algo no incluido
- en el objeto por defecto, puedes solucionarlo redefiniendo el objeto
- <maketarget>do-<replaceable>something</replaceable></maketarget> en
- tu <filename>Makefile</filename>.</para>
-
- <note>
- <para>Los objetos &ldquo;principales&rdquo; (por ejemplo,
- <maketarget>extract</maketarget>,
- <maketarget>configure</maketarget>, etc.) no hacen nada m&aacute;s
- que asegurar que se han completado todos los procesos y llamar a los
- objetos o scripts reales, y no se espera que sean modificados. Si
- quieres modificar la extracci&oacute;n, cambia el objeto
- <maketarget>do-extract</maketarget>, pero nunca modifiques
- el objeto <maketarget>extract</maketarget>!</para>
- </note>
-
- <para>Ahora que entiendes lo que pasa cuando un usuario teclea
- <command>make</command>, d&eacute;janos explicarte los pasos
- recomendados para crear el port perfecto.</para>
- </sect3>
-
- <sect3>
- <title>Obteniendo los fuentes originales</title>
-
- <para>Obt&eacute;n los fuentes originales (normalmente) en un
- archivo comprimido
- (<filename><replaceable>foo</replaceable>.tar.gz</filename> o
- <filename><replaceable>foo</replaceable>.tar.Z</filename>) y copialo
- en el directorio <makevar>DISTDIR</makevar>. Usa siempre d&oacute;nde
- y cuando puedas los fuentes procedentes del servidor
- <emphasis>principal</emphasis> de la distribuci&oacute;n.</para>
-
- <para>Si no puedes encontrar un servidor ftp/http con una buena
- conexi&oacute;n a Internet, o s&oacute;lo encuentras servidores
- que tienen los fuentes en irritantes formatos no est&aacute;ndar,
- puedes poner una copia funcional del archivo en un servidor ftp
- o http bajo tu control (tu p&aacute;gina personal, por ejemplo).
- Aseg&uacute;rate de usar el valor correcto en la variable
- <makevar>MASTER_SITES</makevar> para que refleje tu elecci&oacute;n.
- </para>
-
- <para>Si no puedes encontrar ning&uacute;n lugar en el que poner
- el fichero de distribuci&oacute;n (si eres committer de FreeBSD,
- puedes ponerlo en el directorio <filename>public_html/</filename>
- del servidor <hostid>freefall</hostid>), nosotros podemos
- albergarlo en
- <filename>ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/</filename>
- como &uacute;ltimo recurso. Por favor, usa la variable
- <makevar>MASTER_SITE_LOCAL</makevar> para referirte a este servidor y
- subdirectorio. Env&iacute;a un mail a &a.ports; si no est&aacute;s
- seguro de qu&eacute; hacer.</para>
-
- <para>Si tu archivo de distribuci&oacute;n cambia continuamente sin
- una buena raz&oacute;n, considera poner el archivo en tu p&aacute;gina
- personal y listarlo como el primer <makevar>MASTER_SITES</makevar>.
- Esto evitar&aacute; que los usuarios obtengan errores del tipo
- <errorname>checksum mismatch</errorname>, y tambi&eacute;n
- reducir&aacute; la carga de trabajo de las personas que hacen el
- mantenimiento de nuestro servidor FTP. De la misma manera, si existe un
- solo servidor como distribuidor principal del programa, es
- recomendable que albergues una copia de la distribuci&oacute;n en
- tu servidor y lo listes como segundo
- <makevar>MASTER_SITES</makevar>.</para>
-
- <para>Si tu port requiere algunos parches adicionales que est&aacute;n
- disponibles en Internet, b&aacute;jalos y ponlos en
- <makevar>DISTDIR</makevar>. No te preocupes si provienen de un
- lugar diferente del que obtuviste el tarball principal, tenemos una
- manera de solucionar este problema (consulta la descripci&oacute;n de
- <link linkend="porting-patchfiles">PATCHFILES</link>).</para>
- </sect3>
-
- <sect3>
- <title>Modificando el port</title>
-
- <para>Descomprime una copia del tarball en un directorio privado y
- haz todos los cambios necesarios para que el port compile en la
- versi&oacute;n actual de FreeBSD. Mant&eacute;n <emphasis>una lista
- completa</emphasis> de todas las modificaciones que realizas para
- poder automatizar el proceso. Todo, incluyendo borrar, a&ntilde;adir
- o modificar ficheros debe poder hacerse de manera autom&aacute;tica
- usando un script o parche.</para>
-
- <para>Si tu port requiere una importante interacci&oacute;n o
- personalizaci&oacute;n para compilar o instalar, puedes mirar la
- cl&aacute;sica aplicaci&oacute;n <application>Configure</application>
- de Larry Wall y hacer algo as&iacute; tu mismo. El objetivo de la
- nueva colecci&oacute;n de ports es hacer que cada port sea tan
- &ldquo;plug-and-play&rdquo; como sea posible para el usuario final,
- usando el m&iacute;nimo espacio en disco posible.</para>
-
- <note>
- <para>Aunque no se haya mencionado expl&iacute;citamente, los
- parches, scripts y otros archivos que hayas creado o contribuido
- a la colecci&oacute;n de ports de FreeBSD est&aacute;n cubiertos
- por las condiciones est&aacute;ndar del copyright BSD.</para>
- </note>
- </sect3>
-
- <sect3>
- <title>Parcheando</title>
-
- <para>En la preparaci&oacute;n del port, los archivos que han sido
- a&ntilde;didos o modificados pueden recorrerse con un diff recursivo.
- Cada serie de parches que quieras aplicar deben estar integrados en un
- archivo llamado
- <filename>patch-<replaceable>xx</replaceable></filename> donde
- <replaceable>xx</replaceable> marca la secuencia en que los parches
- ser&aacute;n aplicados &mdash; &eacute;stos se aplican en
- <emphasis>&oacute;rden alfab&eacute;tico</emphasis>, as&iacute;
- primero ser&aacute; <literal>aa</literal>, segundo
- <literal>ab</literal> ,etc. Estos archivos deben estar en
- <makevar>PATCHDIR</makevar>, desde donde ser&aacute;n
- autom&aacute;ticamente aplicados. Todos los parches deben ser relativos
- a <makevar>WRKSRC</makevar> (generalmente es el directorio en el que
- se descomprime el port, siendo &eacute;ste el lugar donde se compila).
- Para hacer que la soluci&oacute;n de problemas y actualizaciones sea
- m&aacute;s sencilla, deber&iacute;s evitar tener m&aacute;s de un
- parche aplicable a un mismo archivo (por ejemplo,
- <filename>patch-aa</filename> y <filename>patch-ab</filename>
- modificando ambos al archivo
- <filename><makevar>WRKSRC</makevar>/foobar.c</filename>).</para>
- </sect3>
-
- <sect3>
- <title>Configurando</title>
-
- <para>Incluye cualquier proceso de personalizaci&oacute;n adicional
- en el script <filename>configure</filename> y guardalo en el
- subdirectorio <filename>scripts</filename>. Como se ha mencionado
- anteriormente, tambi&eacute;n puedes hacer esto como un objeto del
- <filename>Makefile</filename> y/o un script con el nombre
- <filename>pre-configure</filename> o
- <filename>post-configure</filename>.</para>
- </sect3>
-
- <sect3>
- <title>Gestionando las entradas de usuario</title>
-
- <para>Si tu port requiere entradas por parte del usuario para la
- compilaci&oacute;n, configuraci&oacute;n o instalaci&oacute;n,
- activa la variable <makevar>IS_INTERACTIVE</makevar> en tu
- Makefile. Esto permitir&aacute; no compilar tu port si el usuario
- usa la variable <envar>BATCH</envar> en su entorno (y si el usuario
- activa la variable <envar>INTERACTIVE</envar>, entonces
- <emphasis>s&oacute;lo</emphasis> ser&aacute;n compilados los ports
- que requieren interacci&oacute;n por parte del usuario).</para>
-
- <para>Tambi&eacute;n es recomendable desactivar el script interactivo
- si un n&uacute;mero razonable de respuestas por defecto son
- aplicables al port (consultar la variable
- <makevar>PACKAGE_BUILDING</makevar>). Esto nos permitir&aacute;
- compilar el package para los CD-ROMs y ftp.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Configurando el Makefile</title>
-
- <para>Configurar el Makefile es bastante sencillo, y de nuevo, te
- sugerimos que consultes los ejemplos existentes antes de empezar.
- Tambi&eacute;n hay un
- <link linkend="porting-samplem">Makefile de ejemplo</link> en este
- handbook, as&iacute; que, consultalo y, por favor, sigue el &oacute;rden
- de las variables y secciones del ejemplo para que tu port sea m&aacute;s
- f&aacute;cil de leer para otras personas.</para>
-
- <para>Ahora, considera los siguientes problemas a medida que haces
- el dise&ntilde;o de tu nuevo Makefile:</para>
-
- <sect3>
- <title>Los fuentes originales</title>
-
- <para>Reside en <makevar>DISTDIR</makevar> como un tarball
- est&aacute;ndar en formato gzip? Si es as&iacute; puedes pasar al
- siguiente paso. En caso contrario, deber&iacute;as considerar la
- posibilidad de sobreescribir alguna de las variables
- <makevar>EXTRACT_CMD</makevar>,
- <makevar>EXTRACT_BEFORE_ARGS</makevar>,
- <makevar>EXTRACT_AFTER_ARGS</makevar>,
- <makevar>EXTRACT_SUFX</makevar>, o <makevar>DISTFILES</makevar>,
- dependiendo del formato del archivo de distribuci&oacute;n del port.
- (El caso m&aacute;s com&uacute;n es
- <literal>EXTRACT_SUFX=.tar.Z</literal>, cuando el tarball est&aacute;
- comprimido con compress y no con gzip.)</para>
-
- <para>En el peor de los casos, puedes crearte tu propio objeto
- <maketarget>do-extract</maketarget> para sobreescribir el objeto
- por defecto.</para>
- </sect3>
-
- <sect3>
- <title><makevar>DISTNAME</makevar></title>
-
- <para>El valor de <makevar>DISTNAME</makevar> debe ser el nombre
- base del port. Las reglas por defecto esperan que la lista de archivos
- de la distribuci&oacute;n (<makevar>DISTFILES</makevar>) se llame
- <makevar>DISTNAME</makevar><makevar>EXTRACT_SUFX</makevar>, el cual, si
- es un tarball normal, ser&aacute;a algo como
- <literal>foozolix-1.0.tar.gz</literal> para usar el valor
- <literal>DISTNAME=foozolix-1.0</literal>.</para>
-
- <para>Las reglas por defecto tambi&eacute;n esperan extraer el
- tarball en un subdirectorio llamado
- <filename>work/<makevar>DISTNAME</makevar></filename>, por ejemplo
- <filename>work/foozolix-1.0/</filename>.</para>
-
- <para>Todos estos valores pueden sobreescribirse; simplemente muestran
- los valores m&aacute;s habituales. Para un port que requiera
- m&uacute;ltiples archivos de distribuci&oacute;n, simplemente usa
- expl&iacute;citamente <makevar>DISTFILES</makevar>. Si solo una parte
- de los <makevar>DISTFILES</makevar> son archivos extraibles, entonces
- usa <makevar>EXTRACT_ONLY</makevar> para referenciarlos, lo que
- sobreescribir&aacute; la lista <makevar>DISTFILES</makevar>
- cuando realice la extracci&oacute;n, y el resto de archivos se
- dejar&aacute;n en <makevar>DISTDIR</makevar> tal y como est&aacute;n
- para su uso posterior.</para>
-
- </sect3>
-
- <sect3>
- <title><makevar>PKGNAME</makevar></title>
-
- <para>Si <makevar>DISTNAME</makevar> no sigue las <link
- linkend="porting-pkgname">normas de nombre</link> para un package,
- deber&iacute;s asignar a la variable <makevar>PKGNAME</makevar> un valor
- m&aacute;s correcto.</para>
- </sect3>
-
- <sect3>
- <title><makevar>CATEGORIES</makevar></title>
-
- <para>Cuando se crea un package, se incluye en el directorio
- <filename>/usr/ports/packages/All</filename> creandose links desde uno
- o m&aacute;s subdirectorios de <filename>/usr/ports/packages</filename>.
- Los nombres de estos subdirectorios est&aacute;n especificados por la
- variable <makevar>CATEGORIES</makevar>. Se utiliza para facilitar al
- usuario la orientaci&oacute;n dentro de la colecci&oacute;n de ports y
- packages. Por favor, consulta las <link
- linkend="porting-categories">categor&iacute;as</link> existentes y
- elige las que sean aplicables a tu port.</para>
-
- <para>Esta lista tambi&eacute;n determina en que lugar del &aacute;rbol
- de ports se importa el port. Si especificas m&aacute;s de una
- categor&iacute;a, se asume que los archivos del port estar&aacute;n en
- el subdirectorio con el nombre en la primera categor&iacute;a.
- Consulta la secci&oacute;n <link
- linkend="porting-categories">categor&iacute;as</link> para saber como
- escoger la catergor&iacute;a adecuada.</para>
-
- <para>Si tu port pertenece realmente a una categor&iacute;n
- inexistente, puedes crear una nueva. En este caso, por favor,
- env&iacute;a un mail a &a.ports; para proponer una nueva
- categor&iacute;a.</para>
-
- <note>
- <para>No hay chequeo de error para los nombres de categor&iacute;as.
- <command>make package</command> crear&aacute; un nuevo directorio
- si tecleas mal el nombre de la categor&iacute;, as&iacute; que
- se cuidadoso!</para>
- </note>
- </sect3>
-
- <sect3>
- <title><makevar>MASTER_SITES</makevar></title>
-
- <para>Guarda la parte del directorio del URL -ftp/hhtp que apunta al
- tarball original en <makevar>MASTER_SITES</makevar>. No olvidar la
- barra final (<filename>/</filename>)!</para>
-
- <para>Las macros <command>make</command> intentaran usar esta
- especificaci&oacute;n para obtener el archivo de distribuci&oacute;n
- con <makevar>FETCH</makevar> si no lo pueden encontrar en el sistema.</para>
-
- <para>Se recomienda poner diferentes servidores en la lista, preferiblemente
- de continentes diferentes. Esto proteger&aacute; de posibles problemas de red
- en grandes &aacute;reas, y se est&aacute; pensando en la posibilidad de
- a&ntilde;adir soporte para determinar autom&aacute;ticamente el servidor
- principal m&aacute;s cercano para obtener el archivo desde &eacute;l.</para>
-
- <para>Si el tarball original forma parte de uno de estos servidores populares:
- X-contrib, GNU, Perl CPAN, TeX CTAN o Linux Sunsite, se debe hacer referencia
- a estos servidores usando
- <makevar>MASTER_SITE_XCONTRIB</makevar>,
- <makevar>MASTER_SITE_GNU</makevar>,
- <makevar>MASTER_SITE_PERL_CPAN</makevar>,
- <makevar>MASTER_SITE_TEX_CTAN</makevar>, y
- <makevar>MASTER_SITE_SUNSITE</makevar>. Simplemente poner
- <makevar>MASTER_SITE_SUBDIR</makevar> al path interno del servidor. Aqu&iacute;
- hay un ejemplo:</para>
-
- <programlisting>
-MASTER_SITES= ${MASTER_SITE_XCONTRIB}
-MASTER_SITE_SUBDIR= applications
- </programlisting>
-
- <para>El usuario tambi&eacute;n puede usar las variables
- <makevar>MASTER_SITE_*</makevar> en el archivo <filename>/etc/make.conf</filename>
- para sobreescribir nuestras selecciones, y usar en su lugar el mirror que
- prefiera de estos servidores.</para>
- </sect3>
-
- <sect3 id="porting-patchfiles">
- <title><makevar>PATCHFILES</makevar></title>
-
- <para>Si el port requiere parches adicionales que est&aacute;n disponibles
- por ftp o http, poner <makevar>PATCHFILES</makevar> a los nombres de archivos
- y <makevar>PATCH_SITES</makevar> a la URL del directorio que los contiene
- (el formato es el mismo que en <makevar>MASTER_SITES</makevar>).</para>
-
- <para>Si el parche no es relativo a la ra&iacute;z del &aacute;rbol
- (<makevar>WKRSRC</makevar>) porque contiene alguna informaci&oacute;n extra
- sobre paths, usar la variable <makevar>PATCH_DIST_STRIP</makevar>. Por ejemplo,
- si todos los path del parche contienen <literal>foozolix-1.0/</literal>
- delante del nombre de archivo, usar <literal>PATCH_DIST_STRIP=-p1</literal>.</para>
-
- <para>No preocuparse si los parches est&aacute;n comprimidos, ser&aacute;n
- descomprimidos autom&aacute;ticamente si el nombre de archivo termina en
- <filename>.gz</filename> o <filename>.Z</filename>.</para>
-
- <para>Si el parche se distribuye con otros archivos, como documentaci&oacute;n, en
- un tarball gzip, no se puede usar <makevar>PATCHFILES</makevar>. Si este es el caso,
- a&ntilde;adir el nombre y situaci&oacute;n del tarball a <makevar>DISTFILES</makevar>
- y <makevar>MASTER_SITES</makevar>. A continuaci&oacute;n, desde el objeto
- <maketarget>pre-patch</maketarget>, aplicar el parche ejecutando mandato
- <command>patch</command> desde &eacute;l, el copiando al archivo del parche en
- el directorio <makevar>PATCHDIR</makevar> llamandolo
- <filename>patch-<replaceable>xx</replaceable></filename>.</para>
-
- <note>
- <para>Tener en cuenta que el tarball ser&aacute; extraido del fuente regular,
- por lo que no es necesario extraerlo expl&iacute;citamente si es un tarball
- comprimido con gzip o compress. Si se hace lo &uacute;ltimo, tener cuidado de
- no sobreescribir algo ya existente en ese directorio. No olvidarse de a&ntilde;adir
- un mandato para borrar el parche copiado en el objeto
- <maketarget>pre-clean</maketarget></para>
- </note>
- </sect3>
-
- <sect3>
- <title><makevar>MAINTAINER</makevar></title>
-
- <para>Poner aqu&iacute; la direcci&oacute;n de mail. Por favor. <!-- smiley
- --><emphasis>:)</emphasis></para>
-
- <para>Para una descripci&oacute;n detallada de la responsabilidad de los
- "maintainers", consultar la secci&oacute;n
- <link linkend="policies-maintainer">MAINTAINER en Makefiles</link>.</para>
- </sect3>
-
- <sect3>
- <title>Dependencias</title>
-
- <para>Muchos ports dependen de otros. Hay cinco variables que se pueden usar para
- asegurar que existen todos los requerimientos necesarios en la m&aacute;quina
- del usuario. Tambi&eacute;n hay algunas variables de dependencia pre-soportadas
- para casos comunes, mas algunos controles de dependencia.</para>
-
- <sect4>
- <title><makevar>LIB_DEPENDS</makevar></title>
-
- <para>Esta variable especifica las librer&iacute;as compartidas de las que
- depende el port. Es una lista de registros de
- <replaceable>lib</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>
- donde <replaceable>lib</replaceable> es el nombre de la librer&iacute;
- compartida, y <replaceable>dir</replaceable> es el directorio en el cual encontrarla
- en caso de no estar disponible y <replaceable>target</replaceable> es el objeto a
- llamar en ese directorio. Por ejemplo,
- <programlisting> LIB_DEPENDS=jpeg.9:${PORTSDIR}/graphics/jpeg:install</programlisting>
- comprobar&aacute; la existencia de la librer&iacute;a jpeg versi&oacute;n 9,
- descendiendo al subdirectorio <filename>graphics/jpeg</filename> de la colecci&oacute;n
- de ports para compilarlo e instalarlo en caso de que no sea encontrado en el
- sistema. El objeto <replaceable>target</replaceable> puede omitirse si es igual a
- <makevar>DEPENDS_TARGET</makevar> (el cual, por defecto, tiene el valor
- <literal>install</literal>).</para>
-
- <note>
- <para>La parte <replaceable>lib</replaceable> es un argumento dado a
- <command>ldconfig -r | grep -wF</command>. Es posible que no existan
- expresiones regulares en esta variable.</para>
- </note>
-
- <para>La dependencia se comprueba dos veces, una durante la ejecuci&oacute;n de
- <maketarget>extract</maketarget> y otra durante la ejecuci&oacute;n de
- <maketarget>install</maketarget>. Tambi&eacute;n, se incluye el nombre de la
- dependencia en el package, de manera que <command>pkg_add</command>
- la instale autom&aacute;ticamente si no est&aacute; en el sistema del usuario.</para>
- </sect4>
-
- <sect4>
- <title><makevar>RUN_DEPENDS</makevar></title>
-
- <para>Esta variable especifica ejecutables o archivos de los que depende la
- compilaci&oacute; y/o ejecuci&oacute;n de este port. Es una lista de tuples
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>
- donde <replaceable>path</replaceable> es el nombre del ejecutable o archivo,
- <replaceable>dir</replaceable> es el directorio en el que encontrarlo en caso
- de no estar disponible y <replaceable>target</replaceable> es el objeto a llamar
- en ese directorio. Si <replaceable>path</replaceable> empieza con una barra
- (<literal>/</literal>), se trata como un archivo comprobando su existencia con
- <command>test -e</command>; en caso contrario, se asume que es un ejecutable, y
- se usa <command>which -s</command> para determinar si el programa existe en el
- path del usuario.</para>
-
- <para>Por ejemplo,</para>
-
- <programlisting>
-RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
- wish8.0:${PORTSDIR}/x11-toolkits/tk80</programlisting>
-
- <para>comprobar&aacute; si existe el directorio o archivo
- <filename>/usr/local/etc/innd</filename>, compilando e instalandolo desde
- el directorio <filename>news/inn</filename> del &aacute;rbol de ports en
- caso de no existir. Tambi&eacute;n se comprueba la existencia del
- ejecutable <command>wish8.0</command> en el path, descendiendo al subdirectorio
- <filename>x11-toolkits/tk80</filename> de los ports para compilarlo e
- instalarlo si no existe.</para>
-
- <note>
- <para>En este caso, <command>innd</command> es un ejecutable; si un ejecutable
- est&aacute; situado en un lugar diferente al esperado (fuera del path), es
- necesario incluir el path completo.</para>
- </note>
-
- <para>La dependencia se comprueba desde el objeto <maketarget>install</maketarget>.
- El nombre de la dependencia tambi&eacute;n es incluido en el package para que
- <command>pkg_add</command> lo instale autom&aacute;ticamente si no existe en el
- sistema del usuario. La parte <replaceable>target</replaceable> puede omitirse si
- es el mismo <makevar>DEPENDS_TARGET</makevar>.</para>
- </sect4>
-
- <sect4>
- <title><makevar>BUILD_DEPENDS</makevar></title>
-
- <para>Esta variable especifica los ejecutables o archivos que este port necesita
- para compilar. Igual que <makevar>RUN_DEPENDS</makevar>, es una lista de tuples
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>.
- Por ejemplo, <programlisting> BUILD_DEPENDS=
- unzip:${PORTSDIR}/archivers/unzip</programlisting> comprobar&aacute; la existencia de
- un ejecutable llamado <command>unzip</command>, descendiendo al subdirectorio
- <filename>archivers/unzip</filename> en caso de no existir, para compilarlo e
- instalarlo.</para>
-
- <note>
- <para>Compilaci&oacute;n en este caso, se refiere a todo el proceso; desde la
- extracci&oacute;n hasta la compilaci&oacute;n final. La dependencia se comprueba
- en el objeto <maketarget>extract</maketarget>. La parte
- <replaceable>target</replaceable> puede omitirse si la misma que
- <makevar>DEPENDS_TARGET</makevar></para>
- </note>
- </sect4>
-
- <sect4>
- <title><makevar>FETCH_DEPENDS</makevar></title>
-
- <para>Esta variable especifica ejecutables o archivos que se requieren para obtener
- este port. Como los dos anteriores, es una lista de tuples
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>.
- Por ejemplo, <programlisting> FETCH_DEPENDS=
- ncftp2:${PORTSDIR}/net/ncftp2</programlisting> comprobar&aacute; la existencia de un
- ejecutable llamado <command>ncftp2</command>, descendiendo al subdirectorio
- <filename>net/ncftp2</filename> de los ports para compilarlo e instalarlo en caso de
- no existir.</para>
-
- <para>La dependencia es comprobada en el objeto <maketarget>fetch</maketarget>.
- La parte <replaceable>target</replaceable> puede omitirse si es la misma que
- <makevar>DEPENDS_TARGET</makevar>.</para>
- </sect4>
-
- <sect4>
- <title><makevar>DEPENDS</makevar></title>
-
- <para>Si hay una dependencia que no se puede incluir en las cuatro categor&iacute;as
- anteriores, o el port necesita tener extraidos los fuentes de otro port para poder
- ser instalado, usar esta variable. Esta es una lista compuesta de
- <replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>,
- ya que no no hay nada que comprobar, al contrario que las cuatro anteriores. La parte
- <replaceable>target</replaceable> puede omitirse si es la misma que
- <makevar>DEPENDS_TARGET</makevar>.</para>
- </sect4>
-
- <sect4>
- <title>Variables de dependencia comunes</title>
-
- <para>Definir <literal>USE_XLIB=yes</literal> si el port requiere la instalaci&oacute;n
- del sistema X Window (impl&iacute;cito en <makevar>USE_IMAKE</makevar>). Definir
- <literal>USE_GMAKE=yes</literal> si el port requiere el <command>make</command> de
- GNU en lugar del <command>make</command> de BSD. Definir <literal>USE_AUTOCONF=yes</literal>
- si el port requiere la ejecuci&oacute;n del autoconf de GNU. Definir
- <literal>USE_QT=yes</literal> si el port usa el &uacute;ltimo kit qt. Usar
- <literal>USE_PERL5=yes</literal> si el port requiere la versi&oacute;n 5 del
- lenguaje perl. (Este &uacute;ltimo es especialmente importante ya que unas versiones
- de FreeBSD contienen perl5 como parte del sistema y otras no.)</para>
- </sect4>
-
- <sect4>
- <title>Notas sobre dependencias</title>
-
- <para>C&oacute;mo se ha mencionado anteriormente, el objeto por defecto a llamar cuando
- se require una dependencia es <maketarget>DEPENDS_TARGET</maketarget>. Por defecto es
- <literal>install</literal>. Esta es una variable de usuario; nunca se define en los
- <filename>Makefile</filename> de los ports. Si un port necesita gestionar las
- dependencias de manera especial, usar la parte <literal>:target</literal> de las
- variables <makevar>*_DEPENDS</makevar> en lugar de redefinir
- <makevar>DEPENDS_TARGET</makevar>.</para>
-
- <para>Cuando se ejecuta <command>make clean</command>, sus dependencias tambi&eacute;n
- son "limpiadas". Si se quiere evitar esto, hay que definir la variable
- <makevar>NOCLEANDEPENDS</makevar> en el entorno.</para>
-
- <para>Para depender incondicionalmente de un port, es imprescindible usar la cadena de
- texto <literal>nonexistent</literal> como primer campo de
- <makevar>BUILD_DEPENDS</makevar> o <makevar>RUN_DEPENDS</makevar>. Usar esto s&oacute;lo
- cuando es necesario disponer del c&oacute;digo fuente de otro port. Se puede ahorrar
- tiempo de compilaci&oacute;n especificando el objeto. Por ejemplo:
-
- <programlisting>
-BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract</programlisting>
-
- siempre descender&aacute; al port JPEG y lo extraer&aacute;.</para>
-
- <para>No usar <makevar>DEPENDS</makevar> a no ser que no exista otra manera de obtener
- los resultados deseados. Har&aacute; que el otro port siempre sea compilado (e
- instalado, por defecto), y la dependencia sea a&ntilde;adia al package. Si esto es lo
- que realmente se necesita, es recomendable usar <literal>BUILD_DEPENDS</literal>
- y <literal>RUN_DEPENDS</literal>.</para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>Mecanismos de creaci&oacute;n</title>
-
- <para>Si el package usa GNU <command>make</command>, definir
- <literal>USE_GMAKE=yes</literal>. Si el package usa <command>configure</command>,
- definir <literal>HAS_CONFIGURE=yes</literal>. Si el package usa GNU
- <command>configure</command>, definir <literal>GNU_CONFIGURE=yes</literal> (esto
- implica <literal>HAS_CONFIGURE</literal>). Si se quieren pasar argumentos extra a
- <command>configure</command> (el argumento por defecto es
- <literal>--prefix=&dollar;{PREFIX}</literal> para GNU
- <command>configure</command> y vac&iacute;o para no GNU
- <command>configure</command>), definir los argumentos extra en
- <makevar>CONFIGURE_ARGS</makevar>. Si el package usa GNU
- <command>autoconf</command>, definir <literal>USE_AUTOCONF=yes</literal>. Esto
- implica <makevar>GNU_CONFIGURE</makevar>, y causar&aacute; la ejecuci&oacute;n de
- <command>autoconf</command> antes que <command>configure</command>.</para>
-
- <para>Si el package es una aplicaci&oacute;n X que crea archivos
- <filename>Makefile</filename>s desde <filename>Imakefile</filename>s
- usando <command>imake</command>, definir <literal>USE_IMAKE=yes</literal>. Esto
- har&aacute; que durante el proceso de configuraci&oacute;n se ejecute el
- mandato <command>xmkmf -a</command>. Si el argumento <option>-a</option> es
- problem&aacute;tico para el port, definir <literal>XMKMF=xmkmf</literal>. Si el
- port usa el mandato <command>imake</command> pero no entiende el objeto
- <maketarget>install.man</maketarget>, definir
- <literal>NO_INSTALL_MANPAGES=yes</literal>.</para>
-
- <para>Si el c&oacute;digo fuente incluido en el <filename>Makefile</filename> del
- port tiene algo m&aacute;s que el objeto <maketarget>all</maketarget> como
- objeto principal de creaci&oacute;n, definir <makevar>ALL_TARGET</makevar>
- correctamente. Hacer lo mismo con <maketarget>install</maketarget> y
- <makevar>INSTALL_TARGET</makevar>.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Consideraciones especiales</title>
-
- <para>Hay m&aacute;s cosas a tener en cuenta a la hora de crear un port. Esta
- secci&oacute;n explica las m&aacute;s comunes.</para>
-
- <sect3 id="porting-ldconfig">
- <title><command>ldconfig</command></title>
-
- <para>Si el port instala una librer&iacute;a compartida, a&ntilde;adir un objeto
- <maketarget>post-install</maketarget> al <filename>Makefile</filename> para
- que ejecute <literal>&dollar;{LDCONFIG} -m</literal> en el directorio donde
- se ha instalado la nueva librer&iacute;a (normalmente
- <filename><makevar>PREFIX</makevar>/lib</filename>) para registrarla en el
- cach&eacute; de librer&iacute;as compartido.</para>
-
- <para>Tambi&eacute;n, a&ntilde;adir un par
- <literal>@exec /sbin/ldconfig -m</literal> y
- <literal>@unexec /sbin/ldconfig -R</literal> al archivo <filename>pkg/PLIST</filename>
- para que el usuario que ha instalado el port pueda usar la librer&iacute;a compartida
- inmediatamente. Estas l&iacute;neas deben estar inmediatamente despu&eacute;s de la
- l&iacute;nea de la propia librer&iacute;a compartida, como en:</para>
-
- <programlisting>
-lib/libtvl80.so.1
-@exec /sbin/ldconfig -m %D/lib
-@unexec /sbin/ldconfig -R</programlisting>
-
- <para>Nunca, nunca, <emphasis>nunca</emphasis> a&ntilde;adir una l&iacute;nea
- que ponga <literal>ldconfig</literal> sin argumentos en el
- <filename>Makefile</filename> o <filename>pkg/PLIST</filename>. Esto har&aacute;
- que el cach&eacute; de librer&iacute;as compartidas se resetee s&oacute;lo con
- los contenidos de <filename>/usr/lib</filename>, probablemente, dejando el sistema
- inestable ("Ayuda, xinit no ha vuelto a funcionar desde que instal&eacute; este
- port"). Cualquiera que haga esto, ser&aacute; troceado en 65.536 partes con un
- cuchillo poco afilado, permaneciendo por toda la eterniadad en lo m&aacute;s
- profundo del infierno (y no necesariamente en este &oacute;rden)</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Soporte ELF</title>
-
- <para>Desde la transici&oacute;n de FreeBSD a formato ELF despu&eacute;s de la
- version 3.0-RELEASE, fue necesario convertir muchos ports para que generasen
- librer&iacute;as compartidas en formato ELF. Para complicar m&aacute;s el
- trabajo, los sistemas 3.0 pueden ejecutar ELF y a.out, y se quiere mantener,
- etraoficialmente, tanto como sea posible, el soporte para versiones 2.2. A
- continuaci&oacute;n se explica como convertir ports que s&oacute;lo soportan
- a.out para que soporten compilaciones a.out y ELF.</para>
-
- <para>Una parte de esta lista s&oacute;lo es aplicable durante la conversi&oacute;n,
- pero se mantendr&aacute; durante un tiempo como referencia en caso de querer
- actualizar alg&uacute;n port antiguo.</para>
-
- <sect3>
- <title>Mover las librer&iacute;as a.out</title>
-
- <para>Las librer&iacute;as a.out deben moverse de <filename>/usr/local/lib</filename>
- y similares a un subdirectorio <filename>aout</filename>. (Si no se mueven, los
- ports ELF sobreescribir&aacute;n las librer&iacute;as a.out). El objeto
- <maketarget>move-aout-libs</maketarget> del archivo
- <filename>src/Makefile</filename> en 3.0-CURRENT (llamado desde
- <maketarget>aout-to-elf</maketarget>) har&aacute; este paso en nuestro lugar.
- S&oacute;lo mover&aacute; las librer&iacute;as a.out en los directorios
- est&aacute;ndar.</para>
- </sect3>
-
- <sect3>
- <title>Formato</title>
-
- <para>La colecci&oacute;n de ports compilar&aacute; los packages en el mismo
- formato en el que est&eacute; la m&aacute;quina. Esto significa a.out para
- 2.2 y a.out o ELF para 3.0 dependiendo de lo que devuelva la variable
- <command>`objformat`</command>. De la misma manera, una vez se mueven las
- librer&iacute;as a un subdirectorio, ya no ser&aacute; posible compilar
- librer&iacute;as a.out.</para>
-
- <note>
- <para>Si un port s&oacute;lo funciona para a.out, definir
- <makevar>BROKEN_ELF</makevar>. Estos ports ser&aacute;n pasados por alto
- durante la compilaci&oacute;n en sistemas ELF.</para>
- </note>
- </sect3>
-
- <sect3>
- <title><makevar>PORTOBJFORMAT</makevar></title>
-
- <para><filename>bsd.port.mk</filename> definir&aacute;
- <makevar>PORTOBJFORMAT</makevar> a <literal>aout</literal> o
- <literal>elf</literal> y lo exportar&aacute; en las variables de
- entorno <envar>CONFIGURE_ENV</envar>, <envar>SCRIPTS_ENV</envar> y
- <envar>MAKE_ENV</envar>. (Siempre ser&aacute;
- <literal>aout</literal> en 2.2-STABLE). Tambi&eacute;n se pasa a
- <maketarget>PLIST_SUB</maketarget> como
- <literal>PORTOBJFORMAT=${PORTOBJFORMAT}</literal>. (Consultar los comentarios
- sobre <literal>ldconfig</literal> de las l&iacute;neas anteriores).</para>
-
- <para>La variable se defina usando esta l&iacute;nea en
- <filename>bsd.port.mk</filename>:</para>
-
- <programlisting>
-PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout</programlisting>
-
- <para>Los procesos de compilaci&oacute;n de los ports deber&iacute;an usar esta
- variable para decidir que hacer. De todas maneras, si el script
- <filename>configure</filename> del port detecta autom&aacute;ticamente un sistema
- ELF, no es necesario hacer referencia a <makevar>PORTOBJFORMAT</makevar>.</para>
- </sect3>
-
-
-</sect2>
-</sect1>
-
-<sect1 id="porting-pkgname">
- <title>pkgname</title>
- <para>a</para>
-</sect1>
-
-<sect1 id="contrib-general">
- <title>pkgname</title>
- <para>a</para>
-</sect1>
-
-<sect1 id="porting-cleaning">
- <title>pkgname</title>
- <para>a</para>
-</sect1>
-
-<sect1 id="porting-samplem">
- <title>pkgname</title>
- <para>a</para>
-</sect1>
-
-<sect1 id="porting-dads">
- <title>pkgname</title>
- <para>a</para>
-</sect1>
-
-<sect1 id="porting-categories">
- <title>pkgname</title>
- <para>a</para>
-</sect1>
-
-</chapter>
-
-<!--
- Local Variables:
- mode: sgml
- sgml-declaration: "../chapter.decl"
- sgml-indent-data: t
- sgml-omittag: nil
- sgml-always-quote-attributes: t
- sgml-parent-document: ("../handbook.sgml" "part" "chapter")
- End:
--->