Compilar en Mac

Contents

Compilar y desarrollar OpenTTD en MacOSX

/File/en/Archive/Compilation and Ports/Terminal Mac OSX.png

Vamos a ver una breve guía para empezar, un poquito, en el desarrollo de OpenTTD para OSX. (Nota: si usted no ha instalado nunca nada parecido, necesitará algo de tiempo ya que tendrá que hacer muchas descargas, pero después tendrá acceso a muchos más programas, además de a OpenTTD)

La compilación de OpenTTD requiere el uso de la línea de comandos, así que antes de empezar, debe familiarizarse con la aplicación Terminal.app. Existen muchos tutoriales sobre Terminal, tienes por ejemplo uno muy breve aquí (en español) o aquí (en inglés), también puede consultar Google para consultar muchos más. Todos los comandos que aparecen a continuación se deben escribir usando la aplicación Terminal.

La aplicación Terminal se encuentra en /Aplicaciones/Utilidades

Instalar herramientas para desarrolladores: Xcode

/File/en/Archive/Compilation and Ports/Compiling MacOSX 02-Xcode.png

En primer lugar es necesario instalar un compilador. Debe instalar Xcode (10.3+). Debe estar en el CD / DVD de instalación de su sistema operativo. También lo puede descargar desde la web de Apple Developer Connection (registro gratuito obligatorio), tenga en cuenta que tiene más de 500 MB de tamaño. Este incluye, entre muchas otras cosas, gcc (en el paquete UNIX Dev Support), que es el compilador que se utiliza en la mayoría de los proyectos de código abierto, incluyendo OpenTTD.

La aplicación Xcode se instala en /Aplicaciones/Utilidades/Developer/Applications

Instalar las librerías necesarias

Para poder montar OpenTTD desde el código fuente puede ser necesario instalar algunas librerías. Dependiendo de su instalación local tal vez quiera instalar también algún sistema de control de versiones, como svn o mercurial, con el fin de obtener el último código común de OpenTTD.

Los requisitos mínimos para OpenTTD en Mac son:

Y opcionalmente puede instalar también:

SDL y fontconfig no son necesarios en mac.

La solución más sencilla para obtener estas librerías es usar macports o bien fink que las instalará por usted. También puede compilarlas e instalarlas a partir del código fuente usted mismo. Otra alternativa es visitar las páginas de las librerías y ver si ofrecen listas de versiones binarias compiladas. Al menos fink sí lo hace.

Usar MacPorts

El Proyecto MacPorts es una iniciativa de la comunidad de código abierto para diseñar un sistema fácil de usar para compilar, instalar y actualizar (ya sea con la línea de comandos, con X11 o con software basado en Aqua) código abierto para el sistema operativo Mac OSX. Para descargarlo entre en la página de descarga y seleccione dentro del apartado Mac OS X Package (.pkg) Installer el instalador adecuado a la versión de su SO: Snow Leopard(10.6), Leopard(10.5) o Tiger(10.4)

MacPorts se ha instalado correctamente

Se recomienda que actualice Macports después de su instalación y regularmente para mantenerlo al día, utilice el comando:

sudo port -v selfupdate

Como va a instalar librerías en directorios de su sistema, tendrá que hacerlo como administrador a través del comando sudo (que requerirá que introduzca la contraseña de administrador). Para más información sobre sudo consulte wikipedia.

Instalando librerías con MacPorts

Antes de instalar cualquier librería, asegúrese de tener acceso a los últimos puertos, actualizando el repositorio local:

sudo port selfupdate

Instale libpng (la librería zlib, que también es necesaria, se instalará de forma automática con ella, por ser un archivo dependiente):

sudo port install libpng

Se le pedirá también que confirme los paquetes requeridos adicionales (como libz, librerías zip).

Para poder luego compilar binarios estáticos (y poderlos redistribuir), o también por conveniencia suya, es posible que desee instalar también las librerías fontconfig, freetype e icu:

sudo port install fontconfig
sudo port install freetype
sudo port install icu

Si ha seguido todos los pasos que hemos visto, se habrán instalado en su ordenador las librerías necesarias (tardando algún tiempo) como pre-requisitos para poder compilar OpenTTD por usted mismo.

Algunas notas sobre MacPorts

Si usted quiere compilar binarios para distribuirlos a otras personas, puede que quiera compilar binarios universales. Todos los paquetes MacPort mencionados anteriormente tienen la opción de instalarse como librerías universales, pero se tiene que solicitar en cada instalación:

sudo port install zlib +universal

Merece la pena echar un vistazo a la documentación de MacPorts. Si necesitara por cualquier motivo una versión anterior de una librería, aquí puede encontrar una breve explicación.

/File/en/Notice.png
Nota
Es posible que desee instalar más herramientas, p.e. mercurial o git, usando también macports. Lamentamos que algunos incorporan inconv como archivo dependiente. Eso no es malo, pero acabará con dos versiones iconv en su disco duro: uno proporcionado por Apple en /usr/lib y otro instalado por macports en /opt/local/lib. Esos dos archivos no son compatibles, definen diferentes símbolos y son diferentes versiones. Temporalmente se puede desactivar el libiconv de macport ("sudo port deactivate libiconv") de lo contrario podría producirse en ocasiones un fallo de vinculación (vea FS 3313). Pero esta acción también podría hacer que svn, mercurial o lo que sea se base en la versión no-utilizable por macport
/File/en/Notice.png
Nota
Hay problemas con algunas versiones de gcc que se suministran por MacPorts. Utilice uno de los compiladores suministrados por Apple, pero con los argumentos del compilador ilegal. Puede cambiar el compilador utilizado con gcc_select

Usar fink

Fink es básicamente lo mismo que MacPorts, pero puede que no funcione tan bien en las nuevas versiones de OSX. Funciona también con líneas de comandos usando la terminal.

Nota: fink sólo se utiliza para la instalación de svn y libpng. Aunque es recomendable, no es obligatorio instalar nada más.

Fink es una buena herramienta para instalar el software de código abierto de comandos simples. Puede obtener Fink aquí: http://www.finkproject.org/. En la sección de descargas.

Fink se ha instalado correctamente

Antes de instalar cualquier cosa con fink, debe actualizarlo (incluso si lo acaba de instalar). Esto se debe a que fink necesita mirar algunos archivos locales, para saber la versión del software que debe instalar. Si ha salido una versión nueva del instalador fink, es una tontería usar una versión obsoleta. La actualización puede llevar algún tiempo. DEBE ACTUALIZAR fink con el comando:

fink selfupdate
/File/en/Content.png
Aviso
Si ha instalado iconv-dev usando Fink, asegúrese de que tiene al menos la versión 1.11 o acceso a filenames/file (partidas guardadas, escenarios ...) si no, no funcionará correctamente.
(Puede averiguar la versión de fink con el comando: fink --version)

Instalando el cliente svn con fink

Con la instalación de Xcode puede haberse instalado ya el cliente svn. De todas formas sería conveniente actualizarlo, tiene dos opciones:

1) con el comando sudo:

sudo port -d install svn

2) con fink:

fink install svn-client

La instalación de los paquetes que acompañan a svn puede llevarle algún tiempo (bastante mucho muchísimo tiempo, le da tiempo a ir a hacer la "mili" y volver, jeje).

Si su sistema operativo es Mac OSX Leopard (10.5) no necesitará instalarlo (¡menos mal!) puesto que ya lo trae de fábrica, de todas formas, en una ventana de terminal teclee svn --version para comprobarlo.

Instalando librerías con fink

Necesita enlazar algunas librerías cuando compile. Puede utilizar fink para instalarlas con los siguientes comandos en el terminal:

fink install libpng3 

Se necesita libpng3 para realizar capturas de pantallas en png. En realidad, no lo necesita ahora, pero tenemos planes de futuro, por lo que sería bueno que la consiguiera ya. Según cada caso, fink le indicará que necesita instalar un montón de cosas más, basta con pulsar intro (contestar que sí) y Fink descargará e instalará todo. La documentación sobre compilación de OpenTTD habla de zlib, pero Mac OSX ya la lleva incorporada, por lo que no hay necesidad de instalarla.

Obtener el último código de OpenTTD con el servidor svn

Ahora tiene que hacer una "copia de trabajo" en su ordenador del código de OpenTTD con su nuevo cliente svn. Tenga en cuenta que Openttd trabaja con tres tipos de versiones: stable, testing y nightly (o Trunk)

Para descargar la última versión trunk/nightly, utilice el terminal y escriba:

svn checkout svn://svn.openttd.org/trunk Directorio

Directorio es la carpeta en la que se colocará el código (p.e "Openttd"). Si la carpeta no existe, se creará. Dese cuenta que usted habría tenido que teclear todo un refrito después de instalar svn para poder hacer esto mismo si no dispusiera del comando y la URL que ha escrito.

svn checkout -r20198 svn://svn.openttd.org/trunk Directorio

Seleccionando la versión 1.0.2 sin compilar ('sources'=códigos)

Compilar el código

Dado que el sistema makefile está continuamente reescribiéndose, esta sección se divide en dos partes. Elija la conveniente según el tipo de código fuente (source) que haya descargado:

Compilar OpenTTD 0.6.x y posteriores (o revisión 7759 y posteriores)

A) Para quienes sólo quieren una copia de trabajo para sí mismos, escriba lo siguiente en una ventana de terminal, si no pase a punto B:

cd ~/Downloads/directorio_conteniendo_los_códigos_descargados
./configure
make
make bundle

(Si se lía con el comando cd, dele un repaso a algún tutorial fácil de Terminal, tenga en cuenta que la primera línea que le hemos puesto es sólo un ejemplo)

/File/en/Content.png

Aviso
Si aparece el error "WARNING: liblzo2 was not detected or disabled"

(ATENCIÓN: liblzo2 no se detectó o está desactivado) cd ~/Downloads/directorio_conteniendo_lzo ./configure make sudo make install
  • Vuelve al directorio donde está el código fuente de Openttd y compile de nuevo

Después de que el compilador compile todo lo que está comprimido (puede tardar bastante), ¡encontrarás la aplicación OpenTTD.app en la carpeta! /File/en/Manual/Smile 22px.png

Ojo: si es la primera vez que lo compilas, deberás instalar archivos gráficos adicionales para que funcione.

B) Para compilar con instrucciones más detalladas (con más opciones) siga leyendo...

Aplicar un parche

Si desea utilizar un parche (un archivo patch/diff) tiene que aplicarlo antes de usar configurar. Esto se hace de la misma forma que en Linux, así que debería leer esto: Compilar en Linux#Aplicar un parche

Configurar

Hay un script de configuración. Se utiliza para averiguar cual es su sistema y generar un makefile que compile un binario apto para su sistema. Para ejecutarlo, sólo escriba:

./configure

Si tiene solicitudes (request) especiales para la generación del makefile, puede usar argumentos. Use help para ver una lista completa de opciones disponibles:

./configure --help

Ejemplo: si lo que quiere es una compilación estática (un binario que contenga las partes necesarias de las librerías, y sí no tener que instalarlas en el equipo para poder jugar) tendrá que escribir:

./configure --enable-static

Se pueden añadir argumentos múltiples como:

./configure --enable-static --enable-dedicated

Si no tiene svn, y quiere compilar una revisión de una nightly, configure con (XXXXX es el número de revisión):

./configure --revision=rXXXXX

Compilar

Cuando configure haya creado el makefile, todo lo que necesitará para compilar es escribir:

make

Se creará un binario que se colocará en el subdirectorio /bin

Make también acepta argumentos que se ejecutan junto con la compilación:

make run
make bundle
Archivo ejecutable en el directorio bundle

Ojo: si es la primera vez que lo compilas, deberás instalar archivos gráficos adicionales para que funcione.

make help

Make también acepta argumentos estándar. El más interesante es la opción -j.

make bundle -j 4

Así compilará 4 archivos a la vez, haciendo buen uso de una computadora DualCore. Por lo general, tener dos archivos de compilación por cada núcleo es lo más rápido, mientras compila uno, el otro espera para leer/escribir en el disco.

Nota: las dependencias makefile tienen que estar configuradas correctamente para que -j funcione bien. Si bien esto es así para OpenTTD, no asuma esto para otros proyectos o pueden suceder cosas desagradables, como raros errores de compilación.

Si hace frecuentes compilaciones, puede ser que le valga la pena buscar compiladores alternativos. OSX también trae nuevos binarios llvm-gcc, que ofrecen un aumento de la velocidad durante la compilación a costa de unos binarios un poco más lentos. Para activar el conjunto de variables de entorno CC=/Developers/usr/bin/llvm-gcc y CXX=/Developers/usr/bin/llvm-g++

Compilar binarios universales

La compilación de un binario universal se hace añadiendo --enable-universal a configure:

./configure --enable-universal

Eso si su sistema está configurado correctamente. Realiza entonces una compilación para intel, PPC y PPC970 (optimizado para esta CPU en particular. Apple la renombró como G5), por lo que no será necesario configurar flags para G5. Static también está habilitado por defecto ya que se supone que el binario se transportará a otro equipo.

Para que esto funcione, necesitará librerías universales. Para obtener más información, vea librerías universales

Compilar OpenTTD 0.5.x o anteriores (o revisiones anteriores a la 7759)

Para compilar el código fuente, debe usar la terminal para ir a su copia de trabajo y escribir

make

Ahora se compilará OpenTTD. Si de esta manera no se enlaza OpenTTD, pruebe:

make CC=gcc-3.3

Si esto falla, intente:

make bundle

A continuación, inicie la aplicación de la carpeta de paquete /bundle (en lugar de la carpeta /bin)

Este fallo puede ocurrir si ha descargado las librerías compiladas para OSX 10.3.x y está utilizando OSX 10.4.x. Para resolverlo correctamente, reemplace la librería por otra compilada para OSX 10.4. Sin embargo de está forma le llevará más tiempo que usando GCC 3.3.

Si desea mover la aplicación que acaba de compilar a otro equipo, deberá instalar sdl (y libpng si la va a usar) en ese equipo también o compilar estáticamente. Apple recomienda las compilaciones estáticas, pero si sólo quiere jugar el juego puede que sea mejor instalar las librerías.

Compilar estáticamente

Para compilar de forma estática, es necesario modificar makefile.config. Esto se puede hacer con cualquier editor de texto (incluyendo las herramientas para desarrolladores/Xcode). Busque la línea que dice: STATIC:= y cámbiela por STATIC:=1

Puede ocurrir que no aparezca makefile.config, puesto que se genera la primera vez que ejecuta make, por lo que no existe antes. Aún así puede proporcionar este parámetro, sin que exista makefile.config, ejecutando:

make STATIC:=1

Nota: si cambia algo en makefile.config, debe ejecutar make clean para estar seguro de deshacerse de cualquier cosa compilada con la vieja configuración

Ya está listo para jugar, después de agregar los archivos GRF de winTTD.

Compilar binarios universales

Necesita por lo menos Xcode 2.1 y OSX 10.4

Para compilar los binarios universales, asegúrate de que tienes el derecho de compilaciones cruzadas (right crosscompilers) instalado desde Xcode (por defecto es 10.4u para la parte i386 y 10.3.9 para la parte de PPC. Esto se puede cambiar en Makefile.config) a continuación, escriba:

make UNIVERSAL_BINARY:=1

Reemplace UNIVERSAL_BINARY con TRIPLE_BINARY si desea código optimizado para G5 en la parte superior del binario universal normal. Si no agrega un argumento a make, entonces se optimizará para la CPU sobre la que se compila, que será siempre la mejor opción a menos que usted se plantee mover el binario a otro equipo.

Nota: es necesario tener librerías universales (a la hora de escribir, esto se aplica sólo a libpng) si desea hacer binarios universales. Si utiliza la configuración predeterminada de OpenTTD, usted necesitará crear una librería estática (libpng.a) que contiene el código para i386 basado en el 10.4u sdk y la parte ppc que tiene que estar basada en el 10.3.9 sdk.